sql >> データベース >  >> RDS >> Sqlserver

SQL Serverデータベースの復元(T-SQL)

    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の復元と回復の概要もお読みください。


    1. pg_table_size、pg_relation_size、pg_total_relation_sizeの違いは何ですか? (PostgreSQL)

    2. SQL、数値の補助テーブル

    3. DEFERRABLE INITIALLY IMMEDIATEで定義された制約はまだ延期されていますか?

    4. Oracleプロシージャでテーブルを切り捨てる方法は?