如何在oracle中缩小临时表空间?

时间:2009-12-01 07:33:39

标签: oracle

我们如何在oracle中缩小临时表空间?因为数据库中只有一个模块用于应用程序,而且数据表空间大小为2 GB,索引表空间大小为1 GB,所以为什么它增加到25 GB以上。

7 个答案:

答案 0 :(得分:101)

哦,天哪!看看我的临时表空间的大小! 或者......如何缩小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

在确定原因时非常有用。

也许你只是不关心原因,你只需缩小它。 这是你上班的第三天。数据库中的数据仅为200MiB 如果数据和临时表空间是13GiB - 只需缩小它并继续前进。 如果它再次增长,那么我们将调查原因。同时我也是 超出该磁盘卷的空间,我只需要空间。

让我们来看看缩小它。这将取决于什么版本 您正在运行的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;

如果你是11克(也许在10克)这就是它!如果它有效,你可能想要 返回上一个命令并再试一次。

但如果失败怎么办?如果临时表空间是默认临时表 在安装数据库时设置,然后您可能需要执行此操作 更多的工作。在这一点上,我通常会重新评估我是否真的需要它 太空后卫。所有磁盘空间只需$ X.XX $ GiB。通常我不想要 在生产时间内进行这样的更改。这意味着在凌晨2点工作 再次! (不是我真的反对 在凌晨2点工作 - 只是......我也喜欢睡觉。还有我老婆 我喜欢在凌晨2点让我在家...而不是在凌晨4点在市中心的街道上漫步 记住3小时前我把车停在哪里。我听说过“远程办公” 事情。我只是担心我会中途通过我的互联网连接 将失败 - 然后我必须赶紧去市中心解决这一切,然后人们出现在 早上使用数据库。)

好的......回到严肃的事情...... 如果要缩小的临时表空间是默认值 临时表空间,您将不得不先创建一个新的临时表 tablespace,将其设置为默认临时表空间然后删除 旧的默认临时表空间并重新创建它。后记 删除创建的第二个临时表。

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.

希望其中一件事有所帮助!

答案 1 :(得分:6)

管理表空间的选项比以8i开头的版本要好得多。如果您使用适当类型的文件用于临时表空间(即本地管理的临时文件),则尤其如此。

因此,它可以像这个命令一样简单,它会将你的表空间缩小到128兆......

alter tablespace <your_temp_ts> shrink space keep 128M;

Oracle在线文档非常好。 Find out more.

修改

看来OP有一个早期版本的数据库。对于早期版本,我们必须调整单个数据文件的大小。所以,首先,找到文件名。这些查询中的一个或另一个应该这样做......

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
/

答案 2 :(得分:2)

您应该编写您使用的Oracle版本。你很可能使用的不是Oracle 11g,这就是你无法收缩临时表空间的原因。

备选方案:

1)alter database tempfile '[your_file]' resize 128M;可能会失败 2)删除并重新创建表空间。如果要缩小的临时表空间是默认的临时表空间,则可能必须先创建一个新的临时表空间,将其设置为默认的临时表空间,然后删除旧的默认临时表空间并重新创建它。然后删除创建的第二个临时表。 3)对于Oracle 9i及更高版本,您可以删除临时文件并添加新文件

非常详细地描述了所有内容 here


请参阅此链接:http://databaseguide.blogspot.com/2008/06/resizing-temporary-tablespace.html
它已经链接了,但也许你错过了它,所以这里又是。

答案 3 :(得分:1)

它会增加,因为您需要临时存储空间,可能是由于笛卡尔积或大型分类操作。

动态效果视图V$TEMPSEG_USAGE将有助于诊断原因。

答案 4 :(得分:0)

alter database datafile  'C:\ORA_SERVER\ORADATA\AXAPTA\AX_DATA.ORA' resize 40M;

如果没有帮助:

  • 创建新的表空间
  • 切换到新的临时表空间
  • 等到不使用旧表空间
  • 删除旧表空间

答案 5 :(得分:0)

如果我将来需要再次收回存储空间,我不会因为放弃备用温度而烦恼...

  1. 从temp group set default to stand-alone temp
  2. 等待一段时间,然后调整临时组成员的大小
  3. 将默认设置恢复为临时组
  4. 等一会儿,独立调整大小。不急于做最后一步

答案 6 :(得分:0)

临时表空间用于数据库排序和联接操作以及用于存储全局临时表。它的大小可能会在一段时间内增长,因此我们要么需要重新创建临时表空间,要么缩小它以释放未使用的空间。

Steps to shrink TEMP Tablespace