ApsaraDB RDS for SQL Server は、データベースをクラウドに移行するためのインスタンスレベルのソリューションを提供します。自己管理 SQL Server インスタンスから ApsaraDB RDS for SQL Server インスタンスに、複数のデータベースまたはすべてのデータベースの完全なデータを移行できます。これを行うには、自己管理 SQL Server インスタンス上のすべてのデータベースをバックアップし、完全バックアップファイルを OSS バケット内の同じフォルダにアップロードしてから、移行スクリプトを実行する必要があります。
一度に 1 つのデータベースのみを移行する必要があるデータベースレベルの移行を実行している場合は、詳細については、「完全バックアップのクラウドへの移行」および「増分バックアップのクラウドへの移行」をご参照ください。
前提条件
ソースデータベースは自己管理 SQL Server データベースである必要があります。
宛先 ApsaraDB RDS for SQL Server インスタンスは、次の条件を満たす必要があります。
インスタンスの利用可能なストレージ容量は、移行するデータファイルのサイズよりも大きい必要があります。容量が不十分な場合は、事前にインスタンスの仕様をアップグレードしてください。
SQL Server 2008 R2 インスタンスの場合: 移行するデータベースと同じ名前のデータベースを宛先インスタンスに作成します。このステップは、他の SQL Server バージョンでは不要です。
Resource Access Management (RAM) ユーザーを使用する場合、次の条件を満たす必要があります。
RAM ユーザーには、AliyunOSSFullAccess および AliyunRDSFullAccess 権限が必要です。RAM ユーザーに権限を付与する方法の詳細については、「RAM を使用した OSS 権限の管理」および「RAM を使用した ApsaraDB RDS 権限の管理」をご参照ください。
Alibaba Cloud アカウントが、OSS リソースにアクセスするための権限を ApsaraDB RDS サービスアカウントに付与している必要があります。
Alibaba Cloud アカウントで手動でアクセスポリシーを作成し、そのポリシーを RAM ユーザーにアタッチする必要があります。
制限事項
このソリューションは完全移行のみをサポートします。増分移行はサポートされていません。
課金
このトピックで説明する方法を使用してデータを移行する場合、OSS バケットの使用に対してのみ課金されます。
シナリオ | 課金ルール |
OSS バケットへのバックアップファイルのアップロード | 無料です。 |
OSS バケットでのバックアップファイルの保存 | ストレージ料金が課金されます。詳細については、OSS の 料金 ページをご参照ください。 |
OSS バケットから RDS インスタンスへのバックアップファイルの移行 |
|
準備
1. Python 3 のインストール
Python の公式サイトにアクセスして、お使いのオペレーティングシステム用のパッケージをダウンロードしてインストールします。Python 3.12 以降を選択してください。
Windows の場合: インストール中に、後で手動で環境変数を設定する手間を省くため、
Add python.exe to PATHチェックボックスを選択します。macOS または Linux の場合: 公式サイトから Python をインストールするか、Homebrew、apt、dnf などのシステムパッケージマネージャを使用できます。詳細については、Python の公式ドキュメントをご参照ください。
2. Python のインストールとバージョンの確認
実行可能ファイルの名前は、オペレーティングシステムやインストール方法によって異なる場合があります。一般的な名前には、python、python3、py があります。次のコマンドを順番に試し、ご自身のインストールに対応するものを使用してください。
3. SDK 依存関係のインストール
pip install alibabacloud_rds20140815
pip install alibabacloud-oss-v21. 自己管理 SQL Server インスタンス上のすべてのデータベースをバックアップする
データ整合性を確保するため、完全バックアップ中に新しいデータを書き込まないでください。サービスの中断を避けるために、事前にバックアップを計画してください。
バックアップスクリプトを使用しない場合は、バックアップファイルに
DatabaseName_BackupType_BackupTime.bak形式で名前を付ける必要があります。例:Testdb_FULL_20180518153544.bak。そうしないと、移行は失敗します。
バックアップスクリプトをダウンロードします。
バックアップスクリプトファイルをダブルクリックして、Microsoft SQL Server Management Studio (SSMS) を使用して開きます。SSMS を使用した接続方法の詳細については、「公式ドキュメント」をご参照ください。
必要に応じて次のパラメーターを変更します。
設定項目
説明
@backup_databases_list
バックアップするデータベース。複数のデータベースはセミコロン (;) またはカンマ (,) で区切ります。
@backup_type
バックアップタイプ。有効値:
FULL: 完全バックアップ。
DIFF: 差分バックアップ。
LOG: ログバックアップ。
重要このソリューションでは、このパラメーターを FULL に設定します。
@backup_folder
バックアップファイルが保存されるローカルフォルダ。フォルダが存在しない場合は自動的に作成されます。
@is_run
バックアップを実行するかどうかを指定します。有効値:
1: バックアップを実行します。
0: バックアップを実行せずにチェックのみを実行します。
バックアップスクリプトを実行します。データベースは指定されたフォルダにバックアップされます。

