萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> sql server教程 >> 使用SQL-DMO備份數據庫並進行校驗

使用SQL-DMO備份數據庫並進行校驗

本文談論如何用SQL-DMO創建數據庫備份和校驗的ASP應用。 www.yestar2000iTbulo.comyuZq9

============================================================www.yestar2000iTbulo.comyuZq9

概述
SQL分布式管理對象(SQL Distributed Management objects, SQL-DMO)為開發者提供了使用程序和腳本語言執行普通任務的方法,從而擴展了sql server功能。本文談論如何用SQL-DMO創建數據庫備份和校驗的ASP應用。www.yestar2000iTbulo.comyuZq9

前提
你需要有SQL Server數據庫備份的相關知識。另外還要在global.asa文件中加入SQL-DMO庫的引用。以下是SQL Server 2000的引用:
<!--METADATA TYPE="TypeLib" NAME="Microsoft SQLDMO Object Library" UUID="{10010001-E260-11CF-AE68-00AA004A34D5}" VERSION="8.0"--> www.yestar2000iTbulo.comyuZq9

本文示例代碼適用於SQL 7.0, MSDE, 和 SQL Server 2000。www.yestar2000iTbulo.comyuZq9

喜與憂
使用SQL-DMO對象讓人且喜且憂。它提供了非常豐富的功能,以至於不知該如何使用。本文只討論示例涉及的對象屬性和方法。你可以在SQL Server在線教學上找到許多相關信息。本文末尾可以下載本文示例源代碼。www.yestar2000iTbulo.comyuZq9

SQLDMO.SQLServer
代碼看上去挺眼熟。它用於連接SQL Server數據庫:
<%
  Dim srv
  Set srv = Server.CreateObject("SQLDMO.SQLServer")
  srv.LoginTimeout = 15
  srv.Connect "servername", "username", "password"
%>www.yestar2000iTbulo.comyuZq9

這裡通過代入用戶名和口令來連接SQL Server數據庫。如果要使用NT的身份認證,就將它的LoginSecure屬性設為真(TRUE),忽略代入的用戶名和口令,而使用NT的注冊信息。www.yestar2000iTbulo.comyuZq9

SQLDMO.Database
列出服務器中的數據庫。在本文示例中,對列出的數據庫進行備份。下面的代碼將服務器中的數據庫列於下拉菜單:
<%
  Dim srv
  Dim objDB
  Set srv = Server.CreateObject("SQLDMO.SQLServer")
  srv.LoginTimeout = 15
  srv.Connect "servername", "username", "password"
  Set objDB = Server.CreateObject("SQLDMO.Database")
%>
 <SELECT name="fdatabase">www.yestar2000iTbulo.comyuZq9

<%
  For Each objDB In srv.Databases
    If objDB.SystemObject = False Then
%>
  <OPTION><%=objDB.Name%></OPTION>
<%
    End If
  Next
%>
 </SELECT>www.yestar2000iTbulo.comyuZq9

SQLDMO.BackupDevice
列出服務器上安裝的備份裝置。我建議使用備份裝置來備份數據庫。因為這樣可以使用SQL-DMO的校驗功能來校驗備份情況。下面的代碼列出服務器上的備份裝置:
<%
  Dim srv
  Dim objDevice
  Set srv = Server.CreateObject("SQLDMO.SQLServer")
  srv.LoginTimeout = 15
  srv.Connect "servername", "username", "password"
  Set objDevice = Server.CreateObject("SQLDMO.BackupDevice")
 
  For Each objDevice In srv.BackupDevices
    Response.Write objDevice.Name + "<BR>"
  Next
%>www.yestar2000iTbulo.comyuZq9

SQLDMO.Backup
這就是我們要用到的備份核心對象。它有許多屬性,讓我們作到與企業版SQL管理器一樣水平的備份。先討論一下本文示例用到的屬性。www.yestar2000iTbulo.comyuZq9

BackupSetName - 備份文件名。
Database - 要備份的數據庫。
Action - 全部或增量備份。還有其他選項,不過示例中只用到這二個。
BackupSetDescription - 備份說明。
Files - 文件備份選項。標明備份文件的路徑和名字,如:C:\pubs.bak。使用文件備份時,下面的備份裝置名要設置為空。
Devices - 服務器上的備份裝置。如果使用備份裝置,上面的文件備份選項要設置為空。
TruncateLog - 備份日志選項。其選項有:
 NoLog - 不備份交易日志。
 NoTruncate - 備份交易日志。日志裡提供時間標記。
 Truncate - 備份交易日志,但不保留交易紀錄。
Initialize - 如設置為真(True),該備份裝置將取代其他備份媒介而成為首選。www.yestar2000iTbulo.comyuZq9


以下是示例中的backup.asp文件:www.yestar2000iTbulo.comyuZq9

<%@ Language=VBScript %>
<HTML>
<BODY>
<!--contains all the login information -->
<!--#include file=login.asp -->
<%
  Dim objBackup
  '創建備份對象
  set objBackup      = Server.CreateObject("SQLDMO.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
%>
<P>
The backup was started, use the <A HREF="devices.asp">verify</A>
option to see if it completed successfully.
<A HREF="default.asp">Click here</A> to return.
</P>
</BODY>
</HTML>www.yestar2000iTbulo.comyuZq9


備份校驗
如果用VB或C++編程,可以用事件觸發來校驗備份過程,但在ASP中不行。我們用SQLDMO.BackupDevice對象的ReadBackupHeader方法來確認備份是否成功。
下面是verify.asp文件代碼,它列出備份裝置名字並提供最近備份的有關信息。www.yestar2000iTbulo.comyuZq9

<%@ Language=VBScript %>
<HTML>
<BODY>
<!--Login information -->
<!--#include file=login.asp-->
<P>
<%
  Dim objDevice
  Dim objResults
  Dim iCount
  Dim xCount
  '創建備份裝置對象
  Set objDevice  = Server.CreateObject("SQLDMO.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%>
           <B><%=objResults.ColumnName(xcount)%></B>:
           <%=objResults.GetColumnString(icount,xcount)%><br>
          <%Next %>
          <HR>
        <%Next %>
     <%End If%>
   <%Next%>
<%
 srv.Disconnect
 set srv = nothing
 set objDevice = nothing
 set objResults = nothing
%>
</BODY>
</HTML>www.yestar2000iTbulo.comyuZq9

ReadBackupHeader方法返回QueryResults對象。用其Rows屬性可以得到備份的紀錄數。然後對每行紀錄作列信息搜索。www.yestar2000iTbulo.comyuZq9


其他功能
SQL-DMO還提供遠程備份和恢復功能。本文沒有涉及數據庫恢復,但SQL-DMO有很強的恢復功能。
www.yestar2000iTbulo.

copyright © 萬盛學電腦網 all rights reserved