エスケープハッチ処理時の Babelfish のエラー処理の管理 - Amazon Aurora

エスケープハッチ処理時の Babelfish のエラー処理の管理

Babelfish は可能な限り、制御フローとトランザクションの状態から SQL の動作を模倣します。Babelfish でエラーが発生するとSQL Server エラーコードに似たエラーコードを返します。Babelfish がエラーを SQL Server のコードにマッピングできない場合、修正されたエラーコード (33557097) が返され、エラーの種類に基づいて特定のアクションを実行します。

  • コンパイル時エラーの場合、Babelfish はトランザクションをロールバックします。

  • ランタイム時エラーの場合、Babelfish はバッチを終了し、トランザクションをロールバックします。

  • クライアントとサーバー間のプロトコルエラーの場合、トランザクションはロールバックされません。

エラーコードを同等のコードにマッピングできず、同様のエラーのコードが使用可能な場合、エラーコードは代替コードにマッピングされます。例えば、SQL Server コード 81438144 の原因となる動作などは、両方とも 8143 にマップされます。

マッピングできないエラーは、TRY... CATCH 構成を配慮しません。

@@ERROR を使って SQL Server のエラーコードを返すか、@@PGERROR 関数 を使って PostgreSQL エラーコードを返すことができます。また fn_mapped_system_error_list 関数を使用して、マッピングされたエラーコードのリストを返しますことも可能です。PostgreSQL のエラーコードについては、「PostgreSQL ウェブサイト」を参照してください。

Babelfish エスケープのハッチ設定を変更する

失敗する可能性のあるステートメントを処理するために、Babelfish はエスケープハッチと呼ばれる特定のオプションを定義しています。エスケープハッチングは、サポートされていない特徴や構文に遭遇した際に、 Babelfish の動作を指定するオプションです。

sp_babelfish_configure ストアドプロシージャを使用して、エスケープハッチングの設定を制御することができます。スクリプトを使用して、エスケープハッチングを ignore または strict に設定します。strict に設定されている場合、Babelfish は修正する必要のあるエラーを続行する前に返します。

現在のセッションおよびクラスターレベルに変更を適用するには、server キーワードを含めます。

使用方法は次のようになります:

  • エスケープハッチングとそのステータス、および使用状況をすべて一覧表示するには、sp_babelfish_configure を実行します。

  • 現在のセッションまたはクラスター全体の名前付きエスケープハッチングとその値を一覧表示するには、hatch_name が 1 つ以上のエスケープハッチングの識別子になっている sp_babelfish_configure 'hatch_name' コマンドを実行します。hatch_name は「%」などの SQL ワイルドカードを使用できます。

  • 1 つまたは複数のエスケープハッチングを指定した値に設定するには、sp_babelfish_configure ['hatch_name' [, 'strict'|'ignore' [, 'server']] を実行します。クラスター全体のレベルで設定を永続化するには、次に示されているように、server キーワードを含めます。

    EXECUTE sp_babelfish_configure 'escape_hatch_unique_constraint', 'ignore', 'server'

    現在のセッションに対してのみ設定する場合、server は使用しないでください。

  • すべてのエスケープハッチをデフォルト値にリセットするには、sp_babelfish_configure 'default' を実行します (Babelfish 1.2.0 以上)。

ハッチ (または複数のハッチ) を識別する文字列に SQL ワイルドカードが含まれている場合があります。例えば以下では、すべての構文エスケープハッチングを Aurora PostgreSQL クラスターの ignore に設定しています。

EXECUTE sp_babelfish_configure '%', 'ignore', 'server'

次の表に、Babelfish の定義済みエスケープハッチの説明とデフォルト値を示します。

エスケープハッチ 説明 デフォルト値
escape_hatch_checkpoint

手続き型コードで CHECKPOINT ステートメントを使用できますが、CHECKPOINT ステートメントは現在実装されていません。

ignore

escape_hatch_constraint_name_for_default

デフォルトの制約名に関連する Babelfish の動作を制御します。

ignore

escape_hatch_database_misc_options

CREATE ないし ALTER DATABASE のオプションに関連した以下の Babelfish 動作を管理します: CONTAINMENT、DB_CHAINING、TRUSTWORTHY、 PERSISTENT_LOG_BUFFER。

ignore

escape_hatch_for_replication

テーブルを作成または変更する際、 [NOT] FOR REPLICATION 句に関連する Babelfish の動作を制御します。

strict

escape_hatch_fulltext

CREATE/ALTER DATABASE の DEFAULT_FULLTEXT_LANGUAGE や CREATE FULLTEXT INDEX、 また sp_fulltext_database などの FULLTEXT 機能に関連する Babelfish の動作を制御します。

ignore

escape_hatch_ignore_dup_key

CREATE/ALTER TABLE および CREATE INDEX に関する Babelfish の動作を制御します。IGNORE_DUP_KEY=ON の場合、strict (デフォルト) に設定するとエラーが発生し、ignore に設定するとエラーを無視します (Babelfish バージョン 1.2.0 以上)。

strict

escape_hatch_index_clustering

インデックス、プライマリキー、または UNIQUE 制約のクラスタ化キーワードまたは非クラスタ化キーワードに関連する Babelfish の動作を制御します。CLUSTERED が無視された場合も、インデックスまたは制約は NONCLUSTERED が指定されているかのように作成されます。

ignore

escape_hatch_index_columnstore

COLUMNSTORE 句に関連する Babelfish の動作を制御します。ignore を指定した場合、Babelfish は通常の B-tree インデックスを作成します。

strict

escape_hatch_join_hints

JOIN 演算子のキーワードの動作を制御します: LOOP、HASH、MERGE、REMOTE、REDUCE、REDISTRIBUTE、REPLICATE。

ignore

escape_hatch_language_non_english

画面上のメッセージの英語以外の言語に関する Babelfish の動作を制御します。Babelfish は現在 画面上のメッセージのみで us_english をサポートされます。SET LANGUAGE は言語名を含む可変を使用する場合があるため、設定されている実際の言語はランタイムでのみ検出できます。

strict

escape_hatch_login_hashed_password

無視された場合は、CREATE LOGINALTER LOGINHASHED キーワードに対するエラーが抑制されます。

strict

escape_hatch_login_misc_options

無視された場合は、HASHEDMUST_CHANGEOLD_PASSWORD、および UNLOCK 以外の他のキーワード、そして CREATE LOGINALTER LOGIN に対するエラーが抑制されます。

strict

escape_hatch_login_old_password

無視された場合は、CREATE LOGINALTER LOGINOLD_PASSWORD キーワードに対するエラーが抑制されます。

strict

escape_hatch_login_password_must_change

無視された場合は、CREATE LOGINALTER LOGINMUST_CHANGE キーワードに対するエラーが抑制されます。

strict

escape_hatch_login_password_unlock

無視された場合は、CREATE LOGINALTER LOGINUNLOCK キーワードに対するエラーが抑制されます。

strict

escape_hatch_nocheck_add_constraint

制約の WITH CHECK 句または NOCHECK 句に関連する Babelfish の動作を制御します。

strict

escape_hatch_nocheck_existing_constraint

FOREIGN KEY および CHECK 制約に関連する Babelfish の動作を制御します。

strict

escape_hatch_query_hints

クエリヒントに関連する Babelfish の動作を制御します。このオプションが 無視するよう設されていると、サーバーは OPTION (...) 句を使用してクエリ処理の側面を指定するヒントを無視します。例に含まれるのは SELECT FROM… OPTION(MERGE JOIN HASH, MAXRECURSION 10))

ignore

escape_hatch_rowversion

ROWVERSION および TIMESTAMP のデータ型の動作を制御します。使用に関する情報については、「実装が制限されている機能」を参照してください。

strict

escape_hatch_schemabinding_function

WITH SCHEMABINDING 句に関連する Babelfish の動作を制御します。デフォルトでは、CREATE または ALTER FUNCTION コマンドで指定した場合は、WITH SCHEMABINDING 句は無視されます。

ignore

escape_hatch_schemabinding_procedure

WITH SCHEMABINDING 句に関連する Babelfish の動作を制御します。デフォルトでは、CREATE または ALTER PROCEDURE コマンドで指定した場合は、WITH SCHEMABINDING 句は無視されます。

ignore

escape_hatch_rowguidcol_column

テーブルを作成または変更する際、 ROWGUIDCOL 句に関連する Babelfish の動作を制御します。

strict

escape_hatch_schemabinding_trigger

WITH SCHEMABINDING 句に関連する Babelfish の動作を制御します。デフォルトでは、CREATE または ALTER TRIGGER コマンドで指定した場合は、WITH SCHEMABINDING 句は無視されます。

ignore

escape_hatch_schemabinding_view

WITH SCHEMABINDING 句に関連する Babelfish の動作を制御します。デフォルトでは、CREATE または ALTER VIEW コマンドで指定した場合は、WITH SCHEMABINDING 句は無視されます。

ignore

escape_hatch_session_settings

サポートされていないセッションレベルの SET ステートメントに対する Babelfish の動作を制御します。

ignore

escape_hatch_showplan_all

SET SHOWPLAN_ALL と SET STATISTICS PROFILE に関連する Babelfish の動作を制御します。ignore に設定すると、SET BABELFISH_SHOWPLAN_ALL と SET BABELFISH_STATISTICS PROFILE のように動作します。strict に設定すると、何も通知せずに無視されます。

strict

escape_hatch_storage_on_partition

パーティショニングの定義時に ON partition_scheme column 句に関連した Babelfish の動作を制御します。Babelfish は現在、パーティショニングを実装していません。

strict

escape_hatch_storage_options

CREATE、ALTER DATABASE、TABLE、INDEXで使用されるストレージオプションのハッチングをエスケープします。これには、テーブル、インデックス、制約、およびデータベースの格納場所 (パーティション、ファイルグループ) を定義する句 (LOG) ON、TEXTIMAGE_ON、FILESTREAM_ON が含まれます。このエスケープハッチの設定は、これらすべての句 (ON [PRIMARY] および ON [DEFAULT] を含む) に適用されます。例外は、ON partition_scheme (カラム) を持つテーブルまたはインデックスにパーティションが指定されている場合です。

ignore

escape_hatch_table_hints

WITH (…) 句を使って指定されたテーブルヒントの動作を制御します。

ignore

escape_hatch_unique_constraint

strict に設定すると、インデックス付き列の NULL 値の処理における SQL Server と PostgreSQL のあいまいな意味の違いにより、エラーが発生することがあります。意味の違いは非現実的なユースケースでのみ発生するため、このエスケープハッチを「無視」に設定して、エラーが表示されないようにすることができます。

strict