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

C++Builder 客戶端呼叫預存程序遠端備份 SQL Server 資料庫實作

     編輯:關於SqlServer

架構概覽

本文示範在 C++Builder 環境下,客戶端透過 ADO 元件呼叫主資料庫預存程序,實現遠端備份 SQL Server 資料庫的完整流程。

步驟 1:建立備份預存程序 (在 master 資料庫)

CREATE PROCEDURE backupdb
@database varchar(10),
@directory varchar(100)
AS
BACKUP DATABASE @database
TO DISK = @directory

關鍵點:預存程序建立在 master 資料庫,接受資料庫名稱與備份路徑兩個參數。

步驟 2:取得 SQL Server 資料目錄路徑

AnsiString __fastcall TFrmDM::GetSqlServerPath() {
    AnsiString result, tmp;
    TADOQuery *Query = new TADOQuery(this);
    Query->Connection = ADOConnection_Master;
    Query->Close();
    Query->SQL->Clear();
    Query->SQL->Add("SELECT filename FROM sysdatabases WHERE name='master'");
    Query->Open();
    tmp = Query->FieldByName("filename")->AsString;
    // 移除尾端 '\master.mdf' (15 字元) 取得資料目錄
    result = tmp.SubString(1, tmp.Length() - 15);
    Query->Free();
    return result;
}

邏輯:查詢 master 資料庫檔案路徑,截取目錄部分作為備份基礎路徑。

步驟 3:呼叫預存程序執行備份

// 產生含時間戳記的備份檔名
d = FormatDateTime("yyyy-mm-dd hh-mm-ss", FrmDM->GetServerTime());

try {
    // 組合完整備份路徑
    path = FrmDM->GetSqlServerPath() + "backup\\";
    
    // 設定 ADOStoredProc 元件
    FrmDM->ADOStoredProc1->Close();
    FrmDM->ADOStoredProc1->Connection = FrmDM->ADOConnection_Master;
    FrmDM->ADOStoredProc1->Prepared = true;
    FrmDM->ADOStoredProc1->ProcedureName = "backupdb;1";  // ;1 表示第一個過載
    
    // 設定參數
    FrmDM->ADOStoredProc1->Parameters->ParamByName("@database")->Value = "db_name_to_backup";
    FrmDM->ADOStoredProc1->Parameters->ParamByName("@directory")->Value = path + "db_name_to_backup" + d;
    
    // 執行備份
    FrmDM->ADOStoredProc1->ExecProc();
    
    Application->MessageBox("備份完成", "提示", MB_OK + MB_ICONINFORMATION);
    this->Close();
}
catch(...) {
    Application->MessageBox("備份出錯,請重新再來", "警告", MB_OK + MB_ICONWARNING);
    return;
}

關鍵技術細節解析

元件/屬性說明
ADOConnection_Master連接 master 資料庫的 ADO 連線元件
ADOStoredProc1.Prepared = true預先編譯預存程序,提升重複執行效能
ProcedureName = "backupdb;1"指定預存程序名稱,;1 為過載編號
ParamByName 設定參數使用具名參數綁定,避免順序錯誤
ExecProc()執行不傳回結果集的預存程序
GetServerTime()取得伺服器端時間 (需另行實作),確保檔名時間一致性

部署與權限需求

  • 執行帳戶需具備 BACKUP DATABASE 權限 (通常需 db_backupoperator 或 sysadmin 角色)
  • SQL Server 服務帳戶需對備份目錄有寫入權限
  • 備份目錄建議預先建立 backup 子目錄
  • 客戶端與伺服器網路連通正常,ADO 連線字串正確

擴充建議

  • 加入備份壓縮選項 (SQL Server 2008+ 支援 WITH COMPRESSION)
  • 實作差異備份/記錄備份切換邏輯
  • 加入備份驗證步驟 (RESTORE VERIFYONLY)
  • 建立備份歷程記錄表追蹤備份狀態
  • 考慮使用 SQL Server Management Objects (SMO) 替代 ADO 獲取更豐富功能
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved