3

自宅からVPN経由でOracleSQLLoaderを介して大きなファイルをロードしていますが、時間がかかります。私が仕事からそれらをロードしたとき、それらはロードするのがはるかに速かった。ロードしているファイルは、すでに作業サーバー上にあります。

したがって、私の考えでは、速度低下は、各行に出力される「コミットポイントに到達しました-論理レコード数」が原因であると考えています。それらはネットワーク経由で送信する必要があるため、低速である必要があります。私はグーグルで検索しましたが、それらを少なく印刷する方法を見つけることができません。パラメータとしてrows=5000を追加しようとしましたが、それでも各行の出力を取得します。

「コミットポイントに到達しました-論理レコード数」の数を減らすにはどうすればよいですか?

ありがとう

4

4 に答える 4

8

options句silentで使用できるキーワードを使用できます。次のことをサイレントに設定できます。

  • HEADER-通常画面に表示されるSQL*Loaderヘッダーメッセージを抑制します。ヘッダーメッセージは引き続きログファイルに表示されます。
  • フィードバック-通常画面に表示される「コミットポイントに到達しました」というフィードバックメッセージを抑制します。
  • エラー-レコードがOracleエラーを生成
    し、不良ファイルに書き込まれるときに発生する、ログファイル内のデータエラーメッセージを抑制します。拒否されたレコードの数は引き続き表示されます。
  • DISCARDS-破棄ファイルに書き込まれる各レコードのログファイル内のメッセージを抑制します。
  • PARTITIONS-パーティションテーブルの直接ロード中に、パーティションごとの統計をログファイルに書き込むことを無効にします。
  • ALL-すべての抑制値(HEADER、FEEDBACK、ERRORS、DISCARDS、およびPARTITIONS)を実装します。

を抑制したいと思うでしょうfeedback

たとえば、コマンドラインで次のいずれかを使用できます。

sqlldr schema/pw@db silent=(feedback, header)

または、制御ファイルのオプション句で、たとえば次のようになります。

options (bindsize=100000, silent=(feedback, errors) )
于 2012-08-10T13:33:58.113 に答える
0

出力とエラーをファイルにリダイレクトしてみてください。

于 2012-08-10T13:22:12.237 に答える
0

ベンの答えはとても良いです。を抑制するためにシェルプログラムを使用しないでくださいSTDOUT。私は以下を使用しました:

sqlldr schema/pw@db mycontrolfile.ctl | sed '/Commit point reached/d'

これに関する問題の1つは、スクリプトを使用してコマンドを実行している場合、エラーの戻り値がsedコマンドによってフラッシュされることです。言い換えると、何らかの理由でsqlldrが戻り値1で失敗した場合、sedはすぐにこれを戻り値0でフラッシュします。したがって、エラー状態がフラッシュされます。

リダイレクトSTDOUTSTDERR、ベンのソリューションほど良くないかもしれません。

于 2014-08-18T20:20:17.173 に答える
0

sqlldrシェルスクリプトからの呼び出し中にも同じ問題が発生しました。

エラー:

SQL * Loader:リリース10.2.0.3.0-2016年8月9日火曜日20:06:38に本番環境Copyright(c)1982、2005、Oracle。全著作権所有。

コミットポイントに達しました-論理レコード数64

テーブルmyschema.ORG_MOVEMENT_RULESのSQLローダーが失敗しました。終了しています...

調査の結果、(v_movementrules_control)WindowsからUnixシステムへのコピー中に制御ファイルが破損し^M、すべての行の終わりにDOS/Windowsの行末文字が含まれていることがわかりました。

sqlldr userid=${USER}/${PASS}@${DB} control=${v_OrgRules_Control}
于 2016-08-09T23:26:47.710 に答える