建立完整資料庫備份

適用於:SQL Server

本文說明如何使用 SQL Server Management Studio(SSMS)、Transact-SQL 或 PowerShell 在 SQL Server 中建立完整的資料庫備份。

如需詳細資訊,請參閱 使用 Azure Blob 儲存體備份和還原 SQL Server 和 SQL Server 備份至 Azure Blob 儲存體的 URL。 關於備份概念與任務的概述,請參閱備份概覽(SQL Server)。

建議

  • 隨著資料庫成長,完整資料庫備份所需時間更長且需要更多儲存空間。 對於大型資料庫,應以一系列 差分資料庫備份來補充完整備份。

  • 使用 sp_spaceused 系統預存程序來估計完整資料庫備份的大小。

  • 預設情況下,每次成功備份都會在 SQL Server 錯誤日誌和系統事件日誌中新增一個項目。 頻繁的備份會填滿這些日誌,讓其他訊息變得難以被找到。

    要抑制備份日誌條目,請使用 trace flag 3226,前提是你的腳本不依賴它們。

局限性

你不能在明示或隱含交易中使用該 BACKUP 語句。

你無法從較舊版本的 SQL Server 還原備份。 舉例來說,你無法在 SQL Server 2022(16.x)上還原 SQL Server 2025(17.x)的備份。

安全性

在資料庫備份中,TRUSTWORTHY 會設為 OFF。 要設定 TRUSTWORTHY 為 ON,請查看 ALTER DATABASE SET 選項。

從 SQL Server 2012(11.x)開始,PASSWORD無法使用與MEDIAPASSWORD選項來建立備份。 您仍然可以還原以密碼建立的備份。

權限

BACKUP DATABASE 和 BACKUP LOG 權限預設授與 sysadmin 固定伺服器角色以及 db_owner 和 db_backupoperator 固定資料庫角色的成員。

SQL Server 服務帳號必須對備份裝置的實體檔案擁有讀寫權限。 該檔案的所有權或權限問題會阻止備份與還原操作,且僅在備份或還原操作執行時才會出現。

例如, sp_addumpdevice 系統儲存程序會將備份裝置條目加入系統資料表, 但不會 驗證檔案存取。

使用 SQL Server Management Studio

  1. 在 物件總管 中,連接 資料庫引擎,然後展開伺服器樹。

  2. 展開 資料庫,然後選擇使用者資料庫。 或者,展開 系統資料庫 並選擇系統資料庫。

  3. 右鍵點擊你想備份的資料庫,指向 任務,然後選擇 備份...。

  4. 在 「備份資料庫 」對話框中,你選擇的資料庫會出現在下拉選單中。 你可以把資料庫改成伺服器上任何其他資料庫。

  5. 在 [備份類型] 清單中,選取備份類型。 預設值為 Full。

    重要

    您必須先執行至少一個完整資料庫備份,才能執行差異或交易記錄備份。

  6. 在 [備份元件] 下方,選取 [資料庫] 。

  7. 在 [目的地] 區段中,檢閱備份檔案的預設位置 (位於 ../mssql/data 資料夾)。

    使用 備份 清單來選擇不同的裝置。 選擇 新增 以新增備份物件或目的地。 你可以將備份集劃分成多個檔案,以提升備份速度。

    若要移除備份目的地,請選取備份並選取 [移除]。 要查看現有備份目的地的內容,請選擇該地址並選擇「內容」。

  8. 可選擇性地,檢視媒體 選項 和 備份選項 頁面上的其他設定。

    欲了解更多備份選項資訊,請參閱備份資料庫(一般頁面)、備份資料庫(媒體選項頁面)及備份資料庫(備份選項頁面)。

  9. 選取 [確定] 以開始備份。

  10. 備份成功完成後,選擇 確定 關閉對話框。

備註

  • 當您在 SQL Server Management Studio 中指定備份工作時,可以按一下 BACKUP 按鈕,然後選取指令碼目的地,以產生對應的 Transact-SQL 指令碼。

  • 在建立完整資料庫備份後,你可以建立 差分資料庫備份 或 交易日誌備份。

  • 可選擇「 僅複製備份 」勾選框以建立僅複製備份。 僅限複製備份是與傳統 SQL Server 備份順序無關的 SQL Server 備份。 如需詳細資訊,請參閱 僅複製備份。 差異備份類型不支援僅複製備份。

  • 當您備份至 URL 時,媒體選項頁面上的覆寫媒體選項會停用。

