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

FILESTREAM対応データベースのバックアップと復元

    以前の記事では、SQLサーバーインスタンスでFILESTREAM機能を作成および構成する方法について説明しました。さらに、FILESTREAM列を持ち、ホットでデータを挿入および削除するテーブルを作成する方法を示しました。

    この記事では、FILESTREAM対応のデータベースをバックアップおよび復元する方法について説明します。さらに、データベースをオフラインにせずにFILESTREAMファイルグループを復元する方法を示します。

    以前の記事で説明したように、SQL ServerインスタンスでFILESTREAMを有効にするには、FILESTREAMファイルグループを持つFILESTREAMコンテナーを作成する必要があります。 FILESTREAM対応データベースをバックアップすると、FILESTREAMファイルグループのバックアップがバックアップセットに含まれます。データベースを復元すると、SQLServerはデータベースとFILESTREAMコンテナおよびその中のファイルを復元します。

    FILESTREAM対応のデータベースをバックアップすると、次のようになります。

    • データベースで利用可能なすべてのデータファイルをバックアップします。
    • FILESTREAMファイルグループとその中のファイルをバックアップします。
    • バックアップTログ。

    SQL Serverは、FILESTREAMコンテナのみのバックアップを取る柔軟性を提供します。 FILESTREAMコンテナ内のファイルが破損した場合、データベース全体をリカバリする必要はありません。 FILESTREAMファイルグループのみを復元できます。

    このデモでは、次のことを行います。

    • FSデータベースの完全バックアップを作成し、FILESTREAMコンテナのみをバックアップする方法を説明します。
    • FILESTREAM対応のデータベースを復元する方法を説明します。
    • FILESTREAMコンテナをオンラインおよびオフラインで復元する方法。注:SQLServerEnterpriseエディションとDeveloperエディションはオンライン復元をサポートしています。

    デモのセットアップ:

    このデモでは、以下を使用します:

    1. データベース :SQL Server 2017
    2. ソフトウェア :SQLServer管理スタジオ。

    FILESTREAM対応データベースのバックアップ

    バックアッププロセスを示すために、 FileStream_Demoという名前のFILESTREAM対応データベースを作成しました。 。 Document_Contentという名前のFILESTREAMテーブルがあります 。

    データベースの完全バックアップ

    FILESTREAM対応データベースのバックアップは簡単なプロセスです。完全バックアップを生成するには、次のT-SQLスクリプトを実行します。

    BACKUP DATABASE [FileStream_Demo] TO  DISK = N'E:\Backups\FileStream_Demo.bak'
     WITH NOFORMAT, NOINIT,  NAME = N'FileStream_Demo-Full Database Backup', 
     SKIP, NOREWIND, NOUNLOAD,  STATS = 10
    GO
    >

    上記のバックアップコマンドの実行によって生成されたバックアップログは次のとおりです。

    /*Begin Backup DataFile*/
    
    Processed 568 pages for database 'FileStream_Demo', file 'FileStream_Demo' on file 1.
    
    /*Begin backup of FILESTREAM container*/
    
    10 percent processed.
    20 percent processed.
    30 percent processed.
    40 percent processed.
    50 percent processed.
    60 percent processed.
    70 percent processed.
    80 percent processed.
    90 percent processed.
    Processed 111106 pages for database 'FileStream_Demo', file 'Dummy-Documents' on file 1.
    
    /*Begin backup of FILESTREAM container*/
    
    Processed 4 pages for database 'FileStream_Demo', file 'FileStream_Demo_log' on file 1.
    100 percent processed.
    
    BACKUP DATABASE successfully processed 111677 pages in 18.410 seconds (47.391 MB/sec).

    記事の冒頭で述べたように、最初にSQLサーバーがプライマリデータファイル、次にセカンダリデータファイル、最後にトランザクションログのバックアップを取ります。バックアップログでわかるように、最初にSQLサーバーがプライマリデータファイルをバックアップし、次にFILESTREAMファイルグループとそれに関連付けられたデータ、最後にトランザクションログをバックアップします。

    FILESTREAMコンテナのバックアップ

    記事の冒頭で述べたように、FILESTREAMコンテナのバックアップを生成することもできます。 FILESTREAMコンテナのバックアップを作成するには、次のT-SQLスクリプトを実行します。

    BACKUP DATABASE [FileStream_Demo] FILEGROUP = N'Dummy-Documents' TO  DISK = N'E:\Backups\FS_Container.bak' 
    WITH NOFORMAT, NOINIT,  NAME = N'FileStream_Demo-Full Database Backup',
    SKIP, NOREWIND, NOUNLOAD,  STATS = 10
    GO

    FILESTREAM対応データベースの復元

    FILESTREAMデータベースを復元すると、SQLはFileStreamコンテナとFILESTREAMコンテナ内のすべてのファイルを復元します。

    データベースを復元するには、次のタスクを実行します。

    1. SSMSで、データベースを右クリックし、[データベースの復元]を選択します 。
    2. [復元]ダイアログボックスで、[デバイス]を選択します 参照をクリックします 。別のダイアログボックスが開きます。ダイアログボックスで、[追加]をクリックします。 。
    3. バックアップファイルの検索 ダイアログボックスで、ディレクトリ構造をナビゲートし、適切なバックアップをクリックして、[ OK]をクリックします。 。
    4. バックアップ情報が復元するバックアップセットに読み込まれると グリッドビューで、[ OK]をクリックします プロセスの復元を開始します。

    または、次のコマンドを実行してデータベースを復元することもできます。

    USE [master]
    RESTORE DATABASE [FileStream_Demo] FROM  DISK = N'E:\Backups\FileStream_Demo.bak' WITH  FILE = 1,  NOUNLOAD,  STATS = 5
    GO

    FILESTREAM対応のデータベースリカバリシナリオ

    FILESTREAMファイルグループは、ファイルグループの復元プロセスと同様のプロセスを復元します。

    復元シナリオを生成するには、 FileStream-Demoという名前のFILESTREAM対応データベースを作成します。 。データベースには、 Document_Contentという名前のFILESTREAMテーブルがあります 。 Document_Contentにランダムなデータとファイルを挿入します テーブル。

    次のクエリを実行して、テーブルに挿入されたファイルの詳細を入力します。

    SELECT  
    RootDirectory,  
    FileName,  
    FileAttribute,   
    FileCreateDate,   
    FileSize,  
    FileStreamCol.PathName() AS FilePath FROM Document_Content  order by filesize desc

    出力は次のとおりです。

    以下は、FILESTREAMコンテナのスクリーンショットです。

    まず、データベースの完全バックアップを生成します。このためには、次のコマンドを実行します。

    BACKUP DATABASE [FileStream_Demo] TO DISK = N'E:\Backups\Full_FileStream_Demo_20180810.bak' WITH NOFORMAT, NOINIT,NAME = N'FileStream_Demo-Full Database Backup'

    次に、 Dummy-Documentという名前のFILESTREAMファイルグループのFILEGROUPバックアップを生成します。 次のコマンドを実行します:

    BACKUP DATABASE [FileStream_Demo] FILEGROUP = N'Dummy-Documents' TO  DISK = N'E:\Backups\FileStream_Filegroup_Demo.bak' 
    WITH NOFORMAT, NOINIT, NAME = N'FileStream_Demo-Full FILEGROUP Backup'

    FILESTREAMの破損を生成するには、FILESTREAMコンテナからいくつかのファイルを削除します。これらのファイルが削除されたら、次のコマンドを実行して「Document_Content」からデータを取得してみてください。

    Use FileStream_Demo
    Go
    select * from Document_Content

    次のエラーが発生します:

    Msg 233, Level 20, State 0, Line 122
    A transport-level error has occurred when receiving results from the server. (provider: Shared Memory Provider, 
    error: 0 - No process is on the other end of the pipe.)

    次のスクリーンショットを参照してください:

    次に、このエラーを修正するためにFILESTREAMコンテナを復元する必要があります。完全バックアップとダミードキュメントのバックアップを生成しました ファイルグループ。

    FILESTREAMファイルグループを復元することにより、FILESTREAMコンテナ全体を復元できます。表示します:

    1. FILESTREAMファイルグループのオフライン復元。
    2. FILESTREAMファイルグループのオンライン復元。

    FILESTREAMコンテナファイルグループのオフライン復元

    FILESTREAMコンテナからファイルを削除したので、データベース全体を復元する必要はありません。したがって、データベース全体を復元する代わりに、唯一のファイルグループを復元します。これを行うには、まず、Tail-Logバックアップを生成して、バックアップされなかったデータ変更をキャプチャします。テールログバックアップは、NORECOVERYオプションを使用して作成し、データベースを復元状態にする必要があります。これにより、データベースにバックアップを適用できるようになります。これを行うには、次のクエリを実行します。

    backup log [FileStream_Demo] to disk ='E:\Backups\FileStream_Filegroup_Demo_Log_1.trn' With NORECOVERY

    テールログバックアップが生成されると、データベースは復元モードになります。これで、NORECOVERYオプションを使用してデータベースにFILEGROUPバックアップを適用できます。このためには、次のコマンドを実行します。

    use master
    go
    RESTORE DATABASE [FileStream_Demo] FILE='Dummy-Documents' FROM DISK = N'E:\Backups\FileStream_Filegroup_Demo.bak' WITH NORECOVERY,REPLACE;

    次に、RECOVERYオプションを使用してテールログバックアップを適用します。このためには、次のコマンドを実行します。

    RESTORE LOG [FileStream_Demo] FROM  DISK = N'E:\Backups\FileStream_Filegroup_Demo_Log_1.trn'

    バックアップが復元されると、データベースがオンラインになり、すべてのファイルがFILESTREAMコンテナに復元されます。確認するには、次のコマンドを実行します。

    SELECT  
    RootDirectory,  
    FileName,  
    FileAttribute,   
    FileCreateDate,   
    FileSize,  
    FileStreamCol.PathName() AS FilePath FROM Document_Content  order by filesize desc

    上記のクエリの出力は次のとおりです。

    FILESTREAMファイルグループのオンライン復元

    SQL Server Enterprise Editionを使用すると、データベースがオンラインのときにバックアップを復元できます。たとえば、セカンダリファイルグループFG-1のファイルF1が破損している場合、データベースがオンラインのままでファイルF1を復元できます。オフライン復元とオンライン復元の復元シーケンスは同じです。

    上記のように、FILESTREAMファイルグループのオンライン復元を実行するには、ダミードキュメントを作成します。 データファイルをオフラインにします。このためには、次のコマンドを実行します。

    use master
    go
    Alter database [FileStream_Demo] MODIFY FILE (NAME='Dummy-Documents',OFFLINE)

    ファイルのステータスを確認するには、次のクエリを実行します。

    Use [FileStream_Demo]
    Go
    select File_id, type_desc,name, physical_name,state_desc,size from FileStream_Demo.sys.database_files

    出力は次のとおりです。

    すでにダミードキュメントをバックアップしています ファイルグループ。したがって、データファイルがオフラインになったら、NORECOVERYオプションを使用してデータベースのFILEGROUPバックアップを復元します。このためには、次のコマンドを実行します。

    use master
    go
    RESTORE DATABASE [FileStream_Demo] FILE='Dummy-Documents' FROM DISK = N'E:\Backups\FileStream_Filegroup_Demo.bak' WITH NORECOVERY,REPLACE;

    次に、データベースのログバックアップを取り、データファイルがオフラインになったポイントがキャプチャされていることを確認します。このためには、次のコマンドを実行します。

    backup log [FileStream_Demo] to disk ='E:\Backups\FileStream_Filegroup_Demo_Log1.trn'

    次のコマンドを実行して、最後のT-Logバックアップを復元します。

    use master
    go
    RESTORE LOG [FileStream_Demo] FROM  DISK = N'E:\Backups\FileStream_Filegroup_Demo_Log1.trn'

    ログバックアップが復元されると、FILESTREAMコンテナ内のすべてのファイルが復元され、ファイルグループがオンラインになります。これを確認するには、次のクエリを実行します。

    Use [FileStream_Demo]
    Go
    select File_id, type_desc,name, physical_name,state_desc,size from FileStream_Demo.sys.database_files

    出力は次のとおりです。

    バックアップが復元されると、データベースがオンラインになり、すべてのファイルがFILESTREAMコンテナに復元されます。確認するには、次のコマンドを実行します。

    SELECT  
    RootDirectory,  
    FileName,  
    FileAttribute,   
    FileCreateDate,   
    FileSize,  
    FileStreamCol.PathName() AS FilePath FROM Document_Content  order by filesize desc

    出力は次のとおりです。

    概要

    この記事では、次のことを説明しました:

    1. FILESTREAM対応のデータベースとFILESTREAMファイルグループをバックアップおよび復元する方法。
    2. FILESTREAMファイルグループをオンラインおよびオフラインで復元する方法。

    1. Cassandraクラスターの移行

    2. Oracle DBにペルシア文字を挿入すると、疑問符が表示されます

    3. シーケンスとアイデンティティ

    4. MariaDB JSON_KEYS()の説明