`
13594135
  • 浏览: 193476 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

oracle Shrink命令

 
阅读更多
‍从10g开始,oracle开始提供Shrink的命令,假如我们的表空间中支持自动段空间管理 (ASSM),就可以使用这个特性缩小段,即降低HWM。

segment shrink分为两个阶段:

1、数据重组(compact):通过一系列insert、delete操作,将数据尽量排列在段的前面。在这个过程中需要在表上加RX锁,即只在需要移动的行上加锁。由于涉及到rowid的改变,需要enable row movement.同时要disable基于rowid的trigger.这一过程对业务影响比较小。

2、HWM调整:第二阶段是调整HWM位置,释放空闲数据块。此过程需要在表上加X锁,会造成表上的所有DML语句阻塞。在业务特别繁忙的系统上可能造成比较大的影响。

shrink space语句两个阶段都执行。

shrink space compact只执行第一个阶段。

如果系统业务比较繁忙,可以先执行shrink space compact重组数据,然后在业务不忙的时候再执行shrink space降低HWM释放空闲数据块。

shrink必须开启行迁移功能。

alter table table_name enable row movement ;

注意:alter table XXX enable row movement语句会造成引用表XXX的对象(如存储过程、包、视图等)变为无效。执行完成后,最好执行一下utlrp.sql来编译无效的对象。

语法:

alter table <table_name> shrink space [ <null> | compact | cascade ];

alter table <table_name> shrink space compcat;

收缩表,相当于把块中数据打结实了,但会保持 high water mark;

alter table <tablespace_name> shrink space;

收缩表,降低 high water mark;

alter table <tablespace_name> shrink space cascade;

收缩表,降低 high water mark,并且相关索引也要收缩一下下。

alter index idxname shrink space;

回缩索引

1:普通表

Sql脚本,改脚本会生成相应的语句

select’alter table ‘||table_name||’ enable row movement;’||chr(10)||’alter table ‘||table_name||’ shrink space;’||chr(10)from user_tables;

select’alter index ‘||index_name||’ shrink space;’||chr(10)from user_indexes;

2:分区表的处理

进行shrink space时 发生ORA-10631错误.shrink space有一些限制.

在表上建有函数索引(包括全文索引)会失败。

Sql脚本,改脚本会生成相应的语句

select ‘alter table ‘||table_name||’ enable row movement;’||chr(10)||’alter table ‘||table_name||’ shrink space;’||chr(10) from user_tables where ;

select ‘alter index ‘||index_name||’ shrink space;’||chr(10) from user_indexes where uniqueness=’NONUNIQUE’ ;

select ‘alter table ‘||segment_name||’ modify subpartition ‘||partition_name||’ shrink space;’||chr(10) from user_segments where segment_type=’TABLE SUBPARTITION’ ‘;

另外,对于频繁操作的表可以缓存到内存中

oracle的db_buffer_pool由三部分组成:

buffer_pool_defualt

buffer_pool_keep

buffer_pool_recycle

如果要把表钉死在内存中,也就是把表钉在keep区。

相关的命令为:

alter table ….. storage(buffer_pool keep);

这句命令把表示表如果缓存的话是缓存在keep区。

可以通过语句:

select table_name from dba_tables where buffer_pool=’KEEP’;查询到改表是放在keep区中的。

但是不意味着表已经被缓存了。

下面的语句把表缓存:

alter table …. cache;

可以通过

select table_name from dba_ tables where rtrim(cache)=’Y’

查询到该表已经被缓存了。

加入到keep区的表不是说不能被移出内存,不过是比较不容易移出内存。

也可以手工来移出内存,命令如下:

alter table … nocache;


分享到:
评论

相关推荐

    最全的oracle常用命令大全.txt

    ORACLE常用命令 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle&gt;svrmgrl SVRMGR&gt;connect internal SVRMGR&gt;startup ...

    Oracle碎片整理

    本文将深入探讨Oracle中的碎片整理,主要关注`ALTER TABLE T MOVE`和`ALTER TABLE T SHRINK SPACE`两个命令。 首先,我们来理解什么是Oracle数据库中的碎片。碎片分为两种类型:内部碎片和外部碎片。内部碎片是指...

    oracle 命令大全.doc

    在Oracle中,管理员经常需要使用SQL命令来管理数据库的各种元素,如日志、表空间等。以下是对【标题】"Oracle命令大全.doc"中提及的一些关键知识点的详细说明: ### 第一章:日志管理 1. **强制日志切换**: `...

    Oracle数据库整理表碎片

    - **使用SHRINK命令**:从10g开始,Oracle引入了更为简便的SHRINK命令,它允许用户通过简单的命令来整理表碎片,而且无需重建索引。具体操作如下: - **整理表,不影响DML操作**: ```sql alter table TABLE_...

    Oracle表碎片整理操作步骤详解

    Oracle提供了一种`shrink space`功能来处理表碎片,这通常通过ALTER TABLE命令的COMPACT选项实现。然而,对于索引,更常见的是采用在线重建(REBUILD ONLINE)的方式来整理碎片。这样可以在不中断业务的情况下,重建...

    Oracle日常维护总结

    - 使用`tnsping`命令来验证TNS(Transparent Network Substrate)服务是否正常工作,确保客户端能够正确连接到Oracle数据库服务器。 - `sqlplus`命令用于登录数据库,`connect system/manager as sysdba`是作为...

    ORACLE 段的碎片整理

    4. **使用ALTER TABLE SHRINK SPACE命令**:对于表,可以直接使用ALTER TABLE ... SHRINK SPACE命令来尝试回收空间,但这可能不适用于所有情况,特别是在有大量索引或约束的情况下。 5. **使用DBMS_REDEFINITION包*...

    oracle高水位.txt

    启用行移动后,当执行`ALTER TABLE SHRINK SPACE`时,Oracle会自动移动行到新的位置,从而重置高水位线。 - **收缩表空间**: ```sql ALTER TABLE table_name SHRINK SPACE; ``` 这条命令用于收缩表空间,即...

    Oracle Freelist和HWM原理及性能优化

    DEALLOCATE UNUSED`命令。HWM的存在影响了数据的重用,当新的数据插入时,Oracle通常会在HWM以上寻找空闲块,而不是回填已删除数据的空间。这可能导致空间利用率低下,尤其是在OLTP(在线事务处理)系统中,频繁的...

    oracle优化资料.docx

    SHRINK SPACE`命令可以回收表空间,但这个特性仅在Oracle 10g及以上版本支持。 - `ALTER TABLESPACE ... COALESCE`可以整合表空间碎片,提高空间利用率,但不会缩小文件大小。 - 若要查看表所占用的块数,可以...

    oracle flashback技术总结

    - 数据文件删除或使用Shrink技术缩小后,不能直接使用Flashback Database恢复到更改前状态,需先利用RMAN恢复文件,再使用Flashback Database完成剩余部分。 - 控制文件若从备份恢复或重建,则不能使用此技术。 -...

    oracle数据库监控

    - 使用DBMS_SPACE_ADMIN包中的工具来收缩表空间,例如DBMS_SPACE_ADMIN SHRINK TABLESPACE命令用于减少表空间中未使用的空间。 - 重建索引,以提高查询效率。例如,重建某个主键索引的命令是ALTER INDEX PK_...

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

    可以使用`ALTER TABLE SHRINK SPACE`命令来缩小表的大小,这将重新组织表中的数据并回收未使用的空间。 3. **重定义表**:如果表中有大量空闲空间,可以考虑使用`CREATE TABLE AS SELECT`语句创建新表,然后交换...

    Oracle DBA必备日常维护问题大全

    #### 一、Oracle DBA 日常操作与命令 **1. 连接数据库** - 使用 `tnsping` 检测网络连接是否正常: ``` c:&gt;tnsping ora9 ``` - 使用 `sqlplus` 连接到数据库: ``` c:&gt;sqlplus user/password@SID ``` - 以...

    ORACLE回滚段的概念、用法和规划及问题解决

    ### ORACLE回滚段的概念、用法和规划及问题解决 #### 一、回滚段的概念 在Oracle数据库中,**回滚段(Rollback Segment)**是一种特殊类型的段,用于存储事务处理过程中更改的数据的旧值。这些数据在事务处理期间...

    Oracle_Flashback_技术_总结.pdf

    - 数据文件被删除或使用Shrink技术缩小后,无法直接使用Flashback Database,需先用RMAN恢复原有文件,再执行Flashback Database操作。 - 控制文件如果是从备份中恢复或重建的,也不支持Flashback Database。 - ...

    oracle 90条基本语句

    收缩数据库的命令可以使用`DBCC SHRINKDATABASE`,在Oracle中则是`ALTER DATABASE SHRINK SPACE`命令: ```sql ALTER DATABASE SHRINK SPACE COMPACT; ``` ### 9. 收缩数据文件 (Shrink Data File) 收缩特定的数据...

    Oracle数据文件收缩实例

    RESIZE命令来回收空间,必须确保新的大小不会低于HWM,否则会失败。 此外,Oracle Parallel Server (OPS)环境下的数据文件收缩也需要额外的考虑,因为可能涉及多个实例共享数据文件,需要协调以避免数据丢失或不...

    Oracle 10g OCP 042解析(175题)

    - 删除数据文件或通过Shrink技术缩小数据文件后,必须先利用RMAN恢复,再执行剩余的闪回操作。 - 控制文件若为备份恢复或重建,则无法使用Flashback Database。 - 最早可恢复的SCN取决于Flashback Log中记录的最...

Global site tag (gtag.js) - Google Analytics