SQL Server Management Studio(SSMS)またはその他のGUIを使用してデータベースを管理している場合は、「ポイントアンドクリック」を使用してデータベースをバックアップおよび復元することに慣れている可能性があります。
通常、これにはデータベースを右クリックして復元を選択することが含まれます または同様の方法で、プロンプトに従います(たとえば、Azure Data Studioでデータベースを復元する場合)。
ただし、T-SQLでそれを行う必要がある場合は、RESTORE DATABASE
を使用できます。 ステートメント。
例
基本的な例は次のとおりです。
RESTORE DATABASE World
FROM DISK = N'/var/opt/mssql/Bak/World.bak'
WITH FILE = 1;
これは、可能な限り簡単です。 RESTORE DATABASE
ステートメントの構文は非常に複雑ですが(ほとんどのT-SQLと同様)、このステートメントは基本的なデフォルトの復元操作には十分です。
この場合、 Worldというデータベースを復元しました .bakファイルから。 FROM DISK
を使用しました .bakファイルからのものであることを指定し、そのファイルへのフルパスを指定しました。ここでの他のオプションには、FROM TAPE
が含まれます およびFROM URL
。
WITH FILE = 1
も含めました ここでは、とにかくそれがデフォルト値です。この句は、使用するバックアップセットファイル番号を指定します。つまり、ファイルで使用するバックアップセット(ファイルには複数のバックアップセットを含めることができます)。
バックアップセットのリストを取得する
RESTORE HEADERONLY
を使用できます ファイル内のバックアップセットのリストを取得します。具体的には、すべてのバックアップセットのバックアップヘッダー情報の結果セットを返します。
例:
RESTORE HEADERONLY
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak';
これは多くの列を返すので、ここではそれらすべてを提示しません。
列の1つは位置と呼ばれます 。これは、FILE =
で使用されます データベースを復元するときのオプション。
より多くのオプションを使用した例
その他のオプションの例を次に示します。
RESTORE DATABASE [WideWorldImporters]
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak'
WITH FILE = 1,
MOVE N'WWI_Primary' TO N'/var/opt/mssql/data/WideWorldImporters.mdf',
MOVE N'WWI_UserData' TO N'/var/opt/mssql/data/WideWorldImporters_UserData.ndf',
MOVE N'WWI_Log' TO N'/var/opt/mssql/data/WideWorldImporters.ldf',
MOVE N'WWI_InMemory_Data_1' TO N'/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1',
NOUNLOAD,
STATS = 5;
これは、実際には、GUIインターフェイスを使用して復元操作を開始したときにAzureDataStudioが生成したスクリプトです。これを行うと、Azure Data Studioで、復元をすぐに実行するか、後で実行できるT-SQLコードを使用してスクリプトを生成するかを選択できます。
この場合、スクリプトはMOVE
を使用します バックアップファイル内の各論理ファイル名を、オペレーティングシステム上の指定された物理ファイルの場所に移動するための引数。この場合、.bakファイルは別の物理ファイルの場所を使用していた(そしてWindowsファイルパスを使用していた)ので、これは私のシステムに合うように変更する必要がありました。この情報を取得する方法の説明については、以下を参照してください。
NOUNLOAD
実際にはテープオプションです。復元が完了すると、テープがドライブからアンロードされないようにします。テープから復元していなかったため、このオプションは無視されました。
STATS
引数を使用すると、復元操作の進行状況を測定できます。これは、別のパーセンテージが完了するたびにメッセージが表示されることを指定します。ここにパーセンテージ値を含めない場合、SQL Serverは10%が完了するたびにメッセージを表示します。
ファイルリストのみを復元
MOVE
を使用する以前のステートメントのようなステートメントを作成したい場合 バックアップファイル内の各論理ファイル名をオペレーティングシステム上の指定された物理ファイルの場所に移動する引数を指定すると、RESTORE FILELISTONLY
を使用できます。 論理ファイル名(およびそれ以上)を返します。
RESTORE FILELISTONLY
バックアップセットに含まれるデータベースとログファイルのリストを含む結果セットを返します。
前の例と同じWideWorldImporters.bakファイルを使用した例を次に示します。
RESTORE FILELISTONLY
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak';
結果(垂直出力を使用):
-[ RECORD 1 ]------------------------- LogicalName | WWI_Primary PhysicalName | D:\Data\WideWorldImporters.mdf Type | D FileGroupName | PRIMARY Size | 1073741824 MaxSize | 35184372080640 FileId | 1 CreateLSN | 0 DropLSN | 0 UniqueId | 8d30f4f9-a463-404f-805a-9bd1c634b66b ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 11993088 SourceBlockSize | 512 FileGroupId | 1 LogGroupGUID | NULL DifferentialBaseLSN | 626000002440500037 DifferentialBaseGUID | 0c5a4141-4a09-4b31-8c83-217870278065 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL -[ RECORD 2 ]------------------------- LogicalName | WWI_UserData PhysicalName | D:\Data\WideWorldImporters_UserData.ndf Type | D FileGroupName | USERDATA Size | 2147483648 MaxSize | 35184372080640 FileId | 3 CreateLSN | 37000000095200001 DropLSN | 0 UniqueId | 28d406e0-78ff-4400-9a4b-3a05d136b1f3 ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 434962432 SourceBlockSize | 512 FileGroupId | 2 LogGroupGUID | NULL DifferentialBaseLSN | 626000002440500037 DifferentialBaseGUID | 0c5a4141-4a09-4b31-8c83-217870278065 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL -[ RECORD 3 ]------------------------- LogicalName | WWI_Log PhysicalName | E:\Log\WideWorldImporters.ldf Type | L FileGroupName | NULL Size | 104857600 MaxSize | 2199023255552 FileId | 2 CreateLSN | 0 DropLSN | 0 UniqueId | 6ac6807e-8774-415b-8efc-e8c569b0855e ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 0 SourceBlockSize | 512 FileGroupId | 0 LogGroupGUID | NULL DifferentialBaseLSN | 0 DifferentialBaseGUID | 00000000-0000-0000-0000-000000000000 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL -[ RECORD 4 ]------------------------- LogicalName | WWI_InMemory_Data_1 PhysicalName | D:\Data\WideWorldImporters_InMemory_Data_1 Type | S FileGroupName | WWI_InMemory_Data Size | 0 MaxSize | 0 FileId | 65537 CreateLSN | 624000000336200003 DropLSN | 0 UniqueId | f65663c8-a250-433e-bbe6-e13a5599a607 ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 980090880 SourceBlockSize | 512 FileGroupId | 3 LogGroupGUID | NULL DifferentialBaseLSN | 626000002440500037 DifferentialBaseGUID | 0c5a4141-4a09-4b31-8c83-217870278065 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL
したがって、このファイルの物理的な場所がWindowsファイルパスを使用していることがわかります。たとえば、最初のもの(論理名は WWI_Primary ) )の物理的な場所は D:\ Data \ WideWorldImporters.mdf 。
私の場合、データベースをLinux用のSQL Server(MacのDockerコンテナーで実行)に復元したため、この.bakファイルをシステムに復元するときに、システムに合わせて物理パスを変更する必要がありました。
もちろん、必要に応じて、ファイルをWindowsマシンに復元するときにファイルパスを変更することもできます。
完全な構文
要件によっては、データベースのバックアップと復元が非常に複雑になる場合があります。 RESTORE
ステートメントは、さまざまなシナリオをカバーするように設計されています。特に、次の復元シナリオについて説明します。
- データベース全体のバックアップからデータベース全体を復元します(完全な復元)。
- データベースの一部を復元します(部分的な復元)。
- 特定のファイルまたはファイルグループをデータベースに復元します(ファイルの復元)。
- 特定のページをデータベースに復元します(ページの復元)。
- トランザクションログをデータベースに復元します(トランザクションログの復元)。
- データベースを、データベーススナップショットによってキャプチャされた時点に戻します。
完全な構文には多くのオプションが含まれているため、要件がこの記事の範囲を超える場合は、公式のRESTORE
についてMicrosoftのドキュメントを確認してください。 構文と説明。
データベースを復元するためのさまざまな考慮事項とアプローチの概要については、Microsoftの復元と回復の概要もお読みください。