次の方法で共有


データベースの完全バックアップを作成する

適用対象:SQL Server

この記事では、SQL Server Management Studio、Transact-SQL、または PowerShell を使用して SQL Server でデータベースの完全バックアップを作成する方法について説明します。

詳細については、 Azure Blob Storage を使用した SQL Server のバックアップと復元、および Azure Blob Storageの URL への SQL Server バックアップに関するページを参照してください。

制限事項

  • BACKUP ステートメントは、明示的なトランザクションまたは暗黙のトランザクションでは使用できません。
  • より新しいバージョンの SQL Server によって作成されたバックアップは、以前のバージョンの SQL Server では復元できません。

バックアップの概念とタスクの概要と詳細については、続行する前にバックアップの 概要 (SQL Server) を参照してください。

推奨事項

  • データベース サイズが大きくなると、データベースの完全バックアップにかかる時間は長くなり、必要な記憶領域も増加します。 大規模なデータベースでは、一連のデータベースの差分バックアップを使用してデータベースの完全バックアップを補完することを検討してください。
  • データベースの完全バックアップのサイズは、 sp_spaceused システム ストアド プロシージャを使用して推計します。
  • 既定では、バックアップ操作が成功するたびに、 SQL Server エラー ログおよびシステム イベント ログにエントリが 1 つ追加されます。 頻繁にバックアップすると、成功メッセージがすぐに蓄積され、エラー ログが大きくなり、他のメッセージの検索が困難になります。 そのような場合、これらのエントリに依存するスクリプトがなければ、トレース フラグ 3226 を使用することによってこれらのバックアップ ログ エントリを除外できます。 詳細については、「 DBCC TRACEON を使用したトレース フラグの設定」を参照してください。

セキュリティ

TRUSTWORTHY は、データベース バックアップで OFF に設定されます。 TRUSTWORTHYONに設定する方法については、ALTER DATABASE SET オプションを参照してください。

SQL Server 2012 (11.x) 以降では、バックアップの作成に PASSWORDMEDIAPASSWORD のオプションは使用できません。 パスワード付きで作成されたバックアップを復元することは、引き続き可能です。

アクセス許可

BACKUP DATABASE および BACKUP LOG アクセス許可は、既定では、sysadmin 固定サーバー ロール、db_owner 固定データベース ロール、および db_backupoperator 固定データベース ロールのメンバーに与えられます。

バックアップ デバイスの物理ファイルに対する所有と許可の問題によって、バックアップ操作が妨げられることがあります。 SQL Server サービスは、デバイスとの間で読み取りと書き込みを行う必要があります。 SQL Server サービスの実行に使用するアカウントには、バックアップ デバイスへの書き込みアクセス許可が必要です。 ただし、システム テーブルにバックアップ デバイスのエントリを追加する sp_addumpdevice では、ファイルのアクセス許可がチェックされません。 バックアップ デバイスの物理ファイルの問題は、バックアップが使用されるか復元が試行されるまで表示されない場合があります。

SQL Server Management Studio を使用する

SQL Server Management Studio を使用してバックアップ タスクを指定する場合は、[スクリプト] ボタンを選択し、スクリプトの変換先を選択することで、対応する Transact-SQL BACKUP スクリプトを生成できます。

  1. SQL Server データベース エンジンの適切なインスタンスに接続した後、 オブジェクト エクスプローラーでサーバー ツリーを展開します。

  2. [データベース]を展開し、ユーザー データベースを選択するか、または [システム データベース] を展開してシステム データベースを選択します。

  3. バックアップするデータベースを右クリックし、[ タスク] をポイントして、[ バックアップ...] を選択します。

  4. [ データベースのバックアップ ] ダイアログで、選択したデータベースがドロップダウン リストに表示されます。 (データベースは、サーバー上の他の任意のデータベースに変更できます)。

  5. [ バックアップの種類 ] ボックスの一覧で、バックアップの種類を選択します。 既定値は Full です

    重要

    差分バックアップまたはトランザクション ログ バックアップを実行するには、データベースの完全バックアップを少なくとも 1 つ実行する必要があります。

  6. [バックアップ コンポーネント][データベース] を選択します。

  7. [バックアップ先] セクションで、バックアップ ファイルの既定の場所を確認します (../mssql/data フォルダー内)。

    [バックアップ] リスト を使用して 、別のデバイスを選択できます。 [ 追加] を選択して、バックアップ オブジェクトやバックアップ先を追加します。 バックアップの速度を向上させるために、バックアップ セットを複数のファイルにまたがってストライプすることができます。

    バックアップ先を削除するには、バックアップ先を選択し、[削除] を選択 します。 既存のバックアップ先の内容を表示するには、バックアップ先を選択し、[ コンテンツ] を選択します。

  8. (省略可能) [メディア オプション] ページと [ バックアップ オプション ] ページで、その他の使用可能な設定を確認します。

    さまざまなバックアップ オプションの詳細については、「 データベースのバックアップ (全般ページ)」、「データベース のバックアップ (メディア オプション」ページ)、およびデータベース のバックアップ ([バックアップ オプション] ページ)を参照してください。

  9. [OK] を選択してバックアップを開始します。

  10. バックアップが正常に完了したら、[ OK] を 選択して SQL Server Management Studio ダイアログを閉じます。

