すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:完全バックアップのクラウドへの移行

最終更新日:Sep 04, 2026

ApsaraDB RDS for SQL Server は、セルフマネージド SQL Server データベースを Alibaba Cloud へ移行するためのソリューションを提供します。セルフマネージド SQL Server データベースの完全バックアップデータを Alibaba Cloud Object Storage Service (OSS) にアップロードし、ApsaraDB RDS コンソールから指定した ApsaraDB RDS for SQL Server データベースへ完全バックアップデータをインポートするだけです。このソリューションは、データバックアップ、データ移行、ディザスタリカバリなどのシナリオに適しています。

前提条件

  • ApsaraDB RDS for SQL Server インスタンスは、以下の要件を満たす必要があります。

    • インスタンスの残りのストレージ領域は、移行するデータファイルのサイズより大きい必要があります。ストレージ領域が不足している場合は、事前にインスタンスのストレージをアップグレードしてください。

    • インスタンスが SQL Server 2012 以降、または SQL Server 2008 R2 でクラウドディスクを使用している場合は、移行するデータベースと同じ名前のデータベースがインスタンスに含まれていないことを確認してください。

    • インスタンスが SQL Server 2008 R2 で高性能ローカルディスクを使用している場合は、移行するデータベースと同じ名前のデータベースがインスタンスに作成されていることを確認してください。

  • RAM ユーザーとしてログインする場合は、以下の要件を満たす必要があります。

    • RAM ユーザーに AliyunOSSFullAccess および AliyunRDSFullAccess 権限が付与されていること。RAM ユーザーへの権限付与方法の詳細については、「RAM を使用した OSS 権限の管理」および「RAM を使用した ApsaraDB RDS 権限の管理」をご参照ください。

    • Alibaba Cloud アカウント (プライマリアカウント) が、ApsaraDB RDS の公式サービスアカウントに OSS リソースへのアクセスを許可していること。

      クリックして権限付与方法を表示

      1. ApsaraDB RDS インスタンスの復元 ページに移動し、OSS バックアップデータをクラウド上で復元する をクリックします。

      2. インポートガイド ページで、次へ を 2 回クリックして 3. データのインポート ステップに進みます。

        ページの左下隅にApsaraDB RDS 公式サービスアカウントによる OSS リソースへのアクセスが承認されましたが表示された場合、承認は完了しています。表示されない場合、承認は完了していません。この場合、ページで権限付与アドレスをクリックして承認を付与してください。

        [3. データのインポート] ページで、以下のパラメータを設定します。

        • [データベース名]:移行先データベースの名前を入力します。

        • [OSS バケット]:ドロップダウンリストから、アップロードしたバックアップファイルが保存されているバケットを選択します。

        • [OSS ファイルリスト]:ファイル名のプレフィックスを入力してバックアップファイルを検索し、ファイルを選択します。

        • [移行方法]:[データベースを開く (完全バックアップファイルが 1 つのみ)] または [データベースを開かない (差分バックアップまたはログファイルが利用可能)] を選択します。

        • [整合性チェック方法]:[同期 DBCC] または [非同期 DBCC] を選択します。

    • Alibaba Cloud アカウント (プライマリアカウント) で手動で権限ポリシーを作成し、そのポリシーを RAM ユーザーにアタッチします。

      クリックしてポリシーの内容を表示

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "ram:GetRole"
                  ],
                  "Resource": "acs:ram:*:*:role/AliyunRDSImportRole",
                  "Effect": "Allow"
              }
          ]
      }

注意事項

  • 移行範囲: このソリューションは、単一のデータベース (データベースレベル) の移行のみをサポートします。複数のデータベースまたはすべてのデータベースを移行する場合は、インスタンスレベルの移行ソリューション を使用してください。

  • バージョン互換性: セルフマネージド環境の SQL Server で作成したバックアップファイルは、下位バージョンの ApsaraDB RDS for SQL Server インスタンスには移行できません。

  • 権限管理 : ApsaraDB RDS サービスアカウントに OSS へのアクセス権限を付与すると、システムは RAM に AliyunRDSImportRole という名前のロールを作成します。このロールは変更または削除しないでください。変更または削除すると、移行タスクは失敗します。 誤ってロールを変更または削除した場合は、データ移行ウィザードで再度権限を付与してください。

  • アカウント管理: 移行が完了すると、元のデータベースのアカウントは使用できなくなります。ApsaraDB RDS コンソールでアカウントを再作成してください。

  • OSS ファイルの保持: 移行タスクが完了する前に、OSS からバックアップファイルを削除しないでください。削除すると、タスクは失敗します。

  • バックアップファイルの要件:

    • ファイル名: ファイル名に !@#$%^&*()_+-= などの特殊文字を含めることはできません。含めると、移行は失敗します。

    • ファイル拡張子: ApsaraDB RDS でサポートされているバックアップファイルには、.bak (完全バックアップ)、.diff (差分バックアップ)、および .trn または .log (ログバックアップ) ファイルが含まれます。 他の種類のファイルは認識できません。

    • ファイルタイプ: アップロードできるのはフルバックアップファイルのみです。差分バックアップファイルとログバックアップファイルはサポートされていません。

    • ファイルソース: ソースデータが、ApsaraDB RDS for SQL Server からダウンロード済みのフルバックアップファイル (デフォルトでは .zip 形式) の場合は、データをクラウドに移行する前に、.bak ファイルに解凍してください。

課金

このソリューションでは、OSS および ApsaraDB RDS 関連の料金が発生します。 詳細については、以下をご参照ください:

image

シナリオ

課金

セルフマネージドデータベースのバックアップファイルを OSS にアップロード

無料。

バックアップファイルを OSS に保存

OSS のストレージ料金が課金されます。 課金の詳細については、「OSS の料金」をご参照ください。

バックアップファイルを OSS から ApsaraDB RDS へ移行

  • 内部ネットワーク経由でバックアップファイルを ApsaraDB RDS に移行する場合、料金は発生しません。

  • インターネット経由でバックアップファイルを移行する場合、OSS のアウトバウンドトラフィック料金が発生します。 課金の詳細については、「OSS の料金」をご参照ください。

事前準備

セルフマネージドデータベース環境で 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.

1. セルフマネージドデータベースのバックアップ

ApsaraDB RDS for SQL Server インスタンスのバージョンに基づいて、ソリューションを選択します。

SQL Server 2012 以降、またはクラウドディスクを使用する SQL Server 2008 R2

説明

