如何將服務器上的SqlServer數據庫備份到本地電腦
有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腳本,即可生成你需要的腳本
/*數據庫備份存儲過程*/
/*支持從服務器備份數據至本地機器上*/
--
CREATE
PROCEDURE
up_dbbackup
(
@backup_db_name
VARCHAR
(
128
),
@filename
VARCHAR
(
128
),
/*備份路徑+文件名*/
@flag
VARCHAR
(
60
) OUTPUT
)
AS
SET
NOCOUNT
ON
DECLARE
@sql
NVARCHAR
(
4000
),
@par
NVARCHAR
(
1000
)
IF
NOT
EXISTS
(
SELECT
*
FROM
master..sysdatabases
WHERE
name
=
@backup_db_name
)
BEGIN
SELECT
@flag
=
'
數據庫
'
+
@backup_db_name
+
'
不存在!
'
RETURN
END
ELSE
BEGIN
IF
RIGHT
(
@filename
,
1
)
<>
'
\
'
AND
CHARINDEX
(
'
\
'
,
@filename
)
<>
0
BEGIN
/*定義標誌*/
DECLARE
@lFlag
INT
EXECUTE
@lFlag
=
master..xp_cmdshell
'
DIR Z:
'
IF
@lFlag
<>
0
BEGIN
/* 在客戶機192.168.2.45上建立一個完全共享目錄db,指定一個用戶名和密碼.Win98用戶不需要用戶名和密碼*/
EXECUTE
@lFlag
=
master..xp_cmdshell
'
NET USE Z: \\192.168.2.45\db$ test /user:ca.atc\test
'
IF
@lFlag
<>
0
BEGIN
SELECT
@flag
=
'
服務器創建目錄失敗!
'
RETURN
END
END
SELECT
@par
=
'
@filename VARCHAR(1000)
'
SELECT
@sql
=
'
BACKUP DATABASE
'
+
@backup_db_name
+
'
TO DISK=@filename WITH INIT
'
EXECUTE
sp_executesql
@sql
,
@par
,
@filename
EXECUTE
master..xp_cmdshell
'
NET USE Z: /DELETE
'
SELECT
@flag
=
'
數據庫
'
+
@backup_db_name
+
'
備份成功!
'
RETURN
END
ELSE
BEGIN
SELECT
@flag
=
'
數據庫備份路徑錯誤!
'
RETURN
END
END
