'************************************************************************* '**模 塊 名:fBackupDatabase_a '**描 述:備份數(shù)據(jù)庫,返回出錯信息,正常恢復(fù),返回"" '**調(diào) 用:fBackupDatabase_a "備份文件名","數(shù)據(jù)庫名" '**參數(shù)說明: '** sBackUpfileName 恢復(fù)后的數(shù)據(jù)庫存放目錄 '** sDataBaseName 備份的數(shù)據(jù)名 '** sIsAddBackup 是否追加到備份文件中 '**說 明:引用Microsoft ActiveX Data Objects 2.x Library '**創(chuàng) 建 人:鄒建 '**日 期:2003年12月09日 '************************************************************************* Public Function fBackupDatabase_a(ByVal sBackUpfileName$ _ , ByVal sDataBaseName$ _ , Optional ByVal sIsAddBackup As Boolean = False _ ) As String Dim iDb As ADODB.Connection Dim iConcStr$, iSql$, iReturn$ On Error GoTo lbErr '創(chuàng)建對象 Set iDb = New ADODB.Connection '連接數(shù)據(jù)庫服務(wù)器,根據(jù)你的情況修改連接字符串 iConcStr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Data Source=zj" iDb.Open iConcStr '生成數(shù)據(jù)庫備份語句 iSql = "backup database [" & sDataBaseName & "]" & vbCrLf & _ "to disk='" & sBackUpfileName & "'" & vbCrLf & _ "with description='" & "zj-backup at:" & Date & "(" & Time & ")'" & vbCrLf & _ IIf(sIsAddBackup, "", ",init") iDb.Execute iSql GoTo lbExit lbErr: iReturn = Error lbExit: fBackupDatabase_a = iReturn End Function
'************************************************************************* '**模 塊 名:frestoredatabase_a '**描 述:恢復(fù)數(shù)據(jù)庫,返回出錯信息,正;謴(fù),返回"" '**調(diào) 用:frestoredatabase_a "備份文件名","數(shù)據(jù)庫名" '**參數(shù)說明: '** sDataBasePath 恢復(fù)后的數(shù)據(jù)庫存放目錄 '** sBackupNumber 是從那個備份號恢復(fù) '** sReplaceExist 指定是否覆蓋已經(jīng)存在的數(shù)據(jù) '**說 明:引用Microsoft ActiveX Data Objects 2.x Library '**創(chuàng) 建 人:鄒建 '**日 期:2003年12月09日 '************************************************************************* Public Function fRestoreDatabase_a(ByVal sBackUpfileName$ _ , ByVal sDataBaseName$ _ , Optional ByVal sDataBasePath$ = "" _ , Optional ByVal sBackupNumber& = 1 _ , Optional ByVal sReplaceExist As Boolean = False _ ) As String Dim iDb As ADODB.Connection, iRe As ADODB.Recordset Dim iConcStr$, iSql$, iReturn$, iI& On Error GoTo lbErr '創(chuàng)建對象 Set iDb = New ADODB.Connection Set iRe = New ADODB.Recordset '連接數(shù)據(jù)庫服務(wù)器,根據(jù)你的情況修改連接字符串 iConcStr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Data Source=zj" iDb.Open iConcStr '得到還原后的數(shù)據(jù)庫存放目錄,如果沒有指定,存放到SQL SERVER的DATA目錄 If sDataBasePath = "" Then iSql = "select filename from master..sysfiles" iRe.Open iSql, iDb, adOpenKeyset, adLockReadOnly iSql = iRe(0) iRe.Close sDataBasePath = Left(iSql, InStrRev(iSql, "\")) End If '檢查數(shù)據(jù)庫是否存在 If sReplaceExist = False Then iSql = "select 1 from master..sysdatabases where name='" & sDataBaseName & "'" iRe.Open iSql, iDb, adOpenKeyset, adLockReadOnly If iRe.EOF = False Then iReturn = "數(shù)據(jù)庫已經(jīng)存在!" iRe.Close GoTo lbExit End If iRe.Close End If '關(guān)閉用戶進(jìn)程,防止其它用戶正在使用數(shù)據(jù)庫,導(dǎo)致數(shù)據(jù)恢復(fù)失敗 iSql = "select spid from master..sysprocesses where dbid=db_id('" & sDataBaseName & "')" iRe.Open iSql, iDb, adOpenKeyset, adLockReadOnly While iRe.EOF = False iSql = "kill " & iRe(0) iDb.Execute iSql iRe.MoveNext Wend iRe.Close '獲取數(shù)據(jù)庫恢復(fù)信息 iSql = "restore filelistonly from disk='" & sBackUpfileName & "'" & vbCrLf & _ "with file=" & sBackupNumber iRe.Open iSql, iDb, adOpenKeyset, adLockReadOnly '生成數(shù)據(jù)庫恢復(fù)語句 iSql = "restore database [" & sDataBaseName & "]" & vbCrLf & _ "from disk='" & sBackUpfileName & "'" & vbCrLf & _ "with file=" & sBackupNumber & vbCrLf With iRe While Not .EOF iReturn = iRe("PhysicalName") iI = InStrRev(iReturn, ".") iReturn = IIf(iI = 0, "", Mid(iReturn, iI)) & "'" iSql = iSql & ",move '" & iRe("LogicalName") & _ "' to '" & sDataBasePath & sDataBaseName & iReturn & vbCrLf .MoveNext Wend .Close End With iSql = iSql & IIf(sReplaceExist, ",replace", "") iDb.Execute iSql iReturn = "" GoTo lbExit lbErr: iReturn = Error lbExit: fRestoreDatabase_a = iReturn End Function
|