質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Oracle Database 11g

Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。

Q&A

解決済

5回答

5551閲覧

Oracleのダイレクトロードインサートについて

tototomoo

総合スコア28

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Oracle Database 11g

Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。

0グッド

0クリップ

投稿2016/02/16 05:38

ダイレクトロードインサートを使ってselect insertを行おうと思っています

SQL

1insert /*+ APPEND */ into tmp_table ( select col1,col2,col3 from org_table)

こちらのコマンドを実行してみると

SQL

11でエラーが発生しました。: 2ORA-03113: 通信チャネルでend-of-fileが検出されました プロセスID: 325576 4セッションID: 137、シリアル番号: 17689

と出てしまいます。

where句によって0件まで絞るとエラーには出ませんが普通のinsertよりも遅くなっているように見えます

① このエラーが出る原因について考えられるものは何か
② 普通のinsertよりも遅い原因について考えられるものは何か

どなたかわかる方ご教示をお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

表をSELECTして別の表へINSERTする(INSERT ~ SELECT)

  • 定義が同じテーブルで全件 INSERT する場合
INSERT INTO テーブルA SELECT * FROM テーブルB
  • 列を指定して INSERT する場合
INSERT INTO テーブルA( 列1 ,列2 ) SELECT 列1 ,列2 FROM テーブルB
  • 条件を指定して SELECT した結果を INSERT する場合
INSERT INTO テーブルA( 列1 ,列2 ) SELECT 列1 ,列2 FROM テーブルB WHERE テーブルB.列3 = 条件値1 AND テーブルB.列4 = 条件値2

① このエラーが出る原因について考えられるものは何か

select元のカラム名の順番とinsert先のカラム名の順番やデータタイプも確認したほうが良いかと

② 普通のinsertよりも遅い原因について考えられるものは何か

データの量にも関係あるかと

投稿2016/03/02 07:03

JinwonKim

総合スコア312

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ORA-03113が発生したタイミングで
alert.logにはどのようなエラーが書かれていますか?
ORA-600が発生しているか否かで切り分けが必要だと思ったためです。

投稿2016/02/16 11:55

nabe3

総合スコア345

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2016/02/16 12:18

ORA-600ならオラクル・サポート直行ですね。 サポート契約が有効であることをお祈りします。
tototomoo

2016/02/16 15:17

ご指摘ありがとうございます。 自分は権限の問題で見ることができないため確認できるかたに確認してもらおうかと思います。
guest

0

ダイレクト・パス・インサート と言います。用語はきちんと覚えましょう。

tmp_tableの列は3つで、各列のデータ型や桁数はorg_tableと同じかわかりません。
tmp_tableとorg_tableのcreate table文を提示してください。

投稿2016/02/16 11:28

編集2016/02/16 11:31
Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tototomoo

2016/02/16 15:15

ダイレクト・ロード・インサートとも言うそうですよ http://www.shift-the-oracle.com/inside/direct-pass-insert.html 事情により申し訳ございませんが提示することができません 概ね同じテーブルを作成しましたがご指摘の通りに2つのtableの構成についても確認してみます
Orlofsky

2016/02/17 00:14

>ダイレクト・ロード・インサートとも言うそうですよ 知りませんでした。ごめんなさい。 >事情により申し訳ございませんが提示することができません 掲示板に質問する際の常識ですが、本物のテーブルの情報を載せると情報漏えいになってしまうこともあるので、現象を再現できるよう一時的に仮のテーブルを作って動作確認します。 たとえサポート契約が有効でオラクル社・カスタマ・サポート・センターに問い合わせる際でも本物のテーブルの定義情報を送ることを禁止しているお客様もあります。
guest

0

ベストアンサー

http://chiroito.blogspot.jp/2011/04/ora-03113dbrecoveryfiledestsize.html
http://www.seiji-tsubosaki.net/CHRONICLE/CONTENTS/contents04/contents_04.html
表スペースがデフォルトの大きさである、とか、hwm はディスク後方にアペンドされるので、シークタイムを考慮するとテーブルへのアクセスが不利になるのはわからんでもないですが、
結局、03113 はタイミングが様々で、皆アレコレ試行錯誤で解決策に一定の方法がない、rpc エラーみたいなものらしいですね。
小さなテーブルを用意して、データ10件、
カラム数が同じのテーブルから新しいテーブルに、
カラム数が多いテーブルから新規の少ないテーブルに、
色々最小化した状態で成功を重ねた上で徐々にレコード数を多くして手探りでやるしか無いのでは?

投稿2016/02/16 07:57

ipadcaron

総合スコア1693

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tototomoo

2016/02/16 15:12

03113っていろいろな原因があるんですね... ご指摘頂いた通り色々試してみて失敗するパターンなど見極めたいと思います
guest

0

① このエラーが出る原因について考えられるものは何か

SQL Plusで実行すると正常に終了しませんか?
私も過去に同じエラー(普通にSELECT分を投げただけです)が出たことがあったのですが、
SQL Plusで実行したら動いた記憶があります。

もし、SQL Plusで動いた場合はORACLEのバグじゃないでしょうか(断定できませんが)?

② 普通のinsertよりも遅い原因について考えられるものは何か

たぶん、SELECT文が遅いんだと思います。
appendヒントをつけても、select文が遅いとどうしようもないです。
よっぽどじゃない限りは、INSERTにヒントを書くよりはselect文にインデックスを張った方が有効だと思います。

ps.ORACLEの専門家じゃないんで間違えている可能性があります。
その時はごめんなさい

投稿2016/02/16 07:14

redhat98

総合スコア236

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tototomoo

2016/02/16 15:11

SQL Plusで実行した結果が今回のエラーになります バグなんですかね...色々試してみたいと思います 自己解決ですが件数が少ない場合、準備などがあるため通常のinsertのほうが早いようでした
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問