2. バックアップファイルを OSS にアップロードする
バックアップファイルを OSS にアップロードする前に、OSS にバケットを作成する必要があります。
OSS にバケットが既に存在する場合、次の要件を満たしていることを確認してください:
OSS にバケットが存在しない場合は、作成する必要があります。(OSS を有効化していることを確認してください。)
OSS コンソールにログインし、[バケット] をクリックしてから、[バケットの作成] をクリックします。
次の主要なパラメーターを設定します。他のパラメーターはデフォルト値のままにすることができます。
重要バケットは主にこのデータ移行のために作成されます。主要なパラメーターのみを設定する必要があります。移行完了後にバケットを削除して、データ漏洩を防ぎ、コストを削減できます。
バケットを作成する際、サーバ側暗号化を有効にしないでください。
パラメーター
説明
例
バケット名
バケットの名前。名前はグローバルに一意である必要があり、バケットの作成後は変更できません。
命名規則:
名前には小文字、数字、ハイフン (-) のみを含めることができます。
名前は小文字または数字で始まる必要があります。
名前の長さは 3 ~ 63 文字である必要があります。
migratetest
リージョン
バケットが存在するリージョン。イントラネット経由で ECS インスタンスからバケットにデータをアップロードし、イントラネット経由で ApsaraDB RDS インスタンスにデータを復元する場合、バケット、ECS インスタンス、および ApsaraDB RDS インスタンスは同じリージョンにある必要があります。
中国 (杭州)
ストレージタイプ
[標準] を選択します。このトピックの移行操作は、他のストレージタイプのバケットをサポートしていません。
標準
バックアップファイルを OSS にアップロードします。
ローカルデータベースをバックアップした後、ApsaraDB RDS インスタンスと同じリージョンにある OSS バケットにバックアップファイルをアップロードします。バケットとインスタンスが同じリージョンにある場合、イントラネットを使用してサービスを相互接続できます。この方法では、アウトバウンドインターネットトラフィックが無料で、データアップロード速度が速くなります。次のいずれかの方法を使用できます。
3. 移行スクリプトを実行してデータベースを ApsaraDB RDS に移行する
SQL Server 移行スクリプトをダウンロードします。
パッケージを解凍した後、次のコマンドを実行してスクリプトに必要なパラメーターを表示します。
python ~/Downloads/RDSSQLCreateMigrateTasksBatchly.py -h次の結果が返されます。
RDSSQLCreateMigrateTasksBatchly.py -k <access_key_id> -s <access_key_secret> -i <rds_instance_id> -e <oss_endpoint> -b <oss_bucket> -d <directory>次の表にパラメーターを示します。
パラメーター
説明
access_key_id
宛先 ApsaraDB RDS インスタンスを所有する Alibaba Cloud アカウントの AccessKey ID。
access_key_secret
宛先 ApsaraDB RDS インスタンスを所有する Alibaba Cloud アカウントの AccessKey Secret。
rds_instance_id
宛先 ApsaraDB RDS インスタンスの ID。
oss_endpoint
バックアップファイルが保存されているバケットのエンドポイント。
oss_bucket
バックアップファイルが保存されているバケットの名前。
directory
バックアップファイルが保存されている OSS バケット内のフォルダ。ファイルがルートディレクトリにある場合は、
/を入力します。移行スクリプトを実行して移行タスクを完了します。
この例では、
MigrationdataOSS バケットのtestdatabucketフォルダから、ID が rm-2zesz5774ud8s**** の ApsaraDB RDS for SQL Server インスタンスに適格なすべてのバックアップファイルを移行する方法を示します。python ~/Downloads/RDSSQLCreateMigrateTasksBatchly.py -k yourAccessKeyID -s yourAccessKeySecret -i rm-2zesz5774ud8s**** -e oss-cn-beijing.aliyuncs.com -b testdatabucket -d Migrationdata
4. 移行タスクの進捗状況の表示
ApsaraDB RDS for SQL Server インスタンスのバージョンに基づいて方法を選択します。
SQL Server 2012 以降
ApsaraDB RDS インスタンスの左側のナビゲーションウィンドウで、[バックアップと復元] をクリックします。[データ移行レコード] タブで、タスクのステータス、開始時刻、終了時刻などの移行レコードを表示できます。デフォルトでは、先週のレコードが表示されます。必要に応じて時間範囲を調整できます。