セルフマネージドデータベースの完全バックアップを作成する前に、データ書き込みが停止していることを確認してください。バックアップ処理中に書き込まれたデータは、バックアップファイルに含まれません。

  1. 次のコマンドを実行して、ソースデータベースの現在の復旧モデルを確認します。

    SELECT
        name AS DatabaseName,
        recovery_model_desc AS RecoveryModel,
        state_desc AS State
    FROM sys.databases
    ORDER BY name;

    ApsaraDB RDS への移行用に本番バックアップを作成する前に、データベースの復旧モデルを FULL に変更します。

    ALTER DATABASE [db_simple] SET RECOVERY FULL WITH NO_WAIT;
  2. バックアップスクリプトをダウンロードし、SQL Server Management Studio (SSMS) でバックアップスクリプトを開きます。

  3. スクリプトの SELECT ステートメントで、次のパラメーターを変更します。これらのパラメーターは、スクリプト内の YOU HAVE TO INIT PUBLIC VARIABLES HERE の下に記述されています。

    パラメーター

    説明

    @backup_databases_list

    バックアップするデータベース。複数のデータベースはセミコロン (;) またはカンマ (,) で区切ります。

    @backup_type

    バックアップタイプ。有効な値は次のとおりです。

    • FULL:完全バックアップ。

    • DIFF:差分バックアップ。

    • LOG:ログバックアップ。

    @backup_folder

    バックアップファイルを保存するローカルディレクトリ。ディレクトリが存在しない場合は、自動的に作成されます。

    @is_run

    バックアップを実行するかどうかを指定します。有効な値は次のとおりです。

    • 1:バックアップを実行します。

    • 0:チェックのみを実行し、バックアップは実行しません。

  4. バックアップスクリプトを実行します。

高性能ローカルディスクを使用する SQL Server 2008 R2

  1. Microsoft SQL Server Management Studio (SSMS) を開きます。

  2. 移行するデータベースにログインします。

  3. 次のコマンドを実行して、ソースデータベースの現在の復旧モデルを確認します。

    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 ではない場合は、手順 4 に進みます。

    • クエリ結果の model の値が FULL の場合は、手順 5 に進みます。

  4. 次のコマンドを実行して、ソースデータベースの復旧モデルを FULL に設定します。

    ALTER DATABASE [dbname] SET RECOVERY FULL;
    GO
    ALTER DATABASE [dbname] SET AUTO_CLOSE OFF;
    GO
    重要

    復旧モデルを FULL に設定すると、生成される SQL Server ログが増加します。十分なディスク領域があることを確認してください。

  5. 次のコマンドを実行して、ソースデータベースをバックアップします。

    この例では、dbtest データベースを backup.bak ファイルにバックアップします。

    USE master;
    GO
    BACKUP DATABASE [dbtest] to disk ='d:\backup\backup.bak' WITH COMPRESSION,INIT;
    GO
  6. 次のコマンドを実行して、バックアップファイルの完全性を検証します。

    USE master
     GO
     RESTORE FILELISTONLY 
       FROM DISK = N'D:\backup\backup.bak';
    重要
    • 結果セットが返された場合、バックアップファイルは有効です。

    • エラーが報告された場合は、バックアップを再度実行してください。

  7. オプション: 次のコマンドを実行して、データベースの復旧モデルを元に戻します。

    重要

    データベースの復旧モデルがすでに FULL の場合は、この手順をスキップしてください。

    ALTER DATABASE [dbname] SET RECOVERY SIMPLE;
    GO

2. バックアップファイルの OSS へのアップロード

お使いの ApsaraDB RDS for SQL Server インスタンスのバージョンに基づいて、ソリューションを選択します。

