バックアップ ファイルを準備する

このページでは、SQL Server データベースを Cloud SQL for SQL Server に移行するために必要なバックアップ ファイルの作成方法について説明します。

要件と制限事項

移行に使用するバックアップ ファイルには、次の要件と制限が適用されます。

  • すべてのバックアップ ファイルの名前は、それぞれの命名規則に従っている必要があります。

  • バックアップ ファイルの最大サイズは 5 TB です。

  • データベース サイズが 5 TB を超える場合は、フル バックアップ ファイルまたは差分バックアップ ファイルを小さなファイルにストライピングできます。各ストライプの最大サイズは 5 TB です。

  • 移行には、暗号化されたバックアップ ファイルとトランザクション ログファイルを使用できます。暗号化されたバックアップ ファイルを使用する場合は、移行に含まれる特定のデータベースに使用するすべてのバックアップ ファイル(フル バックアップ、差分バックアップ、トランザクション ログ)を暗号化する必要があります。 暗号化されたバックアップを使用するをご覧ください。

  • Database Migration Service は、 SQL Server master データベースを移行しません。

  • 移行元の SQL Server インスタンスでシンプル復元モデルを使用できない。復旧モデルの詳細については、Microsoft のドキュメントの復旧モデル(SQL Server)をご覧ください。

命名規則

このセクションでは、完全バックアップ、差分バックアップ、トランザクション ログのバックアップ ファイルのファイル名の要件について説明します。

オンプレミス SQL Server インスタンスのバックアップ ファイルの命名規則

フル バックアップ ファイル名

完全バックアップ ファイルの命名規則は、単一のバックアップ ファイルを使用するか、複数のストライプに分割するかによって異なります。どちらのシナリオでも、Database Migration Service では、フル バックアップを行ったおおよその時刻を表すエポック タイムスタンプ(秒単位の UNIX タイムスタンプ表記)を含める必要があります。

  • 完全バックアップが単一ファイルの場合は、ファイル名に db_name.epoch.bak 形式を使用する必要があります。ここで、

    • db_name はデータベースの名前です。
    • epoch は秒単位の Unix タイムスタンプです。
    • .bak はファイル拡張子です。

    有効な例:

    • my-business-database.1712649600.bak
    • my-other-database.1712649600.bak
  • 完全バックアップを個別のストライプに分割する場合、各ストライプには任意の名前を使用できますが、名前が Unix タイムスタンプ(秒単位)の Cloud Storage フォルダにアップロードする必要があります。

    Cloud Storage bucket root/
    |- my-business-database/
    |  |- full/
    |  |  |- 1712649600/
    |  |  |  |- mystripe-full_backup_file.bak
    |  |  |  |- otherStripefull-bkp.bak
    |  |- diff/
    |  |  |- ...
    |  |- log/
    |  |  |- ...
    |- my-other-database/
    |  |- full/
    |  |  |- 1715250742/
    |  |  |  |- cool-stripe-file.bak
    |  |  |  |- secondStripeFile.bak
    |  |- diff/
    |  |  |- ...
    |  |- log/
    |  |  |- ...
    

差分バックアップ ファイル名

差分バックアップ ファイルの命名規則は、単一のバックアップ ファイルを使用するか、複数のストライプに分割するかによって異なります。どちらのシナリオでも、Database Migration Service では、差分バックアップを取得したおおよその時刻を表すエポック タイムスタンプ(秒単位の UNIX タイムスタンプ表記)を含める必要があります。

  • 差分バックアップが単一ファイルの場合は、ファイル名に db_name.epoch.ext 形式を使用する必要があります。ここで、

    • db_name はデータベースの名前です。
    • epoch は秒単位の Unix タイムスタンプです。
    • .ext はファイル拡張子です。差分バックアップ ファイルには、.bak.dif.diff の拡張子を使用できます。

    有効な例:

    • my-business-database.1731159833.bak
    • my-other-database.1731159833.dif
  • 差分バックアップを個別のストライプに分割する場合、各ストライプには任意の名前を使用できますが、名前が Unix タイムスタンプ(秒単位)の Cloud Storage フォルダにアップロードする必要があります。

    Cloud Storage bucket root/
    |- my-business-database/
    |  |- full/
    |  |  |- ...
    |  |- diff/
    |  |  |- 1731159833/
    |  |  |  |- mydiffstripe-diff_backup_file.dif
    |  |  |  |- mySeconddiffstripe-diff_backup_file.bak
    |  |- log/
    |  |  |- ...
    |- my-other-database/
    |  |- full/
    |  |  |- ...
    |  |- diff/
    |  |  |- 1731159833/
    |  |  |  |- firstDiffStripe.bak
    |  |  |  |- other_diff_stripe.diff
    |  |- log/
    |  |  |- ...
    

