- PR -

SQL*LOADER ダイレクトパスロードでのエクステント数

1
投稿者投稿内容
arsenal_014
会議室デビュー日: 2004/12/16
投稿数: 2
お住まい・勤務地: 大阪
投稿日時: 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/10/15
投稿数: 280
投稿日時: 2004-12-17 15:59
引用:

arsenal_014さんの書き込み (2004-12-16 17:46) より:

ダイレクトパスロードを使用する場合は、
高水位標以降のブロックを使用するため、
CREATE TABLE文で指定する領域は関係ないと自分は思ったのですが、
用意した領域以上のデータ取込を実行してみると以下のようなエラーが
でてしまいました。

ORA-01631:最大エクステント数(255)に達しました(表[表名])

テーブルの領域を充分なだけ広げれば取込は可能なのですが、
何が無駄なこと、間違ったことをしているのではと思い質問させていただきます。

(略)

TRUNCATE INTO TABLE [テーブル名]
FIELDS TERMINATED BY ","

(略)



そもそも create table でどのように指定されているのかが
書かれていないので何とも言えませんが、「用意した領域以上の
データ取込を実行」しているのですから、実際に maxextents を
超えてしまったものと思いますが、そもそも何を問題視して
おられるのでしょうか?

# truncate を指定していますから、表のほとんど先頭に
# HWM は移動していると思いますが、その後 maxextents に
# 達するほどの量を格納しているのではないでしょうか?
会議室デビュー日: 2003/06/06
投稿数: 2
お住まい・勤務地: 東京都海近く
投稿日時: 2004-12-18 03:08
普通にテーブル領域を広げてよいと思います。
一般的には高水位標はあくまでテーブル領域内で使用した最大量です。
ロードが終わったら、ロードの終わった最後のところに
高水位標は移動します。
TRUNCATEのオプションの時の動きは、いまいち記憶が
定かじゃありません。
間違ってたら、ごめんなさい。
arsenal_014
会議室デビュー日: 2004/12/16
投稿数: 2
お住まい・勤務地: 大阪
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)