SQL Server 2012 以降、またはクラウドディスクを使用する SQL Server 2008 R2

  1. バックアップファイルを OSS にアップロードする前に、OSS にバケットを作成する必要があります。

    • OSS にバケットが既に存在する場合、バケットが次の要件を満たしていることを確認してください:

      • バケットのストレージクラスは 標準ストレージ です。 IA、アーカイブ、コールドアーカイブ、およびディープコールドアーカイブのストレージクラスはサポートされていません。

      • バケットに対して サーバー側の暗号化 が有効になっていないことを確認してください。

    • OSS にバケットが存在しない場合は、まずバケットを作成します。 (OSS が 有効化 されていることを確認してください。)

      1. OSS コンソールにログオンし、バケット をクリックし、次に バケットの作成 をクリックします。

      2. 次の主要なパラメーターを設定し、他のパラメーターはデフォルト値のままにします。

        重要
        • このバケットはこのデータ移行でのみ使用されため、主要なパラメーターのみを設定する必要があります。 移行完了後、データ漏洩や追加料金を防ぐために、バケットを速やかに削除してください。

        • バケット作成時に サーバー側の暗号化 を有効にしないでください。

        パラメーター

        説明

        例

        [バケット名]

        バケットの名前。 名前はグローバルに一意である必要があり、バケット作成後は変更できません。

        命名規則:

        • 名前には、小文字、数字、ハイフン (-) のみ使用できます。

        • 名前の先頭と末尾は、小文字または数字である必要があります。

        • 名前の長さは 3~63 文字である必要があります。

        migratetest

        [リージョン]

        バケットが存在するリージョン。 ECS インスタンスから内部ネットワーク経由でバケットにデータをアップロードし、内部ネットワーク経由でデータを ApsaraDB RDS インスタンスに復元する場合、ECS インスタンス、バケット、ApsaraDB RDS インスタンスが同じリージョンに存在することを確認してください。

        中国 (杭州)

        [ストレージタイプ]

        [標準ストレージ] を選択します。 このトピックで説明する移行操作は、他のストレージクラスのバケットをサポートしていません。

        スタンダード

  2. バックアップファイルを OSS にアップロードします。

    セルフマネージドデータベースのバックアップが完了したら、バックアップファイルを ApsaraDB RDS インスタンスと 同じリージョン にある OSS バケットにアップロードします。 バケットと ApsaraDB RDS インスタンスが同じリージョンにある場合、バケットとインスタンスは内部ネットワーク経由で通信できます。 この場合、インターネットトラフィック料金は発生せず、データはより高速にアップロードされます。 次のいずれかの方法を使用できます:

    ossbrowser を使用したファイルのアップロード (推奨)

    1. ossbrowser をダウンロードします。

    2. この例では、Windows x64 を使用します。 ダウンロードした oss-browser-win32-x64.zip パッケージを解凍し、oss-browser.exe アプリケーションをダブルクリックします。

    3. ログオン方法として アクセスキー を選択し、Access Key ID と Access Key Secret パラメーターを設定し、その他のパラメーターはデフォルト値のままにして、ログイン をクリックします。

      説明

      AccessKey は、データセキュリティを確保するための ID 認証に使用されます。 AccessKey は機密情報として扱ってください。

    4. 移行先のバケットをクリックして、そのバケットに移動します。

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

    OSS コンソールを使用したファイルのアップロード

    説明

    バックアップファイルのサイズが 5 GB 未満の場合は、OSS コンソールで直接バックアップファイルをアップロードできます。

    1. OSS コンソールにログインします。

    2. バケット をクリックし、移行先のバケットの名前をクリックします。

    3. ファイルリスト で、Upload File をクリックします。

    4. バックアップファイルを アップロードするファイル セクションにドラッグするか、ファイルの選択 をクリックして、アップロードするバックアップファイルを選択します。

    5. ページの下部にあるUpload Fileをクリックします。ローカルバックアップファイルが OSS にアップロードされます。

    OSS API を使用したファイルのアップロード (Python 3 プロジェクトの例)

    説明

    バックアップファイルのサイズが 5 GB を超える場合は、OSS API を呼び出して、マルチパートアップロードを使用してバックアップファイルを OSS バケットにアップロードしてください。

    # -*- coding: utf-8 -*-
    """
    Alibaba Cloud OSS Python SDK v2
    依存関係: pip install alibabacloud-oss-v2
    """
    
    import os
    import sys
    from pathlib import Path
    import alibabacloud_oss_v2 as oss
    from alibabacloud_oss_v2 import exceptions as oss_ex
    
    
    def get_client_from_env(region: str, endpoint: str | None = None) -> oss.Client:
        """
        環境変数から v2 クライアントを作成します。
        - リージョン (推奨) の使用を優先しますが、カスタムエンドポイント (オプション) もサポートします。
        - AK と STS の両方と互換性があります:
            * AK: OSS_ACCESS_KEY_ID / OSS_ACCESS_KEY_SECRET が必要
            * STS: OSS_SESSION_TOKEN も必要 (古い変数 OSS_SECURITY_TOKEN と互換性あり)
        """
        # 互換性: ユーザーが古い変数 OSS_SECURITY_TOKEN を使用している場合、v2 が期待する OSS_SESSION_TOKEN にマッピングします
        sec_token_legacy = os.getenv("OSS_SECURITY_TOKEN")
        if sec_token_legacy and not os.getenv("OSS_SESSION_TOKEN"):
            os.environ["OSS_SESSION_TOKEN"] = sec_token_legacy
    
        ak = os.getenv("OSS_ACCESS_KEY_ID")
        sk = os.getenv("OSS_ACCESS_KEY_SECRET")
        st = os.getenv("OSS_SESSION_TOKEN")  # STS トークン (オプション)
    
        if not (ak and sk):
            raise ValueError("No valid AK found. Set the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables. "
                             "If using STS, also set OSS_SESSION_TOKEN (or the old name OSS_SECURITY_TOKEN).")
    
        # 使用される認証情報の種類を示します
        if st:
            print("STSトークン (OSS_SESSION_TOKEN) が検出されました。STS認証情報を使用します。")
        else:
            print("STSトークンは検出されませんでした。AccessKey (AK) 認証情報を使用します。")
    
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
        cfg = oss.config.load_default()
        cfg.credentials_provider = credentials_provider
    
        # 基本的なネットワーク設定
        cfg.region = region  # 例: 'cn-hangzhou'
        if endpoint:
            # オプション: カスタムエンドポイント (例: 内部ネットワーク、アクセラレーション、専用ドメイン)
            cfg.endpoint = endpoint
    
        # ここに他の設定を追加することもできます。例: cfg.use_accelerate_endpoint = True
        return oss.Client(cfg)
    
    
    def resumable_upload_file_v2(
        client: oss.Client,
        bucket_name: str,
        object_key: str,
        file_path: str,
        part_size: int = 1 * 1024 * 1024,
        parallel_num: int = 4,
        checkpoint_dir: str | None = None,
    ):
        """
        レジュームアップロードを使用して同時マルチパートアップロードを実装します。
    
        :param client: 初期化された oss.Client
        :param bucket_name: 移行先のバケット名
        :param object_key: 移行先のオブジェクトキー (バケット名なし)
        :param file_path: ローカルファイルのフルパス
        :param part_size: パートサイズ (バイト単位)、デフォルトは 1 MB
        :param parallel_num: 同時アップロードスレッド数、デフォルトは 4
        :param checkpoint_dir: ブレークポイント情報を保存するディレクトリ。None の場合、レジュームアップロードは無効になります
        """
        file_path = str(file_path)
        if not Path(file_path).exists():
            raise FileNotFoundError(f"Error: Local file not found. Check the file_path configuration: {file_path}")
    
        # Uploader を構築します。checkpoint_dir が提供されているかどうかに基づいてレジュームアップロードを有効にします
        if checkpoint_dir:
            uploader = client.uploader(
                enable_checkpoint=True,
                checkpoint_dir=checkpoint_dir,
                part_size=part_size,
                parallel_num=parallel_num,
            )
        else:
            uploader = client.uploader(
                part_size=part_size,
                parallel_num=parallel_num,
            )
    
        print(f"ファイルのアップロードを開始します: {file_path}")
        print(f"移行先バケット: {bucket_name}")
        print(f"移行先オブジェクト: {object_key}")
        print(f"パートサイズ: {part_size} バイト, 同時実行数: {parallel_num}")
        if checkpoint_dir:
            print(f"レジュームアップロード: 有効 (checkpoint_dir={checkpoint_dir})")
        else:
            print("レジュームアップロード: 無効 (有効にするには checkpoint_dir を設定してください)")
    
        # アップロードを実行します (Uploader はサイズに基づいてマルチ/シングルパートの同時アップロードを自動的に選択します)
        result = uploader.upload_file(
            oss.PutObjectRequest(bucket=bucket_name, key=object_key),
            filepath=file_path,
        )
    
        print("-" * 30)
        print("ファイルが正常にアップロードされました。")
        print(f"HTTPステータス: {result.status_code}")
        print(f"ETag: {result.etag}")
        print(f"Request ID: {result.request_id}")
        # CRC-64 チェックサム。v2 はデフォルトでデータ検証を有効にします
        print(f"CRC64: {result.hash_crc64}")
        print("-" * 30)
    
    
    def main():
        # コード例を実行する前に、対応する環境変数が設定されていることを確認してください。
        # macOS/Linux:
        #   AK 方式:
        #     export OSS_ACCESS_KEY_ID=YOUR_AK_ID
        #     export OSS_ACCESS_KEY_SECRET=YOUR_AK_SECRET
        #   STS 方式:
        #     export OSS_ACCESS_KEY_ID=YOUR_STS_ID
        #     export OSS_ACCESS_KEY_SECRET=YOUR_STS_SECRET
        #     export OSS_SECURITY_TOKEN=YOUR_STS_TOKEN
        #
        # Windows:
        #   Powershell: $env:OSS_ACCESS_KEY_ID="YOUR_AK_ID"
        #   cmd: set OSS_ACCESS_KEY_ID=YOUR_AK_ID
    
        # ===================== パラメーター (必要に応じて変更) =====================
        # リージョンの例: 'cn-hangzhou'。最初にリージョンを使用することを推奨します
        region = "cn-hangzhou"
    
        # オプション: カスタムエンドポイント (内部ネットワーク、専用ドメイン、アクセラレーションドメイン名など)
        # 例: 'https://oss-cn-hangzhou.aliyuncs.com'
        endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
    
        # バケットとオブジェクト
        bucket_name = "examplebucket"
        object_key = "test.bak"
    
        # アップロードするローカルファイルのフルパス。
        # Windows の例: r'D:\localpath\examplefile.txt' (先頭の r に注意)
        # macOS/Linux の例: '/Users/test/examplefile.txt'
        file_path = r"D:\oss\test.bak"
    
        # シャーディングと同時実行数
        part_size = 1 * 1024 * 1024  # デフォルトは 1 MB。OSS では最小パートサイズ 100 KB が必要です
        parallel_num = 4
    
        # レジュームアップロードディレクトリ (無効にするには None を渡します。書き込み可能なディレクトリを指定することを推奨します)
        checkpoint_dir = str(Path.cwd() / ".oss_checkpoints")
        # =================== パラメーターの終わり ===================
    
        print("スクリプトの実行を開始します...")
        try:
            client = get_client_from_env(region=region, endpoint=endpoint)
            # レジュームアップロードが有効な場合、ディレクトリが存在することを確認します
            if checkpoint_dir:
                Path(checkpoint_dir).mkdir(parents=True, exist_ok=True)
    
            resumable_upload_file_v2(
                client=client,
                bucket_name=bucket_name,
                object_key=object_key,
                file_path=file_path,
                part_size=part_size,
                parallel_num=parallel_num,
                checkpoint_dir=checkpoint_dir,
            )
        except FileNotFoundError as e:
            print(e)
        except oss_ex.ServiceError as e:
            # OSS サーバーから返されたエラー
            print("\nOSSサーバー側でエラーが発生しました。")
            print(f"HTTPステータス: {getattr(e, 'status_code', 'N/A')}")
            print(f"エラーコード: {getattr(e, 'code', 'N/A')}")
            print(f"メッセージ: {getattr(e, 'message', 'N/A')}")
            print(f"Request ID: {getattr(e, 'request_id', 'N/A')}")
            print(f"Endpoint: {getattr(e, 'request_target', 'N/A')}")
        except oss_ex.BaseError as e:
            # SDK のローカル/シリアル化/デシリアル化/認証情報エラー
            print("\nOSS SDKクライアント側でエラーが発生しました。")
            print(str(e))
        except Exception as e:
            print(f"\n不明なエラーが発生しました: {e}")
    
    
    if __name__ == "__main__":
        main()

