Q1. SP_DEQ_COPY_CHECK_ROWS パラメータのデフォルト閾値はいくつですか
A1. 200,000
Q2. パラメータの範囲はナレッジによると、最大で2,147,483,647と確認しましたが、最小はいくつですか
A2. 0
Q3. 閾値として20%とありますが、計算式はどのようになりますか。
A3. 計算式は以下となります。
( |source rows – target rows| ) / source rows
例えば、source rows が 100 で、target rows が 80 ですと、次のようになります。
(|100 - 80|) / 100 = 0.2 = 20% になります。
このレコード数は実際の行数ではなく、sys.tab$ディクショナリで認識しているROWCNTで計算されていることにご留意ください。
( この様子は ログファイル VARDIR/log/de(svr|clt)_*.log にて次のような行で確認できます。
DEBUG: sql=select ROWCNT from sys.tab$ where OBJ#=テーブルのオブジェクトID, ROWCNT=数字)
動作の流れは、まずディクショナリの情報からテーブルのレコード数が SP_DEQ_COPY_CHECK_ROWS の値を超えているかを確認し、超えている場合サニティチェックの対象として閾値である20%分の差の有無をチェックします。
行数差の割合が 20%以上の場合、compare/repairの処理はスキップします。
行数差の割合が 20%未満の場合は、さらに行数差が 1,000,000 以上あるかをチェックします。
1,000,000 以上の差がある場合には、compare/repairの処理はスキップします。
Q4. 閾値の20%を拡張することは可能でしょうか。
A4. ハードコードされており変更することはできません。
Q5. このパラメータ自身を無効にすることは可能でしょうか。また、どのようにすれば無効になりますでしょうか。
A5. パラメータに対し最大値を設定の上、値を超えないようにすることで、compare/repairは常に処理されます。
しかしながら、1,000,000 行以上の修復につきましては、非常に時間が掛かりえますので、ご注意ください。
Q6. パラメータを変更する場合、変更するのはソース側のみでしょうか。ソースとターゲット両方でしょうか。
A6. ソースとターゲットの両方の環境でパラメータ変更を行ってください。