自己管理型SQL ServerインスタンスからApsaraDB RDS for SQL Serverインスタンスに複数またはすべてのデータベースのデータを移行するために、ApsaraDB RDS for SQL Serverは、データをRDSインスタンスに移行するためのインスタンスレベルの移行方法を提供します。 これらのデータベースの完全バックアップファイルをObject Storage Service (OSS) バケットの同じフォルダーにアップロードし、必要なスクリプトを実行してデータをRDSインスタンスに移行するだけです。
データベースレベルの移行方法を使用する場合、一度に1つのデータベースのデータのみを移行できます。 ApsaraDB RDS for SQL Serverは、以下のOSSベースのクラウド移行方法を提供します。
前提条件
ソースデータベースは自己管理型のSQL Serverインスタンスです。
移行先RDSインスタンスは、次の要件を満たしています。
RDSインスタンスは、SQL Server 2008 R2、SQL Server 2012、またはそれ以降を実行します。 RDSインスタンスの作成方法の詳細については、「ApsaraDB RDS For SQL Serverインスタンスの作成」をご参照ください。
RDSインスタンスがSQL Server 2008 R2を実行している場合、データベースはRDSインスタンスに作成されます。 自己管理型SQL Serverインスタンスからデータを移行する各データベースに、RDSインスタンス上で同じ名前の対応データベースがあることを確認します。 また、作成したデータベースが空であることを確認してください。 詳細については、「アカウントとデータベースの作成」をご参照ください。
説明RDSインスタンスがSQL Server 2012以降を実行する場合は、この要件を無視してください。
RDSインスタンスの使用可能なストレージは十分です。 使用可能なストレージが不十分な場合は、移行を開始する前にRDSインスタンスのストレージ容量を拡張する必要があります。 詳細については、「ApsaraDB RDS For SQL Serverインスタンスの仕様の変更」をご参照ください。
OSSが有効化されています。 詳細については、「OSSの有効化」をご参照ください。
RAMユーザーを使用する場合は、次の要件が満たされていることを確認してください。
AliyunOSSFullAccessおよびAliyunRDSFullAccessポリシーはRAMユーザーにアタッチされます。 RAMユーザーに権限を付与する方法の詳細については、「RAMを使用してOSS権限を管理する」および「RAMを使用してApsaraDB RDS権限を管理する」をご参照ください。
ApsaraDB RDSのサービスアカウントは、Alibaba Cloudアカウントを使用してOSSバケットにアクセスすることで承認されます。
カスタムポリシーは、Alibaba Cloudアカウントを使用して手動で作成され、RAMユーザーにアタッチされます。 カスタムポリシーの作成方法の詳細については、「カスタムポリシーの作成」の「JSONタブでカスタムポリシーを作成する」をご参照ください。
カスタムポリシーには次のコンテンツを使用する必要があります。
{ "Version": "1", "Statement": [ { "Action": [ "ram:GetRole" ], "リソース": "acs:ram:*:*:role/AliyunRDSImportRole" 、 "Effect": "Allow" } ] }
制限事項
データ移行には完全バックアップファイルのみを使用できます。
課金
このトピックで説明されている方法を使用してデータを移行する場合、OSSバケットの使用に対してのみ課金されます。
シナリオ | 課金ルール |
OSSバケットへのバックアップファイルのアップロード | 無料です。 |
OSSバケットにバックアップファイルを保存する | ストレージ料金が請求されます。 詳細については、料金をご覧ください。 OSSのページにアクセスします。 |
OSSバケットからRDSインスタンスへのバックアップファイルの移行 |
|
準備
Python 2.7.18をインストールします。 詳細については、Python公式Webサイトをご覧ください。
Python 2.7.18がインストールされているか確認します。
Windows オペレーティングシステム
c:\Python27\python.exe -V
コマンドを実行して、Pythonのバージョンを確認します。Python 2.7.18
が表示されている場合、Python 2.7.18がインストールされます。上記のコマンドが内部コマンドでも外部コマンドでもないことをシステムが求めた場合は、Pythonインストールパスとpipコマンドパスをpath環境変数に追加します。
Mac、Linux、またはUnixオペレーティングシステム
python -V
コマンドを実行して、Pythonのバージョンを確認します。Python 2.7.18
が表示されている場合、Python 2.7.18がインストールされます。
次のいずれかの方法を使用して、SDK依存パッケージをインストールします。
pipコマンドを実行する
pip install aliyun-python-sdk-rds pipインストールoss2
ソースコードを使用する
# APIリポジトリをクローンします。 git clone https://github.com/aliyun/aliyun-openapi-python-sdk.git # Alibaba CloudのSDKコアリポジトリをインストールします。 cd aliyun-python-sdk-core python setup.pyインストール # ApsaraDB RDS SDKをインストールします。 cd aliyun-python-sdk-rds python setup.pyインストール # OSS SDKのクローンを作成します。 git clone https://github.com/aliyun/aliyun-oss-python-sdk.git cd aliyun-oss-python-sdk # oss2をインストールします。 python setup.pyインストール
手順1: 自己管理型SQL Serverインスタンスのすべてのデータベースのバックアップ
データの整合性のため、完全バックアップ中はこれらのデータベースへのデータ書き込みを停止することをお勧めします。
バックアップスクリプトを使用して完全バックアップを実行しない場合、生成されるバックアップファイルの名前は、
Testdb_FULL_20180518153544.bak
などのDatabase name_Backup type_Backup time.bak
の形式に従う必要があります。 名前が別の形式の場合、バックアップは失敗します。
バックアップスクリプトファイルをダウンロードします。
Microsoft SQL Server Management Studio (SSMS) を使用して、バックアップスクリプトファイルをダブルクリックして開きます。 接続にSSMSを使用する方法の詳細については、「公式ドキュメント」をご参照ください。
次のパラメーターを設定します。
パラメーター
説明
@backup_databases_list
バックアップするデータベースの名前。 複数のデータベースを指定する場合は, データベース名をセミコロン (;) またはコンマ (,) で区切ります。
@backup_type
バックアップの種類。 有効な値:
FULL: 完全バックアップ
DIFF: 増分バックアップ
LOG: ログバックアップ
重要この例では、値はFULLである必要があります。
@backup_folder
自己管理データベースのバックアップファイルを格納するために使用されるディレクトリ。 指定されたディレクトリが存在しない場合、システムは自動的にディレクトリを作成します。
@is_run
バックアップまたはチェックを実行するかどうかを指定します。 有効な値:
1: バックアップを実行します。
0: チェックを実行します。
例:
SELECT /** * バックアップに必要なデータベースリスト、区切り文字は: または、 * 空 ('') またはnull: システムデータベースを除くすべてのデータベースを意味します * 例: '[testdb]: TestDR, Test, readonly' **/ @ backup_databases_list = N'[dtstestdata],[testdb]' @ backup_type = N'FULL, -- バックアップタイプ? FULL: フルバックアップ; DIFF: 差分バックアップ; ログ: ログバックアップ @ backup_folder = N'C:\BACKUP' -- バックアップファイルを保存するためのバックアップフォルダ。 @ is_run = 1 -- チェックまたは実行? 1、直接実行; 0、ちょうどチェック
バックアップスクリプトを実行して、指定したデータベースをバックアップし、バックアップファイルを指定したディレクトリに保存します。
手順2: バックアップファイルをOSSバケットにアップロードする
OSSバケットを作成します。
OSSコンソールにログインします。
左側のナビゲーションウィンドウで、[バケット] をクリックします。 [バケット] ページで、[バケットの作成] をクリックします。
次のパラメーターを設定します。 他のパラメーターのデフォルト値を保持します。
重要作成されたOSSバケットはデータ移行にのみ使用され、データ移行が完了すると使用されなくなります。 キーパラメーターのみを設定する必要があります。 データのリークや過剰なコストを防ぐために、できるだけ早い機会にデータ移行が完了した後にOSSバケットを削除することを推奨します。
OSSバケットの作成時にデータ暗号化を有効にしないでください。 詳細については、「データ暗号化」をご参照ください。
パラメーター
説明
例
バケット名
OSS バケットの名前。 名前はグローバルに一意であり、設定後に変更することはできません。
命名規則:
名前には、小文字、数字、およびハイフン (-) を使用できます。
先頭と末尾は小文字または数字である必要があります。
名前の長さは 3 ~ 63 文字である必要があります。
migratetest
リージョン
OSS バケットの名前です。 内部ネットワークを介してElastic Compute Service (ECS) インスタンスからOSSバケットにデータをアップロードし、内部ネットワークを介してRDSインスタンスにデータを復元する場合は、OSSバケット、ECSインスタンス、およびRDSインスタンスが同じリージョンにあることを確認してください。
中国 (杭州)
ストレージクラス
バケットのストレージクラス。 [標準] を選択します。 このトピックで説明するクラウド移行操作は、他のストレージクラスのバケットでは実行できません。
標準
バックアップファイルをOSSバケットにアップロードします。
説明RDSインスタンスとOSSバケットが同じリージョンにある場合、内部ネットワークを介して相互に通信できます。 内部ネットワークを使用してバックアップデータをアップロードできます。 この方法は高速で、インターネットトラフィックの料金は発生しません。 ターゲットRDSインスタンスと同じリージョンにあるOSSバケットにバックアップファイルをアップロードすることを推奨します。
自己管理型SQL Serverインスタンスの完全バックアップが完了したら、次のいずれかの方法を使用して、生成された完全バックアップファイルをOSSバケットにアップロードする必要があります。
ステップ3: 移行スクリプトを実行して移行タスクを完了する
移行スクリプトパッケージをダウンロードします。
移行スクリプトパッケージを解凍し、次のコマンドを実行して、指定する必要があるパラメーターを表示します。
python ~ /ダウンロード /RDSSQLCreateMigrateTasksBatchly.py -h
同様の結果が返されます。
RDSSQLCreateMigrateTasksBatchly.py -k <access_key_id> -s <access_key_secret> -i <rds_instance_id> -e <oss_endpoint> -b <oss_bucket> -d <ディレクトリ>
表 1 パラメーターの説明 パラメーター
説明
access_key_id
RDSインスタンスが属するAlibaba CloudアカウントのAccessKey ID。
access_key_secret
RDSインスタンスが属するAlibaba CloudアカウントのAccessKeyシークレット。
rds_instance_id
RDS インスタンスの ID
oss_endpoint
バックアップファイルを格納するOSSバケットのエンドポイント。 エンドポイントの取得方法の詳細については、「バケットの概要」をご参照ください。
oss_bucket
バックアップファイルを格納するOSSバケットの名前。
directory
OSSバケット内のバックアップファイルを保存するフォルダー。 バックアップファイルがルートフォルダに保存されている場合は、スラッシュ (
/
) を入力します。移行スクリプトを実行して、移行タスクを完了します。
移行スクリプトを実行して、指定された条件を満たすすべてのバックアップファイルを、
testdatabucket
という名前のOSSバケットのMigrationdata
フォルダーから、IDがrm-2zesz5774ud8s **** のRDSインスタンスに移行できます。python ~ /ダウンロード /RDSSQLCreateMigrateTasksBatchly.py -k LTAIQ **** -s BMkIUhroub *********-i rm-2zesz5774ud8s **** -e oss-cn-beijing.aliyuncs.com -b testdatabucket -d Migrationdata
移行タスクの進行状況を表示します。
- [インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDSインスタンスを見つけ、インスタンスのIDをクリックします。
RDSインスタンスのSQL Serverバージョンに基づいて、次の手順を実行します。
RDS SQL Server 2008 R2
表示されるページの左側のナビゲーションウィンドウで、[クラウドへのデータベース移行] をクリックします。 送信したすべての移行タスクを表示できます。
説明ページの右上隅にある [更新] をクリックすると、移行タスクの最新のステータスが表示されます。
SQL Server 2012以降
表示されるページの左側のナビゲーションウィンドウで、バックアップと復元 をクリックします。 次に、バックアップデータのアップロード履歴 タブをクリックします。
説明デフォルトでは、過去7日間の移行レコードが表示されます。 時間範囲を指定して、指定した時間範囲の移行タスクを表示できます。
(共通エラーコード 29~31 など)
エラーメッセージ | 原因 | 解決策 |
| API操作の呼び出しに使用されるAccessKey IDが無効です。 | 有効なAccessKey IDとAccessKey secretを使用します。 詳細については、「AccessKeyペアに関するFAQ」をご参照ください。 |
| API操作の呼び出しに使用されるAccessKeyシークレットが無効です。 | |
| データを移行するRDSインスタンスは、SQL Serverを実行しません。 | SQL Serverを実行するRDSインスタンスを使用します。 |
| RDSインスタンスのIDが存在しません。 | RDSインスタンスのIDが有効かどうかを確認します。 RDSインスタンスのIDが無効な場合は、有効なインスタンスIDを入力します。 |
| OSSバケットへの接続に使用されるエンドポイントが無効です。 | OSSバケットへの接続に使用されるエンドポイントが有効かどうかを確認します。 エンドポイントが無効な場合は、有効なエンドポイントを入力します。 エンドポイントの取得方法の詳細については、「バケットの概要」をご参照ください。 |
| OSSバケットは存在しません。 | 入力されたOSSバケットの名前が有効かどうかを確認します。 入力した名前が無効な場合は、有効な名前を入力します。 |
| 必要なフォルダーがOSSバケットに存在しないか、指定された条件を満たすバックアップファイルがフォルダーに含まれていません。 | OSSバケットにフォルダーが存在するかどうか、および指定された条件を満たすバックアップファイルがフォルダーに含まれているかどうかを確認します。 フォルダーがOSSバケットに存在せず、指定された条件を満たすバックアップファイルがフォルダーに含まれていない場合は、OSSバケットにフォルダーを作成し、指定された条件を満たすバックアップファイルをインポートします。 |
| バックアップファイルの名前が命名規則を満たしていません。 | バックアップスクリプトを使用して完全バックアップを実行しない場合、生成されるバックアップファイルの名前は、 |
| RAMユーザーに必要な権限がありません。 | AliyunOSSFullAccessおよびAliyunRDSFullAccessポリシーをRAMユーザーにアタッチします。 RAMユーザーを権限付与する方法の詳細については、「RAMユーザーの権限付与」をご参照ください。 |
| API操作が呼び出されるとエラーが発生します。 | [エラーコード] に記載されているエラー情報に基づいて、特定のエラー原因を分析します。 |
HTTPステータスコード | エラー | 説明 | 説明 |
403 | InvalidDBName | The specified database name is not allowed. | 指定されたデータベース名が無効な場合に返されるエラーメッセージ。 たとえば、データベースの名前がシステムデータベースの名前と同じである場合、データベースの名前は無効です。 |
403 | IncorrectDBInstanceState | Current DB instance state does not support this operation. | RDSインスタンスが必要な状態でない場合に返されるエラーメッセージ。 たとえば、RDSインスタンスは [作成中] 状態です。 |
400 | IncorrectDBInstanceType | Current DB instance type does not support this operation. | RDSインスタンスがSQL Serverを実行していない場合に返されるエラーメッセージ。 |
400 | IncorrectDBInstanceLockMode | Current DB instance lock mode does not support this operation. | RDSインスタンスが操作をサポートしていないロック状態にある場合に返されるエラーメッセージ。 |
400 | InvalidDBName.NotFound | Specified one or more DB name does not exist or DB status does not support. | 指定されたデータベースが見つからない場合に返されるエラーメッセージ。
|
400 | IncorrectDBType | Current DB type does not support this operation. | RDSインスタンスで実行されるデータベースエンジンで操作がサポートされていない場合に返されるエラーメッセージ。 |
400 | IncorrectDBState | Current DB state does not support this operation. | データベースが作成中であるか、別の移行タスクからデータを受信している場合に返されるエラーメッセージ。 |
400 | UploadLimitExceeded | UploadTimesQuotaExceeded: Exceeding the daily upload times of this DB. | 1日に1つのデータベースで実行されたデータ移行タスクの数が20を超えた場合に返されるエラーメッセージ。 |
400 | ConcurrentTaskExceeded | Concurrent task exceeding the allowed amount. | 1つのデータベースでその日に実行されたデータ移行タスクの数が500を超えた場合に返されるエラーメッセージ。 |
400 | IncorrectFileExtension | The file extension does not support. | バックアップファイルのファイル名拡張子が無効な場合に返されるエラーメッセージ。 |
400 | InvalidOssUrl | Specified oss url is not valid. | OSSバケットからバックアップファイルをダウンロードするために指定されたURLが無効な場合に返されるエラーメッセージ。 |
400 | BakFileSizeExceeded | Exceeding the allowed bak file size. | バックアップファイルの合計サイズが3テラバイトを超えた場合に返されるエラーメッセージ。 |
400 | FileSizeExceeded | Exceeding the allowed file size of DB instance. | バックアップファイルから復元されたデータのサイズがRDSインスタンスの使用可能なストレージを超えている場合に返されるエラーメッセージ。 |
関連する API 操作
API 操作 | 説明 |
データ移行タスクを作成します。 | |
バックアップデータの移行先のデータベースをApsaraDB RDS for SQL Serverインスタンスで開きます。 | |
ApsaraDB RDS for SQL Serverインスタンスのバックアップデータを移行するために作成されたタスクを照会します。 | |
ApsaraDB RDS for SQL Serverインスタンスのバックアップデータ移行タスクのバックアップファイルの詳細を照会します。 |