- - PR -
SQL*LOADER ダイレクトパスロードでのエクステント数
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-12-16 17:46
いつもここの掲示板を活用させていただいております。 SQL*LOADER ダイレクトパスロードでの動作についての疑問です。 ダイレクトパスロードを使用する場合は、 高水位標以降のブロックを使用するため、 CREATE TABLE文で指定する領域は関係ないと自分は思ったのですが、 用意した領域以上のデータ取込を実行してみると以下のようなエラーが でてしまいました。 ORA-01631:最大エクステント数(255)に達しました(表[表名]) テーブルの領域を充分なだけ広げれば取込は可能なのですが、 何が無駄なこと、間違ったことをしているのではと思い質問させていただきます。 取込を行うバッチファイル及び制御ファイルは以下の通りです。 SEになって1年に満たない若輩者ですので、見当違いのことを質問しているかもしれませんが よろしくお願いします。 [バッチファイル] sqlldr userid=[ユーザ名]/[パスワード]@[サービス名] control='[ファイル名].ctl' log='[ファイル名].log' direct=true [実行ファイル] LOAD DATA INFILE '[ファイル名].csv' BADFILE '[ファイル名].bad' DISCARDFILE '[ファイル名].dis' TRUNCATE INTO TABLE [テーブル名] FIELDS TERMINATED BY "," ([項目1] [型1], : : : ) | ||||
|
投稿日時: 2004-12-17 15:59
そもそも create table でどのように指定されているのかが 書かれていないので何とも言えませんが、「用意した領域以上の データ取込を実行」しているのですから、実際に maxextents を 超えてしまったものと思いますが、そもそも何を問題視して おられるのでしょうか? # truncate を指定していますから、表のほとんど先頭に # HWM は移動していると思いますが、その後 maxextents に # 達するほどの量を格納しているのではないでしょうか? | ||||
|
投稿日時: 2004-12-18 03:08
普通にテーブル領域を広げてよいと思います。
一般的には高水位標はあくまでテーブル領域内で使用した最大量です。 ロードが終わったら、ロードの終わった最後のところに 高水位標は移動します。 TRUNCATEのオプションの時の動きは、いまいち記憶が 定かじゃありません。 間違ってたら、ごめんなさい。 | ||||
|
投稿日時: 2004-12-20 10:29
返信が遅くなってしまい申し訳ありません。
テーブルのCreate文ですが以下の通りです。 また取り込むデータですが、1レコード68Byteの50万件です。 説明不足で申し訳ありません。 CREATE TABLE [テーブル名] (A CHAR(10) NOT NULL, B CHAR(2) NOT NULL, C CHAR(1) NULL, D CHAR(12) NULL, : : ) TABLESPACE [表領域] PCTFREE 20 PCTUSED 80 INITRANS 1 STORAGE (INITIAL 20K NEXT 20K MAXEXTENTS 255 MINEXTENTS 1 PCTINCREASE 0); 「メモリ上で全データのデータブロックを構築→DBに一気に保存→HWM移動」 という動作をすると思い、表領域に充分な大きさがあれば大丈夫なのかと 勘違いしておりました。 実際は、「*→HWM以降の空き容量を検索→格納可能データのデータブロック構築→DB保存→拡張→*」という動作をしていることになるのでしょうか。 拙い質問にご返答いただきありがとうございました。 | ||||
1
