アプリケーションが数分レベルのダウンタイムしか許容できない場合に、この移行方法をご利用ください。Object Storage Service (OSS) を介して完全バックアップをステージングし、ApsaraDB RDS for SQL Server にリストアした後、カットオーバー前にログバックアップまたは差分バックアップを適用してデータギャップを埋めます。この移行方法では物理バックアップファイルを使用するため、ターゲットデータベースはソースと完全に同一のコピーとなり、論理的移行では保持できないインデックスの断片化や統計情報もそのまま維持されます。
アプリケーションが最大 2 時間のダウンタイムを許容でき、かつデータベースサイズが 100 GB 未満の場合は、代わりに完全バックアップによる移行をご利用ください。この方法では一度に 1 つのデータベースのみを移行します。
仕組み
移行は以下の 2 つのフェーズで実行されます。
完全データ移行: ソースデータベースをバックアップし、完全バックアップファイルを OSS バケットにアップロードして、ApsaraDB RDS コンソールから RDS インスタンスにリストアします。
増分フェーズ: ログバックアップまたは差分バックアップファイルを繰り返しバックアップ・アップロードしてデータギャップを縮小します。最終ログバックアップのサイズが 500 MB 未満になったら、ソースデータベースへの書き込みを停止し、最終ログバックアップをアップロードしてからターゲットデータベースを開きます。
移行中、ターゲットデータベースは常に In Recovery 状態(RDS High-availability Edition)または Restoring 状態(RDS Basic Edition)のままです。最終ステップで開くまで、読み取り・書き込みはできません。
前提条件
セルフマネージド SQL Server インスタンス:
FULL 復元モード を使用していること。SIMPLE 復元モードではトランザクションログバックアップがサポートされておらず、増分移行に必要なログバックアップが実行できません。
ソースデータベースで
DBCC CHECKDBを実行し、割り当てエラーまたは整合性エラーが報告されていないことを確認してください。CHECKDB found 0 allocation errors and 0 consistency errors in database 'xxx'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.
RDS インスタンス:
SQL Server 2012 以降、またはクラウドディスク搭載の SQL Server 2008 R2 を実行していること。
RDS インスタンス上に、ソースデータベースと同じ名前の既存データベースや、同じ名前の未アタッチデータベースファイルが存在しないこと。名前が重複すると、リストアが失敗します。
利用可能なストレージ容量が、移行対象のデータファイルのサイズより大きいこと。ストレージ容量を拡張する必要がある場合は、事前に実施してください。
権限付与:
ApsaraDB RDS サービスアカウントがご利用の OSS バケットにアクセスできる必要があります。権限付与を確認・実施するには、以下の手順に従ってください。
RDS インスタンスの バックアップと復元 ページで、OSS バックアップデータを RDS に移行 をクリックします。
インポートガイド ウィザードで、次へ を 2 回クリックして、ステップ 3. データのインポート に進みます。
ページ左下隅を確認します。You have authorized RDS official service account to access your OSS と表示されている場合は、権限付与は完了しています。表示されていない場合は、Authorization URL リンクをクリックして権限を付与してください。