トランザクション ログ ファイル名

トランザクション ログ ファイル名は db_name.epoch.trn の形式にする必要があります。ここで、

  • db_name はデータベースの名前です。
  • epoch は秒単位の Unix タイムスタンプです。
  • .bak はファイル拡張子です。

有効な例:

  • my-business-database.1712649600.trn
  • my-other-database.1712649600.trn

Amazon RDS のバックアップ ファイルの命名規則

フル バックアップ ファイル名

完全バックアップ ファイルの命名規則は、単一のバックアップ ファイルを使用するか、複数のストライプに分割するかによって異なります。どちらのシナリオでも、Database Migration Service では、フル バックアップを行ったおおよその時刻を表すエポック タイムスタンプ(秒単位の UNIX タイムスタンプ表記)を含める必要があります。

  • 完全バックアップが単一ファイルの場合は、ファイル名に db_id.family_guid.rds_backup_seq_id.epoch.bak 形式を使用する必要があります。ここで、

    • db_id は Amazon RDS の内部データベース識別子です。
    • family_guid は、作成時における元のデータベースの Amazon RDS 固有識別子です。
    • rds_backup_seq_id は、トランザクション ログの各バックアップ ファイルのシーケンス番号を保持するために Amazon RDS が内部で使用する識別子です。
    • epoch は秒単位の Unix タイムスタンプです。
    • .bak はファイル拡張子です。

    有効な例:

    • 3.CX11CB3D-G2E4-46D9-B462-CE40CDA97E89.22.1712649600.bak
    • 1.FD21CD3F-B5E4-27Z9-B462-CE40CDA97E89.21.1712649600.bak
  • 完全バックアップを個別のストライプに分割する場合、各ストライプには任意の名前を使用できますが、名前が Unix タイムスタンプ(秒単位)の Cloud Storage フォルダにアップロードする必要があります。

    Cloud Storage bucket root/
    |- my-business-database/
    |  |- full/
    |  |  |- 1712649600/
    |  |  |  |- mystripe-full_backup_file.bak
    |  |  |  |- otherStripefull-bkp.bak
    |  |- diff/
    |  |  |- ...
    |  |- log/
    |  |  |- ...
    |- my-other-database/
    |  |- full/
    |  |  |- 1715250742/
    |  |  |  |- cool-stripe-file.bak
    |  |  |  |- secondStripeFile.bak
    |  |- log/
    |  |  |- ...
    

差分バックアップ ファイル名

