有A數據庫服務器,B本機;
我現在想通過在B機器上通過代碼調用SQL來執行A數據庫的備份到B機器上
調用的SQL語句為:Backup
Database
MYDATABASE
To
Disk=
'D:/test.bak'
,這樣備份的目錄是數據庫服務器A的D盤下;
怎么才能備份到A的D盤下呢?
請各位給予建議,謝謝!
----------------------------------------------------------------------------------------------------
要用遠程數據庫可以備份本地。
本地數據庫也可以備份到遠程。
--備份環境:把數據庫服務器(192.168.1.8)的數據庫(TEST)備份到(192.168.1.145)的C$下
--首先,做一個與客戶端的映射
exec
master..xp_cmdshell
'net use z: \\192.168.1.145\c$ "密碼" /user:192.168.1.145\administrator'
/*
--說明:
z: 是映射網絡路徑對應本機的盤符,與下面的備份對應
\\192.168.1.145\c$ 是要映射的網絡路徑
192.168.1.145\administrator
192.168.1.145是遠程的計算機名,administrator是登陸的用戶名
密碼 上面指定的administrator用戶的密碼
--*/
--其次,進行數據庫備份
backup
database
TEST
to
disk=
'z:\Test.bak'
--最后.備份完成后刪除映射
exec
master..xp_cmdshell
'net use z: /delete'
--來自網絡
--以下代碼放在作業里做調度,自動備份、自動刪除4天前備份
--創建映射
exec
master..xp_cmdshell
'net use w: \DatabaseBackup$ "password"/user:Roy'
,NO_OUTPUT
go
-----2000用游標:
declare
@s nvarchar(200),@del nvarchar(200)
select
@s=
''
,@del=
''
declare
datebak
cursor
for
select
[bak]=
'backup database '
+quotename(
Name
)+
' to disk ='
'w:'
+
Name
+
'_'
+
convert
(
varchar
(8),getdate(),112)+
'.bak'
' with
init'
,
[del]=
'exec master..xp_cmdshell '
' del w:'
+
Name
+
'_'
+
convert
(
varchar
(8),getdate()-4,112)+
'.bak'
', no_output'
from
master..sysdatabases
where
dbid>4
--不備份系統數據庫
open
datebak
fetch
next
from
datebak
into
@s,@del
while @@fetch_status=0
begin
exec
(@del)
exec
(@s)
fetch
next
from
datebak
into
@s,@del
end
close
datebak
deallocate
datebak
go
--刪除映射
exec
master..xp_cmdshell
'net use w: /delete'
go
--用JOB.
--SQL SERVER2000為例
企業管理器—>數據庫服務器—>管理目錄—>SQL SERVER代理—>作業—>右鍵 選—>新建
常規選項頁—>輸入作業名稱—>選中所有者。
步驟選項頁—>新建—>輸入步驟名—>類型 TSQL腳本—>選擇需要執行的數據庫—>在命令框里輸入你的SQL 腳本:
如:
update
tb
set
狀態= ...
where
日期...........
你可以點左下角的【分析】按鈕,分析一下語法,分析無誤,按確定。
調度選項頁—>新建調度—>輸入調度名稱—>調度類型 你可以選擇也可以點右下角的【更改】按鈕進行更改,確定。
任務欄 SQL SERVER服務器的小圖標 雙擊 服務 選中 SQL SERVER AGENT,點【開始/繼續】,選中當啟動OS時,自動啟動服務,就可以了。
到你定的那個時間點,SQL SERVER會自動去執行你的腳本的。
如果需要生成腳本的話,企業管理器—>數據庫服務器—>管理目錄—>SQL SERVER代理—>作業—>右鍵你剛完成的作業—>所有任務
—>生成SQL腳本,即可生成你需要的腳本