タスクの [ステータス] が [失敗] の場合は、失敗した移行タスクの [タスクの説明] を確認するか、[ファイルの詳細を表示] をクリックして失敗の原因を特定します。問題を修正した後、データ移行スクリプトを再度実行します。
SQL Server 2008 R2
ApsaraDB RDS インスタンスの左側のナビゲーションウィンドウで、[クラウドへのデータ移行] をクリックします。対象の移行タスクを見つけて、その進捗状況を表示します。
タスクの [ステータス] が [失敗] の場合は、失敗した移行タスクの [タスクの説明] を確認するか、[ファイルの詳細を表示] をクリックして失敗の原因を特定します。問題を修正した後、データ移行スクリプトを再度実行します。
一般的なエラー
エラーメッセージ | 原因 | ソリューション |
| OpenAPI 操作の呼び出しに使用された AccessKey ID が正しくありません。 | 正しい AccessKey ID と AccessKey Secret を入力してください。 |
| OpenAPI 操作の呼び出しに使用された AccessKey Secret が正しくありません。 | |
| このソリューションは ApsaraDB RDS for SQL Server のみをサポートします。他のデータベースエンジンはサポートされていません。 | 宛先インスタンスとして ApsaraDB RDS for SQL Server インスタンスを使用してください。 |
| ApsaraDB RDS インスタンス ID が存在しません。 | ApsaraDB RDS インスタンス ID が正しいかどうかを確認してください。 |
| エンドポイントが正しくないため、接続に失敗しました。 | 指定されたエンドポイントが正しいかどうかを確認してください。 |
| OSS バケットが存在しません。 | 指定された OSS バケットが正しいかどうかを確認してください。 |
| 指定されたフォルダが OSS バケットに存在しないか、フォルダに適格なデータベースバックアップファイルが含まれていません。 | フォルダが OSS バケットに存在するか、フォルダに適格なデータベースバックアップファイルが含まれているかを確認してください。 |
| バックアップファイル名が命名規則に従っていません。 | バックアップスクリプトを使用しない場合は、バックアップファイルに |
| RAM ユーザーに十分な権限がありません。 | RAM ユーザーに OSS と ApsaraDB RDS を使用する権限を付与する必要があります (AliyunOSSFullAccess と AliyunRDSFullAccess 権限)。 |
| OpenAPI 操作の呼び出し時にエラーメッセージが返されました。 | エラーコードとエラーメッセージに基づいて原因を分析してください。 |
OpenAPI エラーコード
HTTP ステータスコード | エラー | 説明 | 説明 |
403 | InvalidDBName | 指定されたデータベース名は許可されていません。 | データベース名が無効です。システムデータベース名は使用できません。 |
403 | IncorrectDBInstanceState | 現在の DB インスタンスの状態ではこの操作はサポートされていません。 | ApsaraDB RDS インスタンスが無効な状態です。たとえば、インスタンスのステータスが [作成中] です。 |
400 | IncorrectDBInstanceType | 現在の DB インスタンスタイプではこの操作はサポートされていません。 | データベースエンジンはサポートされていません。この機能は ApsaraDB RDS for SQL Server でのみ利用可能です。 |
400 | IncorrectDBInstanceLockMode | 現在の DB インスタンスのロックモードではこの操作はサポートされていません。 | データベースが無効なロック状態です。 |
400 | InvalidDBName.NotFound | 指定された 1 つ以上の DB 名が存在しないか、DB の状態がサポートされていません。 | データベースが存在しません。
|
400 | IncorrectDBType | 現在の DB タイプではこの操作はサポートされていません。 | データベースタイプはこの操作をサポートしていません。 |
400 | IncorrectDBState | 現在の DB 状態ではこの操作はサポートされていません。 | データベースが無効な状態です。たとえば、データベースが作成中であるか、移行タスクが進行中です。 |
400 | UploadLimitExceeded | UploadTimesQuotaExceeded: この DB の 1 日のアップロード回数を超えています。 | 移行操作の回数が制限を超えています。各インスタンスの各データベースで 1 日に最大 20 回の移行操作を実行できます。 |
400 | ConcurrentTaskExceeded | 同時タスクが許可された量を超えています。 | 移行操作の回数が制限を超えています。各インスタンスで 1 日に最大 500 回の移行操作を実行できます。 |
400 | IncorrectFileExtension | ファイル拡張子はサポートされていません。 | バックアップファイルのファイル拡張子が無効です。 |
400 | InvalidOssUrl | 指定された oss url は無効です。 | 提供された OSS ダウンロード URL は利用できません。 |
400 | BakFileSizeExceeded | 許可された bak ファイルサイズを超えています。 | データベースバックアップファイルがサイズ制限を超えています。最大サイズは 3 TB です。 |
400 | FileSizeExceeded | DB インスタンスの許可されたファイルサイズを超えています。 | 復元されたバックアップファイルは、現在のインスタンスのストレージ容量を超えます。 |
関連 API 操作
API | 説明 |
OSS から ApsaraDB RDS for SQL Server インスタンスにバックアップファイルを復元し、データ移行タスクを作成します。 | |
ApsaraDB RDS for SQL Server データ移行タスクのデータベースを開きます。 | |
ApsaraDB RDS for SQL Server インスタンスのデータ移行タスクのリストをクエリします。 | |
ApsaraDB RDS for SQL Server データ移行タスクのファイル詳細をクエリします。 |



をクリックし、アップロードするバックアップファイルを選択して、[開く] をクリックします。ローカルファイルが OSS にアップロードされます。