差分バックアップ ファイルの命名規則は、単一のバックアップ ファイルを使用するか、複数のストライプに分割するかによって異なります。どちらのシナリオでも、Database Migration Service では、差分バックアップを取得したおおよその時刻を表すエポック タイムスタンプ(秒単位の UNIX タイムスタンプ表記)を含める必要があります。

  • 差分バックアップが単一ファイルの場合は、ファイル名に db_id.family_guid.rds_backup_seq_id.epoch.ext 形式を使用する必要があります。ここで、

    • db_id は Amazon RDS の内部データベース識別子です。
    • family_guid は、作成時における元のデータベースの Amazon RDS 固有識別子です。
    • rds_backup_seq_id は、トランザクション ログの各バックアップ ファイルのシーケンス番号を保持するために Amazon RDS が内部で使用する識別子です。
    • epoch は秒単位の Unix タイムスタンプです。
    • .bak はファイル拡張子です。差分バックアップ ファイルには、.bak.dif.diff の拡張子を使用できます。

    有効な例:

    • 3.CX11CB3D-G2E4-46D9-B462-CE40CDA97E89.22.1731159833.bak
    • 1.FD21CD3F-B5E4-27Z9-B462-CE40CDA97E89.21.1731159833.dif
  • 完全バックアップを個別のストライプに分割する場合、各ストライプには任意の名前を使用できますが、名前が Unix タイムスタンプ(秒単位)の Cloud Storage フォルダにアップロードする必要があります。

    Cloud Storage bucket root/
    |- my-business-database/
    |  |- full/
    |  |  |- ...
    |  |- diff/
    |  |  |- 1731159833/
    |  |  |  |- mydiffstripe-diff_backup_file.dif
    |  |  |  |- mySeconddiffstripe-diff_backup_file.bak
    |  |- log/
    |  |  |- ...
    |- my-other-database/
    |  |- full/
    |  |  |- ...
    |  |- diff/
    |  |  |- 1731159833/
    |  |  |  |- firstDiffStripe.bak
    |  |  |  |- other_diff_stripe.diff
    |  |- log/
    |  |  |- ...
    

トランザクション ログ ファイル名

Amazon RDS では、トランザクション ログのバックアップ ファイルが自動的に生成され、必要なデータベース識別子がすべて含まれます。これらのデフォルト名は、エポック タイムスタンプを含んでおり、Database Migration Service で完全にサポートされます。これらのファイルは、/log/ フォルダに直接アップロードできます。

移行元インスタンスの完全バックアップを作成する

移行ジョブの初期読み込みフェーズには、データベースの完全バックアップ ファイルが必要です。バックアップを暗号化する場合は、暗号鍵を保存して、後で移行ジョブを作成するときに Cloud Storage にアップロードできるようにしてください。 暗号化されたバックアップを使用するをご覧ください。

オンプレミスの SQL Server インスタンスのフル バックアップを取得する

オンプレミスの SQL Server インスタンスのフル バックアップは、T-SQL または SQL Server Management Studio(SSMS)を使用して取得できます。手順は次のとおりです。

  1. 次の要件を満たしていることを確認してください。
  2. 移行元インスタンスの完全バックアップを取得します。Microsoft のドキュメントの クイックスタート: SSMS を使用して SQL Server データベースのバックアップと復元を行うをご覧ください。次のサンプル コマンドも確認できます。

    単一のフル バックアップ ファイルの T-SQL コマンドの例

    このサンプル コマンドは、AdventureWorks2022 データベースの完全バックアップを取得します。生成されたバックアップ ファイルは、必要な命名規則を使用します。

    declare @DATABASE varchar(1000);
    SELECT @DATABASE = 'AdventureWorks2022';
    
    declare @unixTimestamp varchar(1000);
    SELECT @unixTimestamp = CAST(DATEDIFF(s, '1970-01-01', GETUTCDATE()) AS VARCHAR(50));
    
    BACKUP DATABASE @DATABASE
    TO DISK = 'X:\SQLServerBackups\full\' + @DATABASE + '.' + @unixTimestamp + '.bak';
    GO

    ストライプ化されたフル バックアップ ファイルの T-SQL コマンドの例

    このサンプル コマンドは、AdventureWorks2022 データベースの完全バックアップを取得します。生成されたバックアップ ファイルは、必要な命名規則を使用します。

    declare @DATABASE varchar(1000);
    SELECT @DATABASE = 'AdventureWorks2022';
    
    declare @unixTimestamp varchar(1000);
    SELECT @unixTimestamp = CAST(DATEDIFF(s, '1970-01-01', GETUTCDATE()) AS VARCHAR(50));
    
    BACKUP DATABASE @DATABASE
    TO DISK = 'X:\SQLServerBackups\full\' + @DATABASE + '.' + @unixTimestamp + '\stripe1.bak',
    DISK = 'X:\SQLServerBackups\full\' + @DATABASE + '.' + @unixTimestamp + '\stripe2.bak',
    DISK = 'X:\SQLServerBackups\full\' + @DATABASE + '.' + @unixTimestamp + '\stripe3.bak'
    WITH FORMAT,
      MEDIANAME = 'AdventureWorksStripedSet0',
      MEDIADESCRIPTION = 'Striped media set for ' + @DATABASE + ' database';
    GO
  3. バックアップ ファイルを Cloud Storage バケットにアップロードします。 Cloud Storage バケットを作成して構成するをご覧ください。

