エスケープハッチ処理時の Babelfish のエラー処理の管理
Babelfish は可能な限り、制御フローとトランザクションの状態から SQL の動作を模倣します。Babelfish でエラーが発生するとSQL Server エラーコードに似たエラーコードを返します。Babelfish がエラーを SQL Server のコードにマッピングできない場合、修正されたエラーコード (33557097
) が返され、エラーの種類に基づいて特定のアクションを実行します。
-
コンパイル時エラーの場合、Babelfish はトランザクションをロールバックします。
-
ランタイム時エラーの場合、Babelfish はバッチを終了し、トランザクションをロールバックします。
-
クライアントとサーバー間のプロトコルエラーの場合、トランザクションはロールバックされません。
エラーコードを同等のコードにマッピングできず、同様のエラーのコードが使用可能な場合、エラーコードは代替コードにマッピングされます。例えば、SQL Server コード 8143
や 8144
の原因となる動作などは、両方とも 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
を実行します。現在のセッションまたはクラスター全体の名前付きエスケープハッチングとその値を一覧表示するには、
が 1 つ以上のエスケープハッチングの識別子になっているhatch_name
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 |
escape_hatch_index_clustering |
インデックス、プライマリキー、または UNIQUE 制約のクラスタ化キーワードまたは非クラスタ化キーワードに関連する Babelfish の動作を制御します。CLUSTERED が無視された場合も、インデックスまたは制約は NONCLUSTERED が指定されているかのように作成されます。 |
ignore |
escape_hatch_index_columnstore |
COLUMNSTORE 句に関連する Babelfish の動作を制御します。 |
strict |
escape_hatch_join_hints |
JOIN 演算子のキーワードの動作を制御します: LOOP、HASH、MERGE、REMOTE、REDUCE、REDISTRIBUTE、REPLICATE。 |
ignore |
escape_hatch_language_non_english |
画面上のメッセージの英語以外の言語に関する Babelfish の動作を制御します。Babelfish は現在 画面上のメッセージのみで |
strict |
escape_hatch_login_hashed_password |
無視された場合は、 |
strict |
escape_hatch_login_misc_options |
無視された場合は、 |
strict |
escape_hatch_login_old_password |
無視された場合は、 |
strict |
escape_hatch_login_password_must_change |
無視された場合は、 |
strict |
escape_hatch_login_password_unlock |
無視された場合は、 |
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 |
パーティショニングの定義時に |
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 |