在Oracle中创建超大索引

在Oracle中创建超大索引,oracle,indexing,Oracle,Indexing,有人能看看链接的引用并向我解释要运行的精确语句吗 这是我想到的 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 ( reco

有人能看看链接的引用并向我解释要运行的精确语句吗

这是我想到的

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

看起来这根本不是暂时的…:(

关于oracle,表空间有一个小秘密,这个秘密在oracle中只会增加,而且永远不会减少大小,他们在这里试图做的是避免这种情况,所以它创建一个临时表空间,并使用该表空间创建索引,然后将其删除。

关于oracle,表空间,这个小秘密oracle只会增加,而且永远不会减少大小,他们在这里尝试的是避免这种情况,因此它会创建一个临时表空间,并使用该表空间创建索引,然后将其删除

这将创建一个临时表空间(磁盘上存储中间排序结果的区域)。索引是一组已排序的数据,排序需要大量空间

这里的“临时”意味着存储的数据本质上是临时的,而不是表空间本身是临时的。可以把它想象成Unix中的
/tmp
目录,或者
%TEMP%
折叠在
窗口中:目录/文件夹本身是永久的,但其中存储的数据是临时的

重用
意味着如果文件已经存在,则不会失败(通常在文件名指向原始设备时使用,如未格式化的磁盘分区,以避免
OS
文件管理开销)。相反,它将只打开文件进行写入,并用新数据填充。如果不使用此子句,则如果存在具有给定名称的文件,则该命令将失败

AUTOEXTEND ON
表示“根据需要增加文件”。如果将其设置为off,并且
10Gb
不足以进行排序操作,表空间将不会自动增加,操作将失败

EXTENT MANAGEMENT LOCAL
表示表空间布局存储在表空间本身(不在系统表中)。不确定
11g
,但在以前版本的
Oracle
中,此选项不适用于临时表空间

这使得用户
me
将新创建的临时表空间用作临时存储介质

这只是创建索引

这将删除临时表空间

在运行脚本之前,请确定当前默认表空间:

SELECT  temporary_tablespace
FROM    dba_users
WHERE   username = 'ME'
它很可能返回
TEMP

在删除
ts_tmp
之前,恢复用户的默认临时表空间:

ALTER USER me TEMPORARY TABLESPACE temp; -- or whatever the previous query returned.
这将创建一个临时表空间(磁盘上存储中间排序结果的区域)。索引是一组已排序的数据,排序需要大量空间

这里的“临时”意味着存储的数据本质上是临时的,而不是表空间本身是临时的。可以把它想象成Unix中的
/tmp
目录,或者
%TEMP%
折叠在
窗口中:目录/文件夹本身是永久的,但其中存储的数据是临时的

重用
意味着如果文件已经存在,则不会失败(通常在文件名指向原始设备时使用,如未格式化的磁盘分区,以避免
OS
文件管理开销)。相反,它将只打开文件进行写入,并用新数据填充。如果不使用此子句,则如果存在具有给定名称的文件,则该命令将失败

AUTOEXTEND ON
表示“根据需要增加文件”。如果将其设置为off,并且
10Gb
不足以进行排序操作,表空间将不会自动增加,操作将失败

EXTENT MANAGEMENT LOCAL
表示表空间布局存储在表空间本身(不在系统表中)。不确定
11g
,但在以前版本的
Oracle
中,此选项不适用于临时表空间

这使得用户
me
将新创建的临时表空间用作临时存储介质

这只是创建索引

这将删除临时表空间

在运行脚本之前,请确定当前默认表空间:

SELECT  temporary_tablespace
FROM    dba_users
WHERE   username = 'ME'
它很可能返回
TEMP

在删除
ts_tmp
之前,恢复用户的默认临时表空间:

ALTER USER me TEMPORARY TABLESPACE temp; -- or whatever the previous query returned.

HWM(高水位线)会增加,这取决于您计算使用率的方式—要查看临时表空间的正确使用情况,请使用V$SORT\u使用率和V$SORT\u段视图。

HWM(高水位线)根据您计算使用率的方式增加显示为满-要查看临时表空间的正确使用率,请使用V$SORT_使用率和V$SORT_段视图。

谢谢,但是……您能看看DBA的指南链接,看看我是否正确实现了它吗?我希望对源材料进行解释,而不是我编写的内容。
@Rudiger
:基本上,所有这些只是确保您将有足够的磁盘空间来创建索引。是的,您正确地实现了这一点,除了
扩展管理
子句(我不确定)。如果代码不产生错误,那么就可以了。您唯一错过的是需要还原默认用户的表在删除新创建的表空间之前,请将其转换为上一个值。将我的临时表空间重置为原始临时表空间的
ALTER USER
语句是什么?谢谢,但是……您能看看DBA的指南链接,看看我是否正确地实现了它吗?我希望对源材料进行解释,而不是我所写的内容e、
@Rudiger
:基本上,所有这些只是确保您有足够的磁盘空间来创建索引。是的,您可以
SELECT  temporary_tablespace
FROM    dba_users
WHERE   username = 'ME'
ALTER USER me TEMPORARY TABLESPACE temp; -- or whatever the previous query returned.