高性能ローカルディスクを使用する SQL Server 2008 R2

  1. バックアップファイルを OSS にアップロードする前に、OSS にバケットを作成する必要があります。

    • OSS にバケットが既に存在する場合、バケットが次の要件を満たしていることを確認してください:

      • バケットのストレージクラスは 標準ストレージ です。 IA、アーカイブ、コールドアーカイブ、およびディープコールドアーカイブのストレージクラスはサポートされていません。

      • バケットに対して サーバー側の暗号化 が有効になっていないことを確認してください。

    • OSS にバケットが存在しない場合は、まずバケットを作成します。 (OSS が 有効化 されていることを確認してください。)

      1. OSS コンソールにログオンし、バケット をクリックし、次に バケットの作成 をクリックします。

      2. 次の主要なパラメーターを設定し、他のパラメーターはデフォルト値のままにします。

        重要
        • このバケットはこのデータ移行でのみ使用されため、主要なパラメーターのみを設定する必要があります。 移行完了後、データ漏洩や追加料金を防ぐために、バケットを速やかに削除してください。

        • バケット作成時に サーバー側の暗号化 を有効にしないでください。

        パラメーター

        説明

        例

        [バケット名]

        バケットの名前。 名前はグローバルに一意である必要があり、バケット作成後は変更できません。

        命名規則:

        • 名前には、小文字、数字、ハイフン (-) のみ使用できます。

        • 名前の先頭と末尾は、小文字または数字である必要があります。

        • 名前の長さは 3~63 文字である必要があります。

        migratetest

        [リージョン]

        バケットが存在するリージョン。 ECS インスタンスから内部ネットワーク経由でバケットにデータをアップロードし、内部ネットワーク経由でデータを ApsaraDB RDS インスタンスに復元する場合、ECS インスタンス、バケット、ApsaraDB RDS インスタンスが同じリージョンに存在することを確認してください。

        中国 (杭州)

        [ストレージタイプ]

        [標準ストレージ] を選択します。 このトピックで説明する移行操作は、他のストレージクラスのバケットをサポートしていません。

        スタンダード

  2. バックアップファイルを OSS にアップロードします。

    セルフマネージドデータベースのバックアップが完了したら、バックアップファイルを ApsaraDB RDS インスタンスと 同じリージョン にある OSS バケットにアップロードします。 バケットと ApsaraDB RDS インスタンスが同じリージョンにある場合、バケットとインスタンスは内部ネットワーク経由で通信できます。 この場合、インターネットトラフィック料金は発生せず、データはより高速にアップロードされます。 次のいずれかの方法を使用できます:

    ossbrowser を使用したファイルのアップロード (推奨)

    1. ossbrowser をダウンロードします。

    2. この例では、Windows x64 を使用します。 ダウンロードした oss-browser-win32-x64.zip パッケージを解凍し、oss-browser.exe アプリケーションをダブルクリックします。

    3. ログオン方法として アクセスキー を選択し、Access Key ID と Access Key Secret パラメーターを設定し、その他のパラメーターはデフォルト値のままにして、ログイン をクリックします。

      説明

      AccessKey は、データセキュリティを確保するための ID 認証に使用されます。 AccessKey は機密情報として扱ってください。

    4. 移行先のバケットをクリックして、そのバケットに移動します。

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

    OSS コンソールを使用したファイルのアップロード

    説明

    バックアップファイルのサイズが 5 GB 未満の場合は、OSS コンソールで直接バックアップファイルをアップロードできます。

    1. OSS コンソールにログインします。

    2. バケット をクリックし、移行先のバケットの名前をクリックします。

    3. ファイルリスト で、Upload File をクリックします。

    4. バックアップファイルを アップロードするファイル セクションにドラッグするか、ファイルの選択 をクリックして、アップロードするバックアップファイルを選択します。

    5. ページの下部にあるUpload Fileをクリックします。ローカルバックアップファイルが OSS にアップロードされます。

    OSS API を使用したファイルのアップロード (Python 3 プロジェクトの例)

    説明

    バックアップファイルのサイズが 5 GB を超える場合は、OSS API を呼び出して、マルチパートアップロードを使用してバックアップファイルを OSS バケットにアップロードしてください。

    # -*- coding: utf-8 -*-
    """
    Alibaba Cloud OSS Python SDK v2
    依存関係: pip install alibabacloud-oss-v2
    """
    
    import os
    import sys
    from pathlib import Path
    import alibabacloud_oss_v2 as oss
    from alibabacloud_oss_v2 import exceptions as oss_ex
    
    
    def get_client_from_env(region: str, endpoint: str | None = None) -> oss.Client:
        """
        環境変数から v2 クライアントを作成します。
        - リージョン (推奨) の使用を優先しますが、カスタムエンドポイント (オプション) もサポートします。
        - AK と STS の両方と互換性があります:
            * AK: OSS_ACCESS_KEY_ID / OSS_ACCESS_KEY_SECRET が必要
            * STS: OSS_SESSION_TOKEN も必要 (古い変数 OSS_SECURITY_TOKEN と互換性あり)
        """
        # 互換性: ユーザーが古い変数 OSS_SECURITY_TOKEN を使用している場合、v2 が期待する OSS_SESSION_TOKEN にマッピングします
        sec_token_legacy = os.getenv("OSS_SECURITY_TOKEN")
        if sec_token_legacy and not os.getenv("OSS_SESSION_TOKEN"):
            os.environ["OSS_SESSION_TOKEN"] = sec_token_legacy
    
        ak = os.getenv("OSS_ACCESS_KEY_ID")
        sk = os.getenv("OSS_ACCESS_KEY_SECRET")
        st = os.getenv("OSS_SESSION_TOKEN")  # STS トークン (オプション)
    
        if not (ak and sk):
            raise ValueError("No valid AK found. Set the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables. "
                             "If using STS, also set OSS_SESSION_TOKEN (or the old name OSS_SECURITY_TOKEN).")
    
        # 使用される認証情報の種類を示します
        if st:
            print("STSトークン (OSS_SESSION_TOKEN) が検出されました。STS認証情報を使用します。")
        else:
            print("STSトークンは検出されませんでした。AccessKey (AK) 認証情報を使用します。")
    
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
        cfg = oss.config.load_default()
        cfg.credentials_provider = credentials_provider
    
        # 基本的なネットワーク設定
        cfg.region = region  # 例: 'cn-hangzhou'
        if endpoint:
            # オプション: カスタムエンドポイント (例: 内部ネットワーク、アクセラレーション、専用ドメイン)
            cfg.endpoint = endpoint
    
        # ここに他の設定を追加することもできます。例: cfg.use_accelerate_endpoint = True
        return oss.Client(cfg)
    
    
    def resumable_upload_file_v2(
        client: oss.Client,
        bucket_name: str,
        object_key: str,
        file_path: str,
        part_size: int = 1 * 1024 * 1024,
        parallel_num: int = 4,
        checkpoint_dir: str | None = None,
    ):
        """
        レジュームアップロードを使用して同時マルチパートアップロードを実装します。
    
        :param client: 初期化された oss.Client
        :param bucket_name: 移行先のバケット名
        :param object_key: 移行先のオブジェクトキー (バケット名なし)
        :param file_path: ローカルファイルのフルパス
        :param part_size: パートサイズ (バイト単位)、デフォルトは 1 MB
        :param parallel_num: 同時アップロードスレッド数、デフォルトは 4
        :param checkpoint_dir: ブレークポイント情報を保存するディレクトリ。None の場合、レジュームアップロードは無効になります
        """
        file_path = str(file_path)
        if not Path(file_path).exists():
            raise FileNotFoundError(f"Error: Local file not found. Check the file_path configuration: {file_path}")
    
        # Uploader を構築します。checkpoint_dir が提供されているかどうかに基づいてレジュームアップロードを有効にします
        if checkpoint_dir:
            uploader = client.uploader(
                enable_checkpoint=True,
                checkpoint_dir=checkpoint_dir,
                part_size=part_size,
                parallel_num=parallel_num,
            )
        else:
            uploader = client.uploader(
                part_size=part_size,
                parallel_num=parallel_num,
            )
    
        print(f"ファイルのアップロードを開始します: {file_path}")
        print(f"移行先バケット: {bucket_name}")
        print(f"移行先オブジェクト: {object_key}")
        print(f"パートサイズ: {part_size} バイト, 同時実行数: {parallel_num}")
        if checkpoint_dir:
            print(f"レジュームアップロード: 有効 (checkpoint_dir={checkpoint_dir})")
        else:
            print("レジュームアップロード: 無効 (有効にするには checkpoint_dir を設定してください)")
    
        # アップロードを実行します (Uploader はサイズに基づいてマルチ/シングルパートの同時アップロードを自動的に選択します)
        result = uploader.upload_file(
            oss.PutObjectRequest(bucket=bucket_name, key=object_key),
            filepath=file_path,
        )
    
        print("-" * 30)
        print("ファイルが正常にアップロードされました。")
        print(f"HTTPステータス: {result.status_code}")
        print(f"ETag: {result.etag}")
        print(f"Request ID: {result.request_id}")
        # CRC-64 チェックサム。v2 はデフォルトでデータ検証を有効にします
        print(f"CRC64: {result.hash_crc64}")
        print("-" * 30)
    
    
    def main():
        # コード例を実行する前に、対応する環境変数が設定されていることを確認してください。
        # macOS/Linux:
        #   AK 方式:
        #     export OSS_ACCESS_KEY_ID=YOUR_AK_ID
        #     export OSS_ACCESS_KEY_SECRET=YOUR_AK_SECRET
        #   STS 方式:
        #     export OSS_ACCESS_KEY_ID=YOUR_STS_ID
        #     export OSS_ACCESS_KEY_SECRET=YOUR_STS_SECRET
        #     export OSS_SECURITY_TOKEN=YOUR_STS_TOKEN
        #
        # Windows:
        #   Powershell: $env:OSS_ACCESS_KEY_ID="YOUR_AK_ID"
        #   cmd: set OSS_ACCESS_KEY_ID=YOUR_AK_ID
    
        # ===================== パラメーター (必要に応じて変更) =====================
        # リージョンの例: 'cn-hangzhou'。最初にリージョンを使用することを推奨します
        region = "cn-hangzhou"
    
        # オプション: カスタムエンドポイント (内部ネットワーク、専用ドメイン、アクセラレーションドメイン名など)
        # 例: 'https://oss-cn-hangzhou.aliyuncs.com'
        endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
    
        # バケットとオブジェクト
        bucket_name = "examplebucket"
        object_key = "test.bak"
    
        # アップロードするローカルファイルのフルパス。
        # Windows の例: r'D:\localpath\examplefile.txt' (先頭の r に注意)
        # macOS/Linux の例: '/Users/test/examplefile.txt'
        file_path = r"D:\oss\test.bak"
    
        # シャーディングと同時実行数
        part_size = 1 * 1024 * 1024  # デフォルトは 1 MB。OSS では最小パートサイズ 100 KB が必要です
        parallel_num = 4
    
        # レジュームアップロードディレクトリ (無効にするには None を渡します。書き込み可能なディレクトリを指定することを推奨します)
        checkpoint_dir = str(Path.cwd() / ".oss_checkpoints")
        # =================== パラメーターの終わり ===================
    
        print("スクリプトの実行を開始します...")
        try:
            client = get_client_from_env(region=region, endpoint=endpoint)
            # レジュームアップロードが有効な場合、ディレクトリが存在することを確認します
            if checkpoint_dir:
                Path(checkpoint_dir).mkdir(parents=True, exist_ok=True)
    
            resumable_upload_file_v2(
                client=client,
                bucket_name=bucket_name,
                object_key=object_key,
                file_path=file_path,
                part_size=part_size,
                parallel_num=parallel_num,
                checkpoint_dir=checkpoint_dir,
            )
        except FileNotFoundError as e:
            print(e)
        except oss_ex.ServiceError as e:
            # OSS サーバーから返されたエラー
            print("\nOSSサーバー側でエラーが発生しました。")
            print(f"HTTPステータス: {getattr(e, 'status_code', 'N/A')}")
            print(f"エラーコード: {getattr(e, 'code', 'N/A')}")
            print(f"メッセージ: {getattr(e, 'message', 'N/A')}")
            print(f"Request ID: {getattr(e, 'request_id', 'N/A')}")
            print(f"Endpoint: {getattr(e, 'request_target', 'N/A')}")
        except oss_ex.BaseError as e:
            # SDK のローカル/シリアル化/デシリアル化/認証情報エラー
            print("\nOSS SDKクライアント側でエラーが発生しました。")
            print(str(e))
        except Exception as e:
            print(f"\n不明なエラーが発生しました: {e}")
    
    
    if __name__ == "__main__":
        main()
  3. バックアップファイルの URL の有効期間を設定し、バックアップファイルの URL を取得します。

    1. OSS コンソールにログインします。

    2. バケット をクリックし、移行先のバケットの名前をクリックします。

    3. 左側のナビゲーションペインで、ファイル管理 > ファイルリスト を選択します。

    4. 宛先データベースのバックアップファイルの「操作」列で詳細をクリックし、表示されるパネルで[有効期限 (秒)]を 28800 秒 (8 時間) に変更します。

      重要

      バックアップファイルの URL は、バックアップファイルを OSS から ApsaraDB RDS に移行する際に必要です。 移行完了前に URL の有効期限が切れると、データ移行は失敗します。

    5. オブジェクト URL のコピー をクリックして、バックアップファイルの URL を取得します。

    6. バックアップファイルの URL を変更します。

      取得した URL は、デフォルトでファイルのパブリック URL です。 内部ネットワーク経由でデータを移行するには、ファイル URL のエンドポイントを内部エンドポイントに変更してください。

      たとえば、バックアップファイルの URL が http://rdstest.oss-cn-shanghai.aliyuncs.com/testmigraterds_20170906143807_FULL.bak?Expires=15141****&OSSAccessKeyId=TMP**** の場合、URL の oss-cn-shanghai.aliyuncs.com を oss-cn-shanghai-internal.aliyuncs.com に変更してください。

      重要

      内部エンドポイントは、ネットワークタイプとリージョンによって異なります。 詳細については、「リージョンとエンドポイントリージョンとエンドポイント」をご参照ください。