範例

以下範例請使用以下 Transact-SQL 程式碼建立測試資料庫:

USE master;
GO

CREATE DATABASE [SQLTestDB];
GO

USE [SQLTestDB];
GO

CREATE TABLE SQLTest
(
    ID INT NOT NULL PRIMARY KEY,
    c1 VARCHAR (100) NOT NULL,
    dt1 DATETIME DEFAULT getdate() NOT NULL
);
GO

USE [SQLTestDB];
GO

INSERT INTO SQLTest (ID, c1) VALUES (1, 'test1');
INSERT INTO SQLTest (ID, c1) VALUES (2, 'test2');
INSERT INTO SQLTest (ID, c1) VALUES (3, 'test3');
INSERT INTO SQLTest (ID, c1) VALUES (4, 'test4');
INSERT INTO SQLTest (ID, c1) VALUES (5, 'test5');
GO

SELECT *
FROM SQLTest;
GO

A。 完整備份至磁碟至預設位置

這個範例是將 SQLTestDB 資料庫備份到預設備份位置的磁碟。

  1. 在 物件總管 中,連接 資料庫引擎,然後展開伺服器樹。

  2. 展開[資料庫],以滑鼠右鍵按一下 SQLTestDB,指向 [工作],然後選取[備份]。

  3. 選擇 [確定]。

  4. 備份成功完成後,選擇 確定 關閉對話框。

顯示建立備份步驟的螢幕擷取畫面。

B. 完整備份到磁碟至非預設位置

這個範例是將 SQLTestDB 資料庫備份到你選擇的位置的磁碟。

  1. 在 物件總管 中,連接 資料庫引擎,然後展開伺服器樹。

  2. 展開[資料庫],以滑鼠右鍵按一下 SQLTestDB,指向 [工作],然後選取[備份]。

  3. 在一般頁面的目的地區塊,選擇備份清單中的磁碟。

  4. 選取 [移除] ,直到移除所有現有的備份檔案為止。

  5. 選取 ,然後新增。 「 選擇備份目的地 」對話框會打開。

  6. 在 [ 檔案名稱 ] 方塊中輸入有效的路徑和檔案名稱。 使用 .bak 作為副檔名,簡化檔案分類。

  7. 選擇 確定,然後再選擇 確定 開始備份。

  8. 備份成功完成後,選擇 確定 關閉對話框。

顯示如何新增或移除備份位置的螢幕擷取畫面。

C. 建立加密備份

這個範例是用加密方式備份 SQLTestDB 資料庫到預設備份位置。

  1. 在 物件總管 中,連接 資料庫引擎,然後展開伺服器樹。

  2. 展開 [資料庫],展開 [系統資料庫],以滑鼠右鍵按一下 master,然後選取 [新增查詢] 以開啟具有資料庫連線 SQLTestDB 的查詢視窗。

  3. 執行以下指令,在資料庫中建立一個主金鑰和憑證master。

    -- Create the master key.
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
    
    -- If the master key already exists, open it in the same session that you create the certificate. (See next step.)
    OPEN MASTER KEY DECRYPTION BY PASSWORD = '<password>';
    
    -- Create the certificate encrypted by the master key.
    CREATE CERTIFICATE MyCertificate
    WITH SUBJECT = 'Backup Cert', EXPIRY_DATE = '20201031';
    
  4. 在 [物件總管] 的 [資料庫] 節點中,以滑鼠右鍵按一下 SQLTestDB、指向[工作],然後選取 [備份]。

  5. 在 [媒體選項 ] 頁面的 [覆 寫媒體 ] 區段中,選取 [備份至新媒體集],然後清除所有現有的備份集。

  6. 在 [備份選項 ] 頁面的 [ 加密 ] 區段中,選取 [ 加密備份]。

  7. 在 [演算法] 清單中,選取 [AES 256]。

  8. 在 「憑證」或「非對稱金鑰」 清單中,選取 MyCertificate。

  9. 選擇 [確定]。

螢幕擷取畫面,顯示建立加密備份的步驟。

D. 備份至 Azure Blob 儲存體

此範例會建立 SQLTestDB 的完整資料庫備份至 Azure Blob 儲存體。 這個例子假設你已經有一個帶有 blob 容器的儲存帳號。 範例中建立了共享存取簽章,若容器已有共享存取簽章則失敗。

