例1:
有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腳本,即可生成你需要的腳本
例2:
-- 創建網絡映射(Y是盤符;IP地址后面要帶共享文件夾的名稱;password是密碼,雙引號引起;account是遠程電腦的登錄名) exec master..xp_cmdshell 'net use Y: \\192.168.0.69\sqlbackup "password" /user:192.168.0.69\account' -- 按日期時間做文件名(注意路徑中的文件夾,需要先建立好) declare @filename varchar(200) select @filename = 'Y:\DB\' + replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ','-'),':','') + '.bak' -- 執行備份(DB是要備份的數據庫名稱) backup database [DB] to disk = @filename -- 刪除網絡映射(Y是盤符,同上) exec master..xp_cmdshell 'net use Y: /delete' -- ABEL.CNBLOGS.COM -- 2013-07-14
需要注意的是,SQL Server 要開啟允許執行 cmd 命令。
企業管理器 --管理 --SQL Server代理 --右鍵作業 --新建作業 --"常規"項中輸入作業名稱 --"步驟"項 --新建 --"步驟名"中輸入步驟名 --"類型"中選擇"Transact-SQL 腳本(TSQL)" --"數據庫"選擇執行命令的數據庫 --"命令"中輸入要執行的語句: declare @strsql varchar(1000) declare @strdirname varchar(50) declare @strcmd varchar(50) declare @strsend varchar(1000) declare @strdate varchar(50) exec master..xp_cmdshell 'net use \\192.168.0.151\d$ Password /user:192.168.0.151\administrator' set @strsql='backup database new_his to disk=''\\192.168.0.151\d$\serverd\' set @strdirname=replace(substring(convert(varchar(20),getdate(),120),1,10),'-','')+'12' set @strcmd='md \\192.168.0.151\d$\serverd\' set @strcmd=@strcmd+@strdirname exec master..xp_cmdshell @strcmd --print @strsql set @strsql=@strsql+@strdirname+'\new_hisbackup.dat'' with init,nounload,noskip,noformat' --print @strsql exec (@strsql) ----其中寫的IP地址及共享目錄,網友自行修改,Password一定要正確 --確定 --"調度"項 --新建調度 --"名稱"中輸入調度名稱 --"調度類型"中選擇你的作業執行安排 --如果選擇"反復出現" --點"更改"來設置你的時間安排 然后將SQL Agent服務啟動,並設置為自動啟動,否則你的作業不會被執行 設置方法: 我的電腦--控制面板--管理工具--服務--右鍵 SQLSERVERAGENT--屬性--啟動類型--選擇"自動啟動"--確定.
exec master..xp_cmdshell 'net use z: \\D6MN1F22\db "qxhbj.0731" /user:D6MN1F22\administrator'
SQL server 2005 備份數據庫到局域網共享文件夾
定時備份SQL SERVER的數據庫並且把備份文件復制到另外一台服務器保存
SQL Server如何備份遠程數據庫到本地
如果沒有遠程數據庫所在服務器的windows賬號密碼,僅有遠程SQL Server數據庫的用戶密碼,該如何備份遠程數據庫db1的數據到本地呢?
1:在本地安裝通版本的數據庫軟件(比如:SQL Server2000)
2:在本地數據庫服務器上創建數據庫db2;
3:使用本地“企業管理器”注冊遠程數據庫,並將遠程數據庫db1的信息全部復制到本地數據庫db2;
4:在本地備份db2。