Amazon RDS の完全バックアップを作成する

Amazon RDS ソースの完全バックアップを取得する手順は次のとおりです。

  1. 次の要件を満たしていることを確認してください。
  2. ネイティブ バックアップ機能を設定します。Amazon RDS ドキュメントの ネイティブ バックアップと復元の設定をご覧ください。
  3. 移行元インスタンスの完全バックアップを取得します。データベースのサイズが 5 TB を超える場合は、@number_of_files パラメータを使用してフル バックアップを個別のストライプに分割してください。各ストライプの最大サイズは 5 TB です。Amazon RDS ドキュメントのデータベースのバックアップ をご覧ください。

    次のサンプル コマンドも確認できます。

    Amazon RDS でフル バックアップを取得するクエリの例

    このサンプル コマンドは、AdventureWorks2022 データベースの完全バックアップを取得します。生成されたバックアップ ファイルは、必要な命名規則を使用します。

    declare @DATABASE varchar(1000);
    declare @S3Bucket varchar(1000);
    declare @unixTimestamp varchar(30);
    declare @fileName varchar(1000);
    
    SELECT @S3Bucket = 'dms-sqlserver-exports';
    SELECT @DATABASE = 'AdventureWorks2022';
    
    SELECT @unixTimestamp=CAST(DATEDIFF(s, '1970-01-01', GETUTCDATE()) AS VARCHAR(50));
    SELECT @fileName = ('arn:aws:s3:::' + @S3Bucket + '/' + @DATABASE + '/full/' + @DATABASE '.' + @unixTimestamp + '/' + CAST(database_id AS VARCHAR(10)) + '.' + CAST(family_guid AS VARCHAR(50)) + '.*.' + @unixTimestamp) FROM master.sys.database_recovery_status WHERE DB_NAME(database_id)=@DATABASE;
    
    exec msdb.dbo.rds_backup_database
      @source_db_name=@DATABASE,
      @s3_arn_to_backup_to=@fileName,
      @overwrite_s3_backup_file=1,
      @type='FULL',
      @number_of_files=1;
  4. バックアップ ファイルを Cloud Storage バケットにアップロードします。 Cloud Storage バケットを作成して構成するをご覧ください。

移行元インスタンスの差分バックアップを作成する

差分データベース バックアップ ファイルは、移行ジョブの増分読み込みフェーズで使用できます。同じデータベースの完全バックアップ ファイルとトランザクション ログ ファイルも暗号化する場合、暗号化された差分バックアップ ファイルを使用できます。すべてのバックアップ ファイルとトランザクション ログファイルで、データベースごとに同じ暗号鍵を使用する必要があります。 暗号化されたバックアップを使用するをご覧ください。

オンプレミスの SQL Server インスタンスの差分バックアップを取得する

