sql 異地自動備份
公司數據庫要作異地備份提高容災性,做到異地自動備份。經過多日查詢嘗試終於成功。
具體環境如下。
數據庫服務器:主機A 用戶名lujia 密碼 jjjj 數據庫KK
文件服務器: 主機B 用戶名cy 密碼 cykingdee 機器名爲cy0efd410de
前期工作: 主機b上新建一個文件夾backup 將其設置爲共享屬性可寫
編寫作業計劃declare @sql varchar(500)
select @sql='//192.168.0.2/backup/kk'+'_db_'+convert(varchar(10),getdate(),112)+substring(convert(varchar(20),getdate(),108) ,1,2)+'.bak'
exec master..xp_cmdshell 'net use //192.168.0.2/backup "cykingdee" /user:cy-b9e1305f8e77/cy'
backup database kk to disk=@sql --執行遠程備份
go
declare @sql varchar(500)
select @sql='del'+'//192.168.0.2/backup/kk'+'_db_'+convert(varchar(10),dateadd(day,-7,getdate()),112)+
substring(convert(varchar(20),dateadd(day,-7,getdate()),108) ,1,2)+'.bak'
exec master..xp_cmdshell @sql --刪除七天前作的備份。
go
備註:1:xp_cmdshell :是SQLSERVER的擴展存儲過程。
作用,以操作系統命令行解釋器的方式執行給定的命令字符串 並以文本行方式返回任何輸出。
語法:參見SQLSERVER聯機幫助
2:net use : 是WINDOWS內部的網絡命令。
作用,將計算機與共享資源連接或斷開,或者顯示關於計算機連接的信息。該命令還控制持久網絡連接。
3.convert(varchar(10),getdate(),112) 目的是將日前時間轉換成字符串格式,其中varchar(10) 代表轉化的類型爲可變長的字符
型,getdate()表示取得當前的時間,112爲數據轉化的類行。(詳見下文對convert的具體的解釋)
4.substring函數的用法: substring(abcdefgh,2,3)=cde
表示提取字符串abcdefgh,從第二個字符開始,連續3個。
5.dateadd函數的用法:dateadd(interval,number,date) interval表示要加上的時間間隔(類似於單位如年,月,日)
,number 表示的是要加上的數值,date是時間。
dateadd(day,-7,getdate()) 假定目前的時間是2007-06-08-10:20:35
結果應該爲2007-06-08-10:20:35
格式:
CONVERT(data_type,expression[,style])
說明:
此樣式一般在時間類型(datetime,smalldatetime)與字符串類型(nchar,nvarchar,char,varchar)
相互轉換的時候纔用到.
例子:
SELECT CONVERT(varchar(30),getdate(),101) now
結果爲:
now
////////// 更細緻的寫法~!
1--------------
master..xp_cmdshell 'net use [url=file:////PCName/BAK]//PCName/BAK[/url] passwd /user:username'
備份數據庫
backup database book to disk='//PCName/BAK/DataBaseB.bak'
在企業管理器中新建作業把以上兩個語句加到步驟裏,再在調度中做備份調度,即可
還原的操作也很簡單語句如下
restore database book from disk='//PCName/BAK/DataBaseB.bak'
2------------------
建數據庫sql2000定時異地備份與還原
master..xp_cmdshell 'net use [url=file:////PCName/BAK]//PCName/BAK[/url] passwd /user:username'
備份數據庫
backup database book to disk='//PCName/BAK/DataBaseB.bak'
在企業管理器中新建作業把以上兩個語句加到步驟裏,再在調度中做備份調度,即可
還原的操作也很簡單語句如下
restore database book from disk='//PCName/BAK/DataBaseB.bak'
3----------------------------------------------
--第一步:在SQL server中做映射網絡盤
--192.168.60.203爲遠程備份機
--administrator爲遠程備份機登錄用戶名
--111111爲遠程機器密碼
--bak爲完全共享的文件夾
--注意:(Z:後面要有一個空格)
exec master..xp_cmdshell
'net use z: [url=file:////192.168.60.203/bak]//192.168.60.203/bak[/url] 111111 /user:192.168.60.203/administrator'
--第二步:進行數據庫備份
--DIFFERENTIAL爲差量數據備份,在進行差量備份前要先做一次完全備份
backup database dbname to disk='z:/back.dat' with DIFFERENTIAL
--第三步:備份完成後刪除映射
exec master..xp_cmdshell 'net use z: /delete'
如再有不清楚可QQ聯繫我:39867529
4-------------------
1、在域中是最好解決了,EXEC sp_addumpdevice 'disk', 'networkdevice',
'//servername/sharename/path/filename.ext',這個通過域用戶最好辦。
2、第二種方法,適用於所有環境(Windows),比如說服務器上有一個
Windows用戶user1,密碼是123,你首先在查詢分析器裏面通過xp_cmdshell
'net share ...'命令來共享這個文件夾sql,然後xp_cmdshell 'net use ...../USER:user1/123'
把遠程的文件夾映射過來,然後在查詢分析器裏面
sp_addumpdevice ‘disk’,‘//servername/sql/back_database.bak,然後sp_addumpdevice把備份設備放到這個文件夾裏面