ApsaraDB RDS for SQL Server インスタンスを使用すると、データをクラウドに簡単に移行できます。自己管理の SQL Server インスタンスにあるソースデータベースの完全バックアップデータを Object Storage Service (OSS) バケットにアップロードし、ApsaraDB RDS コンソールを使用して、ApsaraDB RDS for SQL Server インスタンスのターゲットデータベースに完全バックアップデータを移行するだけです。この機能は、データのバックアップ、移行、ディザスタリカバリなどのシナリオで使用できます。
このトピックで説明されている操作は、RDS インスタンスが SQL Server 2008 R2(クラウドディスク搭載)または SQL Server 2012 以降を実行している場合にのみ実行できます。
自己管理 SQL Server インスタンスの完全バックアップデータをローカルディスクを搭載した SQL Server 2008 R2 を実行する RDS インスタンスに移行する方法の詳細については、「自己管理 SQL Server インスタンスの完全バックアップデータを、ローカルディスクを搭載した SQL Server 2008 R2 を実行する ApsaraDB RDS インスタンスに移行する」をご参照ください。
前提条件
RDS インスタンスは、SQL Server 2008 R2(クラウドディスク搭載)または SQL Server 2012 以降を実行しています。RDS インスタンス上のデータベースの名前は、自己管理 SQL Server インスタンスから移行するデータベースの名前とは異なります。RDS インスタンスの作成方法の詳細については、「ApsaraDB RDS for SQL Server インスタンスを作成する」をご参照ください。
説明クラウドディスクを搭載した SQL Server 2008 R2 を実行する ApsaraDB RDS インスタンスは、購入できなくなりました。詳細については、「[EOS/提供終了] クラウドディスクを搭載した SQL Server 2008 R2 を実行する ApsaraDB RDS インスタンスは、2023 年 7 月 14 日から購入できなくなりました」をご参照ください。
RDS インスタンスの使用可能なストレージ容量が十分にあります。使用可能なストレージ容量が不十分な場合は、移行を開始する前に RDS インスタンスのストレージ容量を拡張する必要があります。詳細については、「ApsaraDB RDS for SQL Server インスタンスの仕様を変更する」をご参照ください。
RDS インスタンスに特権アカウントが作成されています。詳細については、「アカウントとデータベースを作成する」をご参照ください。
DBCC CHECKDB
文を実行して、自己管理 SQL Server インスタンスでallocation errors
やconsistency errors
が発生していないことを確認します。割り当てエラーまたは整合性エラーが発生しない場合は、次の実行結果が返されます。... CHECKDB found 0 allocation errors and 0 consistency errors in database 'xxx'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.
OSS がアクティブ化されています。詳細については、「OSS をアクティブ化する」をご参照ください。
RAM ユーザーを使用する場合は、次の要件が満たされていることを確認してください。
AliyunOSSFullAccess ポリシーと AliyunRDSFullAccess ポリシーが RAM ユーザーにアタッチされています。RAM ユーザーに権限を付与する方法の詳細については、「RAM を使用して OSS 権限を管理する」および「RAM を使用して ApsaraDB RDS 権限を管理する」をご参照ください。
ApsaraDB RDS のサービスアカウントは、Alibaba Cloud アカウントを使用して OSS バケットにアクセスする権限を与えられています。
Alibaba Cloud アカウントを使用してカスタムポリシーが手動で作成され、RAM ユーザーにアタッチされています。カスタムポリシーの作成方法の詳細については、「カスタムポリシーを作成する」の「JSON タブでカスタムポリシーを作成する」セクションをご参照ください。
使用上の注意
このトピックで説明されている移行方法は、データベース レベルです。一度に 1 つの自己管理データベースの完全バックアップデータのみを RDS インスタンスに移行できます。自己管理 SQL Server インスタンス内の複数のデータベースまたはすべてのデータベースのバックアップデータを一度に移行する場合は、インスタンスレベルの移行方法を使用することをお勧めします。詳細については、「自己管理 SQL Server インスタンスから ApsaraDB RDS for SQL Server インスタンスにデータを移行する」をご参照ください。
RDS インスタンスよりも新しいデータベースエンジンバージョンを実行している自己管理 SQL Server インスタンスのバックアップファイルを移行することはできません。たとえば、SQL Server 2016 を実行している自己管理インスタンスのバックアップファイルを、SQL Server 2012 を実行している RDS インスタンスに移行することはできません。
ApsaraDB RDS のサービスアカウントに OSS バケットへのアクセスを承認すると、RAM に AliyunRDSImportRole というロールが作成されます。このロールを変更または削除しないでください。このロールを変更または削除すると、OSS バケットからバックアップファイルをダウンロードできなくなります。この場合、移行ウィザードを使用してサービスアカウントを再承認する必要があります。
RDS インスタンスは、自己管理 SQL Server インスタンスのアカウントを引き継ぎません。移行が完了したら、ApsaraDB RDS コンソールで RDS インスタンスのアカウントを作成する必要があります。
移行が完了する前に、OSS バケットから完全バックアップファイルを削除しないでください。移行が完了する前に完全バックアップファイルを削除すると、移行は失敗します。
インスタンスの完全バックアップデータを移行する場合は、完全バックアップファイルをアップロードします。差分バックアップファイルとログバックアップファイルはサポートされていません。
データ移行の失敗を避けるため、完全バックアップファイルの名前に次の特殊文字が含まれていないことを確認してください。! @ # $ % ^ & * ( ) _ + - =
バックアップファイルの名前には、接尾辞として bak、diff、trn、または log を付ける必要があります。次のリストは、接尾辞について説明しています。
bak: 完全バックアップファイルを示します。
diff: 差分バックアップファイルを示します。
trn または log: トランザクションのログバックアップファイルを示します。
説明バックアップファイルが上記の接尾辞を使用していない場合、システムはバックアップファイルのタイプを識別できない可能性があります。これは、後続の操作に影響します。
デフォルトでは、RDS インスタンスの完全バックアップファイルは ZIP 形式です。ZIP ファイルをダウンロードした場合は、ZIP ファイルを解凍して、bak という接尾辞が付いた完全バックアップファイルを取得する必要があります。その後、完全バックアップファイルを使用して、データを RDS インスタンスに移行できます。
課金
このトピックで説明されている方法を使用してデータを移行する場合、OSS バケットの使用に対してのみ課金されます。
シナリオ | 課金ルール |
OSS バケットにバックアップファイルをアップロードする | 無料。 |
OSS バケットにバックアップファイルを保存する | ストレージ料金が発生します。詳細については、OSS の料金ページをご覧ください。 |
OSS バケットから RDS インスタンスにバックアップファイルを移行する |
|
ステップ 1: 自己管理インスタンスのソースデータベースをバックアップする
完全バックアップを実行する前に、自己管理インスタンスのソースデータベースへのすべてのデータ書き込みを停止する必要があります。完全バックアッププロセス中に自己管理データベースに書き込まれたデータはバックアップできません。
バックアップスクリプト をダウンロードし、SQL Server Management Studio (SSMS) を使用してバックアップスクリプトを開きます。
ビジネス要件に基づいてパラメータを変更します。次の表は、バックアップスクリプトのパラメータについて説明しています。
パラメータ
説明
@backup_databases_list
バックアップするデータベースの名前。複数のデータベースを指定する場合は、データベース名をセミコロン (;) またはコンマ (,) で区切ります。
@backup_type
バックアップタイプ。有効な値:
FULL: 完全バックアップ
DIFF: 増分バックアップ
LOG: ログバックアップ
@backup_folder
自己管理データベースのバックアップファイルを保存するために使用されるディレクトリ。指定されたディレクトリが存在しない場合は、自動的に作成されます。
@is_run
バックアップを実行するか、チェックを実行するかを指定します。有効な値:
1: バックアップを実行します。
0: チェックを実行します。
説明バックアップスクリプトの YOU HAVE TO INIT PUBLIC VARIABLES HERE セクションの SELECT 文で、上記のパラメータを変更します。
バックアップスクリプトを実行します。
ステップ 2: バックアップファイルを OSS バケットにアップロードする
OSS バケットが使用できない場合は、OSS バケットを作成します。
OSS コンソール にログインします。
左側のナビゲーションウィンドウで、[バケット] をクリックします。[バケット] ページで、[バケットの作成] をクリックします。
次のパラメータを設定します。その他のパラメータについては、デフォルト値を保持します。
重要作成された OSS バケットはデータ移行にのみ使用され、データ移行が完了すると使用されなくなります。重要なパラメータのみを設定する必要があります。データ漏洩や過剰なコストを防ぐため、データ移行が完了したらできるだけ早く OSS バケットを削除することをお勧めします。
OSS バケットを作成するときにデータ暗号化を有効にしないでください。詳細については、「データ暗号化」をご参照ください。
パラメータ
説明
例
[バケット名]
OSS バケットの名前。名前はグローバルに一意であり、設定後は変更できません。
命名規則:
名前に使用できるのは、小文字、数字、ハイフン (-) のみです。
小文字または数字で開始および終了する必要があります。
名前は 3 ~ 63 文字の長さである必要があります。
migratetest
[リージョン]
OSS バケットのリージョン。内部ネットワーク経由で Elastic Compute Service (ECS) インスタンスから OSS バケットにデータをアップロードし、その後内部ネットワーク経由で RDS インスタンスにデータをリストアする場合は、OSS バケット、ECS インスタンス、RDS インスタンスが同じリージョンにあることを確認してください。
中国 (杭州)
[ストレージタイプ]
バケットのストレージタイプ。[標準] を選択します。このトピックで説明されているクラウド移行操作は、他のストレージタイプのバケットでは実行できません。
標準
バックアップファイルを OSS バケットにアップロードします。
自己管理 SQL Server インスタンスの完全バックアップが完了したら、次のいずれかの方法を使用して、生成された完全バックアップファイルを OSS バケットにアップロードする必要があります。OSS バケットと RDS インスタンスは同じリージョン に存在する必要があります。こうすることで、バックアップファイルは RDS インスタンスからバケットに内部ネットワーク経由でアップロードされるため、高速でインターネットトラフィック料金も発生しません。
ステップ 3: 移行タスクを作成する
インスタンス ページに移動します。上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。次に、RDS インスタンスを見つけて、インスタンスの ID をクリックします。
左側のナビゲーションウィンドウで、[バックアップとリストア] をクリックします。
ページの右上隅にある [OSS バックアップデータを RDS に移行する] をクリックします。
[インポートガイド] ウィザードで、[次へ] を 2 回クリックします。
説明OSS ベースの移行ウィザードを初めて使用する場合は、ApsaraDB RDS のサービスアカウントに OSS バケットへのアクセスを承認する必要があります。この場合、[承認] をクリックして承認を完了する必要があります。そうでない場合、[データのインポート] ステップの [OSS バケット] ドロップダウンリストは空になります。
次のパラメータを設定します。
パラメータ
説明
[データベース名]
RDS インスタンスのターゲットデータベースの名前を入力します。ターゲットデータベースは、自己管理 SQL Server インスタンスのソースデータベースから移行されたデータを保存するために使用されます。ターゲットデータベースの名前は、オープンソース SQL Server の要件を満たしている必要があります。
重要移行前に、ターゲット RDS インスタンス上のデータベースの名前が、指定したバックアップファイルを使用してリストアするデータベースの名前と異なることを確認する必要があります。また、指定したバックアップファイルを使用してリストアするデータベースと同じ名前のデータベースファイルが、ターゲット RDS インスタンス上のデータベースに追加されていないことを確認する必要があります。上記の両方の要件が満たされている場合は、バックアップセット内のデータベースファイルを使用してデータベースをリストアできます。データベースファイルの名前は、リストアするデータベースと同じ名前にする必要があることに注意してください。
上記の要件のいずれかが満たされていない場合、移行は失敗します。
[OSS バケット]
完全バックアップファイルを保存する OSS バケット。
[OSS サブフォルダ名]
完全バックアップファイルを保存する OSS サブフォルダの名前。
[OSS ファイル]
インポートする完全バックアップファイル。検索ボックスにプレフィックスを入力し、
アイコンをクリックすると、あいまい一致モードで完全バックアップファイルを検索できます。名前にプレフィックスが含まれる各完全バックアップファイルの名前、サイズ、更新時刻が表示されます。クラウドに移行するバックアップファイルを選択します。
[クラウド移行方法]
即時アクセス (完全バックアップ): 完全バックアップファイルのみを移行する場合は、この移行計画を選択します。この例では、[即時アクセス (完全バックアップ)] を選択します。この場合、CreateMigrateTask 操作では次のパラメータ設定が有効になります。
BackupMode = FULL
およびIsOnlineDB = True
。アクセス保留中 (増分バックアップ): 完全バックアップファイルとログまたは差分バックアップファイルを移行する場合は、この移行方法を選択します。この場合、CreateMigrateTask 操作では次のパラメータ設定が有効になります。
BackupMode = UPDF
およびIsOnlineDB = False
。
[整合性チェックモード]
非同期 DBCC: DBCC CHECKDB 文は、ターゲットデータベースが開かれた後に実行されます。これにより、ターゲットデータベースを開くのに必要な時間が短縮され、アプリケーションのダウンタイムが最小限に抑えられます。ターゲットデータベースが大きい場合、DBCC CHECKDB 文の実行に時間がかかります。アプリケーションがダウンタイムに敏感だが、DBCC CHECKDB 文の結果に鈍感な場合は、この整合性チェックモードを選択することをお勧めします。この場合、CreateMigrateTask 操作では次のパラメータ設定が有効になります。
CheckDBMode = AsyncExecuteDBCheck
。同期 DBCC: DBCC CHECKDB 文は、ターゲットデータベースが開かれるのと同時に実行されます。DBCC CHECKDB 文の結果に基づいてソースデータベースとターゲットデータベース間の整合性エラーを特定する場合は、この整合性チェックモードを選択することをお勧めします。ただし、ターゲットデータベースを開くのに必要な時間が長くなります。この場合、CreateMigrateTask 操作では次のパラメータ設定が有効になります。
CheckDBMode = SyncExecuteDBCheck
。
[OK] をクリックします。
移行タスクが完了するまで待ちます。[更新] をクリックすると、移行タスクの最新の状態を表示できます。移行タスクが失敗した場合は、移行タスクの説明に基づいて失敗のトラブルシューティングを行うことができます。詳細については、「一般的なエラー」をご参照ください。
説明移行が完了すると、システムは自動バックアップに指定した時点の RDS インスタンスをバックアップします。自動バックアップの時点は手動で調整できます。詳細については、「ApsaraDB RDS for SQL Server インスタンスをバックアップする」をご参照ください。生成されたバックアップセットには、移行されたデータが含まれています。RDS インスタンスの [バックアップとリストア] ページでバックアップセットを表示できます。
自動バックアップの時点に達していないが、バックアップファイルが必要な場合は、RDS インスタンスを手動でバックアップできます。詳細については、「ApsaraDB RDS for SQL Server インスタンスをバックアップする」をご参照ください。
ステップ 4: 移行タスクを表示する
移行タスクの詳細を表示するには、[バックアップとリストア] ページに移動し、[バックアップデータのクラウド移行レコード] タブをクリックします。デフォルトでは、このタブには過去 1 週間の移行タスクが表示されます。
一般的なエラー
[バックアップとリストア] ページの [バックアップデータのアップロード履歴] タブにある各移行タスクレコードには、タスクの説明が含まれています。移行タスクが失敗した場合、またはエラーが報告された場合は、タスクの説明に基づいて失敗またはエラーのトラブルシューティングを行うことができます。次の一般的なエラーが発生する可能性があります。
RDS インスタンスの既存のデータベースの名前がソースデータベースと同じです。
エラーメッセージ 1: The database (xxx) is already exist on RDS, please backup and drop it, then try again.
エラーメッセージ 2: Database 'xxx' already exists. Choose a different database name.
原因: RDS インスタンスの既存のデータベースの名前がソースデータベースと同じである場合、移行はサポートされていません。このメカニズムは、データのセキュリティを確保するために設計されています。
解決策: RDS インスタンスの既存のデータベースを上書きする場合は、データベースをバックアップし、RDS インスタンスからデータベースを削除してから、移行タスクを再度作成して実行します。
差分バックアップファイルが使用されています。
エラーメッセージ: Backup set (xxx.bak) is a Database Differential backup, we only accept a FULL Backup.
原因: アップロードしたファイルは、完全バックアップファイルではなく差分バックアップファイルです。このトピックの移行方法は、完全バックアップファイルのみをサポートしています。
ログバックアップファイルが使用されています。
エラーメッセージ: Backup set (xxx.trn) is a Transaction Log backup, we only accept a FULL Backup.
原因: アップロードしたファイルは、完全バックアップファイルではなくログバックアップファイルです。このトピックの移行方法は、完全バックアップファイルのみをサポートしています。
完全バックアップファイルの検証に失敗しました。
エラーメッセージ: Failed to verify xxx.bak, backup file was corrupted or newer edition than RDS.
原因: 完全バックアップファイルが破損しているか、自己管理インスタンスが RDS インスタンスよりも新しい SQL Server バージョンを実行しています。たとえば、自己管理インスタンスが SQL Server 2016 を実行し、RDS インスタンスが SQL Server 2012 を実行している場合に、このエラーが発生します。
解決策: 完全バックアップファイルが破損している場合は、自己管理 SQL Server インスタンスで完全バックアップを再度実行します。次に、移行タスクを再度作成して実行します。自己管理インスタンスが RDS インスタンスよりも新しい SQL Server バージョンを実行している場合は、自己管理インスタンスと同じバージョンまたはそれ以降のバージョンを実行している別の RDS インスタンスを選択します。
説明既存の RDS for SQL Server インスタンスのメジャーエンジンバージョンをアップグレードするには、「メジャーエンジンバージョンをアップグレードする」をご参照ください。
DBCC CHECKDB 文が失敗しました。
エラーメッセージ: DBCC checkdb failed.
原因: 自己管理 SQL Server インスタンスで割り当てエラーまたは整合性エラーが発生しています。
解決策: 自己管理 SQL Server インスタンスで次の文を実行してエラーを修正します。次に、移行タスクを再度作成して実行します。
重要この解決策を使用して問題を修正すると、データが失われる可能性があります。
DBCC CHECKDB (DBName, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS
RDS インスタンスの使用可能なストレージ容量が不十分です。
エラー 1
エラーメッセージ: Not Enough Disk Space for restoring, space left (xxx MB) < needed (xxx MB).
原因: RDS インスタンスの使用可能なストレージ容量が、完全バックアップファイルを使用してデータをリストアするために必要な最小ストレージ容量よりも少なくなっています。
解決策: RDS インスタンスのストレージ容量を拡張します。詳細については、「ApsaraDB RDS for SQL Server インスタンスの仕様を変更する」をご参照ください。
エラー 2
エラーメッセージ: Not Enough Disk Space, space left xxx MB < bak file xxx MB.
原因: RDS インスタンスの使用可能なストレージ容量が、完全バックアップファイルのサイズよりも少なくなっています。
解決策: RDS インスタンスのストレージ容量を拡張します。詳細については、「ApsaraDB RDS for SQL Server インスタンスの仕様を変更する」をご参照ください。
ログインアカウントに必要な権限がありません。
エラーメッセージ: Cannot open database "xxx" requested by the login. The login failed.
原因: RDS インスタンスにログインするために使用したアカウントに、データベースへのアクセス権がありません。
解決策: RDS インスタンスの [アカウント] ページに移動し、アカウントにデータベースへのアクセス権または管理権限を付与します。詳細については、「アカウントの権限を変更する」および「ApsaraDB RDS for SQL Server インスタンスのアカウント権限」をご参照ください。
RDS インスタンスに特権アカウントが作成されていません。
エラーメッセージ: Your RDS doesn't have any init account yet, please create one and grant permissions on RDS console to this migrated database (xxx).
原因: RDS インスタンスに特権アカウントが作成されていません。その結果、移行タスクは承認が必要なアカウントを見つけることができません。ただし、完全バックアップファイルは RDS インスタンスにリストアされており、移行タスクは成功しています。
解決策: RDS インスタンスに特権アカウントを作成します。詳細については、「特権アカウントまたは標準アカウントを作成する」をご参照ください。
RAM ユーザーに必要な権限がありません。
エラー 1
エラー: ステップ 3: 移行タスクを作成する のサブステップ 5 で説明されているパラメータは正しく設定されていますが、[OK] ボタンは選択不可になっています。
原因: 必要な権限のない RAM ユーザーを使用しています。
解決策: このトピックの「前提条件」セクションを参照して、RAM ユーザーに必要な権限を付与します。
エラー 2
エラー: RAM ユーザーに
AliyunRDSImportRole
権限を付与する権限がないことを示すメッセージが表示されます。原因: 使用している RAM ユーザーに必要な権限がありません。
解決策: Alibaba Cloud アカウントを使用して、RAM ユーザーに
AliyunRAMFullAccess
権限を付与します。詳細については、「RAM を使用して ApsaraDB RDS 権限を管理する」をご参照ください。
関連操作
操作 | 説明 |
データ移行タスクを作成します。 | |
ApsaraDB RDS for SQL Server インスタンスで、バックアップデータの移行先データベースを開きます。 | |
ApsaraDB RDS for SQL Server インスタンスのバックアップデータを移行するために作成されたタスクを照会します。 | |
ApsaraDB RDS for SQL Server インスタンスのバックアップデータ移行タスクのバックアップファイルの詳細を照会します。 |