有人可以查看链接的引用并向我解释要运行的确切语句吗?
这就是我想出来的......
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;
Run Code Online (Sandbox Code Playgroud)
编辑1
创建此索引后,我为简单查询运行了解释计划并收到此错误:
ORA-00959: tablespace 'TS_TMP' does not exist
Run Code Online (Sandbox Code Playgroud)
看来它根本不是暂时的...... :(
Run Code Online (Sandbox Code Playgroud)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此选项的先前版本中,临时表空间不可用.
Run Code Online (Sandbox Code Playgroud)ALTER USER me TEMPORARY TABLESPACE ts_tmp;
这使用户me可以使用新创建的临时表空间作为临时存储介质
Run Code Online (Sandbox Code Playgroud)CREATE UNIQUE INDEX big_table_idx ON big_table ( record_id );
这只是创建索引.
Run Code Online (Sandbox Code Playgroud)DROP TABLESPACE ts_tmp;
这会删除临时表空间.
在运行脚本之前,找出当前的默认表空间:
SELECT temporary_tablespace
FROM dba_users
WHERE username = 'ME'
Run Code Online (Sandbox Code Playgroud)
最有可能的是,它会回归TEMP.
在删除之前ts_tmp,请为用户恢复默认临时表空间:
ALTER USER me TEMPORARY TABLESPACE temp; -- or whatever the previous query returned.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5722 次 |
| 最近记录: |