3. OSS バックアップデータの ApsaraDB RDS へのインポート

ApsaraDB RDS for SQL Server インスタンスのバージョンに基づいてソリューションを選択します。

SQL Server 2012 以降、またはクラウドディスクを使用する SQL Server 2008 R2

  1. RDSインスタンスにアクセスし、上部のリージョンを選択し、対象のRDSインスタンスのIDをクリックします。
  2. 左側のナビゲーションペインで、復元 を選択します。

  3. ページの上部にあるOSS バックアップデータをクラウド上で復元するをクリックします。

  4. インポートガイド ページで、次へ を 2 回クリックしてデータインポートステップに進みます。

    説明
    • OSS バックアップデータ移行機能を初めて使用する場合、ApsaraDB RDS サービスアカウントによる OSS へのアクセスを承認する必要があります。権限付与アドレス をクリックして、承認を確定します。そうしないと、権限の問題が原因で OSS バケット ドロップダウンリストが空になります。

    • 目的のファイルがページに表示されない場合は、OSS 内のバックアップファイルの拡張子が要件を満たしているかどうかを確認し (拡張子の要件はこのトピックの注意事項で確認できます)、ApsaraDB RDS インスタンスと OSS バケットが同じリージョンにあることを確認してください。

  5. 以下のパラメーターを設定します。

    パラメーター

    説明

    [データベース名]

    移行先 ApsaraDB RDS インスタンスにおいて、バックアップデータをインポートするデータベースの名前。名前は、SQL Server の公式命名規則に準拠している必要があります。

    重要
    • データをクラウドに移行する前に、バックアップファイルから復元するデータベースと同じ名前のデータベースが移行先インスタンスに存在しないこと、および同じ名前のアタッチされていないデータベースファイルが存在しないことを確認してください。どちらも存在しない場合、バックアップセット内のターゲットデータベース名と同じ名前のデータベースファイルを使用してデータベースを復元できます。

    • バックアップファイルから復元するデータベースと同じ名前のデータベースが移行先インスタンスに存在する場合、または同じ名前のアタッチされていないデータベースファイルが存在する場合、移行は失敗します。

    [OSS バケット]

    バックアップファイルが保存されている OSS バケットを選択します。

    [OSS ファイル]

    右側の Search icon アイコンをクリックして、ファイル名のプレフィックスを指定してバックアップファイルを検索します。各ファイルのファイル名、ファイルサイズ、および更新時刻が表示されます。移行するバックアップファイルを選択します。

    [クラウド移行計画]

    • データベースを開く (完全バックアップファイルは 1 件のみ): 完全移行。 このオプションは、1 つの完全バックアップファイルのみを使用して移行するシナリオに適しています。 この例では、データベースを開く (完全バックアップファイルは 1 件のみ) が選択されています。 この場合、CreateMigrateTask 操作では BackupMode = FULL および IsOnlineDB = True となります。

    • [データベースを開かない (差分バックアップまたはログファイルがあります)]: 増分移行です。このオプションは、完全バックアップファイルと、ログバックアップファイルまたは差分バックアップファイルを一緒に使用して移行するシナリオに適しています。この場合、CreateMigrateTask 操作では BackupMode = UPDF および IsOnlineDB = False となります。

    [整合性のチェックメソッド]

    • 非同期 DBCC:システムは、データベースを開く際に DBCC CHECKDB を実行しません。代わりに、データベースを開くタスクが完了した後、システムは非同期で DBCC CHECKDB を実行します。これにより、データベースを開く際の所要時間が短縮され (DBCC CHECKDB は大規模なデータベースでは時間がかかります)、サービス停止時間が短縮されます。サービスのダウンタイムを最小限に抑える必要があり、DBCC CHECKDB の結果が重要でない場合は、非同期 DBCC を使用してください。この場合、CreateMigrateTask API で CheckDBMode = AsyncExecuteDBCheck となります。

    • 同期 DBCC:非同期 DBCC と比較して、同期 DBCC は DBCC CHECKDB の結果を重視し、セルフマネージドデータベースのデータ整合性エラーを特定したいユーザーに適しています。この場合、データベースを開くために必要な時間が増加します。この場合、CreateMigrateTask API で CheckDBMode = SyncExecuteDBCheck となります。

  6. OK をクリックします。

    移行タスクが完了するまでお待ちください。 更新 をクリックすると、タスクの最新のステータスを表示できます。 移行タスクが失敗した場合は、タスクの説明にあるメッセージに基づいて問題をトラブルシューティングしてください。 詳細については、このトピックの「一般的なエラー」をご参照ください。

    説明

    データ移行が完了すると、システムは ApsaraDB RDS インスタンスの自動バックアップポリシーに基づいて、指定されたバックアップ時間にバックアップを開始します。バックアップ時間は手動で変更できます。生成されたバックアップセットには移行されたデータが含まれており、ApsaraDB RDS インスタンスの復元 ページで表示できます。

    バックアップ時刻に達していないが、できるだけ早くクラウド上にバックアップを生成したい場合は、手動バックアップを実行できます。

