使用SQL DMO備份資料庫並進行校驗

2021-04-17 07:54:53 字數 4279 閱讀 5722

本文談論如何用sql-dmo建立資料庫備份和校驗的asp應用。

概述sql分布式管理物件(sql distributed management objects, sql-dmo)為開發者提供了使用程式和指令碼語言執行普通任務的方法,從而擴充套件了sql server功能。本文談論如何用sql-dmo建立資料庫備份和校驗的asp應用。

前提你需要有sql server資料庫備份的相關知識。另外還要在global.asa檔案中加入sql-dmo庫的引用。以下是sql server 2000的引用:

本文示例**適用於sql 7.0, msde, 和 sql server 2000。

sqldmo.sqlserver

**看上去挺眼熟。它用於連線sql server資料庫:

<%

dim srv

set srv = server.createobject("sql

dmo.sqlserver")

srv.logintimeout = 15

srv.connect "servername", "username", "password"

%>

這裡通過代入使用者名稱和口令來連線sql server資料庫。如果要使用nt的身份認證,就將它的loginsecure屬性設為真(true),忽略代入的使用者名稱和口令,而使用nt的註冊資訊。

sqldmo.database

列出伺服器中的資料庫。在本文示例中,對列出的資料庫進行備份。下面的**將伺服器中的資料庫列於下拉列表:

<%

dim srv

dim objdb

set srv = server.createobject("sql

dmo.sqlserver")

srv.logintimeout = 15

srv.connect "servername", "username", "password"

set objdb = server.createobject("sql

dmo.database")

%>

<%

for each objdb in srv.databases

if objdb.systemobject = false then

%>

<%=objdb.name%>

<%

end if

next

%>

sqldmo.backupdevice

列出伺服器上安裝的備份裝置。我建議使用備份裝置來備份資料庫。因為這樣可以使用sql-dmo的校驗功能來校驗備份情況。下面的**列出伺服器上的備份裝置:

<%

dim srv

dim objdevice

set srv = server.createobject("sql

dmo.sqlserver")

srv.logintimeout = 15

srv.connect "servername", "username", "password"

set objdevice = server.createobject("sql

dmo.backupdevice")

for each objdevice in srv.backupdevices

response.write objdevice.name + "

"next

%>

sqldmo.backup

這就是我們要用到的備份核心物件。它有許多屬性,讓我們作到與企業版sql管理器一樣水平的備份。先討論一下本文示例用到的屬性。

backupsetname - 備份檔案名。

database - 要備份的資料庫。

action - 全部或增量備份。還有其他選項,不過示例中只用到這二個。

backupsetdescription - 備份說明。

files - 檔案備份選項。標明備份檔案的路徑和名字,如:c:pubs.bak。使用檔案備份時,下面的備份裝置名要設定為空。

devices - 伺服器上的備份裝置。如果使用備份裝置,上面的檔案備份選項要設定為空。

truncatelog - 備份日誌選項。其選項有:

nolog - 不備份交易日誌。

notruncate - 備份交易日誌。日誌裡提供時間標記。

truncate - 備份交易日誌,但不保留交易紀錄。

initialize - 如設定為真(true),該備份裝置將取代其他備份媒介而成為首選。

以下是示例中的backup.asp檔案:

<%@ language=vbscript %>

<%

dim objbackup

'建立備份物件

set objbackup      = server.createobject("sql

dmo.backup")

'設定屬性

objbackup.backupsetname  = request("fname")

objbackup.database       = request("fdatabase")

objbackup.action         = request("faction")

objbackup.backupsetdescription = request("fdescription")

objbackup.files        = request("fbackupfile")

objbackup.devices      = request("fdevice")

objbackup.truncatelog  = request("flog")

objbackup.initialize   = request("finit")

'備份資料庫

objbackup.sqlbackup srv

'斷開與伺服器的連線

srv.disconnect

'釋放set srv = nothing

set objbackup = nothing

%>

the backup was started, use the verify

option to see if it completed successfully.

click here to return.

備份校驗

如果用vb或c++程式設計,可以用事件觸發來校驗備份過程,但在asp中不行。我們用sql

dmo.backupdevice物件的readbackupheader方法來確認備份是否成功。

下面是verify.asp檔案**,它列出備份裝置名字並提供最近備份的有關資訊。

<%@ language=vbscript %>

<%

dim objdevice

dim objresults

dim icount

dim xcount

'建立備份裝置物件

set objdevice  = server.createobject("sql

dmo.backupdevice")

'迴圈直到找到匹配的裝置

for each objdevice in srv.backupdevices

if objdevice.name = request("fname") then

'找到匹配裝置,開始讀取結果

set objresults = objdevice.readbackupheader

for icount = 1 to objresults.rows

for xcount = 1 to objresults.columns%>

<%=objresults.columnname(xcount)%>:

<%=objresults.getcolumnstring(icount,xcount)%>

<%next %>

<%next %>

<%end if%>

<%next%>

<%

srv.disconnect

set srv = nothing

set objdevice = nothing

set objresults = nothing

%>

readbackupheader方法返回queryresults物件。用其rows屬性可以得到備份的紀錄數。然後對每行紀錄作列資訊搜尋。

其他功能

sql-dmo還提供遠端備份和恢復功能。本文沒有涉及資料庫恢復,但sql-dmo有很強的恢復功能。

本文附件:

備份資料庫

參考 sql如何備份到異機 寫成儲存過程,建立作業定時備份 在sql中對映一下就可以了 exec master.xp cmdshell net use z yizhi d module user yizhi administrator 說明 exec master.xp cmdshell net u...

備份資料庫

命令在dos的 url file mysql bin mysql bin url 目錄下執行 1.匯出整個資料庫 匯出檔案預設是存在mysql bin目錄下 mysqldump u 使用者名稱 p 資料庫名 匯出的檔名 mysqldump u user name p123456 database n...

備份資料庫

sql備份所有資料庫指令碼 declare currentdatabasename nvarchar 100 declare currentbackfolder nvarchar 200 declare currentbackstring nvarchar 2000 這裡是備份的目錄,所有資料庫都備...