追加情報

  • データベースの完全バックアップを作成したら、データベースの差分バックアップまたはトランザクション ログ バックアップを作成できます。

  • (省略可能) [コピー専用バックアップ ] チェック ボックスをオンにすると、コピー専用バックアップを作成できます。 コピーのみのバックアップは、従来の 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 NOT NULL DEFAULT getdate()
   );
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. SQL Server データベース エンジンの適切なインスタンスに接続した後、 オブジェクト エクスプローラーでサーバー ツリーを展開します。

  2. [データベース] を展開して SQLTestDB を右クリックし、[タスク] をポイントしてから [バックアップ] を選択します。

  3. [OK] を選択します。

  4. バックアップが正常に完了したら、[ OK] を 選択して SQL Server Management Studio ダイアログを閉じます。

バックアップを作成する手順を示すスクリーンショット。

B. 既定以外の場所へのディスクへの完全バックアップ

この例では、 SQLTestDB データベースは、選択した場所のディスクにバックアップされます。

  1. SQL Server データベース エンジンの適切なインスタンスに接続した後、 オブジェクト エクスプローラーでサーバー ツリーを展開します。

  2. [データベース] を展開して SQLTestDB を右クリックし、[タスク] をポイントしてから [バックアップ] を選択します。

  3. [宛先] セクションの [全般] ページで、[バックアップ先] の一覧で [ディスク] を選択します。

  4. 既存のすべてのバックアップ ファイル が削除 されるまで、[削除] を選択します。

  5. [] を選択し、[] を追加します。 [ バックアップ先の選択] ダイアログが開きます。

  6. [ファイル名] ボックスに、有効なパスと ファイル名 を入力します。 拡張子として.bakを使用して、ファイルの分類を簡略化します。

  7. [OK] を選択してから、もう一度 [OK] を選択してバックアップを開始します。

  8. バックアップが正常に完了したら、[ OK] を 選択して SQL Server Management Studio ダイアログを閉じます。

バックアップの場所を追加または削除する方法を示すスクリーンショット。

C: 暗号化されたバックアップの作成

この例では、 SQLTestDB データベースは、既定のバックアップ場所への暗号化を使用してバックアップされます。

  1. SQL Server データベース エンジンの適切なインスタンスに接続した後、 オブジェクト エクスプローラーでサーバー ツリーを展開します。

  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. [OK] を選択します。

暗号化されたバックアップを作成する手順を示すスクリーンショット。

D. Azure BLOB Storage へバックアップする

この例では、Azure Blob Storage への SQLTestDB の完全なデータベース バックアップを作成します。 この例は、BLOB コンテナーを持つストレージ アカウントが既にあることを前提として記述されています。 この例では、Shared Access Signature を作成します。 コンテナーに既存の Shared Access Signature がある場合、この例は失敗します。