SQL Server 2008 R2 (高性能ローカルディスク)

  1. RDSインスタンスにアクセスし、上部のリージョンを選択し、対象のRDSインスタンスのIDをクリックします。
  2. 左側のナビゲーションペインで、データベース管理 をクリックします。

  3. 移行先データベースを探し、OSSからバックアップファイルを移行します を、アクション 列内でクリックします。

  4. インポートガイド ダイアログボックスでメッセージを読み、次へ をクリックします。

  5. OSS アップロードに関するメッセージを読み、次へ をクリックします。

  6. バックアップファイルOSS URL フィールドにバックアップファイルの OSS URL を入力し、OK をクリックします。

    説明

    高性能ローカルディスクを使用する ApsaraDB RDS for SQL Server インスタンス (SQL Server 2008 R2) は、完全バックアップファイルを一度にクラウドに移行するソリューションのみをサポートします。

4. バックアップ移行の進捗確認

お使いの ApsaraDB RDS for SQL Server インスタンスのバージョンに基づいて、ソリューションを選択します。

SQL Server 2012 以降、またはクラウドディスクを使用する SQL Server 2008 R2

ApsaraDB RDS インスタンスの左側のナビゲーションウィンドウで 復元 ページに移動し、クラウド上へのデータバックアップの記録 タブでバックアップ移行の履歴を確認できます。 履歴には、タスクステータス、タスク開始時刻、タスク終了時刻が含まれます。 デフォルトでは、先週の履歴が表示されます。 必要に応じて時間範囲を変更できます。