Resource Access Management (RAM) ユーザーをご利用の場合、以下の追加要件が適用されます。
RAM ユーザーには AliyunOSSFullAccess および AliyunRDSFullAccess 権限が付与されていること。RAM を使用した OSS 権限の管理 および RAM を使用した ApsaraDB RDS 権限の管理 をご参照ください。
Alibaba Cloud アカウントでカスタムアクセスポリシーを作成し、それを RAM ユーザーにアタッチしています。
import com.aliyun.oss.*; import com.aliyun.oss.common.auth.*; import com.aliyun.oss.common.comm.SignVersion; import com.aliyun.oss.internal.Mimetypes; import com.aliyun.oss.model.*; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.List; public class Demo { public static void main(String[] args) throws Exception { // ご使用のバケットのリージョンに対応するエンドポイントに置き換えてください。 String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 認証情報は、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET から読み込まれます。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); String bucketName = "examplebucket"; // バケット内の完全なオブジェクトパス(バケット名を除く)。 String objectName = "exampledir/exampleobject.txt"; // アップロードするバックアップファイルの完全なローカルパス。 String filePath = "D:\\localpath\\examplefile.txt"; // バケットのリージョン識別子(例:「cn-hangzhou」)。 String region = "cn-hangzhou"; ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); OSS ossClient = OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(credentialsProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); try { // マルチパートアップロードを開始します。 InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectName); ObjectMetadata metadata = new ObjectMetadata(); if (metadata.getContentType() == null) { metadata.setContentType(Mimetypes.getInstance().getMimetype(new File(filePath), objectName)); } request.setObjectMetadata(metadata); InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request); String uploadId = upresult.getUploadId(); List<PartETag> partETags = new ArrayList<PartETag>(); // 各パートのサイズは 1 MB です。ファイルサイズおよびネットワーク状況に応じて調整してください。 final long partSize = 1 * 1024 * 1024L; final File sampleFile = new File(filePath); long fileLength = sampleFile.length(); int partCount = (int) (fileLength / partSize); if (fileLength % partSize != 0) { partCount++; } // 各パートを順次アップロードします。 for (int i = 0; i < partCount; i++) { long startPos = i * partSize; long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize; UploadPartRequest uploadPartRequest = new UploadPartRequest(); uploadPartRequest.setBucketName(bucketName); uploadPartRequest.setKey(objectName); uploadPartRequest.setUploadId(uploadId); InputStream instream = new FileInputStream(sampleFile); instream.skip(startPos); uploadPartRequest.setInputStream(instream); // 最後のパートは 100 KB より小さくても構いませんが、他のすべてのパートは最低でも 100 KB である必要があります。 uploadPartRequest.setPartSize(curPartSize); // パート番号は 1 ~ 10,000 の範囲です。 uploadPartRequest.setPartNumber(i + 1); UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest); partETags.add(uploadPartResult.getPartETag()); instream.close(); } // アップロードを完了します。OSS はすべてのパートを順序通りにアセンブルします。 CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest(bucketName, objectName, uploadId, partETags); CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest); System.out.println("アップロード成功、ETag: " + completeMultipartUploadResult.getETag()); } catch (OSSException oe) { System.out.println("OSS がリクエストを拒否しました: " + oe.getErrorMessage() + " (コード: " + oe.getErrorCode() + ", リクエスト ID: " + oe.getRequestId() + ")"); } catch (ClientException ce) { System.out.println("OSS との通信でクライアントエラーが発生しました: " + ce.getMessage()); } finally { if (ossClient != null) { ossClient.shutdown(); } } } }
注意事項
| 項目 | 詳細 |
|---|---|
| 適用範囲 | 1 回の移行タスクにつき 1 つのデータベースのみ。複数のデータベースを移行する場合は、「セルフマネージド SQL Server インスタンスから ApsaraDB RDS for SQL Server インスタンスへのデータ移行」をご参照ください。 |
| バージョン互換性 | 新しい SQL Server バージョンから古いバージョンへの移行はサポートされていません。 |
| RAM ロール | 権限付与後、RAM に AliyunRDSImportRole という名前のロールが作成されます。このロールを変更または削除しないでください。変更または削除した場合は、移行ウィザードを使用して再度権限付与を行ってください。 |
| アカウント | 移行後、セルフマネージドインスタンスのアカウントは引き継がれません。ApsaraDB RDS コンソールで新しいアカウントを作成してください。 |
| OSS ファイル | 移行が完了するまで、OSS バケットからバックアップファイルを削除しないでください。 |
| バックアップファイル名 | !@#$%^&*()_+-= などの特殊文字を含めることはできません。 |
| バックアップファイルの拡張子 | .bak(完全バックアップ)、.diff(差分バックアップ)、.trn または .log(ログバックアップ)。その他のファイル形式は認識されません。.bak ファイルには完全バックアップ、差分バックアップ、ログバックアップのいずれかが含まれる可能性があります。拡張子はバックアップタイプを決定しません。 |
| `.lbak` ファイルの変換 | ApsaraDB RDS コンソールからログバックアップをダウンロードした場合(形式:.zip.log)、ファイル名を .zip に変更して解凍し、生成された database_name.lbak ファイルの拡張子を .bak に変更してから、増分ログバックアップとしてアップロードしてください。 |
移行タイムラインの例
以下の例では、アプリケーションのダウンタイムを 5 分未満で移行を完了する方法を示しています。
| フェーズ | ステップ | 時刻 | 詳細 |
|---|---|---|---|
| 完全データ移行 | 準備 | 00:00 前 | DBCC CHECKDB を実行し、ソースデータベースのバックアップシステムをシャットダウンして、復元モードを FULL に設定します。 |
| ステップ 1 | 00:01 | 完全バックアップを実行します。所要時間の目安:約 1 時間。 | |
| ステップ 2 | 02:00 | 完全バックアップファイルを OSS にアップロードします。所要時間の目安:約 1 時間。 | |
| ステップ 3 | 03:00 | ApsaraDB RDS コンソールで完全バックアップからリストアします。所要時間の目安:約 19 時間。 | |
| 増分フェーズ | ステップ 4 | 22:00 | ソースデータベースでログバックアップを実行します。所要時間の目安:約 20 分。 |
| ステップ 5 | 22:20 | ログバックアップファイルを OSS にアップロードします。所要時間の目安:約 10 分。 | |
| ステップ 6 | 22:30 | ステップ 4~5 を繰り返し、最終ログバックアップが 500 MB 未満になるまで続けます。その後、ソースデータベースへの書き込みを停止し、最終ログバックアップを実行してアップロードします。 | |
| データベースを開く | ステップ 7 | 22:34 | 最終増分アップロードが完了(約 4 分)。 |
| ステップ 8 | 22:35 | ターゲットデータベースを開きます。非同期 DBCC モードの場合、データベースは 1 分以内にオンラインになります。 |
ステップ 1:ソースデータベースのバックアップ
バックアップスクリプトをダウンロードし、SQL Server Management Studio (SSMS) で開きます。
以下のパラメーターを設定します。
パラメーター 説明 @backup_databases_listソースデータベースの名前。複数のデータベース名を指定する場合は、セミコロン ( ;) またはカンマ (,) で区切ります。@backup_typeバックアップタイプ: FULL(完全バックアップ)、DIFF(差分バックアップ)、またはLOG(ログバックアップ)。@backup_folderバックアップファイルを保存するセルフマネージドインスタンス上のディレクトリ。ディレクトリが存在しない場合は自動的に作成されます。 @is_run1を指定してバックアップを実行します;0を指定すると、チェックのみを実行します。バックアップスクリプトを実行します。バックアップタイプに関係なく、
.bakファイルが生成されます。
ステップ 2:バックアップファイルを OSS にアップロード
バックアップファイルは、RDS インスタンスと同一リージョンの OSS バケット内に配置する必要があります。同一リージョンでの転送は内部ネットワークを使用するため、インターネットのアウトバウンド料金が発生せず、アップロード速度も向上します。
OSS バケットの準備
既存のバケットがある場合、以下の要件を満たしていることを確認してください。
ストレージクラスが 標準 であること(低頻度アクセス、アーカイブ、コールドアーカイブ、ディープコールドアーカイブストレージはサポートされていません)。
データ暗号化が有効になっていないこと。
バケットがない場合、新規に作成します。
このバケットは移行専用です。移行完了後は、不要なコストやデータ漏洩のリスクを回避するため、バケットを削除してください。データ暗号化を有効にしないでください。
OSS コンソールにログインし、バケット をクリックしてから、バケットの作成 をクリックします。
主なパラメーターを設定します。
パラメーター 説明 例 バケット名 グローバルに一意。3~63 文字。小文字英数字およびハイフンのみ使用可能。先頭および末尾は小文字英数字である必要があります。 migratetestリージョン RDS インスタンスのリージョンと一致させる必要があります(内部ネットワーク経由でアップロードする場合は Elastic Compute Service (ECS) インスタンスのリージョンとも一致させる必要があります)。 中国 (杭州) ストレージクラス 標準 を選択します。 標準 その他のパラメーターはデフォルト値のままにして、作成を完了します。
バックアップファイルのアップロード
ファイルサイズに応じて、以下のアップロード方法を選択します。
方法 1:ossbrowser(ほとんどのケースで推奨)
ossbrowser をダウンロードします。
ダウンロードしたパッケージを解凍し、アプリケーションを起動します(例:Windows x64 の場合
oss-browser.exe)。ログイン方法として AK を選択し、AccessKeyId および AccessKeySecret を入力して、Log On をクリックします。
AccessKey 認証情報を安全に保管してください。「AccessKey ペアの作成」をご参照ください。

対象のバケットをクリックして開きます。

をクリックしてバックアップファイルを選択し、Open をクリックしてアップロードします。
方法 2:OSS コンソール(5 GB 未満のファイル)
OSS コンソールにログインします。
バケット をクリックしてから、対象のバケット名をクリックします。

オブジェクト セクションで、オブジェクトのアップロード をクリックします。

バックアップファイルを アップロードするファイル エリアにドラッグ&ドロップするか、ファイルを選択 をクリックして参照します。

ページ下部の オブジェクトのアップロード をクリックします。
方法 3:OSS API マルチパートアップロード(5 GB 超のファイル)
大規模なバックアップファイルの場合は、マルチパートアップロード機能付きの OSS Java SDK を使用します。以下の例では、認証情報を環境変数から読み取ります。実行前に OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET を設定してください。詳細なドキュメントについては、「マルチパートアップロード」をご参照ください。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.internal.Mimetypes;
import com.aliyun.oss.model.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class Demo {
public static void main(String[] args) throws Exception {
// バケットのリージョンに対応するエンドポイントに置き換えます。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 認証情報は環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET から読み取ります。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
String bucketName = "examplebucket";
// バケット内のオブジェクトのフルパス(バケット名を除く)。
String objectName = "exampledir/exampleobject.txt";
// アップロードするバックアップファイルのローカルフルパス。
String filePath = "D:\\localpath\\examplefile.txt";
// バケットのリージョン識別子(例:"cn-hangzhou")。
String region = "cn-hangzhou";
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// マルチパートアップロードを開始します。
InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectName);
ObjectMetadata metadata = new ObjectMetadata();
if (metadata.getContentType() == null) {
metadata.setContentType(Mimetypes.getInstance().getMimetype(new File(filePath), objectName));
}
request.setObjectMetadata(metadata);
InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request);
String uploadId = upresult.getUploadId();
List<PartETag> partETags = new ArrayList<PartETag>();
// 各パーツは 1 MB。ファイルサイズやネットワーク状況に応じて調整してください。
final long partSize = 1 * 1024 * 1024L;
final File sampleFile = new File(filePath);
long fileLength = sampleFile.length();
int partCount = (int) (fileLength / partSize);
if (fileLength % partSize != 0) {
partCount++;
}
// 各パーツを順次アップロードします。
for (int i = 0; i < partCount; i++) {
long startPos = i * partSize;
long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize;
UploadPartRequest uploadPartRequest = new UploadPartRequest();
uploadPartRequest.setBucketName(bucketName);
uploadPartRequest.setKey(objectName);
uploadPartRequest.setUploadId(uploadId);
InputStream instream = new FileInputStream(sampleFile);
instream.skip(startPos);
uploadPartRequest.setInputStream(instream);
// 最後のパーツは 100 KB 未満でも構いません。それ以外のパーツは 100 KB 以上である必要があります。
uploadPartRequest.setPartSize(curPartSize);
// パーツ番号は 1 から 10,000 の範囲です。
uploadPartRequest.setPartNumber(i + 1);
UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);
partETags.add(uploadPartResult.getPartETag());
instream.close();
}
// アップロードを完了します。OSS はすべてのパーツを順序通りにアセンブルします。
CompleteMultipartUploadRequest completeMultipartUploadRequest =
new CompleteMultipartUploadRequest(bucketName, objectName, uploadId, partETags);
CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest);
System.out.println("アップロード成功、ETag:" + completeMultipartUploadResult.getETag());
} catch (OSSException oe) {
System.out.println("OSS がリクエストを拒否しました:" + oe.getErrorMessage()
+ "(コード:" + oe.getErrorCode() + "、リクエスト ID:" + oe.getRequestId() + ")");
} catch (ClientException ce) {
System.out.println("OSS との通信でクライアントエラーが発生しました:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}ステップ 3:移行タスクの作成
インスタンス ページに移動します。上部ナビゲーションバーで RDS インスタンスのリージョンを選択し、インスタンス ID をクリックします。
左側のナビゲーションウィンドウで、バックアップと復元 をクリックします。
ページ上部で、OSS バックアップデータを RDS に移行 をクリックします。
インポートガイド ウィザードで、次へ を 2 回クリックして データのインポート ステップに進みます。
移行ウィザードを初めて使用する場合は、権限付与 をクリックして権限付与プロセスを完了してください。権限付与が行われていないと、OSS バケット ドロップダウンリストが空のままになります。
以下のパラメーターを設定して、OK をクリックします。
パラメーター 説明 データベース名 RDS インスタンス上のターゲットデータベース名。インスタンス上に既存のデータベースまたは未アタッチデータベースファイルと名前が重複しないようにしてください。 OSS バケット 完全バックアップファイルを含む OSS バケット。 OSS ファイル 虫眼鏡アイコンをクリックして、ファイル名のプレフィックスでバックアップファイルを検索します。検索結果にはファイル名、サイズ、最終更新時刻が表示されます。 クラウド移行方法 アクセス保留中(増分バックアップ) を選択します。これにより、データベースはリストア中の状態を維持し、増分バックアップを適用できるようになります( BackupMode = UPDF、IsOnlineDB = False)。即時アクセス(完全バックアップ) は選択しないでください。このオプションは完全バックアップ後にすぐにデータベースを開き、増分バックアップを受け付けません(BackupMode = FULL、IsOnlineDB = True)。更新 をクリックしてタスクステータスを監視します。タスクが失敗した場合は、「トラブルシューティング」をご参照ください。
ステップ 4:ログまたは差分バックアップファイルのインポート
完全バックアップのリストア後、データギャップを埋めるために増分バックアップを適用します。
インスタンス ページに移動し、ご利用のリージョンを選択してインスタンス ID をクリックします。
左側のナビゲーションウィンドウで、バックアップと復元 をクリックしてから、バックアップデータのクラウド移行レコード タブをクリックします。
ターゲットデータベースを検索し、タスク操作 列の 増分ファイルのアップロード をクリックします。増分ファイルを選択して、OK をクリックします。
各ログバックアップファイルについて、このステップを繰り返し、時系列順にアップロードしてください。
最終ログまたは差分バックアップファイルのサイズを 500 MB 未満に保つようにしてください。データ整合性を確保するため、最終バックアップを生成する前にソースデータベースへのすべての書き込みを停止してください。
ステップ 5:データベースを開く
すべてのバックアップファイルのインポート後、ターゲットデータベースを開いて読み取り・書き込みを可能にします。
インスタンス ページに移動し、ご利用のリージョンを選択してインスタンス ID をクリックします。
左側のナビゲーションウィンドウで、バックアップと復元 をクリックしてから、バックアップデータのクラウド移行レコード タブをクリックします。
ターゲットデータベースを検索し、タスク操作 列の データベースを開く をクリックします。
整合性チェックモードを選択して、OK をクリックします。
モード 動作 適用条件 非同期 DBCC データベースを即時に開き、その後バックグラウンドで DBCC CHECKDBを実行します。ダウンタイムを最小限に抑えます。(CheckDBMode = AsyncExecuteDBCheck)ダウンタイムに敏感だが、整合性チェックの結果が即座に重要ではない場合。 同期 DBCC データベースを開く前に DBCC CHECKDBを実行します。データベースを開くまでの時間が長くなります。(CheckDBMode = SyncExecuteDBCheck)データベースが本番稼働する前に、整合性チェックの結果が必要です。
ステップ 6:移行レコードの確認
バックアップと復元 > バックアップデータのクラウド移行レコード に移動して、すべての移行タスクを確認できます。タスク操作 列の ファイル詳細の表示 をクリックすると、タスクに関連付けられた各バックアップファイルのステータスと詳細を確認できます。
移行完了後、ApsaraDB RDS はご利用のインスタンスに設定された自動バックアップポリシーに従ってデータベースを自動的にバックアップします。即時にバックアップを実行するには、手動バックアップを実行してください。
トラブルシューティング
完全バックアップ移行中に発生するエラーについては、本トピックの「トラブルシューティング」をご参照ください。
以下は増分バックアップ移行に特有のエラーです。
ターゲットデータベースが開けない
*ソースの SQL Server エディションがターゲット RDS エディションより上位ですか?*
エラーメッセージ:Failed to open database xxx.
セルフマネージド SQL Server インスタンスが、ターゲット RDS SQL Server エディションでサポートされていない機能(データ圧縮やテーブルパーティションなど)を使用しています。たとえば、ソースが Enterprise Edition で動作しており、ターゲットが Web Edition の場合、Enterprise 版専用の機能がこのエラーの原因となります。
解決策:
セルフマネージドインスタンスでサポートされていない機能を無効化し、再度データベースをバックアップして移行を再試行します。
ソースと同じ SQL Server エディションを実行する RDS インスタンスに切り替えます。「ApsaraDB RDS for SQL Server インスタンスの作成と使用」および「SQL Server のバージョンおよびエディション別のサポート機能」をご参照ください。
バックアップチェーン内の LSN 不一致
*増分バックアップが時系列順にアップロードされましたか?*
エラーメッセージ: このバックアップセットのログはログシーケンス番号 XXX から開始されており、データベースに適用するには新しすぎます。RESTORE LOG は異常に終了しています。
増分バックアップファイル内のログシーケンス番号(LSN)が、直前のバックアップからの連続性を維持していません。これは、増分ファイルが誤ったベースバックアップに対して適用された場合や、順序を守らずにアップロードされた場合に発生します。
解決策:増分バックアップファイルを、作成された順序に厳密に従って時系列順にアップロードしてください。
非同期 DBCC 実行後に整合性エラーが検出された
*ターゲットデータベースで DBCC CHECKDB が整合性エラーを報告しましたか?*
エラーメッセージ:asynchronously DBCC checkdb failed: CHECKDB found 0 allocation errors and 2 consistency errors in table 'XXX' (object ID XXX).
バックグラウンドで実行された整合性チェックにより、ターゲットデータベースにエラーが検出されました。これはソースデータに破損があることを示しています。
解決策:
以下のコマンドをターゲットデータベースで実行してエラーを修復します(データ損失が発生する可能性があります)。
重要この文はデータ損失を引き起こす可能性があります。許容可能な場合にのみ使用してください。
DBCC CHECKDB (DBName, REPAIR_ALLOW_DATA_LOSS)あるいは、まずソースデータベースを修復してから再度移行を実施します。
DBCC CHECKDB (DBName, REPAIR_ALLOW_DATA_LOSS)
増分ファイルが期待される場面で完全バックアップファイルが選択された
*[増分ファイルのアップロード] ステップで完全バックアップファイルを選択しましたか?*
エラーメッセージ: バックアップセット (xxx) はデータベースのフルバックアップであり、トランザクションログまたは差分バックアップのみを受け付けます。
完全バックアップのリストア後、増分ファイルのアップロード ステップではログバックアップまたは差分バックアップファイルのみを受け付けます。
解決策:ログバックアップまたは差分バックアップファイルを選択してください。
データベース数の上限超過
*RDS インスタンスがデータベース数の上限に達しましたか?*
エラーメッセージ:The database (xxx) migration failed due to databases count limitation.
解決策:別の RDS インスタンスに移行するか、不要なデータベースを削除してください。
RAM ユーザーの権限に関する問題
*移行タスクの設定時に [OK] ボタンが選択不可になっていますか?*
RAM ユーザーに必要な権限が付与されていない可能性があります。AliyunOSSFullAccess、AliyunRDSFullAccess、およびカスタムの AliyunRDSImportRole ポリシーがすべて付与されていることを確認してください(「前提条件」をご参照ください)。
*RAM ユーザーが AliyunRDSImportRole 権限の付与時に no permission エラーを受けていますか?*
Alibaba Cloud アカウントを使用して、一時的に RAM ユーザーに AliyunRAMFullAccess 権限を付与してください。「RAM を使用した ApsaraDB RDS 権限の管理」をご参照ください。セットアップ完了後は、この権限を削除してください。
API リファレンス
| API | 説明 |
|---|---|
| CreateMigrateTask | OSS から ApsaraDB RDS for SQL Server インスタンスにバックアップファイルをリストアする移行タスクを作成します。 |
| CreateOnlineDatabaseTask | すべてのバックアップファイルのインポート後、ターゲットデータベースを開きます。 |
| DescribeMigrateTasks | ApsaraDB RDS for SQL Server インスタンスの移行タスク一覧を取得します。 |
| DescribeOssDownloads | 移行タスクのファイル詳細を取得します。 |