備份SQL Server資料庫

weixin_34402090發表於2010-12-24

網站搬遷之後,備份資料庫的功能出錯了,原因是原來資料庫與網站同一臺伺服器,現在是資料庫與網站分別在不同伺服器,引起在備分時,找不到路徑或是沒有許可權儲存。

 

最初版本的儲存過程:

程式碼
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[usp_Backup_DataBase]
(
@BackupDataBaseName varchar(128),
@FileName nvarchar(1000)
)
AS
BACKUP DATABASE @BackupDataBaseName TO DISK = @FileName
IF @@ERROR <>0
BEGIN
    
RAISERROR(N'資料庫備份失敗!',16,1)
    
RETURN
END

  

更新後的儲存過程:

程式碼
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[usp_Backup_DataBase]
(
    
@BackupDataBaseName varchar(128),
    
@FileName nvarchar(128)
)
AS
DECLARE @BKFULLPATH NVARCHAR(1000)

--get SQL server Default Backup path
--
reference:http://www.cnblogs.com/insus/articles/1914932.html
SELECT @BKFULLPATH = [dbo].[udf_SQLServerBackupDirectory]() + '\' + @FileName
BACKUP DATABASE @BackupDataBaseName TO DISK = @BKFULLPATH WITH INIT


DECLARE @MapString NVARCHAR(1000)

/*--說明: 
L: 是對映網路路徑對應本機的碟符,與下面的備份對應 
\\192.168.0.37\E$    是要對映的網路路徑 
192.168.0.37\administrator    
192.168.0.37是遠端的計算機名,administrator是登陸的使用者名稱 
password:上面指定的administrator使用者的密碼 
--
*/ 

SET @MapString = 'NET USE L: "\\192.168.0.37\E$" "password" "/USER:192.168.0.37\administrator"'
EXECUTE master..xp_cmdshell @MapString

--把備份檔案拷貝至對映路徑中
DECLARE @CopyString NVARCHAR(1000= 'COPY "' + @BKFULLPATH + '" L:'
EXECUTE master..xp_cmdshell @CopyString

--刪除備份檔案
DECLARE @OrgBkFileString NVARCHAR(1000= 'DEL "' + @BKFULLPATH + '"'
EXECUTE master..xp_cmdshell @OrgBkFileString

--刪除對映路徑
EXECUTE master..xp_cmdshell 'NET USE L: /DELETE'


IF @@ERROR <> 0
BEGIN
    
RAISERROR(N'資料庫備份失敗!',16,1)
    
RETURN
END

 

 

相關文章