如果你的儲存帳號裡沒有 Blob 儲存體 容器,請先建立一個再繼續。 請參閱建立一般用途儲存體帳戶及建立容器。

  1. 在 物件總管 中,連接 資料庫引擎,然後展開伺服器樹。

  2. 展開[資料庫],以滑鼠右鍵按一下 SQLTestDB,指向 [工作],然後選取[備份]。

  3. 在 [ 一般 ] 頁面的 [ 目的地 ] 區段中,選取 [備份至 ] 清單中的 URL。

  4. 選取 ,然後新增。 「 選擇備份目的地 」對話框會打開。

  5. 如果你之前已經註冊了想用 SSMS 使用的 Azure 儲存容器,請選擇它。 否則,請選取 [新增容器] 來註冊新的容器。

  6. 在「連接 Microsoft 訂閱」對話框中,登入你的帳號。

  7. 在 [選取儲存體帳戶 ] 方塊中,選取您的儲存體帳戶。

  8. 在 [ 選取 Blob 容器 ] 方塊中,選取您的 Blob 容器。

  9. 在 共享存取政策到期 日曆框中,選擇本範例所建立共享存取政策的到期日。

  10. 選擇 建立憑證 以在 SSMS 中產生共享存取簽章與憑證。

  11. 選擇確定以關閉「連接至 Microsoft 訂閱」對話框。

  12. 在 [備份檔案 ] 方塊中,如果需要,請變更備份檔案的名稱。

  13. 選擇 確定 以關閉「 選擇備份目的地 」對話框。

  14. 選取 [確定] 以開始備份。

  15. 備份成功完成後,選擇 確定 關閉對話框。

注意

目前不支援使用受控識別備份至 Blob 儲存體。

下載 Transact-SQL

透過執行該 BACKUP DATABASE 語句建立完整的資料庫備份。 指定:

  • 欲備份的資料庫名稱。
  • 寫入完整資料庫備份的備份裝置。

完整資料庫備份的基本 Transact-SQL 語法如下:

BACKUP DATABASE <database>
TO <backup_device> [ , ...n ]
[ WITH <with_options> [ , ...o ] ];
選項 描述
<database> 要備份的資料庫。
<backup_device> [ , ...n ] 指定1至64台備份設備用於備份操作。 指定一個實體備份裝置,或如果已經定義好邏輯備份裝置,也指定一個對應的備份裝置。 若要指定實體備份裝置,請使用DISK、或TAPEURL選項:

{ DISK | URL | TAPE} = physical_backup_device_name

用URL來備份到 Azure Blob 儲存體 或相容於 S3 的物件儲存。 如需詳細資訊,請參閱 Microsoft Azure備份裝置 (SQL Server)。
WITH <with_options> [ , ...n ] 用來指定一個或多個選項, n。 以下列出了一些基本 WITH 選項。

或者,指定一或多個 WITH 選項。 這裡說明一些基本 WITH 選項。 關於所有 WITH 選項的資訊,請參見 BACKUP。

基本備份集 WITH 選項:

  • { 壓縮 | 不壓縮 }。 SQL Server 會指定是否對備份執行備份壓縮,以覆寫伺服器層級的預設設定。

  • 加密(演算法,伺服器CERTIFICATE|ASYMMETRIC KEY)。 在 SQL Server 2014 或更新版本中,指定了使用的加密演算法,以及用於加密安全的憑證或非對稱金鑰。

  • 描述 = { '文本' | @text_variable }。 指定描述備份集的自由格式文字。 這個字串最多可有 255 個字元。

  • NAME = { backup_set_name | @backup_set_name_var }。 指定備份組的名稱。 名稱最多可有 128 個字元。 如果你未指定 NAME,它會是空白。

根據預設,BACKUP 會將備份附加到現有的媒體集,以保留現有的備份組。 若要明確指定此組態,請使用選項 NOINIT 。 如需附加至現有備份集的相關資訊,請參閱媒體集、媒體系列和備份集 (SQL Server)。

若要格式化備份媒體,請使用以下 FORMAT 選項:

格式 [ , 媒體名稱 = { media_name | @media_name_variable } ] [ , 媒體描述 = { 文字 | @text_variable } ]

當你第一次使用媒體,或想覆蓋所有現有資料時,請使用這個 FORMAT 條款。 選擇性地為新的媒體指派媒體名稱和描述。

重要

使用 BACKUP 陳述式的 FORMAT 子句時請務必小心,因為此選項會刪除先前儲存在備份媒體上的所有備份。

