我正在尝试将存储过程中使用的永久表转换为全局临时表。我查看了这些永久表上的统计数据,其中一些表有数千万行数据,如果大小为千兆字节(最大 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
表空间表现得像一个大文件表空间并实现索引/表分离? - 我可以创建两个
TEMP
大文件表空间并在其中一个中创建索引并在另一个中创建表吗?
我想使用全局临时表,但我在过程中处理的数据量似乎超出了全局临时表的设计。有什么建议么?