網站搬遷之後,備份資料庫的功能出錯了,原因是原來資料庫與網站同一臺伺服器,現在是資料庫與網站分別在不同伺服器,引起在備分時,找不到路徑或是沒有許可權儲存。
最初版本的儲存過程:
程式碼
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
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
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