適用於: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
在 物件總管 中,連接 資料庫引擎,然後展開伺服器樹。
展開 資料庫,然後選擇使用者資料庫。 或者,展開 系統資料庫 並選擇系統資料庫。
右鍵點擊你想備份的資料庫,指向 任務,然後選擇 備份...。
在 「備份資料庫 」對話框中,你選擇的資料庫會出現在下拉選單中。 你可以把資料庫改成伺服器上任何其他資料庫。
在 [備份類型] 清單中,選取備份類型。 預設值為 Full。
重要
您必須先執行至少一個完整資料庫備份,才能執行差異或交易記錄備份。
在 [備份元件] 下方,選取 [資料庫] 。
在 [目的地] 區段中,檢閱備份檔案的預設位置 (位於 ../mssql/data 資料夾)。
使用 備份 清單來選擇不同的裝置。 選擇 新增 以新增備份物件或目的地。 你可以將備份集劃分成多個檔案,以提升備份速度。
若要移除備份目的地,請選取備份並選取 [移除]。 要查看現有備份目的地的內容,請選擇該地址並選擇「內容」。
可選擇性地,檢視媒體 選項 和 備份選項 頁面上的其他設定。
欲了解更多備份選項資訊,請參閱備份資料庫(一般頁面)、備份資料庫(媒體選項頁面)及備份資料庫(備份選項頁面)。
選取 [確定] 以開始備份。
備份成功完成後,選擇 確定 關閉對話框。
備註
當您在 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 資料庫備份到預設備份位置的磁碟。
在 物件總管 中,連接 資料庫引擎,然後展開伺服器樹。
展開[資料庫],以滑鼠右鍵按一下
SQLTestDB,指向 [工作],然後選取[備份]。選擇 [確定]。
備份成功完成後,選擇 確定 關閉對話框。
B. 完整備份到磁碟至非預設位置
這個範例是將 SQLTestDB 資料庫備份到你選擇的位置的磁碟。
在 物件總管 中,連接 資料庫引擎,然後展開伺服器樹。
展開[資料庫],以滑鼠右鍵按一下
SQLTestDB,指向 [工作],然後選取[備份]。在一般頁面的目的地區塊,選擇備份清單中的磁碟。
選取 [移除] ,直到移除所有現有的備份檔案為止。
選取 ,然後新增。 「 選擇備份目的地 」對話框會打開。
在 [ 檔案名稱 ] 方塊中輸入有效的路徑和檔案名稱。 使用 .bak 作為副檔名,簡化檔案分類。
選擇 確定,然後再選擇 確定 開始備份。
備份成功完成後,選擇 確定 關閉對話框。
C. 建立加密備份
這個範例是用加密方式備份 SQLTestDB 資料庫到預設備份位置。
在 物件總管 中,連接 資料庫引擎,然後展開伺服器樹。
展開 [資料庫],展開 [系統資料庫],以滑鼠右鍵按一下
master,然後選取 [新增查詢] 以開啟具有資料庫連線SQLTestDB的查詢視窗。-
-- 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'; 在 [物件總管] 的 [資料庫] 節點中,以滑鼠右鍵按一下
SQLTestDB、指向[工作],然後選取 [備份]。在 [媒體選項 ] 頁面的 [覆 寫媒體 ] 區段中,選取 [備份至新媒體集],然後清除所有現有的備份集。
在 [備份選項 ] 頁面的 [ 加密 ] 區段中,選取 [ 加密備份]。
在 [演算法] 清單中,選取 [AES 256]。
在 「憑證」或「非對稱金鑰」 清單中,選取
MyCertificate。選擇 [確定]。
D. 備份至 Azure Blob 儲存體
此範例會建立 SQLTestDB 的完整資料庫備份至 Azure Blob 儲存體。 這個例子假設你已經有一個帶有 blob 容器的儲存帳號。 範例中建立了共享存取簽章,若容器已有共享存取簽章則失敗。
如果你的儲存帳號裡沒有 Blob 儲存體 容器,請先建立一個再繼續。 請參閱建立一般用途儲存體帳戶及建立容器。
在 物件總管 中,連接 資料庫引擎,然後展開伺服器樹。
展開[資料庫],以滑鼠右鍵按一下
SQLTestDB,指向 [工作],然後選取[備份]。在 [ 一般 ] 頁面的 [ 目的地 ] 區段中,選取 [備份至 ] 清單中的 URL。
選取 ,然後新增。 「 選擇備份目的地 」對話框會打開。
如果你之前已經註冊了想用 SSMS 使用的 Azure 儲存容器,請選擇它。 否則,請選取 [新增容器] 來註冊新的容器。
在「連接 Microsoft 訂閱」對話框中,登入你的帳號。
在 [選取儲存體帳戶 ] 方塊中,選取您的儲存體帳戶。
在 [ 選取 Blob 容器 ] 方塊中,選取您的 Blob 容器。
在 共享存取政策到期 日曆框中,選擇本範例所建立共享存取政策的到期日。
選擇 建立憑證 以在 SSMS 中產生共享存取簽章與憑證。
選擇確定以關閉「連接至 Microsoft 訂閱」對話框。
在 [備份檔案 ] 方塊中,如果需要,請變更備份檔案的名稱。
選擇 確定 以關閉「 選擇備份目的地 」對話框。
選取 [確定] 以開始備份。
備份成功完成後,選擇 確定 關閉對話框。
注意
目前不支援使用受控識別備份至 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
相關工作
- 建立差異資料庫備份 (SQL Server)
- 使用 SSMS 還原資料庫備份
- 在簡單復原模型下還原資料庫備份
- 將資料庫還原至失敗點 - 完整復原
- 將資料庫還原至新位置 (SQL Server)
- 使用維護計畫精靈