或者…如何缩减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
你要问的第一个问题是为什么临时表空间这么大。
你可能知道你的头顶上这个的答案。这可能是由于
大查询,你只是运行一个排序是一个错误(我做到了
多次)。这可能是由于一些其他特殊情况。如果说
是这样的情况下,所有你需要做的是清理是收缩临时
表空间和在生活中移动。
但是如果你不知道怎么办?在你决定收缩之前,你可能需要做一些
调查大型表空间的原因。如果这发生在a
定期的基础,那么你的数据库可能只需要那么多的空间。
动态性能视图
V$TEMPSEG_USAGE
可以非常有用的确定原因。
也许你只是不在乎原因,你只需要收缩它。
这是你的第三天工作。数据库中的数据只有200MiB
如果数据和临时表空间是13GiB – 只是收缩它继续前进。
如果它再次增长,我们将研究原因。在同一时间我
超出了磁盘卷上的空间,我只需要回空间。
让我们来看看缩小它。它将取决于什么版本
您正在运行的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(Maybee在10g也),这是它!如果它的工作,你可能想要
回到上一个命令并给它一些更多的尝试。
但是如果失败了。如果临时表空间是默认的临时表空间
这是在安装数据库时设置的,那么您可能需要做一个
更多的工作。在这一点上,我通常重新评估如果我真的需要
空间回。在所有磁盘空间只花费$ X.XX一个GiB。通常我不想要
在生产时间进行这样的更改。这意味着在凌晨2点工作
再次! (不是我真的反对
在上午2点工作 – 这只是……我喜欢睡觉了。和我的妻子
喜欢让我在家在2AM …不漫游在市中心的街道上午4点试图
记住我在哪里停车3小时前。我听说过“远程办公”
事情。我只是担心,我会得到一半,然后我的互联网连接
将失败 – 然后我必须急于市中心修复它所有之前的人们出现在
上午使用数据库。)
好吧…回到严重的东西…
如果要缩减的临时表空间是您的默认值
临时表空间,你将不得不先创建一个新的临时
表空间,将其设置为默认临时表空间,然后删除
您的旧默认临时表空间并重新创建它。后话
删除创建的第二个临时表。
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.
希望这些事情之一将有所帮助!