微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何缩小oracle中的temp表空间?

我们如何缩小oracle中的temp表空间?以及为什么它增加到高达25 GB,因为在应用程序的数据库中只有一个模式,数据表空间大小为2 GB,索引表空间大小为1 GB。
哦,我的天啊!看看我的临时表空间的大小!
或者…如何缩减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.

希望这些事情之一将有所帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