`
thomas0988
  • 浏览: 486098 次
  • 性别: Icon_minigender_1
  • 来自: 南阳
社区版块
存档分类
最新评论

oracle11g 临时表空间收缩

 
阅读更多

一. 临时表空间收缩

 

1.1 说明

关于Oracle 的临时表空间,之前有整理过一篇Blog:

Oracle Temp 临时表空间

http://blog.csdn.net/tianlesoftware/article/details/4697417

 

以下操作会占用大量的temporary

    1、用户执行imp/exp 导入导出操作时,会使用大量的temporary段

    2、用户在rebuild index时

    3、执行create table ...... as 语句时

    4、移动用户下的数据到别的表空间时

 

大量的排序操作可能会导致临时表空间大量增长。为了提高性能,对排序区进行物理分配后,将在内存中管理它们以避免以后的物理回收。结果,磁盘中包含一个巨大的临时文件,直到将其删除。一种可能的解决方法是:使用较小的文件创建新的临时表空间,并将这个新的表空间设置为用户的默认临时表空间,然后删除旧的表空间。但是,这有一个缺点,即过程要求删除旧的临时表空间时不能存在活动的排序操作。

 

从Oracle Database11g 版本1 开始,可使用ALTER TABLESPACESHRINK SPACE 命令收缩临时表空间,也可以使用ALTER TABLESPACE SHRINKTEMPFILE 命令收缩临时文件。对于这两个命令,可以指定可选的KEEP 子句,该子句定义了表空间/临时文件可收缩到的下限。

如果忽略KEEP 子句,则只要满足其它存储属性,数据库就会尽可能尝试收缩表空间/临时文件(所有当前使用的区的总空间)。此操作需联机执行。但是,如果所分配的当前使用的一些区超出了收缩估计值,系统将等待这些区被释放以完成收缩操作。

 

注:

ALTER DATABASETEMPFILE RESIZE 命令通常会因ORA-03297 而失败,因为临时文件包含的已用数据超过了所需的RESIZE 值。

与ALTER TABLESPACE SHRINK 相反,ALTER DATABASE 命令不会在排序区分配后尝试取消分配。

 

     在Oracle 11g 以前,Temp 表空间使用以后,虽然可以释放,但是表空间的使用量显示还是100%,可以使用如下脚本查看临时表空间每个数据文件实际使用量:

 

set pagesize 50

col tablespace_name for a20

col "Tempfile name" for a42

set linesize 300

Select f.tablespace_name,

d.file_name "Tempfile name",

round((f.bytes_free + f.bytes_used) / 1024 /1024, 2) "total MB",

round(((f.bytes_free + f.bytes_used) -nvl(p.bytes_used, 0)) / 1024 / 1024, 2) "Free MB" ,

round(nvl(p.bytes_used, 0)/ 1024 / 1024, 2)"Used MB",

round((round(nvl(p.bytes_used, 0)/ 1024 /1024, 2)/round((f.bytes_free + f.bytes_used) / 1024 / 1024, 2))*100,2) as"Used_Rate(%)"

from SYS.V_$TEMP_SPACE_HEADER f,DBA_TEMP_FILES d, SYS.V_$TEMP_EXTENT_POOL p

where f.tablespace_name(+) = d.tablespace_name

and f.file_id(+) = d.file_id

and p.file_id(+) =d.file_id;

 

 

 

1.2 DBA_TEMP_FREE_SPACE视图

该字典视图是在Oracle 11g新增加的视图,用来查看表空间级别的临时空间使用率信息。此信息是从各种现有视图中导出的。

 

(1)  列出临时空间使用率信息

(2)  临时表空间使用率中心点

 

列名             说明

TABLESPACE_NAME  表空间的名称

TABLESPACE_SIZE  表空间的总大小(以字节为单位)

ALLOCATED_SPACE  已分配的总空间(以字节为单位),包括当前已分配的且正在使用中的空间以及当前已分配的且可重用的空间

FREE_SPACE  可用的总空间(以字节为单位),包括当前已分配的、可重用的以及当前未分配的空间

 

 

1.3 创建临时表的表空间选项

从Oracle Database11g 版本1 开始,可以在创建全局临时表时指定TABLESPACE子句。

如果没有指定表空间,将在默认的临时表空间中创建全局临时表。此外,还会在与临时表相同的临时表空间中创建在临时表中创建的索引。

 

注:

可以在DBA_TABLES 中查找用于存储全局临时表的表空间。

 

如:

CREATE TEMPORARY TABLESPACE temp

TEMPFILE 'tbs_temp.dbf' SIZE 600m REUSEAUTOEXTEND ON MAXSIZE

UNLIMITED

EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1m;

 

CREATE GLOBAL TEMPORARY TABLE temp_table (cvarchar2(10))

ON COMMIT DELETE ROWS TABLESPACE temp;

 

二.示例

 

2.1 查看dba_temp_free_space

 

SQL> set lin 160       

SQL> col tablespace_name for a20

SQL> col tablespace_size for 99999999999

SQL> col allocated_space for 99999999999

SQL> col free_space for 99999999999

SQL> select * from dba_temp_free_space;

 

TABLESPACE_NAME      TABLESPACE_SIZE ALLOCATED_SPACE   FREE_SPACE

-------------------- ------------------------------ ------------

TEMP                       524288000         7340032    523239424

 

SQL> select 524288000/1024/1024||'M'from dual;

 

5242

----

500M

--这里的Temp 表空间是500M。

 

2.2 执行temp 表空间的online shrink 操作:

SQL> alter tablespace temp shrink spacekeep 400M;

 

Tablespace altered.

 

SQL> select * from dba_temp_free_space;

 

TABLESPACE_NAME      TABLESPACE_SIZE ALLOCATED_SPACE   FREE_SPACE

-------------------- ------------------------------ ------------

TEMP                       420478976         1048576    419430400

 

SQL> select 420478976/1024/1024||'M'from dual;

 

4204

----

401M

 

 

2.3 shrink 数据文件

--如果有多个temp数据文件,也可以直接指定某个特定的temp 数据文件来进行shrink:

 

SQL> col file_name for a50

SQL> select file_name fromdba_temp_files;

 

FILE_NAME

--------------------------------------------------

/u01/app/oracle/oradata/anqing/temp01.dbf

 

SQL> alter tablespace temp shrinktempfile '/u01/app/oracle/oradata/anqing/temp01.dbf' keep 300M;

 

Tablespace altered.

 

SQL> select * from dba_temp_free_space;

 

TABLESPACE_NAME      TABLESPACE_SIZE ALLOCATED_SPACE   FREE_SPACE

-------------------- ------------------------------ ------------

TEMP                       315613184         1040384    314572800

 

SQL> select  315613184/1024/1024||'M' from dual;

 

315613184/10

------------

300.9921875M

 

SQL>

 

 

2.4 keep 选项说明

KEEP 选项用来指定压缩时表空间或者数据文件shrink的最小值,如果没有执行该命令,那么表空间或数据文件将被压缩到最小值。

 

SQL> alter tablespace temp shrink space;

 

Tablespace altered.

 

SQL> select * from dba_temp_free_space;

 

TABLESPACE_NAME      TABLESPACE_SIZE ALLOCATED_SPACE   FREE_SPACE

-------------------- ------------------------------ ------------

TEMP                         2088960         1040384      1048576

 

SQL> select 2088960/1024/1024||'M' fromdual;

 

2088960/10

----------

1.9921875M

 

--这里直接被压到2M了。Temp 表空间过小对性能是有影响的,所以在shrink时,还是建议使用keep 指定最小值。

 

 

 

 

 

 

 

 

 

---------------------------------------------------------------------------------------

版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!

Skype:    tianlesoftware

QQ:       tianlesoftware@gmail.com

Email:    tianlesoftware@gmail.com

Blog:     http://blog.csdn.net/tianlesoftware

Weibo:    http://weibo.com/tianlesoftware

Twitter:  http://twitter.com/tianlesoftware

Facebook: http://www.facebook.com/tianlesoftware

Linkedin: http://cn.linkedin.com/in/tianlesoftware

 

分享到:
评论

相关推荐

    Oracle 表空间 收缩

    ### Oracle 表空间收缩详解 #### 一、背景与需求 在Oracle数据库管理过程中,合理地管理和优化存储空间是非常重要的工作之一。有时,我们会遇到这样的情况:某个表空间占用的实际物理空间远大于其实际需要的空间,...

    Oracle 11G 日常维护手册

    1. 用户管理:创建、修改和删除数据库用户,设定默认表空间和临时表空间。 2. 权限分配:通过GRANT和REVOKE命令控制用户对对象的访问权限。 3. 角色管理:创建角色,集权分责,简化权限管理。 4. 审计功能:启用审计...

    29.Oracle表空间和数据文件1

    当数据库内存不足时,Oracle会将临时数据写入临时表空间,但在操作完成后,系统会自动清理并重新标记这些空间为可用,但不会立即释放磁盘空间,这可能导致临时表空间的大小波动。 5. **USERS表空间**:默认供普通...

    Oracle 11g OCP之053考前必看

    3. 表空间与数据文件管理:创建、扩展、收缩表空间,管理数据文件,理解临时表空间和重做日志文件的使用。 4. 用户与权限管理:创建用户、分配权限、角色管理,理解SQL的GRANT和REVOKE语句。 5. 性能监控与优化:...

    Oracle数据库基础及应用管理表空间和文件PPT学习教案.pptx

    永久性表空间存放长期存储的数据,临时表空间用于存储SQL查询过程中的临时数据,撤销表空间则用于保存回滚段,以支持事务的回滚操作。此外,表空间还可以分为大文件表空间和小文件表空间,前者适合处理大规模数据,...

    Oracle日常维护手册

    - **临时表空间**:用于存储临时数据,如排序结果,也需要定期监控其使用。 3. **性能监控**: - **SQL性能分析**:通过工具如SQL Trace和TKPROF,可以跟踪和分析SQL语句的执行性能,找出慢查询进行优化。 - **...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第2/2部分)

    7.4 创建和使用临时表 225 7.5 索引 227 7.5.1 为什么说索引是必需的 227 7.5.2 索引类型 228 7.5.3 创建和使用索引 232 7.5.4 修改和删除索引 233 7.6 约束 234 7.6.1 约束类型 234 7.6.2 定义约束 236 ...

    Oracle 数据库应用:第7章 管理表空间.ppt

    `SYSAUX`表空间在Oracle 10g引入,用于存放数据库组件的信息,减轻`SYSTEM`表空间的压力,防止安装和卸载Oracle组件时产生碎片。 2. **非系统表空间**:这包括`TEMP`和`UNDOTBS`(撤销表空间)。`TEMP`表空间用于...

    OCA Oracle Database 11g Administration I Exam Guide

    3. **数据存储管理**:掌握表空间的创建、扩展和收缩,以及数据文件和临时文件的管理。了解如何管理重做日志文件,以及如何使用RMAN(恢复管理器)进行备份和恢复操作。 4. **性能监控与调优**:学习使用SQL*Plus、...

    oracle删除哪些内容可以减少USERS01.DBF数据文件的大小

    2. **收缩表空间**:删除数据后,Oracle不会自动释放已分配的空间。可以使用`ALTER TABLE SHRINK SPACE`命令来缩小表的大小,这将重新组织表中的数据并回收未使用的空间。 3. **重定义表**:如果表中有大量空闲空间...

    Oracle 10g数据库逻辑存储结构.ppt

    例如,撤销表空间用于自动管理回滚信息,临时表空间用于存储执行SQL语句时产生的临时数据,而用户表空间则用于存储应用程序的数据。 在Oracle 10g中,新增了大文件表空间(Bigfile Tablespace)的概念,允许在一个...

    Oracle Database10g

    - 临时表空间组提供了一种将多个临时表空间组合在一起的方式。 - **重要特性**:提高了临时表空间的利用效率,减少了资源竞争。 **1.20 重命名表空间** - 重命名表空间功能使得表空间名称变更变得更加容易。 - **...

    Sybex OCP Oracle 10g Administration II Study Guide

    3. **数据存储与管理**:讲解Oracle的数据文件、控制文件、重做日志文件、临时表空间以及表空间的管理,包括如何创建、扩展和收缩这些组件。 4. **数据库实例与内存结构**:介绍SGA(System Global Area)和PGA...

    oracle 10g concepts

    - **3.2 表空间纵览:** 表空间分为永久表空间和临时表空间两种。永久表空间用于存储持久性数据,而临时表空间用于存储临时数据。 - **3.3 数据文件纵览:** 数据文件是数据库中用于存储数据的实际物理文件。每个表...

    创建oracle10g asm数据库step by step

    3. 执行DBCA创建:通过DBCA向导,输入数据库名称、系统表空间大小、临时表空间等信息,然后选择ASM实例和磁盘组,完成数据库创建。 五、管理ASM 1. 文件管理:ASM自动管理数据库文件的分配和扩展,以及故障检测和...

    OCA Oracle Database 11g:Administration I Exam Guide (Exam 1Z0-052) BOOK PART 1 OF 3

    还包括临时表空间的使用和自动存储管理(ASM)的概念。 8. **故障诊断与问题解决**:提供识别和解决数据库问题的方法,如日志分析、错误消息解析和使用Oracle Support文档。 压缩包中的文件列表看似包含HTML和PDF...

Global site tag (gtag.js) - Google Analytics