目的
この制御によって、ユーザーは、複文のリクエスト全体を失敗させる代わりに、適切なステートメントレベルのエラーを独立した応答としてデータベースが返すかどうかを指定できます。
このコマンドを使用するとBTEQユーザーはTeradata DatabaseのStatement Independence (SI)機能を使用できるようになります。1より大きいパック係数が使用されているインポートに対しSIを有効化する場合に有用です。1つ以上のレコードをパックすると、単文リクエストが反復の複文リクエストになります。SI OFFにより、すべてのステートメントはロールバック対象の暗黙的なトランザクションとみなされます。すべてのステートメントはまとめて成功可能とみなされる必要があります。みなされない場合はまとめて拒絶されます。拒絶された場合、単一のFailureまたはErrorの応答がデータベースから返されます。その他の場合、各ステートメントでは独自の独立したOkまたはSuccessの応答が返されます(Okの応答はフィールド モード、Successの応答はその他すべての応答モードに対して返されます。)。
SI ONにより、リクエスト レベルの拒絶が引き続き発生する可能性があります。ただし、データベースも代わりに2801(重複行)などの一部のデータ関連の問題をステートメントレベルのエラーに変換します。全体のリクエストがリクエスト レベルの失敗にならない場合、データベースはその他のステートメントが拒絶されない独立した応答としてこれらのステートメントレベルのエラーが返されるようにします。
SIの使用を有効にすると、2つの基本的な効果があります。1つには、DBSは特定のデータ関連リクエスト レベルの失敗をロールバックをトリガーしないステートメントレベルのエラーとみなします。2つには、インポートの場合、BTEQは複数のインポートレコードがリクエストのUSINGデータに対してパックされた場合にリクエスト レベルデータ関連問題によって失敗するリクエストを自動的に再実行しようとします。BTEQは再試行の前にパックされたUSINGデータからの拒絶されたレコードを省略します。これらのクレンジングされた再試行は、パックにリクエスト レベルデータ関連エラーがなくなるまで繰り返されます。
これらの効果を組み合わせて、ユーザーは完全にクリーンではなく、引き続きPACK係数使用を活用する可能性があるUSINGデータを再実行できます。受け入れられないすべてのレコードは対応するステートメントまたはリクエスト レベルの失敗またはエラーによって拒絶されます。また、すべての失敗がデータ関連問題に対してのみ発生している場合、受け入れ可能なすべてのレコードは消費されます。ロールバックのためにその使用を手動で再駆動する必要はありません。インポートに必要な全体の時間に応じて、時間の節約は重要になります。
構文
使用上の注意
先頭のSETキーワードはオプションです。コマンドでは値ONまたはOFFが取得されます。OFFは制御のデフォルトの状態です。ONもOFFも指定されていない場合、ONとみなされます。コマンドはSQL ECHO文で使用できません。
ステートメントのエラー パーセルは、BT/ET単文リクエストまたは複文リクエスト トランザクション、または暗黙的なトランザクションの場合はTeradataモードで報告できます。COMMIT文で終わる単文または複文リクエスト トランザクションの場合はANSIモードで報告することもできます。1つ以上のステートメントのエラーが報告されていても、これらの場合、リクエストは成功とみなされます。Teradataトランザクション モードでのステートメントのエラーの報告は、ANSIトランザクション モードでの報告と異なりません。異なるのは、リクエストが失敗した場合に、ANSIモードではエラー(リクエスト ロールバック)、Teradataモードでは失敗(トランザクション ロールバック)と報告される場合だけです。
Statement Independenceは、INSERT文の次のデータ エラーの種類をサポートしています。
- 列レベルのCHECK制約の違反
- SETテーブルの重複行エラー
- プライマリ インデックスの一意性違反
- セカンダリ インデックスの一意性違反
- 参照整合性違反
例 - SETSTATEMENTINDEPENDENCE
インポートが実行中であり、PACK係数1が使用されている場合に最初の5つのレコードにこれらの関連するSQL INSERT文の次の結果が含まれているとします。
- レコード#1は、エラー コード2802での重複行を防ぐために拒否されます。
- レコード#2は挿入に有効なものとして受け付けられます。
- レコード#3は、エラー コード2673の一致しないデータがあるために拒否されます。
- レコード#4は挿入に有効なものとして受け付けられます。
- レコード#5は、エラー コード2673の一致しないデータがあるために拒否されます。
PACK係数が5で、STATEMENTINDEPENDENCEがOFFのままになっている場合、データベースで2802と2673がリクエスト レベルの失敗とみなされ、BTEQでクレンジングされた再試行が行なわれないためにすべてのレコードがまとめて拒絶されます。
ただし、PACK係数5を使用し、STATEMENTINDEPENDENCEをONにすると、レコード#2と#4が挿入され、その他の3つのレコードのみが拒絶されます。これは、BTEQでクレンジングされた再試行を試行して最初の2つのリクエスト レベル2673の失敗の応答が渡され、データベースで2802がステートメントレベルのエラーに変換されるためです。
レコード番号メッセージが生成されるようにするために、IMPORTコマンドでMESSAGES-RECORDNUMBERSも使用されると仮定すると、出力は次のようになります。
*** Starting record 1 at Fri Oct 2 02:03:11 2015 *** Failure 2673 The source parcel length does not match data that was defined. Statement# 3, Info =1 *** Rejected Import Record# 3 *** Warning: Resubmitting last request with the rejected record omitted. *** Failure 2673 The source parcel length does not match data that was defined. Statement# 4, Info =1 *** Rejected Import Record# 5 *** Warning: Resubmitting last request with the rejected record omitted. *** Statement Error 2802 Duplicate row error in <user>.<table>. Statement# 1, Info =0 *** Rejected Import Record# 1 *** Insert completed. One row added. *** Accepted Import Record# 2 *** Insert completed. One row added. *** Accepted Import Record# 4 *** Finished at record 5 at Fri Oct 2 02:03:12 2015 *** Total number of statements: 5, Accepted : 2, Rejected : 3 *** Total requests sent to the DBC = 3 *** Pack Maximum: 5, Average : 5, Largest used : 5 *** Successful requests per second = 3.000