預存程序 up_dbbackup 將伺服器端資料庫備份至用戶端機器的共享資料夾 (透過 NET USE 映射磁碟機),支援錯誤處理與狀態回傳。
| 參數 | 型別 | 說明 |
|---|---|---|
@backup_db_name | VARCHAR(128) | 要備份的資料庫名稱 |
@filename | VARCHAR(128) | 備份檔完整路徑 (含檔名),需以 \ 結尾的共享路徑 (如 Z:\backup\db.bak) |
@flag | VARCHAR(60) OUTPUT | 執行結果訊息 |
CREATE PROCEDURE up_dbbackup
(
@backup_db_name VARCHAR(128),
@filename VARCHAR(128),
@flag VARCHAR(60) OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sql NVARCHAR(4000), @par NVARCHAR(1000), @lFlag INT;
-- 檢查資料庫是否存在
IF NOT EXISTS (SELECT * FROM master..sysdatabases WHERE name = @backup_db_name)
BEGIN
SELECT @flag = '資料庫 ' + @backup_db_name + ' 不存在!';
RETURN;
END
-- 驗證路徑格式
IF RIGHT(@filename, 1) <> '\' AND CHARINDEX('\', @filename) <> 0
BEGIN
-- 嘗試映射 Z: 至用戶端共享
EXEC @lFlag = master..xp_cmdshell 'DIR Z:';
IF @lFlag <> 0
BEGIN
EXEC @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';
EXEC sp_executesql @sql, @par, @filename;
-- 移除映射
EXEC master..xp_cmdshell 'NET USE Z: /DELETE';
SELECT @flag = '資料庫 ' + @backup_db_name + ' 備份成功!';
END
ELSE
BEGIN
SELECT @flag = '資料庫備份路徑錯誤!';
END
END
DECLARE @msg VARCHAR(60);
EXEC up_dbbackup 'Northwind', 'Z:\bak\Northwind.bak', @msg OUTPUT;
PRINT @msg;
xp_cmdshell 且 SQL Server 服務帳戶具備網路存取權限。@filename 必須為映射磁碟機路徑 (如 Z:\...),UNC 路徑 (\\server\share\...) 在舊版 SQL Server 可能不支援。