oracle move表释放空间
来源:互联网 发布:淘宝可靠长板店 编辑:程序博客网 时间:2024/05/01 00:55
有好多时候,表经过大量的DML操作后,高水线也会升高,在delete后高水位线还是没下来,也就是说,数据是删除了,但空间并没有释放,这时候我们可 以用alter table move的方法使空间释放,但曾有一次,对表进行MOVE后,空间还是没有释放,下面我就把解决过程模拟一下,就知道之所在了
看一下下面两张表的大小
SQL> select SEGMENT_NAME,BYTES/1024/1024 M from user_segments where SEGMENT_NAME like 'TEST_TB%';
SEGMENT_NAME M
-------------------- ----------
TEST_TB1 1088
TEST_TB2 1088
查看记录数
SQL> select count(*) from TEST_TB1;
COUNT(*)
----------
0
SQL> select count(*) from TEST_TB2;
COUNT(*)
----------
0
可以看到两张表均为空表,现在对两张表都进行move操作
SQL> alter table TEST_TB2 move;
Table altered.
SQL> alter table TEST_TB1 move;
Table altered.
再看两张表所占用的空间
SQL> select SEGMENT_NAME,BYTES/1024/1024 M from user_segments where SEGMENT_NAME like 'TEST_TB%';
SEGMENT_NAME M
-------------------- ----------
TEST_TB1 1024
TEST_TB2 .0625
为什么会这样,我们想到了空间分配问题,于是查看两表的DDL语句
SQL> set long 20000
SQL> SELECT DBMS_METADATA.GET_DDL('TABLE','TEST_TB2') FROM USER_TABLES;
DBMS_METADATA.GET_DDL('TABLE','TEST_TB2')
--------------------------------------------------------------------------------
CREATE TABLE "LZDYXIN"."TEST_TB2"
( "ID" NUMBER,
"NAME" VARCHAR2(30)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "LZDYXIN"
SQL> SELECT DBMS_METADATA.GET_DDL('TABLE','TEST_TB1') FROM USER_TABLES;
DBMS_METADATA.GET_DDL('TABLE','TEST_TB1')
--------------------------------------------------------------------------------
CREATE TABLE "LZDYXIN"."TEST_TB1"
( "ID" NUMBER,
"NAME" VARCHAR2(30)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 1073741824 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "LZDYXIN"
由上面的DDL发现,Test_tb1的INITIAL 1073741824,可以看出move减少空间时不会小于表的初始扩展,所以我们可以在move时重新指定表的INITIAL参数
SQL> alter table TEST_TB1 move storage(initial 64K);
Table altered.
SQL> col SEGMENT_NAME format a20
SQL> select SEGMENT_NAME,BYTES/1024/1024 M from user_segments where SEGMENT_NAME like 'TEST_TB%';
SEGMENT_NAME M
-------------------- ----------
TEST_TB1 .0625
TEST_TB2 .0625
以上是全过程
看一下下面两张表的大小
SQL> select SEGMENT_NAME,BYTES/1024/1024 M from user_segments where SEGMENT_NAME like 'TEST_TB%';
SEGMENT_NAME
-------------------- ----------
TEST_TB1
TEST_TB2
查看记录数
SQL> select count(*) from TEST_TB1;
----------
SQL> select count(*) from TEST_TB2;
----------
可以看到两张表均为空表,现在对两张表都进行move操作
SQL> alter table TEST_TB2 move;
Table altered.
SQL> alter table TEST_TB1 move;
Table altered.
再看两张表所占用的空间
SQL> select SEGMENT_NAME,BYTES/1024/1024 M from user_segments where SEGMENT_NAME like 'TEST_TB%';
SEGMENT_NAME
-------------------- ----------
TEST_TB1
TEST_TB2
为什么会这样,我们想到了空间分配问题,于是查看两表的DDL语句
SQL> set long 20000
SQL> SELECT DBMS_METADATA.GET_DDL('TABLE','TEST_TB2') FROM USER_TABLES;
DBMS_METADATA.GET_DDL('TABLE','TEST_TB2')
--------------------------------------------------------------------------------
SQL> SELECT DBMS_METADATA.GET_DDL('TABLE','TEST_TB1') FROM USER_TABLES;
DBMS_METADATA.GET_DDL('TABLE','TEST_TB1')
--------------------------------------------------------------------------------
SQL> col SEGMENT_NAME format a20
SQL> select SEGMENT_NAME,BYTES/1024/1024 M from user_segments where SEGMENT_NAME like 'TEST_TB%';
SEGMENT_NAME
-------------------- ----------
TEST_TB1
TEST_TB2
以上是全过程
转载:http://www.diybl.com/course/7_databases/oracle/oraclejs/2008923/145039.html
注意:move一张表之后索引和主键会失效,此时可以使用以下语句来进行恢复。
alter index index_name rebuild;
0 0
- oracle move表释放空间
- oracle Move空间释放
- ORACLE MOVE表空间
- ORACLE MOVE表空间
- oracle释放零时表空间
- ORACLE释放UNDO表空间
- Oracle Move和Shrink表空间
- 删除Oracle表空间,释放硬盘空间
- oracle删除(释放)数据文件/表空间流程
- 【Oracle】删除(释放)数据文件/表空间流程
- Oracle表空间释放与增加表空间大小
- ORACLE 删除用户及空闲表空间释放空间
- oracle truncateb表后 表空间释放问题的解决办法
- oracle 释放过度使用的Undo表空间
- oracle 释放过度使用的Undo表空间
- Oracle 释放过度使用的Undo表空间
- Oracle 释放过度使用的Undo表空间
- Oracle 释放过度使用的Undo表空间
- 有关&和&&,|和||的区别
- Web IM 远程及时聊天通信程序(2)
- python并发的痛——多线程
- bat面试相关
- 在struts下如果类改变了,在从jsp往action提交的时候,就会报ja
- oracle move表释放空间
- 90后程序员妹纸教你如何搞定无聊的工作和老板
- Ajax 动态加载内容
- 北京明远智睿的核心板,详细的开发资料,稳定可靠的性能,低廉的价格,赢得了广大客户的喜爱
- 小游戏"猫捉老鼠"
- getline
- leetcode题目:Sum Root to Leaf Numbers和Longest Consecutive Sequence
- PHP的安全问题
- mDNS