オンプレミスの SQL Server インスタンスの差分バックアップは、T-SQL または SQL Server Management Studio(SSMS)を使用して取得できます。手順は次のとおりです。

  1. 次の要件を満たしていることを確認してください。
  2. 移行元インスタンスの差分バックアップを取得します。Microsoft のドキュメントの 差分データベース バックアップを作成するをご覧ください。次のサンプル コマンドも確認できます。

    単一の差分バックアップ ファイルの T-SQL コマンドの例

    このサンプル コマンドは、AdventureWorks2022 データベースの差分バックアップを取得します。生成されたバックアップ ファイルは、必要な命名規則を使用します。

    declare @DATABASE varchar(1000);
    SELECT @DATABASE = 'AdventureWorks2022';
    
    declare @unixTimestamp varchar(1000);
    SELECT @unixTimestamp = CAST(DATEDIFF(s, '1970-01-01', GETUTCDATE()) AS VARCHAR(50));
    
    BACKUP DATABASE @DATABASE
    TO DISK = 'X:\SQLServerBackups\diff\' + @DATABASE + '.' + @unixTimestamp + '.bak' WITH DIFFERENTIAL;
    GO

    ストライプ化された差分バックアップ ファイルの T-SQL コマンドの例

    このサンプル コマンドは、AdventureWorks2022 データベースの差分バックアップを取得します。生成されたバックアップ ファイルは、必要な命名規則を使用します。

    declare @DATABASE varchar(1000);
    SELECT @DATABASE = 'AdventureWorks2022';
    
    declare @unixTimestamp varchar(1000);
    SELECT @unixTimestamp = CAST(DATEDIFF(s, '1970-01-01', GETUTCDATE()) AS VARCHAR(50));
    
    BACKUP DATABASE @DATABASE
    TO DISK = 'X:\SQLServerBackups\diff\' + @DATABASE + '.' + @unixTimestamp + '\stripe1.bak',
    DISK = 'X:\SQLServerBackups\diff\' + @DATABASE + '.' + @unixTimestamp + '\stripe2.bak',
    DISK = 'X:\SQLServerBackups\diff\' + @DATABASE + '.' + @unixTimestamp + '\stripe3.bak'
    WITH DIFFERENTIAL;
    WITH FORMAT,
      MEDIANAME = 'AdventureWorksStripedSet0',
      MEDIADESCRIPTION = 'Striped differential media set for ' + @DATABASE + ' database';
    GO
  3. バックアップ ファイルを Cloud Storage バケットにアップロードします。 Cloud Storage バケットを作成して構成するをご覧ください。

Amazon RDS の差分バックアップを取得する

Amazon RDS ソースの差分バックアップを取得する手順は次のとおりです。

  1. 次の要件を満たしていることを確認してください。
  2. ネイティブ バックアップ機能を設定します。Amazon RDS ドキュメントの ネイティブ バックアップと復元の設定をご覧ください。
  3. 移行元インスタンスの差分バックアップを取得します。type パラメータを DIFFERENTIAL に設定して rds_backup_database ストアド プロシージャを使用します。

    データベースのサイズが 5 TB を超える場合は、@number_of_files パラメータを使用してフル バックアップを個別のストライプに分割してください。各ストライプの最大サイズは 5 TB です。

    Amazon RDS ドキュメントのデータベースのバックアップ をご覧ください。次のサンプル コマンドも確認できます。

    Amazon RDS で差分バックアップを取得するクエリの例

    このサンプル コマンドは、AdventureWorks2022 データベースの差分バックアップを取得します。生成されたバックアップ ファイルは、必要な命名規則を使用します。

    declare @DATABASE varchar(1000);
    declare @S3Bucket varchar(1000);
    declare @unixTimestamp varchar(30);
    declare @fileName varchar(1000);
    
    SELECT @S3Bucket = 'dms-sqlserver-exports';
    SELECT @DATABASE = 'AdventureWorks2022';
    
    SELECT @unixTimestamp=CAST(DATEDIFF(s, '1970-01-01', GETUTCDATE()) AS VARCHAR(50));
    SELECT @fileName = ('arn:aws:s3:::' + @S3Bucket + '/' + @DATABASE + '/full/' + @DATABASE '.' + @unixTimestamp + '/' + CAST(database_id AS VARCHAR(10)) + '.' + CAST(family_guid AS VARCHAR(50)) + '.*.' + @unixTimestamp) FROM master.sys.database_recovery_status WHERE DB_NAME(database_id)=@DATABASE;
    
    exec msdb.dbo.rds_backup_database
      @source_db_name=@DATABASE,
      @s3_arn_to_backup_to=@fileName,
      @overwrite_s3_backup_file=1,
      @type='DIFFERENTIAL',
      @number_of_files=1;
  4. バックアップ ファイルを Cloud Storage バケットにアップロードします。 Cloud Storage バケットを作成して構成するをご覧ください。

