完全バックアップファイル (.bak) を Object Storage Service (OSS) にアップロードし、それを RDS インスタンスにインポートすることで、自己管理 SQL Server データベースを ApsaraDB RDS for SQL Server に移行します。この方法は、1回限りの移行、ディザスタリカバリ、クラウドベースのデータバックアップに適しています。
仕組み
-
オンプレミスの SQL Server データベースを
.bakファイルにバックアップします。 -
バックアップファイルを、ご利用の RDS インスタンスと同じリージョンにある OSS バケットにアップロードします。
-
RDS コンソールからインポートタスクをトリガーします。システムが OSS からファイルを取得し、復元します。
このソリューションは、データベースレベルの移行のみをサポートします。複数またはすべてのデータベースを一度に移行するには、インスタンスレベルの移行ソリューションをご利用ください。
制限事項
開始する前に、以下の制約をご確認ください。
-
移行範囲:データベースレベルのみ。タスクごとに1つのデータベース。
-
バージョン互換性:ソース SQL Server のバージョンは、移行先 RDS インスタンスのバージョンより新しくすることはできません。例えば、SQL Server 2016 のバックアップを SQL Server 2012 インスタンスに復元することはできません。
-
バックアップタイプ:完全バックアップファイル (
.bak) のみ。差分バックアップおよびログバックアップはインポートプロセスで受け付けられません。 -
ファイル名:
!@#$%^&*()_+-=などの特殊文字を含めることはできません。 -
ファイル形式:ソースが ApsaraDB RDS for SQL Server からダウンロードしたバックアップファイル (
.zip形式) の場合、アップロードする前に.bakに解凍してください。 -
サポートされている拡張子:
.bak(完全バックアップ)、.diff(差分バックアップ)、.trnまたは.log(ログバックアップ)。他の拡張子を持つファイルは認識されません。 -
AliyunRDSImportRole:RDS サービスアカウントに OSS へのアクセスを許可すると、
AliyunRDSImportRoleという名前のロールが Resource Access Management (RAM) に作成されます。このロールを変更または削除しないでください。変更または削除すると、移行タスクが失敗します。誤って削除した場合は、移行ウィザードを通じて再度権限を付与してください。 -
移行後のアカウント:移行後、ソースインスタンスの元のデータベースアカウントは利用できなくなります。ApsaraDB RDS コンソールで新しいアカウントを作成してください。
-
OSS ファイルの保持:移行タスクが完了するまで、OSS からバックアップファイルを削除しないでください。
課金
| シナリオ | コスト |
|---|---|
| バックアップファイルの OSS へのアップロード | 無料 |
| バックアップファイルの OSS での保管 | OSS ストレージ料金が適用されます。OSS の料金OSS の料金をご参照ください。 |
| 内部ネットワーク経由でのインポート (同一リージョン) | 無料 |
| インターネット経由でのインポート | OSS のアウトバウンドトラフィックには料金が発生します。詳細については、OSS の料金OSS の料金をご参照ください。 |
前提条件
開始する前に、以下を確認してください。
-
RDS インスタンスにデータファイルを保持するのに十分なストレージ容量が残っていること。不足している場合は、インスタンスストレージをアップグレードしてください。
-
SQL Server 2012 以降、またはクラウドディスクを使用する SQL Server 2008 R2 の場合:RDS インスタンスに、移行対象のデータベースと同じ名前のデータベースが存在しないこと。
-
パフォーマンス専有型のローカルディスクを使用する SQL Server 2008 R2 の場合:RDS インスタンスに、移行対象のデータベースと同じ名前のデータベースが既に存在すること。
-
RAM ユーザーを使用する場合:
-
RAM ユーザーに AliyunOSSFullAccess および AliyunRDSFullAccess 権限が付与されていること。詳細は、「RAM を使用した OSS 権限の管理」および「RAM を使用した ApsaraDB RDS 権限の管理」をご参照ください。
-
ご利用の Alibaba Cloud アカウント (root ユーザー) が、ApsaraDB RDS サービスアカウントに OSS リソースへのアクセスを許可していること。以下の権限付与手順をご参照ください。
-
ご利用の Alibaba Cloud アカウント (root ユーザー) がカスタムアクセスポリシーを作成し、それを RAM ユーザーにアタッチしていること。ポリシーには以下を含める必要があります:``
json { "Version": "1", "Statement": [ { "Action": [ "ram:GetRole" ], "Resource": "acs:ram:*:*:role/AliyunRDSImportRole", "Effect": "Allow" } ] }``
-
ソースデータベースの準備
オンプレミスの SQL Server 環境で DBCC CHECKDB を実行し、バックアップ前にデータベースにエラーがないことを確認します。
DBCC CHECKDB (DBName, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS
クリーンなデータベースは以下を返します。
CHECKDB found 0 allocation errors and 0 consistency errors in database 'xxx'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
チェックでエラーが報告された場合は、処理を進めないでください。問題の修正方法については、「DBCC CHECKDB が失敗しました」をご参照ください。
ステップ 1:ローカルデータベースのバックアップ
ご利用の RDS インスタンスタイプに合った手順を選択してください。
SQL Server 2012 以降、またはクラウドディスクを使用する SQL Server 2008 R2
バックアップを開始する前に、データベースへのすべての書き込み操作を停止してください。バックアッププロセス中に書き込まれたデータは、バックアップファイルに含まれません。
-
バックアップスクリプトをダウンロードし、SQL Server Management Studio (SSMS) で開きます。
-
スクリプト内の
YOU HAVE TO INIT PUBLIC VARIABLES HEREの下にあるSELECT文でパラメーターを設定します。パラメーター 説明 @backup_databases_listバックアップするデータベース。複数のデータベース名はセミコロン ( ;) またはカンマ (,) で区切ります。@backup_typeバックアップタイプ: FULL、DIFF、またはLOG。@backup_folderバックアップファイルのローカルディレクトリ。存在しない場合は自動的に作成されます。 @is_run1はバックアップを実行、0はドライラン (チェックのみ) を実行します。 -
スクリプトを実行します。
パフォーマンス専有型のローカルディスクを使用する SQL Server 2008 R2
-
SQL Server Management Studio (SSMS) を開き、移行したいデータベースにログインします。
-
現在の復元モデルを確認します。
USE master; GO SELECT name, CASE recovery_model WHEN 1 THEN 'FULL' WHEN 2 THEN 'BULK_LOGGED' WHEN 3 THEN 'SIMPLE' END model FROM sys.databases WHERE name NOT IN ('master','tempdb','model','msdb'); GO -
model列がFULLでない場合は、FULLに設定します。重要復元モデルを
FULLに設定すると、トランザクションログデータの量が増加します。続行する前に、十分なディスク領域があることを確認してください。ALTER DATABASE [dbname] SET RECOVERY FULL; GO ALTER DATABASE [dbname] SET AUTO_CLOSE OFF; GO -
データベースをバックアップします。次の例では、
dbtestをd:\backup\backup.bakにバックアップします。USE master; GO BACKUP DATABASE [dbtest] TO DISK = 'd:\backup\backup.bak' WITH COMPRESSION, INIT; GO -
バックアップファイルを検証します。
USE master; GO RESTORE FILELISTONLY FROM DISK = N'D:\backup\backup.bak';コマンドが結果セットを返した場合、ファイルは有効です。エラーが返された場合は、バックアップをやり直してください。
-
(オプション) ステップ3で変更した場合、元の復元モデルに戻します。
ALTER DATABASE [dbname] SET RECOVERY SIMPLE; GO開始前に復元モデルが既に
FULLだった場合は、このステップをスキップしてください。
ステップ 2:バックアップファイルの OSS へのアップロード
OSS バケットの準備
ご利用の RDS インスタンスと同じリージョンに OSS バケットが必要です。同一リージョンのセットアップでは内部ネットワークが使用されるため、高速でアウトバウンドトラフィック料金もかかりません。
既にバケットをお持ちの場合、以下の要件を満たしていることを確認してください。
-
ストレージクラス:標準。 低頻度アクセス、アーカイブ、コールドアーカイブ、およびディープコールドアーカイブストレージはサポートされていません。
-
サーバー側暗号化:無効。
バケットを作成する必要がある場合、OSS を有効化していることを確認してから、以下の手順に従ってください。
-
OSS コンソールにログインし、[バケット] をクリックし、次に [バケットの作成] をクリックします。
-
以下のパラメーターを設定します。他のすべてのパラメーターはデフォルト値のままにします。
重要バケット作成時にサーバー側暗号化を有効にしないでください。データ漏洩を防ぎ、コストを削減するために、移行後にバケットを削除してください。
パラメーター 説明 例 バケット名 グローバルに一意で、作成後に変更できません。小文字、数字、ハイフンのみ使用可能。小文字または数字で始まり、終わる必要があります。3~63文字。 migratetestリージョン ご利用の RDS インスタンスのリージョンと一致させる必要があります。 中国 (杭州) ストレージクラス 標準 を選択します。 標準
バックアップファイルのアップロード
ファイルサイズに応じてアップロード方法を選択してください。
バックアップファイル URL の取得 (パフォーマンス専有型のローカルディスクを使用する SQL Server 2008 R2 のみ)
ファイルをアップロードした後、インポートステップで使用するための一時的な URL を生成します。
-
OSS コンソールにログインし、[バケット] をクリックします。
-
移行先バケットの名前をクリックします。
-
左側のナビゲーションウィンドウで、[ファイル管理] > [ファイル] を選択します。
-
バックアップファイルの [アクション] 列で [詳細] をクリックします。[有効期限 (秒)] を
28800(8 時間) に設定します。重要移行タスクはこの URL を使用してファイルをダウンロードします。タスクが完了する前に URL の有効期限が切れると、移行は失敗します。
-
[ファイル URL のコピー] をクリックします。

-
内部ネットワーク経由で移行するには、URL 内のパブリックエンドポイントを内部エンドポイントに変更します。例えば、
oss-cn-shanghai.aliyuncs.comをoss-cn-shanghai-internal.aliyuncs.comに変更します。内部エンドポイントのフォーマットはリージョンによって異なります。詳細については、「エンドポイントとデータセンターエンドポイントとデータセンター」をご参照ください。
ステップ 3:OSS バックアップデータのインポート
ご利用の RDS インスタンスタイプに合った手順を選択してください。
SQL Server 2012 以降、またはクラウドディスクを使用する SQL Server 2008 R2
-
インスタンスページに移動します。トップナビゲーションバーで RDS インスタンスのリージョンを選択し、インスタンス ID をクリックします。
-
左側のナビゲーションウィンドウで、[バックアップと復元] をクリックします。
-
[OSS バックアップデータを RDS へ移行] をクリックします。
-
[インポートガイド] で、[次へ] を 2 回クリックしてデータインポートステップに進みます。
初回使用時には、ApsaraDB RDS から OSS へのアクセスを権限付与する必要があります。[権限付与 URL] をクリックして、権限付与を完了します。権限付与を行わない場合、[OSS バケット] リストは空になります。アップロードしたファイルが表示されない場合は、ファイルの拡張子が 制限事項 の要件を満たしていること、およびバケットと RDS インスタンスが同じリージョンにあることを確認してください。
-
インポート設定を構成します。
パラメーター 説明 データベース名 RDS インスタンス上で復元されるデータベースの名前。SQL Server の命名規則に従い、既存のデータベースやアタッチされていないデータベースファイルと競合しないようにする必要があります。バックアップセットにターゲットデータベースと同じ名前のデータベースファイルが含まれている場合、そのファイルを使用して復元できます。その際、データベースファイル名はターゲットデータベース名と一致する必要があります。 OSS バケット バックアップファイルを含むバケットを選択します。 OSS ファイル 検索アイコンをクリックして、プレフィックスでファイルを検索します。リストにはファイル名、サイズ、更新時刻が表示されます。 クラウド移行方法 即時アクセス (完全バックアップ):単一の完全バックアップファイルからの完全移行。 BackupMode=FULLとIsOnlineDB=Trueを設定します。アクセス保留 (増分バックアップ):完全バックアップに加えてログまたは差分バックアップを使用した移行。BackupMode=UPDFとIsOnlineDB=Falseを設定します。整合性チェックモード 非同期 DBCC:データベースをすぐに開き、バックグラウンドで DBCC CHECKDBを実行します。ダウンタイムを削減します。CheckDBMode=AsyncExecuteDBCheckを設定します。ダウンタイムの最小化を優先する場合に使用します。同期 DBCC:データベースを開く前にDBCC CHECKDBを実行します。時間はかかりますが、事前にデータ整合性を確認します。CheckDBMode=SyncExecuteDBCheckを設定します。 -
[OK] をクリックします。
タスクが完了すると、RDS インスタンスは、自動バックアップポリシーに従って、次のスケジュール時刻にバックアップされます。作成されたバックアップセットには移行されたデータが含まれ、[バックアップと復元] ページで利用可能になります。すぐにバックアップを生成するには、手動バックアップをトリガーします。
SQL Server 2008 R2 (パフォーマンス専有型ローカルディスク付き)
-
インスタンスページに移動し、リージョンを選択してインスタンス ID をクリックします。
-
左側のナビゲーションウィンドウで、[データベース] をクリックします。
-
ターゲットデータベースの[操作]列で、[OSS からバックアップファイルを移行]をクリックします。

-
[インポートガイド] で、情報を確認し、[次へ] をクリックします。
-
OSS アップロードプロンプトを確認し、[次へ] をクリックします。
-
[バックアップファイルの OSS URL] フィールドに、ステップ 2 でコピーした URL を入力し、[OK] をクリックします。
このインスタンスタイプは、完全バックアップファイルの1回限りのインポートのみをサポートします。

ステップ 4:移行タスクの監視
ご利用の RDS インスタンスタイプに合ったビューを選択してください。
SQL Server 2012 以降、またはクラウドディスクを使用する SQL Server 2008 R2
[バックアップと復元] に移動して、[バックアップデータのクラウド移行レコード] タブをクリックします。タブには、タスクステータス、開始時刻、終了時刻が表示されます。デフォルトでは、過去 1 週間のレコードが表示されます。必要に応じて時間範囲を調整してください。
[タスクステータス] が [失敗] の場合は、[タスクの説明] を確認するか、[ファイルの詳細を表示] をクリックして原因を特定し、問題を解決してからタスクを再実行します。
パフォーマンス専有型のローカルディスクを使用する SQL Server 2008 R2
[クラウドへのデータ移行] ページで、移行タスクを見つけて進捗を確認します。
[タスクステータス] が [失敗] の場合、[タスクの説明] を確認するか、[ファイルの詳細を表示] をクリックして原因を特定し、問題を解決した後にタスクを再実行します。
一般的なリターンメッセージ
| タスクタイプ | ステータス | タスクの説明 | 意味 |
|---|---|---|---|
| 1回限りの完全バックアップインポート | 成功 | success |
移行は正常に完了しました。 |
| 失敗 | Failed to download backup file since OSS URL was expired. |
タスクが終了する前に OSS のダウンロード URL の有効期限が切れました。URL を再生成して再試行してください。 | |
Your backup is corrupted or newer than RDS, failed to verify. |
バックアップファイルが破損しているか、ソース SQL Server のバージョンが RDS インスタンスのバージョンより新しいです。 | ||
DBCC checkdb failed |
ソースデータベースに整合性エラーがあります。 | ||
autotest_2008r2_std_testmigrate_log.trn is a Transaction Log backup, we only accept a FULL Backup. |
ファイルはログバックアップです。代わりに完全バックアップファイルを提供してください。 | ||
autotest_2008r2_std_testmigrate_diff.bak is a Database Differential backup, we only accept a FULL Backup. |
ファイルは差分バックアップです。代わりに完全バックアップファイルを提供してください。 |
トラブルシューティング
The database (xxx) already exists on RDS. Please back it up and drop it, then try again. または Database 'xxx' already exists. Choose a different database name.
ApsaraDB RDS for SQL Server は、既存のデータベースへの移行を許可していません。既存のデータベースをバックアップして削除してから、再試行してください。
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. {#backup-verification-failed}
考えられる原因は2つあります。
ファイルの破損:ソースデータベースの新しい完全バックアップを作成し、新しい移行タスクを開始してください。
バージョンの不一致:ソース SQL Server のバージョンが、移行先 RDS インスタンスのバージョンより新しいです。同じバージョン以降を実行している RDS インスタンスを使用してください。既存の RDS インスタンスをアップグレードするには、「データベースエンジンバージョンのアップグレード」をご参照ください。
DBCC checkdb failed
ソースデータベースにエラーがあります。次のコマンドで修正してから、移行を再試行してください。
DBCC CHECKDB (DBName, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGSこのコマンドはデータ損失を引き起こす可能性があります。
Not Enough Disk Space for restoring, space left (xxx MB) < needed (xxx MB). または Not Enough Disk Space, space left xxx MB < bak file xxx MB.
RDS インスタンスのストレージが不足しています。インスタンスストレージをアップグレードして、再試行してください。
Cannot open database "xxx" requested by the login. The login failed.
アカウントにデータベースに対する権限がありません。[アカウント管理] ページで、必須の権限を付与してください。詳細については、「アカウントに権限を付与する」および「さまざまなアカウントタイプでサポートされている権限」をご参照ください。
Your RDS doesn't have any init account yet, please create one and grant permissions on RDS console to this migrated database (xxx).
RDS インスタンスに特権アカウントがありません。バックアップは正常に復元されましたが、権限を付与できませんでした。特権アカウントを作成してください。
移行タスクを設定する際に [OK] ボタンがグレーアウトする
RAM ユーザーの権限が不十分です。「前提条件」の RAM ユーザー要件を確認してください。
RAM ユーザーとして AliyunRDSImportRole の権限を付与する際に permission denied が発生する
Alibaba Cloud アカウント (root ユーザー) を使用して、RAM ユーザーに一時的に AliyunRAMFullAccess を追加してください。
API リファレンス
| API | 説明 |
|---|---|
| CreateMigrateTask | OSS のバックアップファイルを ApsaraDB RDS for SQL Server インスタンスに復元する移行タスクを作成します。 |
| CreateOnlineDatabaseTask | 移行タスクのデータベースを開きます。 |
| DescribeMigrateTasks | ApsaraDB RDS for SQL Server インスタンスの移行タスクを一覧表示します。 |
| DescribeOssDownloads | 移行タスクのファイル詳細を照会します。 |




