このページでは、Cloud Data Fusion レプリケーション ジョブに関連する問題を解決する方法について説明します。
例外: ステージング バケットを作成できません
バケットの命名規則に違反した場合、レプリケーション ジョブに失敗し、パイプライン ログに次のエラーが発生することがあります。
Caused by: java.io.IOException: Unable to create staging bucket
BUCKET_NAME in project PROJECT_NAME.
必要に応じて、ステージング バケット名を指定できます。指定されていない場合、レプリケーション ジョブがジョブ名に接尾辞を追加することで生成します。場合によっては、短いジョブ名を使用してこの問題を解決できます。 詳細については、バケット名をご覧ください。
MySQL の CONVERT_TO_NULL
値が設定されていない
バージョン 5 など、以前のバージョンの MySQL Connector/J を使用している場合、レプリケーション ジョブは次のエラーで失敗します。
The connection property 'zeroDateTimeBehavior' only accepts values of the form:
'exception', 'round' or 'convertToNull'. The value 'CONVERT_TO_NULL' is not in
this set.
zeroDateTimeBehavior
に指定できる値は、MySQL Connector/J のバージョンによって異なります。
この問題を解決するには、MySQL Connector/J バージョン 8 以降を使用します。
レプリケーションと SQL Server Always On データベース
Microsoft SQL Server ソースは、Always On 読み取り専用レプリカから変更をキャプチャできます。この設定では、ランタイム引数 source.connector.database.applicationIntent=ReadOnly
をレプリケーション ジョブに渡す必要があります。このランタイム引数がないと、ジョブは次のエラーで失敗します。
Producer failure
java.lang.RuntimeException: com.microsoft.sqlserver.jdbc.SQLServerException:
Failed to update database "DATABASE_NAME" because the database is read-only.
この問題を解決するには、source.connector.database.applicationIntent=ReadOnly
をランタイム引数として設定します。
これにより、snapshot.isolation.mode
が内部で snapshot
に設定されます。
Dataproc 静的クラスタでのレプリケーション エラー
レプリケーション ジョブを実行すると、Dataproc クラスタノードからの SSL 接続に失敗し、java.lang.NullPointerException
または Connection reset
エラーが発生することがあります。
ERROR [SparkRunnerphase-1:i.c.c.i.a.r.ProgramControllerServiceAdapter@93] -
Spark program 'phase-1' failed with error: The driver could not establish a
secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption.
Error: "Connection reset ClientConnectionId:ID"
このエラーは、Dataproc にインストールされている JDK バージョンで使用するように構成された Conscrypt SSL プロバイダが原因で発生します。
この問題を解決するには、Conscrypt SSL プロバイダを無効にして、Java JDK のデフォルトの SSL プロバイダを使用します。Conscrypt SSL プロバイダを無効にするには、Dataproc クラスタを起動するときに次のクラスタ プロパティを設定します。
--properties dataproc:dataproc.conscrypt.provider.enable=false
SQL Server のレプリケーションに、変更されたテーブルのすべての列が複製されない
SQL Server のテーブルからデータを複製する際に、レプリケーション ソースのテーブルに新しく追加された列がある場合、変更データ キャプチャ(CDC)テーブルに自動的に追加されません。基になる CDC テーブルに手動で列を追加する必要があります。
この問題を解決する方法は次のとおりです。
CDC インスタンスを無効にします。
EXEC sp_cdc_disable_table @source_schema = N'dbo', @source_name = N'myTable', @capture_instance = 'dbo_myTable' GO
CDC インスタンスをもう一度有効にします。
EXEC sp_cdc_enable_table @source_schema = N'dbo', @source_name = N'myTable', @role_name = NULL, @capture_instance = 'dbo_myTable' GO
新しいレプリケーション ジョブを作成します。
詳細については、ソーステーブルへの変更の処理をご覧ください。
ロールと権限のエラー
アクセス制御では次の問題が発生します。
Cloud Data Fusion サービス アカウントの権限に関する問題
Oracle Database を使用してレプリケーション ジョブを実行すると、テーブルリストの取得に失敗し、次のエラーが発生することがあります。
Error io.grpc.StatusRuntimeException: PERMISSION_DENIED: Permission
'datastream.streams.get' denied on 'projects/PROJECT_NAME/locations/REGION/streams/STREAM_NAME'
Oracle データベースでレプリケーション ジョブを実行すると、Cloud Data Fusion はバックエンドの Datastream サービスを使用します。
Datastream サービスを使用するために必要な権限を取得するには、Cloud Data Fusion サービス アカウントに対する Datastream 管理者(roles/datastream.admin
)IAM ロールの付与を管理者に依頼してください。
変更データ キャプチャを表示する権限がない
SQL Server からデータを複製すると、パイプライン ログに次のエラーが表示されることがあります。
No whitelisted table has enabled CDC, whitelisted table list does not contain any
table with CDC enabled or no table match the white/blacklist filter(s)
この問題は、ソース接続プロパティに指定したユーザーが、レプリケートされたテーブルの変更データ キャプチャ(CDC)を表示する権限を持っていない場合に発生します。これは、sys.sp_cdc_enable_table
を使用してテーブルで CDC を有効にするときに role_name
パラメータによって制御されます。
CDC を表示するために必要な権限を付与する方法については、テーブルで CDC を有効にする、sys.sp_cdc_enable_table をご覧ください。
ユーザー定義型の権限に関する問題
レプリケーション ジョブで使用されるデータベース ユーザーにユーザー定義型(UDT)に対する権限がない場合、パイプライン ログに次のエラーが表示されることがあります。
java.lang.IllegalArgumentException: The primary key cannot reference a non-existent
column'oid' in table TABLE_NAME
このエラー メッセージの oid
列は UDT である可能性があります。
この問題を解決するには、データベースで次のコマンドを実行してユーザーにアクセス権を付与します。
GRANT EXECUTE ON TYPE::UDT_NAME to YOUR_USER
SQL Server エージェントが実行されていない
SQL Server エージェントが実行されていない場合、パイプライン ログに次のエラーが表示されることがあります。
No maximum LSN recorded in the database; please ensure that the SQL Server Agent
is running [io.debezium.connector.sqlserver.SqlServerStreamingChangeEventSource]
この問題を解決するには、SQL Server エージェントを起動します。詳細については、ご使用のオペレーティング システムに応じて次のドキュメントを参照してください。
SQL Server レプリケーション パイプラインのバージョンが最新ではない
SQL Server レプリケーション パイプラインのバージョンが最新でない場合、パイプライン ログに次のエラーが表示されます。
Method io/cdap/delta/sqlserver/SqlServerDeltaSource.configure(Lio/cdap/delta/api/SourceConfigurer;) is abstract
このようなエラーは、以前のバージョンのソース プラグインが比較的新しいバージョンのデルタアプリで使われている場合に発生します。このような場合、新しいバージョンのデルタアプリで定義された新しいインターフェースが実装されていません。
この問題を解決する方法は次のとおりです。
HTTP GET リクエストを送信して、レプリケーション ジョブに関する情報を取得します。
GET v3/namespaces/NAMESPACE_ID/apps/REPLICATOR_NAME
詳細については、レプリケーション ジョブの詳細を表示するをご覧ください。
レプリケーション ジョブで使用されるプラグインとデルタアプリのバージョンを確認します。
HTTP GET リクエストを送信して、使用可能なアーティファクトのリストを取得します。
GET /v3/namespaces/NAMESPACE_ID/artifacts
詳細については、利用可能なアーティファクトの一覧表示をご覧ください。
認証スコープが不十分な静的 Dataproc クラスタ
認証スコープが不十分な静的 Dataproc クラスタを使用している場合は、パイプライン ログに次のエラーが表示されることがあります。
ERROR [worker-DeltaWorker-0:i.c.c.i.a.r.ProgramControllerServiceAdapter@92] - Worker
Program 'DeltaWorker' failed.
Caused by: io.grpc.StatusRuntimeException: PERMISSION_DENIED: Request had
insufficient authentication scopes.
この問題を解決するには、新しい静的 Dataproc クラスタを作成し、同じプロジェクトでこのクラスタの cloud-platform
スコープを有効にします。