トランザクション ログのバックアップを取得する

トランザクション ログのバックアップ ファイルには、完全バックアップの取得後にソース データベースで発生した変更が含まれます。移行ジョブの継続的な読み込みフェーズには、トランザクション ログ バックアップが必要です。定期的なトランザクション ログのエクスポートとアップロードをスケジュール設定して、データ更新が宛先の Cloud SQL for SQL Server インスタンスに継続的に複製されるようにします。 トランザクション ログのバックアップのスケジュールを設定するをご覧ください。

暗号化されたバックアップ ファイルを使用する場合は、同じデータベースのトランザクション ログ ファイルも暗号化する必要があります。 暗号化されたバックアップを使用するをご覧ください。

オンプレミスの SQL Server インスタンスのトランザクション ログのバックアップを取得する

オンプレミス SQL Server データベースのトランザクション ログのバックアップを取得する手順は次のとおりです。

  1. 次の要件を満たしていることを確認してください。
    • バックアップ ファイルに正しい 命名規則 を使用している。
    • 移行元データベースでシンプル復元モデルを使用していない。Microsoft のドキュメントの復旧モデル(SQL Server) をご覧ください。
  2. SQL Server ソース データベースからトランザクション ログ ファイルをエクスポートします。Microsoft のドキュメントで トランザクション ログのバックアップをご覧ください。次のサンプル コマンドも確認できます。

    トランザクション ログファイルをローカルディスクにエクスポートする T-SQL コマンドの例

    このサンプル コマンドは、AdventureWorks2022 データベースのトランザクション ログ バックアップを作成し、ファイルをローカルディスクに保存します。生成されたバックアップ ファイルは、必要な命名規則を使用します。

    declare @DATABASE varchar(1000);
    SELECT @DATABASE = 'AdventureWorks2022';
    declare @unixTimestamp varchar(1000);
    SELECT @unixTimestamp = CAST(DATEDIFF(s, '1970-01-01', GETUTCDATE()) AS VARCHAR(50));
    
    BACKUP LOG @DATABASE
    TO DISK = 'X:\SQLServerBackups\log\' + @DATABASE + '.' + @unixTimestamp + '.trn';
  3. トランザクション ログ バックアップ ファイルを、移行用に作成した Cloud Storage バケットにアップロードします。

Amazon RDS のトランザクション ログのバックアップを取得する

Amazon RDS インスタンスで自動バックアップが有効になっている場合、トランザクション ログのバックアップは自動的に作成されます。Amazon RDS ドキュメントの 自動バックアップを有効にするをご覧ください。

移行にトランザクション ログのバックアップ ファイルを使用する手順は次のとおりです。

  1. Amazon RDS インスタンスでトランザクション ログ ファイルへのアクセスを有効にします。 RDS for SQL Server でのトランザクション ログ バックアップへのアクセスをご覧ください。次のサンプル コマンドも確認できます。

    Amazon RDS でトランザクション ログへのアクセスを有効にするストアド プロシージャ呼び出しの例

    declare @DATABASE varchar(1000);
    declare @S3Bucket varchar(1000);
    declare @targetS3Arn varchar(1000);

    SELECT @S3Bucket = 'dms-sqlserver-exports'; SELECT @DATABASE = 'AdventureWorks2022'; SELECT @targetS3Arn = ('arn:aws:s3:::' + @S3Bucket + '/' + @DATABASE + '/log/');

    USE @DATABASE; exec msdb.dbo.rds_tlog_copy_setup @target_s3_arn=@targetS3Arn;

  2. トランザクション ログのバックアップ ファイルを、S3 バケットから移行用に作成した Cloud Storage バケットにコピーします。