从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常用命令 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>startup ...
本文将深入探讨Oracle中的碎片整理,主要关注`ALTER TABLE T MOVE`和`ALTER TABLE T SHRINK SPACE`两个命令。 首先,我们来理解什么是Oracle数据库中的碎片。碎片分为两种类型:内部碎片和外部碎片。内部碎片是指...
在Oracle中,管理员经常需要使用SQL命令来管理数据库的各种元素,如日志、表空间等。以下是对【标题】"Oracle命令大全.doc"中提及的一些关键知识点的详细说明: ### 第一章:日志管理 1. **强制日志切换**: `...
- **使用SHRINK命令**:从10g开始,Oracle引入了更为简便的SHRINK命令,它允许用户通过简单的命令来整理表碎片,而且无需重建索引。具体操作如下: - **整理表,不影响DML操作**: ```sql alter table TABLE_...
Oracle提供了一种`shrink space`功能来处理表碎片,这通常通过ALTER TABLE命令的COMPACT选项实现。然而,对于索引,更常见的是采用在线重建(REBUILD ONLINE)的方式来整理碎片。这样可以在不中断业务的情况下,重建...
- 使用`tnsping`命令来验证TNS(Transparent Network Substrate)服务是否正常工作,确保客户端能够正确连接到Oracle数据库服务器。 - `sqlplus`命令用于登录数据库,`connect system/manager as sysdba`是作为...
4. **使用ALTER TABLE SHRINK SPACE命令**:对于表,可以直接使用ALTER TABLE ... SHRINK SPACE命令来尝试回收空间,但这可能不适用于所有情况,特别是在有大量索引或约束的情况下。 5. **使用DBMS_REDEFINITION包*...
启用行移动后,当执行`ALTER TABLE SHRINK SPACE`时,Oracle会自动移动行到新的位置,从而重置高水位线。 - **收缩表空间**: ```sql ALTER TABLE table_name SHRINK SPACE; ``` 这条命令用于收缩表空间,即...
DEALLOCATE UNUSED`命令。HWM的存在影响了数据的重用,当新的数据插入时,Oracle通常会在HWM以上寻找空闲块,而不是回填已删除数据的空间。这可能导致空间利用率低下,尤其是在OLTP(在线事务处理)系统中,频繁的...
SHRINK SPACE`命令可以回收表空间,但这个特性仅在Oracle 10g及以上版本支持。 - `ALTER TABLESPACE ... COALESCE`可以整合表空间碎片,提高空间利用率,但不会缩小文件大小。 - 若要查看表所占用的块数,可以...
- 数据文件删除或使用Shrink技术缩小后,不能直接使用Flashback Database恢复到更改前状态,需先利用RMAN恢复文件,再使用Flashback Database完成剩余部分。 - 控制文件若从备份恢复或重建,则不能使用此技术。 -...
- 使用DBMS_SPACE_ADMIN包中的工具来收缩表空间,例如DBMS_SPACE_ADMIN SHRINK TABLESPACE命令用于减少表空间中未使用的空间。 - 重建索引,以提高查询效率。例如,重建某个主键索引的命令是ALTER INDEX PK_...
可以使用`ALTER TABLE SHRINK SPACE`命令来缩小表的大小,这将重新组织表中的数据并回收未使用的空间。 3. **重定义表**:如果表中有大量空闲空间,可以考虑使用`CREATE TABLE AS SELECT`语句创建新表,然后交换...
#### 一、Oracle DBA 日常操作与命令 **1. 连接数据库** - 使用 `tnsping` 检测网络连接是否正常: ``` c:>tnsping ora9 ``` - 使用 `sqlplus` 连接到数据库: ``` c:>sqlplus user/password@SID ``` - 以...
### ORACLE回滚段的概念、用法和规划及问题解决 #### 一、回滚段的概念 在Oracle数据库中,**回滚段(Rollback Segment)**是一种特殊类型的段,用于存储事务处理过程中更改的数据的旧值。这些数据在事务处理期间...
- 数据文件被删除或使用Shrink技术缩小后,无法直接使用Flashback Database,需先用RMAN恢复原有文件,再执行Flashback Database操作。 - 控制文件如果是从备份中恢复或重建的,也不支持Flashback Database。 - ...
收缩数据库的命令可以使用`DBCC SHRINKDATABASE`,在Oracle中则是`ALTER DATABASE SHRINK SPACE`命令: ```sql ALTER DATABASE SHRINK SPACE COMPACT; ``` ### 9. 收缩数据文件 (Shrink Data File) 收缩特定的数据...
RESIZE命令来回收空间,必须确保新的大小不会低于HWM,否则会失败。 此外,Oracle Parallel Server (OPS)环境下的数据文件收缩也需要额外的考虑,因为可能涉及多个实例共享数据文件,需要协调以避免数据丢失或不...
- 删除数据文件或通过Shrink技术缩小数据文件后,必须先利用RMAN恢复,再执行剩余的闪回操作。 - 控制文件若为备份恢复或重建,则无法使用Flashback Database。 - 最早可恢复的SCN取决于Flashback Log中记录的最...