set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: dcrenl
-- Create date: 2013-9-5 9:54:46
-- Description: WEB伺服器遠端備份資料庫,
--此方法需要打開WEB伺服器的共享功能.
--驗證方法同一區域網路其它機器裡在運作裡輸入 \\IP\C$ 要求輸入使用者名和密碼,如果可以通路此方法有效
--
--異地備份還有很多種方法
--1.将資料庫備份完之後在資料庫服務上建立一個庫,添加表,建立一個Image類型字段,
然後使用sp_textcopy把備份檔案寫入資料庫,再從WEB伺服器将備份檔案讀取出來,不過此方法讀取出來的備份檔案有可能會損壞
--2.在WEB伺服器安裝SQL Server 使用SQLDMO(Interop.SQLDMO.dll)或
--Microsoft.SqlServer.ConnectionInfo.dll 、
Microsoft.SqlServer.Management.Sdk.Sfc.dll
--(以上兩個DLL檔案位置:Program Files\Microsoft SQL
Server\100\SDK\Assemblies)
--生成資料庫表、存儲過程和函數等腳本,然後在WEB服務上的SQL Server上建立資料庫,
--使用生成的腳本建立表等,然後将資料Insert到WEB伺服器上的資料庫進行備份
CREATE PROCEDURE [dbo].[RemoteBack]
@DataDisk nvarchar(max),--需要在資料庫伺服器上映射的盤符
@WEBAddr nvarchar(max),--WEB伺服器位址
@WEBDisk nvarchar(max),--WEB伺服器共享目錄(例如:D$ 或 C$\Windows)
@Password nvarchar(max),--WEB伺服器密碼
@UserName nvarchar(max),--WEB伺服器使用者名
@DataName nvarchar(max)--需要備份的資料庫名
AS
BEGIN
SET NOCOUNT ON;
--設定日期時間串
DECLARE @DateTime DateTime
set @DateTime = getdate()
DECLARE @FileTime nvarchar(max)
set @FileTime = convert(nvarchar(50), year(@DateTime)) +
right(cast(month(@DateTime)+100 as varchar),2) +
right(cast(day(@DateTime)+100 as varchar),2) +
right(cast(DateName(hour,GetDate())+100 as varchar),2) +
right(cast(DateName(minute,GetDate())+100 as varchar),2) +
right(cast(DateName(second,GetDate())+100 as varchar),2)
--打開進階設定
exec sp_configure 'show advanced options',1
reconfigure
--開啟xp_cmdshell
exec sp_configure 'xp_cmdshell',1
--将WEB伺服器路徑映射到資料庫伺服器
exec ('master..xp_cmdshell ''net use ' + @DataDisk + ': \\' +
@WEBAddr + '\' + @WEBDisk + ' "' + @Password + '" /user:' +
@WEBAddr + '\' + @UserName + '''')
--開始備份并複制到WEB伺服器映射到SQL服務上的路徑
exec('backup database ' + @DataName + ' to
disk='''+@DataDisk+':\' + @DataName +'_'+ @FileTime +'.bak'' with
init')
--關閉映射路徑
exec ('master..xp_cmdshell ''net use ' + @DataDisk + ':
/delete''')
--關閉xp_cmdshell
exec sp_configure 'xp_cmdshell',0
--關閉進階設定
exec sp_configure 'show advanced options',0
END