完全バックアップファイル (.bak) を Object Storage Service (OSS) にアップロードし、その後コンソールから RDS インスタンスにインポートすることで、自己管理 SQL Server データベースを ApsaraDB RDS for SQL Server に移行します。この手法は、ワンタイム移行、ディザスタリカバリ、およびクラウドベースのデータバックアップに適用可能です。
仕組み
オンプレミス環境の SQL Server データベースを
.bakファイル形式でバックアップします。バックアップファイルを、RDS インスタンスと同じリージョンにある OSS バケットにアップロードします。
RDS コンソールからインポートタスクを実行します。システムが OSS からファイルを取得し、復元処理を行います。
本ソリューションはデータベース単位の移行のみをサポートしています。複数またはすべてのデータベースを一度に移行する場合は、「インスタンス単位の移行ソリューション」をご利用ください。
制限事項
開始前に、以下の制約事項を確認し、本ソリューションがご利用のユースケースに適合することをご確認ください。
移行範囲:データベース単位のみ。1 回のタスクで 1 つのデータベースのみ対応可能です。
バージョン互換性:ソース側の SQL Server バージョンは、送信先の RDS インスタンスのバージョンより新しくしてはなりません。たとえば、SQL Server 2016 のバックアップを SQL Server 2012 の RDS インスタンスに復元することはできません。
バックアップタイプ:完全バックアップファイル (
.bak) のみをサポートしています。差分バックアップおよびログバックアップはインポートプロセスで受け付けられません。ファイル名:
!@#$%^&*()_+-=などの特殊文字を含めることはできません。ファイルフォーマット:ソースが ApsaraDB RDS for SQL Server からダウンロードしたバックアップファイル(
.zip形式)である場合、アップロード前に.bakに解凍してください。サポートされる拡張子:
.bak(完全バックアップ)、.diff(差分バックアップ)、.trnまたは.log(ログバックアップ)。その他の拡張子を持つファイルは認識されません。AliyunRDSImportRole:OSS へのアクセス権限を RDS サービスアカウントに付与すると、RAM に
AliyunRDSImportRoleという名前のロールが作成されます。このロールは変更・削除しないでください。変更または削除すると、移行タスクが失敗します。誤って削除した場合は、移行ウィザードから再度権限を付与してください。移行後のアカウント:移行後、ソースインスタンスから移行された元のデータベースアカウントは利用できなくなります。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 インスタンスに、移行対象のデータベースと同じ名前のデータベースが既に存在すること。
Resource Access Management (RAM) ユーザーを使用する場合:
RAM ユーザーに AliyunOSSFullAccess および AliyunRDSFullAccess 権限が付与されていること。「RAM を使用した OSS 権限の管理」および「RAM を使用した ApsaraDB RDS 権限の管理」をご参照ください。
Alibaba Cloud アカウントが、ApsaraDB RDS サービスアカウントに対して OSS リソースへのアクセス権限を付与済みであること。以下の権限付与手順をご確認ください。
Alibaba Cloud アカウントが、「カスタムアクセスポリシーの作成」を実行し、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) で開きます。
スクリプト内の
SELECT文の直下にあるYOU HAVE TO INIT PUBLIC VARIABLES HEREセクションで、以下のパラメーターを設定します。パラメーター 説明 @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'); GOmodel列の値が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=FULLIsOnlineDB=True:単一の完全バックアップファイルからの完全移行。`BackupMode=FULL` および `IsOnlineDB=True` を設定します。アクセス保留(増分バックアップ)BackupMode=UPDFIsOnlineDB=False:完全バックアップに加えてログバックアップまたは差分バックアップを使用した移行。`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」をクリックします。
このインスタンスタイプでは、完全バックアップファイルのワンタイムインポートのみがサポートされています。

