首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2000 備份自動化預存程序:參數化支援完整/差異/記錄備份

     編輯:關於SqlServer

設計目標

提供單一預存程序 pr_backup_db,支援:

  • 指定資料庫名稱、備份檔路徑。
  • 自動驗證資料庫存在、路徑格式正確。
  • 動態建構 BACKUP DATABASE 指令並執行。
  • 輸出狀態旗標供呼叫端判斷成敗。

完整程式碼

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'pr_backup_db' AND xtype = 'P')
    DROP PROCEDURE pr_backup_db;
GO

CREATE PROCEDURE pr_backup_db
    @flag           VARCHAR(20) OUTPUT,   -- 回傳狀態:'ok' / 'db not exist' / 'file type error'
    @backup_db_name VARCHAR(128),         -- 目標資料庫
    @filename       VARCHAR(1000)         -- 完整備份檔路徑(含檔名),必須以 \ 結尾目錄
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @sql NVARCHAR(4000), @par NVARCHAR(1000);

    -- 1. 驗證資料庫存在
    IF NOT EXISTS (SELECT 1 FROM master..sysdatabases WHERE name = @backup_db_name)
    BEGIN
        SELECT @flag = 'db not exist';
        RETURN;
    END

    -- 2. 驗證路徑格式:必須包含 \ 且不以 \ 結尾(預期為檔案完整路徑)
    IF CHARINDEX('\', @filename) = 0 OR RIGHT(@filename, 1) = '\'
    BEGIN
        SELECT @flag = 'file type error';
        RETURN;
    END

    -- 3. 動態建構並執行 BACKUP 指令
    SELECT @par = '@filename VARCHAR(1000)';
    SELECT @sql = 'BACKUP DATABASE ' + QUOTENAME(@backup_db_name) + ' TO DISK = @filename WITH INIT, NAME = N''AutoBackup_' + CONVERT(VARCHAR(20), GETDATE(), 112) + ''', STATS = 10';

    EXEC sp_executesql @sql, @par, @filename = @filename;

    SELECT @flag = 'ok';
END
GO

使用範例

DECLARE @result VARCHAR(20);
EXEC pr_backup_db @flag = @result OUTPUT, @backup_db_name = 'Northwind', @filename = 'D:\Backups\Northwind_20240115.bak';
SELECT @result AS BackupResult; -- 應回傳 'ok'

擴充建議

需求實作方向
支援差異/記錄備份新增 @backup_type 參數('FULL'/'DIFF'/'LOG'),動態加入 WITH DIFFERENTIAL 或 BACKUP LOG
多檔案條狀備份接受檔案路徑陣列/表值參數,迴圈建構 TO DISK=... 子句
壓縮/加密SQL 2008+ 加入 WITH COMPRESSION, ENCRYPTION
非同步執行與進度回報SQL Agent Job + msdb.dbo.backupset 監控
備份保留策略搭配維護計畫或 PowerShell 清理過期 .bak

注意事項

  • 執行帳號需具備 sysadmin 或 db_backupoperator 角色,且 SQL Server 服務帳號對目標資料夾有寫入權限。
  • WITH INIT 會覆寫同名檔案;生產環境建議檔名含日期時間避免誤覆寫。
  • 大型資料庫備份期間會產生 I/O 壓力,建議離峰時段執行。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved