SQL Server 2008/2012フルデータベースバックアップ+差分バックアップ+トランザクションログバックアップデータベースフルリストア(一)

11671 ワード

文書ディレクトリ
  • 還元案
  • データベース・レベル(データベースの完全なリストア)
  • 異なるリカバリモードによってサポートされる様々なリストアスキーム
  • データベース完全リストア
  • フル・データベース・バックアップ+差分バックアップ+トランザクション・ログ・バックアップの例
  • 参考資料
  • リストアスキーム
    ≪データベース・レベル|Database Level|emdw≫(データベースの完全なリストア)
    データベース全体をリストアおよびリカバリします.データベースは、リストアおよびリカバリ操作中にオフラインになります.SQL SERVERでは、ユーザーが単一のテーブルをバックアップまたはリストアすることはできません.リストア・スキームとは、1つ以上のバックアップからデータをリストアし、データベースをリカバリするプロセスです.
    異なるリカバリ・モードでサポートされるさまざまなリストア・スキーム
    単純リカバリモード
    これは基本的なリストアポリシーです.データベースの完全なリストアは、完全なデータベースバックアップの単純なリストアとリカバリに関連する可能性があります.また、完全なデータベース・リストアには、完全なデータベース・バックアップのリストア、差分バックアップのリストアおよびリカバリが含まれます.
    フル/大容量ログ・リカバリ・モード
    これは基本的なリストア・ポリシーです.データベースの完全なリストアには、完全なデータベース・バックアップまたは差分バックアップのリストア、および後続のすべてのログ・バックアップ(順序別)が含まれます.前回のログ・バックアップをリストアし、データベースの完全なリストアを完了します.
    データベースを復元する前に、SQL Serverデータベースエンジンは、データベース全体の論理的一貫性を保証します.たとえば、ファイルをリストアした後、ファイルをリカバリしてオンラインにするには、ファイル内のトランザクションを十分に長くロールアップするために、完全なログ・ファイル・バックアップをリカバリする必要があります.
    データベースの完全なリストア
    単純な場合、リストア操作には、完全なデータベースバックアップ、差分データベースバックアップ、および後続のログバックアップが必要です.
    データベースを障害点にリストアする手順
  • アクティブなトランザクション・ログ(ログの「末尾」)
  • を最初にバックアップ
  • バックアップの作成順に最新のフル・データベース・バックアップ、最新の差分バックアップ(ある場合)、およびすべての後続ログ・バックアップ
  • をリストアします.
    ソース・データベースが単純モードの場合、対応するログ・バックアップはありません.リカバリ作業は、完全なデータベース・バックアップと最後の差分バックアップのリストアに限られます.
    データベースに災害が発生した後、特定のリカバリポイントにリカバリする方法
  • シーン
  • 重要なデータテーブルが昼12時01分に誤って削除され、どのようにして12時の状態に回復しますか?
  • ソリューションは、指定されたリカバリポイントにログファイルをリカバリすることによって実現される.次のいくつかの前提条件があり、災害が発生する前に、データベースは次のすべての条件を満たさなければなりません.
  • データベースのリカバリ・モードは、フル・リカバリ・モード
  • である必要があります.
  • 災害が発生する前に、データベースは
  • の完全なデータベースバックアップを行ったことがあります.
  • 前回のフル・データベース・バックアップ後、ログ・バックアップを行った場合、これらのログ・バックアップはすべて見つかりました.

  • 上記の3つの要件を満たすデータベースでは、バックアップ・リカバリ・メソッドを使用して、データベースをフル・バックアップ後の任意の時点にリカバリできます.
    データベースを障害点にリストアするための基本的な手順は、次のとおりです.
  • アクティブなトランザクション・ログ(ログの末尾とも呼ばれる)をバックアップします.この操作により、最終ログバックアップが作成されます.アクティブなトランザクション・ログが災害発生後に使用できなくなると、ログ・セクションのすべてのトランザクションが失われます.
  • 最新のフル・データベース・バックアップをリストアし、トランザクション・リカバリを行わない
  • 差分バックアップが存在する場合、トランザクション・リカバリを行わずに最新の差分バックアップをリストアします.
  • リストアバックアップ後に作成する最初のトランザクションログバックアップから、NORECOVERを使用してログ
  • を順次リストアする.
  • データベースをある時点(RESTORE DATABASE database_name with stopat='???', RECOVERY)
  • にリカバリ
    フル・データベース・バックアップ+差分バックアップ+トランザクション・ログ・バックアップの例
    サンプル前にテーブルmsdb..backupset 2018/09/28をクリアする前の記録を準備し、時間に注意する
    USE msdb;  
    GO  
    EXEC sp_delete_backuphistory @oldest_date = '09/28/2018';  
    
    AdventureWorksDW2018ライブラリのリカバリ・モードをフル・リカバリ・モードに変更します.そうしないと、4208エラーが発生します.
    USE master ;  
    ALTER DATABASE AdventureWorksDW2018 SET RECOVERY FULL ;
    
    --    AdventureWorksDW2018                。
    use msdb;
    select distinct s.first_lsn, s.last_lsn,
                    s.database_backup_lsn, s.backup_start_date, s.backup_finish_date,
    				s.type, y.physical_device_name 
      from msdb..backupset s inner join 
           msdb..backupfile f on f.backup_set_id = s.backup_set_id inner join
    	   msdb..backupmediaset m on s.media_set_id = m.media_set_id inner join
    	   msdb..backupmediafamily y on m.media_set_id = y.media_set_id
     where (s.database_name = 'AdventureWorksDW2018')
     order by s.backup_finish_date desc;
    

    操作内容の例AdventureWorksDW2018データベースの末尾ログ・バックアップが作成され、より古い完全なデータベース・バックアップとログ・バックアップがリストアされ、最後に末尾ログ・バックアップがリストアされます.トランザクション・リカバリ・アクションは、データベースにアクセスできない最後のログ・リカバリ・ステップで完了します.
  • データベースのフルバックアップ
    BACKUP DATABASE [AdventureWorksDW2018] TO DISK='F:\backup\AdvFull1.bak'
    
  • データベースを操作し、ログバックアップ
      --drop table t2;
      use AdventureWorksDW2018;
      create table t2(number int, name nvarchar(50));
      insert into t2 values(1, 'a');
      go 
      BACKUP LOG [AdventureWorksDW2018] TO DISK='F:\backup\AdvLog2.bak'
    
  • を行います.
  • データベースに対する操作
      use AdventureWorksDW2018;
      insert into t2 values(2, 'b');
      go
    
  • この時点で災害が発生し、最終ログバックアップ
    use master
    backup log [AdventureWorksDW2018] to disk = 'F:\backup\AdvLogTail.bak' with norecovery;
    go
    
  • を作成しようとした.
  • AdventureWorksDW2018データベース
    drop database [AdventureWorksDW2018];
    
  • を削除する.
  • バックアップから1つのフルバックアップ
    restore database [AdventureWorksDW2018] from disk = 'F:\backup\AdvFull1.bak' with norecovery;
    
  • をリカバリ
  • バックアップから通常のログバックアップをリストア
    restore log [AdventureWorksDW2018] from DISK='F:\backup\AdvLog2.bak' with norecovery;
    
  • STOPATでテールログファイル
    restore log [AdventureWorksDW2018] from DISK='F:\backup\AdvLogTail.bak' with stopat = '2018-09-27 16:23:00.000', recovery;
    go
    
  • を復元する
  • データ整合性の検証
    use AdventureWorksDW2018
    select * from t2;
    
  • シナリオの欠点は、データベースの完全なバックアップ・リカバリを1回行うことです.これは、時間的にも空間的にもコストがかかります.
  • SQL Serverでは、データベース全体を再構築するのに時間がかかります.このプロセスでは、データベースにアクセスできません.リビルド時間の長さは、ハードディスク(HDD)の速度によって決まります.1つのTBのデータベースが完全なリカバリを行うには、1日近くかかる可能性があります.この待機時間は多くのシステムでは受け入れられません.
  • 空間の完全なバックアップのサイズとデータベースが使用している空間のサイズはほぼ一致しています.バックアップをハードディスク(HDD)に配置するには、ハードディスク(HDD)が2倍のストレージスペースを提供し、データベースを配置し、バックアップを配置する必要があります.

  • 参考資料
    <>