有人可以查看链接的引用并向我解释要运行的确切语句吗?
Oracle DBA's Guide: Creating a Large Index
这就是我想出来的......
CREATE TEMPORARY TABLESPACE ts_tmp
TEMPFILE 'E:\temp01.dbf' SIZE 10000M
REUSE AUTOEXTEND ON EXTENT MANAGEMENT LOCAL;
ALTER USER me TEMPORARY TABLESPACE ts_tmp;
CREATE UNIQUE INDEX big_table_idx ON big_table ( record_id );
DROP TABLESPACE ts_tmp;
修改1
创建此索引后,我为简单查询运行了解释计划并收到此错误:
ORA-00959: tablespace 'TS_TMP' does not exist
看来它根本不是暂时的...... :(
答案 0 :(得分:5)
CREATE TEMPORARY TABLESPACE ts_tmp TEMPFILE 'E:\temp01.dbf' SIZE 10000M REUSE AUTOEXTEND ON EXTENT MANAGEMENT LOCAL;
这将创建一个临时表空间(磁盘上将存储中间排序结果的区域)。索引是一组有序数据,排序需要大量空间。
“临时”在这里意味着存储的数据本质上是临时的,而不是表空间本身是临时的。可以把它想象成/tmp
中的Unix
目录或%TEMP%
中折叠的Windows
:目录/文件夹本身是永久性的,但存储在其中的数据是临时的。
REUSE
表示如果文件已经存在则不会失败(通常在文件名指向原始设备时使用,例如未格式化的磁盘分区,以避免OS
文件管理开销。相反,它只会打开文件进行写入并用新数据填充它。如果不是此子句,则如果存在具有给定名称的文件,则命令将失败。
AUTOEXTEND ON
表示“根据需要增加文件”。如果将其设置为off并且10Gb
将不足以进行排序操作,则表空间将不会自动增长,并且操作将失败。
EXTENT MANAGEMENT LOCAL
表示表空间布局存储在表空间本身(而不是系统表中)。不确定11g
,但在以前版本的Oracle
中,此选项不适用于临时表空间。
ALTER USER me TEMPORARY TABLESPACE ts_tmp;
这使用户me
使用新创建的临时表空间作为临时存储介质
CREATE UNIQUE INDEX big_table_idx ON big_table ( record_id );
这只是创建索引。
DROP TABLESPACE ts_tmp;
这会删除临时表空间。
在运行脚本之前,找出当前的默认表空间:
SELECT temporary_tablespace
FROM dba_users
WHERE username = 'ME'
最有可能的是,它会返回TEMP
。
在删除ts_tmp
之前,请为用户恢复默认临时表空间:
ALTER USER me TEMPORARY TABLESPACE temp; -- or whatever the previous query returned.
答案 1 :(得分:0)
关于oracle,表空间有一个小秘密,这个只在oracle中增加,并且永远不会减小,他们在这里尝试做的是避免这种情况,所以它创建一个临时表空间并使用该表空间创建索引然后删除它。
答案 2 :(得分:0)
HWM(高水位线)增加,这取决于您计算使用情况的方式是否已满 - 要查看TEMPORARY表空间的正确用法,请使用V $ SORT_USAGE和V $ SORT_SEGMENT视图。