ストレージ アカウントに Blob Storage コンテナーがない場合は、先に進む前に作成します。 汎用ストレージ アカウントの作成に関する記事と「コンテナーを作成する」を参照してください。

  1. SQL Server データベース エンジンの適切なインスタンスに接続した後、 オブジェクト エクスプローラーでサーバー ツリーを展開します。

  2. [データベース] を展開して SQLTestDB を右クリックし、[タスク] をポイントしてから [バックアップ] を選択します。

  3. [全般] ページの [宛先] セクションで、[バックアップ先] ボックスの一覧で [URL] を選択します。

  4. [] を選択し、[] を追加します。 [ バックアップ先の選択] ダイアログが開きます。

  5. SQL Server Management Studio で使用する Azure ストレージ コンテナーを以前に登録してある場合は、それを選択します。 それ以外の場合は、[新しいコンテナー] を選択して新しいコンテナーを登録します。

  6. [ Microsoft サブスクリプションへの接続 ] ダイアログで、アカウントにサインインします。

  7. [ ストレージ アカウントの選択 ] ボックスで、ストレージ アカウントを選択します。

  8. [ BLOB コンテナーの選択 ] ボックスで、BLOB コンテナーを選択します。

  9. [ 共有アクセス ポリシーの有効期限 ] カレンダー ボックスで、この例で作成する共有アクセス ポリシーの有効期限を選択します。

  10. SQL Server Management Studio で [資格情報の作成] を選択して、共有アクセス署名と資格情報を生成します。

  11. [ OK] を 選択し、[ Microsoft サブスクリプションへの接続 ] ダイアログを閉じます。

  12. 必要な場合は、[ バックアップ ファイル ] ボックスで、バックアップ ファイルの名前を変更します。

  13. [ OK] を 選択して、[ バックアップ先の選択 ] ダイアログを閉じます。

  14. [OK] を選択してバックアップを開始します。

  15. バックアップが正常に完了したら、[ OK] を 選択して SQL Server Management Studio ダイアログを閉じます。

マネージド 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 オプションを使用します。

{ DISK | TAPE } =physical_backup_device_name

詳細については、「バックアップ デバイス (SQL Server)」を参照してください。
WITH <with_options> [ , ...o ] 1 つまたは複数のオプション o を指定するために使用します。 基本的な WITH オプションの一部に関する情報を次に示します。

必要に応じて、1 つ以上の WITH オプションを指定します。 ここでは、いくつかの基本的な WITH オプションについて説明します。 すべての WITH オプションの詳細については、 BACKUP を参照してください。

基本的なバックアップ セット WITH オプション:

  • { COMPRESSION |}をNO_COMPRESSIONします。 SQL Server 2008 (10.0.x) Enterprise 以降でのみ、 バックアップの圧縮 を実行するかどうかを指定し、サーバー レベルの既定値をオーバーライドします。
  • 暗号化 (アルゴリズム、サーバー証明書 |非対称キー)。 SQL Server 2014 以降でのみ、使用する暗号化アルゴリズムと、暗号化をセキュリティで保護するために使用する証明書または非対称キーを指定します。
  • DESCRIPTION = { 'text' |}を@text_variableします。 バックアップ セットを説明する自由形式のテキストを指定します。 文字列の長さは最大 255 文字です。
  • NAME = { backup_set_name | @backup_set_name_var }。 バックアップ セットの名前を指定します。 名前の長さは最大 128 文字です。 NAMEが指定されていない場合は空白です。

既定では、BACKUP ではバックアップが既存のメディア セットに追加されて、既存のバックアップ セットが保持されます。 この構成を明示的に指定するには、 NOINIT オプションを使用します。 既存のバックアップ セットへの追加の詳細については、「 メディア セット、メディア ファミリ、およびバックアップ セット (SQL Server)」を参照してください。

バックアップ メディアをフォーマットするには、 FORMAT オプションを使用します。

FORMAT [ , MEDIANAME = { media_name | @media_name_variable } ] [ , MEDIADESCRIPTION = { text | @text_variable } ]

メディアを初めて使用する場合、または既存のすべてのデータを上書きする場合は、 FORMAT 句を使用します。 必要に応じて、新しいメディアにメディア名と説明を割り当てます。

重要

FORMAT ステートメントの BACKUP 句を使用する場合は、このオプションを使用すると、バックアップ メディアに以前に格納されていたバックアップが破棄されるため、注意が必要です。

次の例では、次の 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 NOT NULL DEFAULT GETDATE()
)
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
EXEC 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 コマンドレットを使用します。 データベースの完全バックアップを明示的に指定するには、既定値の -BackupActionDatabase パラメーターを指定します。 このパラメーターは、データベースの完全バックアップでは省略可能です。

これらの例では、SqlServer モジュールが必要です。 インストールされているかどうかを確認するには、 Get-Module -Name SqlServerを実行します。 インストールするには、PowerShell の管理者セッションで Install-Module -Name SqlServer を実行します。

詳細については、「 SQL Server PowerShell プロバイダー」を参照してください。

重要

SQL Server Management Studio (SSMS) 内から PowerShell ウィンドウを開いて SQL Server のインスタンスに接続する場合は、SSMS の資格情報が PowerShell と SQL Server インスタンス間の接続を確立するために自動的に使用されるため、資格情報の部分を省略できます。

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