問題タブ [sql-loader]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
oracle - sqlloader をサーバーに接続中にエラー 704 & 12154 が発生する
サーバーに基づく Oracle データベースがあり、サーバー上のテーブルにデータをインポートしたいと考えています。sqlloadr(sqlldr) を使用して、localhost にある Oracle データベースにすべてのデータを挿入しようとしていますが、この場合は問題ありませんが、Web サーバー (localhost ではない) に接続しようとすると問題が発生します。
localhost の場合に使用したコマンド:
以下はWebサーバーに関するものです
ここで、次のように tnsnames.ora を作成しました。
しかし、私はこのエラーが発生しました:
どんなアイデアでも大歓迎です
oracle - 外部テーブル-破棄ファイルが期待どおりに生成されません
以下の定義の外部テーブルがあります。
100個のレコードをフィードし、そのうち50個が有効、20個が無効、30個がWHEN条件を満たしていませんが、破棄ファイルに4個または5個のレコードしか表示されません。
oracle - 複数の infiles に対する Oracle Sql Loader のスキップ オプション
次のように SQL Loader 制御ファイルを使用する場合:
FIRST.CSV ファイルのヘッダー行をスキップしますが、ヘッダー行を SECOND.CSV から Oracle テーブルにロードします。私の解決策は、この制御ファイルを 2 つの別個のファイルに分割することです。1 つの制御ファイルに準拠する方法はありますか?
oracle - SQL*Loader ジョブが予期せず終了し、表が NOWAIT でロックされる
各ログに約 750,000 行のデータを含む約 48 個のログをロードする必要がある場所で実行する週次レポート ジョブがあります。これを容易にするために、SQL*Loader を外部プロセスとして (ProcessBuilder を使用して) 次々に実行する Java ジョブを使用しています。ただし、最近、このプロセスはロード中に異常終了し、テーブルのロックを引き起こし、DB チームとチケットを開いてハングしているセッションを強制終了できるまで、基本的にプロセスが停止します。SQL*Loader を使用するよりも、このアップロード プロセスを処理するためのより良い方法はありますか、それとも制御ファイルまたはコマンド ラインのいずれかを変更して、制御ファイルまたはコマンド ラインを恐ろしい死に至らしめるのを防ぐ方法はありますか?
プロセスの開始時に、ロード先のテーブルを切り捨て、次の制御ファイルを指定してこのコマンド ラインを実行します。
コマンドライン:
制御ファイル:
すべてのログの読み込みが完了したら、テーブルのインデックスを再構築し、レポート プロセスを開始します。現在、ランダムログで死んでいるようで、プロセスを再実行すると、毎回異なる時点で失敗します。
UNRECOVERABLE と SKIP_INDEX_MAINTENANCE の理由は、ロードを高速化するためです。現状では、各ログをロードするのに 7 ~ 12 分かかる場合があります。ログがオンになっていない場合はさらに悪化します。全体として、このプロセスの開始から終了までに約 18 時間かかります。
sql - SQLローダー制御ファイル
このローダー制御ファイルがあります。
現在、TEST_CD ='B' AND TEST_TYPE_CD = 15の場合のデータのロードですが、TEST_CD='B'およびtest_type_cd=15の場合にも変更したいと思います。15の場合はすべてのTest_type_cdをロードしたくありません。両方の条件を満たす場合にのみロードしたいです。中かっこを付けたままにしておくだけで機能します。Plz誰かがこれを変更する方法を教えてくれました。
誰もが私が必要としているものと混同していると思います。最初の条件を満たし、2番目と3番目の条件を1つの条件として別々に動作させないようにします。たとえば、test_cdがデータをロードするよりもAに等しくない場合、2番目と3番目条件は1つのピースとして機能する必要があります。test_cd=Bで、test_type_cdが15の場合、データをロードします。test_type_cdをB以外の他のtest_cdに適用したくありません。 Bを適用してtest_type_cd=15を適用します。
sql - cシェルスクリプトのSqlldrエラー
私はcシェルスクリプトでこれを行っています。私の結果は0ではなく2に設定されています
これが私のログ情報です。警告は表示されません。誰かがこれを手伝ってくれますか。ありがとうございます。
oracle10g - 複数のマスター詳細データを含むファイルをロードするにはどうすればよいですか?
sqlldrを使用して、複数のマスター詳細データを持つOracleデータベースに以下のファイルをロードしたいと思います。
サンプルファイル:
- 1行目は、レコードタイプが「1」でテーブルコードが「015」です。
- brand_masterテーブルにロードする必要のあるブランドコードとブランド名を持つレコードタイプ「3」の1行目より下の行
- 5行目は、レコードタイプが「1」でテーブルコードが「018」です。
- パターンテーブルにロードする必要のあるパターンコード、pattername、およびアドレスを持つレコードタイプ「3」の5行目より下の行
私の理解によると、sqlldrを使用してこのファイルをロードするには、以下の手順に従う必要があります
- UTL_FILEパッケージを使用して2つの別々のファイルを生成します
- a)レコードbrandcode、brandnameを持つbrand.txt
- b)レコードpatterncode、pattername、addressを持つpattern.txt
- brand.txtとpattern.txtの2つの個別の制御ファイルを書き込み、データベーステーブルにロードします
複数のテーブルに1つの制御ファイルしかない上記のファイルをロードするのに役立つ人はいますか?
performance - ダイレクトモードで実行されているOracleSQL* loaderは、従来のパスロードよりもはるかに低速です。
過去数日間、私はOracleのSQL * Loaderを試して、データをOracleに一括ロードしようとしました。オプションのさまざまな組み合わせを試した後、従来のパスロードが直接パスロードよりもはるかに高速に実行されることに驚きました。
問題に関するいくつかの事実:
- ロードするレコードの数は60Kです。
- ロード前のターゲットテーブルのレコード数は7億です。
- Oracleのバージョンは11gr2です。
- データファイルには、日付、文字(ASCII、変換は不要)、整数、浮動小数点数が含まれています。ブロブ/クロブはありません。
- テーブルはハッシュで分割されています。ハッシュ関数はPKと同じです。
- サーバーに16個のCPUがある場合、テーブルの並列は4に設定されます。
- インデックスはローカルに分割されています。(ALL_INDEXESからの)インデックスの並列は1です。
- ターゲットテーブルには、PKとインデックスが1つだけあります。インデックスを使用して構築されたPK制約。
- インデックスパーティションを確認すると、パーティション間のレコードの分散がかなり均一であることがわかりました。
- データファイルは区切られています。
- APPENDオプションが使用されます。
- SQLを介したロードされたデータの選択と削除は非常に高速で、ほぼ瞬時に応答します。
従来のパスでは、ロードは約6秒で完了します。
ダイレクトパスロードの場合、ロードには約20分かかります。最悪の実行は完了するのに1.5時間かかりますが、サーバーはまったくビジーではありませんでした。
skip_index_maintenanceが有効になっている場合、ダイレクトパスのロードは2〜3秒で完了します。
私はかなりの数のオプションを試しましたが、どれも目立った改善はありません...回復不能、ソートされたインデックス、マルチスレッド(マルチCPUサーバーでSQL * Loaderを実行しています)。それらのどれも状況を改善しません。
SQL *Loaderがダイレクトモードで実行されている間、私が見続けた待機イベントは次のとおりです。
- イベント:dbファイルの順次読み取り
- P1 / 2/3:file#、block#、blocks(dba_extentsからインデックスブロックであることを確認してください)
- 待機クラス:ユーザーI / O
ダイレクトパスロードで何がうまくいかなかったのか誰かが知っていますか?または、問題の根本原因を実際に掘り下げるためにさらに確認できることはありますか?前もって感謝します。
sql-loader - 42 億のレコードをロードした後、SQL*Loader がスタックする
SQLローダーの問題で立ち往生しています。Sql Loader を使用して、いくつかの when 条件に基づいて、約 46 億行 (ほぼ 340 GB) のデータ ファイルを 2 つの Oracle テーブルにロードしようとしています。しかし、42 億のレコードをロードした後、残りのレコードがまだロードされていない場合でも、SQL ローダー プロセスはエラーをスローすることなく完了しています。
廃盤や不良盤もありません。SQLローダーがロードできるレコード数に制限はありますか? そのようなことはどこにも文書化されていませんでした。誰かがこの問題の手がかりを持っているかどうか教えてください。
ありがとう!!
oracle - sqlldr 戻りコード - ex_warn
ファイルがデータベースに完全にロードされているかどうかを知りたいです。
ここで戻りコードを確認すると、1 と 3 が失敗であることがわかります。
EX_WARN (戻りコード 2) には、次のケースが含まれます。
これで、1 番目と 2 番目は管理可能になりました。
3 つ目は、ドキュメントを検索する必要がありました。これを読むと、「中断されたロード」には「致命的なエラー」、「CTRL-C」、および「スペース エラー」が含まれていることがわかります。この場合、おそらくレコードがないか、一部のレコードが拒否され、EX_WARN リターン コードが返され、ファイルがデータベースに不完全にロードされます。
拒否されたレコードがない場合は単純です。それは中断されたロードでした。エラーで終了する必要があります。しかし、一部のレコードが拒否された場合、ファイルがデータベースに完全にロードされているかどうかわかりません。(一部の行は拒否されましたが、私には受け入れられます。) 私は正しいですか?
はいの場合、解決策は何ですか?テーブル全体が DB にロードされたかどうかを知るにはどうすればよいですか?