ステップ 4:移行タスクの監視
RDS インスタンスタイプに応じたビューを選択してください。
SQL Server 2012 以降、またはクラウドディスクを使用する SQL Server 2008 R2 の場合
「バックアップと復元」に移動し、「バックアップデータのクラウド移行記録」タブをクリックします。タブにはタスクのステータス、開始時刻、終了時刻が表示されます。デフォルトでは過去 1 週間の記録が表示されます。必要に応じて期間を調整してください。

タスクステータス が 失敗 の場合、「タスク説明」を確認するか、「ファイル詳細の表示」をクリックして原因を特定し、問題を解決した後にタスクを再実行してください。
パフォーマンス専有型ローカルディスクを使用する SQL Server 2008 R2 の場合
「クラウドへのデータ移行」ページで、移行タスクを見つけて進行状況を確認します。
タスクステータス が 失敗 の場合、「タスク説明」を確認するか、「ファイル詳細の表示」をクリックして原因を特定し、問題を解決した後にタスクを再実行してください。
一般的な戻りメッセージ
| タスクタイプ | ステータス | タスク説明 | 意味 |
|---|---|---|---|
| ワンタイム完全バックアップインポート | 成功 | 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. | ファイルは差分バックアップです。代わりに完全バックアップファイルを提供してください。 |
トラブルシューティング
データベース (xxx) は既に RDS 上に存在します。バックアップを取得して削除した後、再度お試しください。 または データベース 'xxx' は既に存在します。別のデータベース名を選択してください。
ApsaraDB RDS for SQL Server では、既存のデータベースへの移行は許可されていません。既存のデータベースをバックアップし、削除した後、移行タスクを再実行してください。
バックアップセット (xxx.bak) はデータベース差分バックアップです。完全バックアップのみを受け付けます。
提供されたファイルは差分バックアップです。本移行手法では完全バックアップファイルのみがサポートされています。
バックアップセット (xxx.trn) はトランザクションログバックアップです。完全バックアップのみを受け付けます。
提供されたファイルはログバックアップです。本移行手法では完全バックアップファイルのみがサポートされています。
xxx.bak の検証に失敗しました。バックアップファイルが破損しているか、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このコマンドはデータ損失を引き起こす可能性があります。
復元に必要なディスク領域が不足しています。残り容量 (xxx MB) < 必要容量 (xxx MB)。 または ディスク領域が不足しています。残り容量 xxx MB < バックアップファイル xxx MB。
RDS インスタンスのストレージが不足しています。「インスタンスストレージのスペックアップ」を実行してください。
ログイン要求によるデータベース "xxx" を開けません。ログインに失敗しました。
RDS インスタンスへの接続に使用したアカウントが、データベースに対する権限を持っていません。「アカウント管理」ページで必要な権限を付与してください。「アカウントへの権限付与」および「各種アカウントタイプがサポートする権限」をご参照ください。
RDS には初期アカウントがまだありません。この移行されたデータベース (xxx) に対して、RDS コンソールでアカウントを作成し、権限を付与してください。
RDS インスタンスに特権アカウントが存在しません。バックアップは正常に復元されましたが、権限の付与ができませんでした。「特権アカウントの作成」を実行してください。
移行タスクの構成時に OK ボタンが無効化されている
RAM ユーザーの権限が不足しています。「前提条件」で RAM ユーザーの要件を確認してください。
permission denied(AliyunRDSImportRole の権限付与時に RAM ユーザーで発生)
Alibaba Cloud アカウントを使用して、「RAM ユーザーに一時的に AliyunRAMFullAccess を追加」してください。
API リファレンス
| API | 説明 |
|---|---|
| CreateMigrateTask | OSS からバックアップファイルを ApsaraDB RDS for SQL Server インスタンスに復元する移行タスクを作成します。 |
| CreateOnlineDatabaseTask | 移行タスクのデータベースを開きます。 |
| DescribeMigrateTasks | ApsaraDB RDS for SQL Server インスタンスの移行タスク一覧を表示します。 |
| DescribeOssDownloads | 移行タスクのファイル詳細を照会します。 |