説明

タスクステータス が 失敗 の場合は、タスクの説明 を確認するか、対象の移行タスクの横にある ファイルの詳細を表示します をクリックして失敗の原因を特定して修正し、再度データ移行を実行してください。

高性能ローカルディスクを使用する SQL Server 2008 R2

ApsaraDB RDS インスタンスの左側のナビゲーションウィンドウでデータ移行ページに移動し、対象の移行タスクを見つけてデータ移行の進捗を確認します。

説明

タスクステータス が 失敗しました の場合は、タスクの説明 を確認するか、対象の移行タスクの横にある ファイルの詳細を表示します をクリックして失敗の原因を特定して修正し、再度データ移行を実行してください。

一般的なエラー

各バックアップ移行履歴には、タスクの説明が含まれています。タスクの説明から、タスクの失敗やエラーの原因を特定できます。以下は、一般的なエラーメッセージです。

  • 同じ名前のデータベースがすでに存在する

    • エラーメッセージ 1: The database (xxx) is already exist on RDS, please backup and drop it, then try again.

    • エラーメッセージ 2: 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.

    • 原因:バックアップファイルが破損しているか、セルフマネージド環境の SQL Server インスタンスのバージョンが ApsaraDB RDS for SQL Server インスタンスのバージョンよりも新しいため、検証が失敗します。たとえば、SQL Server 2016 のバックアップファイルを SQL Server 2012 を実行している ApsaraDB RDS for SQL Server インスタンスに復元すると、このエラーが発生します。

    • 解決策: バックアップファイルが破損している場合は、自己管理環境で別の完全バックアップを作成し、別の移行タスクを作成します。自己管理環境の SQL Server インスタンスのバージョンが ApsaraDB RDS for SQL Server インスタンスのバージョンより新しい場合は、同じか、それ以降のバージョンの ApsaraDB RDS for SQL Server インスタンスを使用します。

      説明

      既存の ApsaraDB RDS for SQL Server インスタンスを新しいバージョンにアップグレードするには、「データベースバージョンをアップグレードする」をご参照ください。

  • DBCC CHECKDB の失敗

    • エラーメッセージ: DBCC checkdb failed.

    • 原因:DBCC CHECKDB 操作が失敗しました。セルフマネージド環境のデータベースでエラーが発生しています。

    • 解決策:以下のコマンドを実行して、セルフマネージド環境のデータベースのエラーを修正してから、データを再度移行してください。

      重要

      このコマンドを使用してエラーを修正する際に、データが失われる可能性があります。

      DBCC CHECKDB (DBName, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS
  • ストレージ領域の不足 1

    • エラーメッセージ: Not Enough Disk Space for restoring, space left (xxx MB) < needed (xxx MB).

    • 原因:ApsaraDB RDS インスタンスのストレージの空き容量が、バックアップファイルの移行に必要な最小容量を下回っています。

    • 解決策:インスタンスのストレージ領域をアップグレードしてください。

  • ストレージ領域の不足 2

    • エラーメッセージ: Not Enough Disk Space, space left xxx MB < bak file xxx MB.

    • 原因:ApsaraDB RDS インスタンスのストレージの空き容量がバックアップファイルのサイズより小さく、最小ストレージ要件を満たしていません。

    • 解決策:インスタンスのストレージ領域をアップグレードしてください。

  • ログインアカウントの権限不足

    • エラーメッセージ: Cannot open database "xxx" requested by the login. The login failed.

    • 原因:ApsaraDB RDS インスタンスへのログインアカウントに、対象データベースへのアクセス権限がありません。

    • 解決策: ApsaraDB RDS インスタンスの アカウント管理 ページで、アカウントにデータベースのアクセス権限または管理権限を付与します。詳細については、「アカウントの権限を変更する」および「ApsaraDB RDS for SQL Server インスタンスのアカウント権限」をご参照ください。

  • 特権アカウントが存在しない

    • エラーメッセージ: Your RDS doesn’t have any init account yet, please create one and grant permissions on RDS console to this migrated database (xxx).

    • 原因:ApsaraDB RDS インスタンスに特権アカウントが存在しません。そのため、移行タスクは、移行後のデータベースにどのアカウントの権限を付与すべきか特定できません。ただし、バックアップファイルは移行先インスタンスに復元されているため、タスクのステータスは「成功」になります。

    • 解決策:特権アカウントを作成してください。

  • RAM ユーザーの操作権限不足

    • Q1: データ移行タスクの作成 手順のステップ 5 を実行すると、すべてのパラメーターが設定されているにもかかわらず、OK ボタンがグレー表示されてクリックできません。どうすればよいですか?

    • A1:RAM ユーザーとしてログインしている場合、権限が不足しているためにボタンをクリックできない可能性があります。このトピックの [前提条件] を確認して、必要な権限が付与されていることを確認してください。

    • Q2: RAM ユーザーを使用して AliyunRDSImportRole に権限を付与する際に、permission denied メッセージが表示された場合はどうすればよいですか。

    • A2:Alibaba Cloud プライマリアカウントを使用して、RAM ユーザーに AliyunRAMFullAccess 権限を一時的に付与してください。

  • データベース名が SQL Server システムデータベースの名前と同じ

    • エラーメッセージ: The database (xxx) is mssql system db, change your database name and try again.

    • 原因:指定されたデータベース名が、master、msdb、tempdb、model などの SQL Server システムデータベースの名前と同じです。

    • 解決策:別のデータベース名を指定してください。

  • データベース名が RDS インスタンスのシステムデータベースの名前と同じ

    • エラーメッセージ: The database (xxx) is RDS system db, change your database name and try again.

    • 原因:指定されたデータベース名が、rdscore などの ApsaraDB RDS for SQL Server インスタンスの管理データベースの名前と同じです。

    • 解決策:別のデータベース名を指定してください。

  • データベース数が上限を超えている

    • エラーメッセージ: The database (xxx) migration failed due to databases count limitation: xxx.

    • 原因:データベース数が上限を超えています。

    • 解決策:インスタンス内のデータベース数を減らしてから、再試行してください。

  • OSS ダウンロード URL の問題

    • エラーメッセージ 1: Failed to download backup (xxx) since OSS URL was expired.

    • エラーメッセージ 2: Failed to download since could not find backup file (xxx) on OSS.

    • 原因:OSS ダウンロード URL の有効期限切れ、ApsaraDB RDS サービスアカウントの未認可、RAM ユーザーの権限不足、ファイルの不存在などが考えられます。

    • 解決策:ファイルが OSS に存在するか、権限が適切に付与されているか、認可が有効かを確認してから、再試行してください。

  • ストライプバックアップの問題

    • エラーメッセージ: Failed to verify (xxx.bak), error message:The media set has xxx media families but only 1 are provided. All members must be provided. VERIFY DATABASE is terminating abnormally.

    • 原因:ソースデータベースのバックアップ時にストライプバックアップ機能が使用されています。この場合、完全バックアップは複数の .bak ファイルに分割されますが、OSS から ApsaraDB RDS へデータを移行する際には 1 つのファイルしか指定されていません。ApsaraDB RDS は、一度に複数ファイルからの移行をサポートしていません。

    • 解決策:ソースデータベースを単一の .bak ファイルにバックアップしてから、再試行してください。

一般的な返信メッセージ

タスクタイプ

タスクステータス

タスクの説明

説明

完全バックアップ ファイルのワンタイム移行

成功

success

移行に成功しました。

失敗

Failed to download backup file since OSS URL was expired.

OSS ダウンロード URL の有効期限が切れたため、移行に失敗しました。

Your backup is corrupted or newer than RDS, failed to verify.

バックアップ ファイルが破損しているか、RDS バージョンよりも新しいバージョンで作成されているため、移行に失敗しました。

DBCC checkdb failed

DBCC checkdb 操作が失敗したため、移行に失敗しました。

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.

差分バックアップ ファイルが使用されたため、移行に失敗しました。

関連する API オペレーション

API

説明

CreateMigrateTask

OSS から ApsaraDB RDS for SQL Server インスタンスへバックアップファイルを復元し、データ移行タスクを作成します。

CreateOnlineDatabaseTask

ApsaraDB RDS for SQL Server インスタンスのバックアップデータ移行タスクのデータベースを開きます。

DescribeMigrateTasks

ApsaraDB RDS for SQL Server インスタンスのバックアップデータ移行タスクのリストを照会します。

DescribeOssDownloads

ApsaraDB RDS for SQL Server インスタンスのバックアップデータ移行タスクのバックアップファイルの詳細を照会します。