範例

以下範例請使用以下 Transact-SQL 程式碼建立測試資料庫:

USE master;
GO

CREATE DATABASE [SQLTestDB];
GO

USE [SQLTestDB];
GO

CREATE TABLE SQLTest
(
    ID INT NOT NULL PRIMARY KEY,
    c1 VARCHAR (100) NOT NULL,
    dt1 DATETIME DEFAULT GETDATE() NOT NULL
);
GO

USE [SQLTestDB];
GO

INSERT INTO SQLTest (ID, c1) VALUES (1, 'test1');
INSERT INTO SQLTest (ID, c1) VALUES (2, 'test2');
INSERT INTO SQLTest (ID, c1) VALUES (3, 'test3');
INSERT INTO SQLTest (ID, c1) VALUES (4, 'test4');
INSERT INTO SQLTest (ID, c1) VALUES (5, 'test5');
GO

SELECT *
FROM SQLTest;
GO

A。 備份到磁碟裝置

下列範例會將完整的 SQLTestDB 資料庫備份至磁碟。 它使用 FORMAT 來建立新的媒體集。

USE SQLTestDB;
GO

BACKUP DATABASE SQLTestDB
TO DISK = 'c:\tmp\SQLTestDB.bak'
WITH FORMAT,
     MEDIANAME = 'SQLServerBackups',
     NAME = 'Full Backup of SQLTestDB';
GO

B. 備份到磁帶裝置

下列範例會將完整的 SQLTestDB 資料庫備份至磁帶。 它會將備份附加至先前的備份。

USE SQLTestDB;
GO

BACKUP DATABASE SQLTestDB
TO TAPE = '\\.\Tape0'
WITH NOINIT,
     NAME = 'Full Backup of SQLTestDB';
GO

C. 備份至邏輯磁帶設備

下列範例會為磁帶機建立邏輯備份裝置。 然後,此範例會將完整的 SQLTestDB 資料庫備份至該裝置。

-- Create a logical backup device,
-- SQLTestDB_Bak_Tape, for tape device \\.\tape0.
USE master;
GO

EXECUTE sp_addumpdevice 'tape', 'SQLTestDB_Bak_Tape', '\\.\tape0';

USE SQLTestDB;
GO

BACKUP DATABASE SQLTestDB
TO SQLTestDB_Bak_Tape
WITH FORMAT,
     MEDIANAME = 'SQLTestDB_Bak_Tape',
     MEDIADESCRIPTION = '\\.\tape0',
     NAME = 'Full Backup of SQLTestDB';
GO

PowerShell

使用 Backup-SqlDatabase 命令程式。 若要明確指出完整資料庫備份,請指定 -BackupAction 參數及其預設值 Database。 此參數在完整資料庫備份下是選擇性的。

如果你在 SSMS 內開啟 PowerShell 視窗連接 SQL Server Database Engine,可以省略憑證部分,因為 SSMS 中的憑證會自動建立 PowerShell 與 資料庫引擎 的連結。

注意

此範例需要 SqlServer 模組。 如需詳細資訊,請參閱 SQL Server PowerShell Provider。

範例

A。 完整備份 (本機)

下列範例會在伺服器執行個體 <myDatabase> 的預設備份位置,建立 Computer\Instance資料庫的完整資料庫備份。 或者,此範例會指定 -BackupAction Database。

如需完整的語法範例,請參閱 Backup-SqlDatabase。

$credential = Get-Credential

Backup-SqlDatabase -ServerInstance Computer[\Instance] -Database <myDatabase> -BackupAction Database -Credential $credential

B. 將完整備份至 Azure

下列範例會將執行個體上的<myDatabase>資料庫<myServer>完整備份至 Blob 儲存體。 已建立一個具有讀取、寫入和列出權限的儲存存取原則。 SQL Server 憑證 https://<myStorageAccount>.blob.core.windows.net/<myContainer>是透過與儲存存取政策相關的共享存取簽章建立的。 此命令會使用參數 $backupFile 來指定位置 (URL) 和備份檔名。

$credential = Get-Credential
$container = 'https://<myStorageAccount>blob.core.windows.net/<myContainer>'
$fileName = '<myDatabase>.bak'
$server = '<myServer>'
$database = '<myDatabase>'
$backupFile = $container + '/' + $fileName

Backup-SqlDatabase -ServerInstance $server -Database $database -BackupFile $backupFile -Credential $credential