適用対象:SQL Server
この記事では、SQL Server Management Studio(SSMS)、Transact-SQL、またはPowerShellを使ってSQL Serverで完全なデータベースバックアップを作成する方法について説明します。
詳細については、 Azure Blob Storage を使用した SQL Server のバックアップと復元、および Azure Blob Storageの URL への SQL Server バックアップに関するページを参照してください。 バックアップの概念やタスクの概要については、「バックアップ概要(SQL Server)」をご覧ください。
推奨事項
データベースが成長するにつれて、完全なデータベースバックアップには時間がかかり、より多くのストレージが必要になります。 大規模なデータベースの場合は、完全なバックアップに加えて一連の 差分データベースバックアップを組み合わせましょう。
sp_spaceusedシステムのストアドプロシージャで完全なデータベースバックアップのサイズを推定します。
デフォルトでは、バックアップが成功するたびにSQL Serverエラーログとシステムイベントログにエントリが追加されます。 頻繁なバックアップはこれらのログを埋め尽くし、他のメッセージの発見を難しくします。
バックアップログエントリを抑制するには、スクリプトがそれに依存していない場合に限り、 traceフラグ3226を使用してください。
制限事項
明示的・暗黙的な取引において BACKUP 文を使うことはできません。
SQL Serverの新しいバージョンからバックアップを古いバージョンで復元することはできません。 例えば、SQL Server 2025(17.x)のバックアップをSQL Server 2022(16.x)では復元できません。
セキュリティ
TRUSTWORTHY は、データベース バックアップで OFF に設定されます。
TRUSTWORTHYをONに設定するには、ALTER DATABASE SETオプションをご覧ください。
2012 SQL Server(11.x)以降、バックアップ作成のためのPASSWORDやMEDIAPASSWORDオプションが利用できません。 パスワード付きで作成されたバックアップを復元することは、引き続き可能です。
アクセス許可
BACKUP DATABASE
BACKUP LOG権限はシステム管理者固定サーバーロールのメンバーにデフォルトで割り当てられ、db_ownerおよびdb_backupoperator固定データベースロールのメンバーに割り当てられます。
SQL Serverサービスアカウントはバックアップデバイスの物理ファイルに対して読み書き権限を持つ必要があります。 そのファイルの所有権や権限の問題はバックアップや復元操作を妨げ、バックアップや復元操作が実行された場合にのみ表示されます。
例えば、システムテーブルにバックアップデバイスエントリを追加する sp_addumpdevice システムのストアドプロシージャは、ファイルアクセスを検証 しません 。
SQL Server Management Studio を使用する
オブジェクト エクスプローラーでデータベース エンジンに接続し、サーバーツリーを展開します。
データベースを展開し、ユーザーデータベースを選択してください。 または 「システムデータベース」 を展開してシステムデータベースを選択します。
バックアップしたいデータベースを右クリックし、「 タスク」を指し、「 バックアップ...」を選択してください。
「 データベースのバックアップ 」ダイアログボックスで、選択したデータベースがドロップダウンリストに表示されます。 サーバー上の他のデータベースに変更することもできます。
[ バックアップの種類 ] ボックスの一覧で、バックアップの種類を選択します。 既定値は Full です。
重要
差分バックアップまたはトランザクション ログ バックアップを実行するには、データベースの完全バックアップを少なくとも 1 つ実行する必要があります。
[バックアップ コンポーネント] で [データベース] を選択します。
[バックアップ先] セクションで、バックアップ ファイルの既定の場所を確認します (../mssql/data フォルダー内)。
「 バックアップ」 リストを使って別のデバイスを選択してください。 バックアップオブジェクトや宛先を追加するには「 追加 」を選択してください。 バックアップセットを複数のファイルに分割してバックアップ速度を上げることができます。
バックアップ先を削除するには、バックアップ先を選択して [削除] を選択します。 既存のバックアップ先の内容を見るには、そのバックアップ先を選択して 「Contents」を選択してください。
オプションとして、 メディアオプション や バックアップオプション の他の設定も確認してください。
バックアップオプションの詳細については、「 バックアップデータベース(一般ページ)」、「 バックアップデータベース(メディアオプションページ)」、「 バックアップデータベース(バックアップオプションページ)」をご覧ください。
[OK] を選択してバックアップを開始します。
バックアップが正常に完了したら、ダイアログを閉じるために OK を選択してください。
注釈
SQL Server Management Studioでバックアップタスクを指定すると、スクリプトボタンを選択し、スクリプトの宛先を選択することで対応する Transact-SQL BACKUP スクリプトを生成できます。
完全なデータベースバックアップを作成した後、 差分データベースバックアップ や トランザクションログバックアップを作成できます。
オプションで、コピー のみバックアップ のチェックボックスを選択してコピーのみのバックアップを作成できます。 コピーのみのバックアップは、従来の 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を右クリックし、[タスク] をポイントしてから [バックアップ] を選択します。[OK] を選択します。
バックアップが正常に完了したら、ダイアログを閉じるために OK を選択してください。
B. 既定以外の場所へのディスクへの完全バックアップ
この例は、 SQLTestDB データベースを選んだ場所のディスクにバックアップするものです。
オブジェクト エクスプローラーでデータベース エンジンに接続し、サーバーツリーを展開します。
[データベース] を展開して
SQLTestDBを右クリックし、[タスク] をポイントしてから [バックアップ] を選択します。一般ページの宛先セクションで、「リストのバックアップ」から「ディスク」を選択してください。
既存のすべてのバックアップ ファイル が削除 されるまで、[削除] を選択します。
[] を選択し、[] を追加します。 「 バックアップ先の選択 」ダイアログボックスが開きます。
[ファイル名] ボックスに、有効なパスと ファイル名 を入力します。 ファイル分類を簡素化するために .bak を拡張子として使う。
OKを選択し、再度OKを選択してバックアップを開始します。
バックアップが正常に完了したら、ダイアログを閉じるために OK を選択してください。
C: 暗号化されたバックアップの作成
この例は、 SQLTestDB データベースをデフォルトのバックアップ場所に暗号化してバックアップしています。
オブジェクト エクスプローラーでデータベース エンジンに接続し、サーバーツリーを展開します。
[ データベース] を展開し、[ システム データベース] を展開し、[
master] を右クリックし、[ 新しいクエリ ] を選択して、SQLTestDBデータベースへの接続を含むクエリ ウィンドウを開きます。以下のコマンドを実行して、
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';オブジェクト エクスプローラーの [データベース] ノードで、
SQLTestDBを右クリックし、[タスク] をポイントしてから [バックアップ] を選択します。[ メディア オプション] ページの [ メディアの上書き ] セクションで、[ 新しいメディア セットにバックアップ] を選択し、既存のすべてのバックアップ セットを消去します。
[ バックアップ オプション] ページの [ 暗号化 ] セクションで、[ バックアップの暗号化] を選択します。
アルゴリズムの一覧で AES 256 を選択します。
[ 証明書] または [非対称キー ] ボックスの一覧で、[
MyCertificate] を選択します。[OK] を選択します。
D. Azure BLOB Storage へバックアップする
この例では、Azure Blob Storage への SQLTestDB の完全なデータベース バックアップを作成します。 この例は、すでにBlobコンテナ付きのストレージアカウントを持っていることを前提としています。 この例では共有アクセス署名が作成され、コンテナに既存の共有アクセス署名がある場合は失敗します。
ストレージアカウントにBlob Storageコンテナがない場合は、先に作成してから進めてください。 汎用ストレージ アカウントの作成に関する記事と「コンテナーを作成する」を参照してください。
オブジェクト エクスプローラーでデータベース エンジンに接続し、サーバーツリーを展開します。
[データベース] を展開して
SQLTestDBを右クリックし、[タスク] をポイントしてから [バックアップ] を選択します。[全般] ページの [宛先] セクションで、[バックアップ先] ボックスの一覧で [URL] を選択します。
[] を選択し、[] を追加します。 「 バックアップ先の選択 」ダイアログボックスが開きます。
もし以前SSMSで使いたいAzureストレージコンテナを登録していれば、それを選択してください。 それ以外の場合は、[新しいコンテナー] を選択して新しいコンテナーを登録します。
「Microsoftサブスクリプションに接続」ダイアログボックスで、アカウントにサインインしてください。
[ ストレージ アカウントの選択 ] ボックスで、ストレージ アカウントを選択します。
[ BLOB コンテナーの選択 ] ボックスで、BLOB コンテナーを選択します。
共有アクセスポリシーの有効期限カレンダーボックスで、この例で作成する共有アクセスポリシーの有効期限を選択してください。
SSMSで共有アクセス署名と認証情報を生成するには 「認証情報を作成 」を選択します。
「OK」を選択して「Microsoftサブスクリプションに接続」ダイアログボックスを閉じます。
必要な場合は、[ バックアップ ファイル ] ボックスで、バックアップ ファイルの名前を変更します。
「OK」を選択して「バックアップ先の選択」ダイアログボックスを閉じます。
[OK] を選択してバックアップを開始します。
バックアップが正常に完了したら、ダイアログを閉じるために OK を選択してください。
注
マネージド ID を使用した Blob Storage へのバックアップは、現在サポートされていません。
Transact-SQL を使用する
BACKUP DATABASE文を実行して完全なデータベースバックアップを作成します。 指定:
- バックアップするデータベースの名前。
- データベースの完全バックアップを書き込むバックアップ デバイス。
データベースの完全バックアップのための Transact-SQL の基本構文を次に示します。
BACKUP DATABASE <database>
TO <backup_device> [ , ...n ]
[ WITH <with_options> [ , ...o ] ];
| オプション | 説明 |
|---|---|
<database> |
バックアップ用のデータベース。 |
<backup_device> [ , ...n ] |
バックアップ操作に使用するバックアップデバイスを1台から64台まで指定しています。 物理的なバックアップ装置を指定するか、すでに定義されている場合は対応する論理的なバックアップ装置を指定します。 物理的なバックアップデバイスを指定するには、 DISK、 TAPE、または URL のオプションを使ってください。{ DISK | TAPE | URL } = physical_backup_device_nameURLを使ってAzure Blob StorageまたはS3互換のオブジェクトストレージにバックアップしてください。 詳細については、「バックアップ デバイス (SQL Server)」を参照してください。 |
WITH <with_options> [ , ...n ] |
1つ以上の オプションnを指定するために使われました。 基本的な WITH オプションの一部は以下のリストで説明されています。 |
必要に応じて、1 つ以上の 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 オプションを使用します。
フォーマット [ , MEDIANAME = { media_name | @media_name_variable } ] [ , MEDIADESCRIPTION = { text | @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 データベース エンジンに接続する場合、認証情報部分を省略できます。なぜなら、SSMS内の認証情報が自動的にPowerShellとデータベース エンジンの接続を確立するからです。
注
この例には SqlServer モジュールが必要です。 詳細については、「 SQL Server PowerShell プロバイダー」を参照してください。
例
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 Storage に作成します。 ストアドアクセスポリシーは読み取り、書き込み、リストの各権限で作成されます。 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)
- メンテナンス プラン ウィザードの使用
関連するコンテンツ
- SQL Server のバックアップ操作と復元操作のトラブルシューティング
- バックアップの概要 (SQL Server)
- トランザクション ログ バックアップ (SQL Server)
- メディア セット、メディア ファミリ、およびバックアップ セット (SQL Server)
- sys.sp_addumpdevice(Transact-SQL)
- BACKUP (Transact-SQL)
- [データベースのバックアップ] ([全般] ページ)
- [データベースのバックアップ] ([バックアップ オプション] ページ)
- 差分バックアップ (SQL Server)
- データベースの完全バックアップ (SQL Server)