如何在oracle中缩减临时表空间?为什么它会增加到25 GB,因为数据库中只有一个模式用于应用程序,数据表空间大小是2 GB,索引表空间大小是1 GB。
发布于 2009-12-10 13:04:26
我的天哪!看看我的临时表空间的大小!或者..。如何在Oracle中收缩临时表空间。
是的,我运行了一个查询来查看我的临时表空间有多大:
SQL> SELECT tablespace_name, file_name, bytes
2 FROM dba_temp_files WHERE tablespace_name like 'TEMP%';
TABLESPACE_NAME FILE_NAME BYTES
----------------- -------------------------------- --------------
TEMP /the/full/path/to/temp01.dbf 13,917,200,000您必须问的第一个问题是,为什么临时表空间这么大。你可能会立刻知道这个问题的答案。这可能是因为您刚刚运行的一个大查询是一个错误的排序(我已经不止一次这样做了)。这可能是由于其他一些特殊的情况。如果是这种情况,那么您需要做的就是缩小临时表空间并继续生活。
但是如果你不知道呢?在决定收缩之前,您可能需要对大型表空间的原因进行一些调查。如果这种情况经常发生,那么您的数据库可能只需要这么大的空间。
动态性能视图
V$TEMPSEG_USAGE在确定原因时非常有用。
也许你只是不关心原因,你只需要缩小它。这是你工作的第三天了。如果数据和临时表空间是13GiB,那么数据库中的数据只有200MiB --只需缩小它,然后继续前进。如果它再次增长,我们将调查原因。同时,该磁盘卷上的空间已用完,我只需要找回空间。
让我们来看看如何缩小它。这在一定程度上取决于您正在运行的Oracle版本以及临时表空间是如何设置的。
Oracle将尽最大努力防止您犯任何可怕的错误,所以我们将尝试命令,如果它们不起作用,我们将以一种新的方式缩小。
首先,让我们尝试缩小数据文件。如果我们能做到这一点,那么我们就可以找回空间,我们就可以担心为什么明天它会增长。
SQL>
SQL> alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M;
alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M
*
ERROR at line 1:
ORA-03297: file contains used data beyond requested RESIZE value根据错误消息,您可能希望尝试使用比文件当前站点更小的不同大小。我在这方面的成功是有限的。仅当临时表空间位于文件头并且小于您指定的大小时,Oracle才会收缩文件。一些旧的Oracle文档(他们更正了这一点)说,您可以发出命令,错误消息将告诉您可以缩小到什么大小。当我开始作为DBA工作时,情况并非如此。您只需猜测并重新运行该命令一堆次,看看它是否工作。
好的。这不管用。这个怎么样。
SQL> alter tablespace YOUR_TEMP_TABLESPACE_NAME shrink space keep 256M;如果你在11g中(也是10g中的Maybee),这就是它!如果它有效,您可能想要返回到前面的命令,并给它一些尝试。
但如果这失败了呢。如果临时表空间是在安装数据库时设置的默认临时表空间,那么您可能需要做更多的工作。在这一点上,我通常会重新评估我是否真的需要找回那个空间。毕竟,磁盘空间只需要花费$X.XX一个GiB。通常,我不想在生产时间做这样的更改。这意味着又要在凌晨2点工作了!(并不是说我真的反对在凌晨2点工作--只是……嗯,我也喜欢睡觉。我妻子喜欢我凌晨两点在家...没有在凌晨4点在市中心的街道上漫步,试图回忆起3个小时前我把车停在哪里。我听说过“远程办公”这件事。我只是担心我会走到一半,然后我的互联网连接就会失败-然后我必须赶在人们早上出现使用数据库之前赶到市中心解决所有问题。)
好的..。回到正题上来。如果要收缩的临时表空间是默认临时表空间,则必须首先创建一个新的临时表空间,将其设置为默认临时表空间,然后删除旧的默认临时表空间并重新创建它。Afterword删除创建的第二个临时表。
SQL> CREATE TEMPORARY TABLESPACE temp2
2 TEMPFILE '/the/full/path/to/temp2_01.dbf' SIZE 5M REUSE
3 AUTOEXTEND ON NEXT 1M MAXSIZE unlimited
4 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
Tablespace created.
SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2;
Database altered.
SQL> DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES;
Tablespace dropped.
SQL> CREATE TEMPORARY TABLESPACE temp
2 TEMPFILE '/the/full/path/to/temp01.dbf' SIZE 256M REUSE
3 AUTOEXTEND ON NEXT 128M MAXSIZE unlimited
4 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
Tablespace created.
SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;
Database altered.
SQL> DROP TABLESPACE temp2 INCLUDING CONTENTS AND DATAFILES;
Tablespace dropped.希望这些东西中的一个能有所帮助!
发布于 2009-12-01 15:52:31
与从8i开始的版本相比,用于管理表空间的选项已经有了很大的改进。如果您为临时表空间使用适当类型的文件(即本地管理的临时文件),这一点尤其正确。
所以,它可以像下面的命令一样简单,它会将表空间缩小到128兆...
alter tablespace <your_temp_ts> shrink space keep 128M;Oracle在线文档相当不错。Find out more.
编辑
看起来操作员有一个较早版本的数据库。在早期版本中,我们必须调整单个数据文件的大小。所以,首先,找到文件名。这些查询中的一个或另一个应该能做到这一点...
select file_name from dba_data_files where tablespace_name = '<your_temp_ts>'
/
select file_name from dba_temp_files where tablespace_name = '<your_temp_ts>'
/ 然后在此命令中使用该路径:
alter database datafile '/full/file/path/temp01.dbf' resize 128m
/发布于 2009-12-01 21:14:49
您应该已经编写了所使用的Oracle版本。您最有可能使用的不是Oracle 11g,这就是为什么不能缩小临时表空间的原因。
替代方案:
1)可能会失败的alter database tempfile '[your_file]' resize 128M;
2)删除并重新创建表空间。如果要收缩的临时表空间是默认的临时表空间,则可能必须首先创建一个新的临时表空间,将其设置为默认的临时表空间,然后删除旧的默认临时表空间并重新创建它。然后删除创建的第二个临时表。3)对于Oracle 9i和更高版本,您只需删除临时文件并添加新的临时文件
对所有内容都进行了非常详细的描述。
请参阅此链接:http://databaseguide.blogspot.com/2008/06/resizing-temporary-tablespace.html
它已经被链接了,但是你可能错过了,所以它又出现了。
https://stackoverflow.com/questions/1824572
复制相似问题