ストアドプロシージャで使用される永続テーブルをグローバル一時テーブルに変換しようとしています。これらの永続テーブルの統計を確認しましたが、数千万行のデータがあり、サイズがギガバイト(最大10 GB)の場合はオーダーです。
それで、
CREATE TABLE my_table (
column1 NUMBER,
column2 NUMBER,
etc...
)
TABLESPACE BIGTABLESPACE
NOLOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;
になる必要があります
CREATE GLOBAL TEMPORARY TABLE my_table (
column1 NUMBER,
column2 NUMBER,
etc..
)
ON COMMIT PRESERVE ROWS;
既存の永続テーブルごとに、セッションが終了するまで保持する必要がある行を含む同等のグローバル一時テーブルを作成しています。このグローバル一時テーブルは、永続テーブルの代わりにプロシージャで使用されます。
(EXECUTE IMMEDIATE 'TRUNCATE ...'
開始時、およびINSERT /*+ APPEND */ INTO
後の時点で)
すべての永続テーブルは大きなテーブルスペースに作成されていますBIGTABLESPACE
Oracleのドキュメントには、グローバル一時テーブルがユーザーの一時テーブルスペースに作成されると記載されています(これはと思いますTEMP
)。これに伴う問題は、TEMP表領域が小さく、エクステントが手順中に拡張するのに必要なサイズに拡張するように設定されていないことです。
表TEMP
領域は、データベースの作成中に作成されました
create database "$oracle\_sid"
user sys identified by "$sys\_password"
user system identified by "$system\_password"
set default bigfile tablespace
controlfile reuse
maxdatafiles 256
maxinstances $maxinstances
maxlogfiles 16
maxlogmembers 3
maxloghistory 1600
noarchivelog
character set WE8MSWIN1252
national character set AL16UTF16
datafile
'$oracle\_home/oradata/$oracle\_sid/system01.dbf' size 512M
logfile
'$oracle\_home/oradata/$oracle\_sid/redo01.log' size 1G,
'$oracle\_home/oradata/$oracle\_sid/redo02.log' size 1G,
'$oracle\_home/oradata/$oracle\_sid/redo03.log' size 1G
sysaux datafile
'$oracle\_home/oradata/$oracle\_sid/sysaux01.dbf' size 256M
default temporary tablespace temp tempfile
'$oracle\_home/oradata/$oracle\_sid/temp01.dbf' size 5G
undo tablespace "UNDOTBS1" datafile
'$oracle\_home/oradata/$oracle\_sid/undotbs01.dbf' size 5G;
永続テーブル(私が置き換えることを計画している)は、もともとテーブルスペースに作成されましたBIGTABLESPACE
-- 50G bigfile datafile size
create bigfile tablespace "BIGTABLESPACE"
datafile '$oracle\_home/oradata/$oracle\_sid/bts01.dbf' size 50G
extent management local
segment space management auto;
永続テーブルインデックスは、もともとテーブルスペースで作成されましたBIGTABLESPACE
-- 20G bigfile datafile size
create bigfile tablespace "BIGINDXSPACE"
datafile '$oracle\_home/oradata/$oracle\_sid/btsindx01.dbf' size 20G
extent management local
segment space management auto;
- これらの永続テーブルをグローバル一時テーブルに置き換えることは可能ですか?
- TEMP表領域では、TEMP表領域の拡張で問題が発生します。表領域にグローバル一時テーブルとそのインデックスを作成する方法はあります
BIGTABLESPACE
かBIGINDXSPACE
? TEMP
そうでない場合、テーブルスペースをビッグファイルテーブルスペースのように動作させ、インデックス/テーブルの分離を実現するにはどうすればよいですか?- 2つの
TEMP
bigfileテーブルスペースを作成し、1つにインデックスを作成し、別のテーブルにテーブルを作成できますか?
グローバル一時テーブルを使用したいのですが、プロシージャで処理するデータの量は、グローバル一時テーブルの意図した設計を超えているように見えます。助言がありますか?