段收缩的方法
来源:互联网 发布:m18无后坐力炮数据 编辑:程序博客网 时间:2024/04/28 19:13
如何体现表的水位线呢?oracle没有这样的参数,可以通过表里面的行所占的数据块(blocks)来间接反映
SQL> create table hr.huang as select * from dba_objects; 用sys用户给hr创建一张表
切换到hr用户
SQL> select TABLE_NAME,NUM_ROWS ,BLOCKS from user_tables;
TABLE_NAME NUM_ROWS BLOCKS
------------------------------ ---------- ----------
HUANG
T4 107 5
T3 107 4
我们可以看到,新建的表没有 NUM_ROWS , BLOCKS这两个值,数据库每一天在某个点会做一次这样的检测。我们现在手工生成这样的值:
SQL> exec dbms_stats.gather_table_stats(user,'HUANG',cascade=>true);
PL/SQL procedure successfully completed.
SQL> select TABLE_NAME,NUM_ROWS ,BLOCKS from user_tables;
TABLE_NAME NUM_ROWS BLOCKS
------------------------------ ---------- ----------
HUANG 50440 713
T4 107 5
T3 107 4
现在 NUM_ROWS BLOCKS有值了。
SQL> delete huang where rownum < 30000;
29999 rows deleted.
SQL> exec dbms_stats.gather_table_stats(user,'HUANG',cascade=>true);
PL/SQL procedure successfully completed.
SQL> select TABLE_NAME,NUM_ROWS ,BLOCKS from user_tables;
TABLE_NAME NUM_ROWS BLOCKS
------------------------------ ---------- ----------
HUANG 20441 713
T4 107 5
T3 107 4
手动删除近30000行,然后说动修改表的属性,可以看到NUM_ROWS变了,但是BLOCKS没变,说明高水位线没有移动。
我们现在用下面的方法来移动
1、move
SQL> alter table huang move
SQL> exec dbms_stats.gather_table_stats(user,'HUANG',cascade=>true);(cascade=>true 是赋值的意思)
SQL> select TABLE_NAME,NUM_ROWS ,BLOCKS from user_tables;
TABLE_NAME NUM_ROWS BLOCKS
------------------------------ ---------- ----------
LOCATIONS 23 5
HUANG 20441 298
T2 0 0
可以看到,BLOCKS变小了,说明水位线移动了。
2、shrink
前提条件:表所在的表空间必须使用ASSM(表空间使用local管理,段使用auto管理),开启行移动属性。
查看HR默认表空间:
SQL> select USERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE
2 from user_users
3 where username='HR';
USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
TEMPORARY_TABLESPACE
------------------------------
HR USERS
TEMP
查看表空间的管理方式:
SQL> select TABLESPACE_NAME,EXTENT_MANAGEMENT,SEGMENT_SPACE_MANAGEMENT from user_tablespaces;
TABLESPACE_NAME EXTENT_MAN SEGMEN
------------------------------ ---------- ------
USERS LOCAL AUTO
条件是符合的,开始移动水位线吧:
分为压缩和降低HWM,压缩阶段可以进行DML,降低HWD阶段需要加上排它锁。两个阶段可以分开进行:
SQL> alter table huang shrink space;
alter table huang shrink space
*
ERROR at line 1:
ORA-10636: ROW MOVEMENT is not enabled
未开启行移动的情况下进行shrink会报错。
开启行移动:
SQL> alter table huang enable row movement;
SQL> alter table huang shrink space compact; (压缩表)
SQL> alter table huang shrink space ; (移动水位线)
SQL> exec dbms_stats.gather_table_stats(user,'HUANG',cascade=>true);
PL/SQL procedure successfully completed.
SQL> select TABLE_NAME,NUM_ROWS ,BLOCKS from user_tables;
TABLE_NAME NUM_ROWS BLOCKS
------------------------------ ---------- ----------
HUANG 20441 256
T4 107 5
可以看到水位线往上移动了。
- 段收缩的方法
- 收缩毛孔的方法
- Visual Studio中快捷键收缩和展开代码段方法
- 收缩表空间的方法
- 收缩毛孔的最佳方法
- Oracle段收缩功能
- VC:窗口收缩和扩展的方法
- 收缩高水位线HWM的方法
- sql server 2008数据库文件收缩的方法。
- 收缩表段(shrink space)
- 收缩表段(shrink space)
- 收缩表段(shrink space)
- 收缩表段(shrink space)
- 收缩表段(shrink space)
- 自定义段的方法
- 用Shrink Space收缩Oracle数据段
- 2017-08-22 DBA日记,段收缩
- 收缩数据库方法
- Linked List Cycle II--找出单向链表中环的起点
- Eclipse PDE 项目中的 Dependency Visualization
- 关于MYSQL 远程登录的授权方法 命令
- java TCPScoket编程 简单示例2
- javascript单引号和双引号
- 段收缩的方法
- 使用TreeMap
- VC的几个常用的str函数
- 深入分析各种raid模式
- Ubuntu 卸载 Apache+Mysql+PHP
- uva270 已成功AC!
- 导言&操作符&控制流(C编程语言)
- MODBUS协议整理——汇总
- 女儿的画作-《回家的路》