设为首页 加入收藏

TOP

Oracle设置和删除不可用列(二)
2015-11-10 12:17:16 来源: 作者: 【 】 浏览:7
Tags:Oracle 设置 删除 可用
LECT * FROM DBA_UNUSED_COL_TABS;


未选定行


SCOTT@orcl> ALTER TABLE TMP_ALL_OBJECTS SET UNUSED(OBJECT_NAME);


表已更改。


SYS@orcl> SELECT * FROM DBA_UNUSED_COL_TABS;


OWNER? ? ? ? ? ? ? ? ? ? ? ? ? TABLE_NAME? ? ? ? ? ? ? ? ? ? ? ? ? COUNT
------------------------------ ------------------------------ ----------
SCOTT? ? ? ? ? ? ? ? ? ? ? ? ? TMP_ALL_OBJECTS? ? ? ? ? ? ? ? ? ? ? ? 1


SYS@orcl> exec show_space('TMP_ALL_OBJECTS','SCOTT');
Unformatted Blocks? ....................? ? ? ? ? ? ? 0
FS1 Blocks (0-25)? ....................? ? ? ? ? ? ? 0
FS2 Blocks (25-50)? ....................? ? ? ? ? ? ? 0
FS3 Blocks (50-75)? ....................? ? ? ? ? ? ? 0
FS4 Blocks (75-100) ....................? ? ? ? ? ? ? 0
Full Blocks? ? ? ? ....................? ? ? ? ? ? 352
Total Blocks ...........................? ? ? ? ? ? 384
Total Bytes? ...........................? ? ? 3,145,728
Total MBytes ...........................? ? ? ? ? ? ? 3
Unused Blocks...........................? ? ? ? ? ? ? 18
Unused Bytes ...........................? ? ? ? 147,456
Last Used Ext FileId....................? ? ? ? ? ? ? 4
Last Used Ext BlockId...................? ? ? ? ? 14,592
Last Used Block.........................? ? ? ? ? ? 110


PL/SQL 过程已成功完成。


--删除不可用列
SCOTT@orcl> ALTER TABLE TMP_ALL_OBJECTS DROP UNUSED COLUMNS CHECKPOINT 250;


表已更改。


SYS@orcl> SELECT * FROM DBA_UNUSED_COL_TABS;


未选定行



SYS@orcl> exec show_space('TMP_ALL_OBJECTS','SCOTT');
Unformatted Blocks? ....................? ? ? ? ? ? ? 0
FS1 Blocks (0-25)? ....................? ? ? ? ? ? ? 0
FS2 Blocks (25-50)? ....................? ? ? ? ? ? ? 1
FS3 Blocks (50-75)? ....................? ? ? ? ? ? 350
FS4 Blocks (75-100) ....................? ? ? ? ? ? ? 1
Full Blocks? ? ? ? ....................? ? ? ? ? ? ? 0
Total Blocks ...........................? ? ? ? ? ? 384
Total Bytes? ...........................? ? ? 3,145,728
Total MBytes ...........................? ? ? ? ? ? ? 3
Unused Blocks...........................? ? ? ? ? ? ? 18
Unused Bytes ...........................? ? ? ? 147,456
Last Used Ext FileId....................? ? ? ? ? ? ? 4
Last Used Ext BlockId...................? ? ? ? ? 14,592
Last Used Block.........................? ? ? ? ? ? 110


PL/SQL 过程已成功完成。


--move操作,减少碎片
SCOTT@orcl> ALTER TABLE TMP_ALL_OBJECTS MOVE;


表已更改。



SYS@orcl> exec show_space('TMP_ALL_OBJECTS','SCOTT');
Unformatted Blocks? ....................? ? ? ? ? ? ? 0
FS1 Blocks (0-25)? ....................? ? ? ? ? ? ? 0
FS2 Blocks (25-50)? ....................? ? ? ? ? ? ? 0
FS3 Blocks (50-75)? ....................? ? ? ? ? ? ? 0
FS4 Blocks (75-100) ....................? ? ? ? ? ? ? 0
Full Blocks? ? ? ? ....................? ? ? ? ? ? 113
Total Blocks ...........................? ? ? ? ? ? 128
Total Bytes? ...........................? ? ? 1,048,576
Total MBytes ...........................? ? ? ? ? ? ? 1
Unused Blocks...........................? ? ? ? ? ? ? 5
Unused Bytes ...........................? ? ? ? ? 40,960
Last Used Ext FileId....................? ? ? ? ? ? ? 4
Last Used Ext BlockId...................? ? ? ? ? 14,808
Last Used Block.........................? ? ? ? ? ? ? 3


PL/SQL 过程已成功完成。


--可以看到总块数下降


--删除测试表
SCOTT@orcl> drop table TMP_ALL_OBJECTS;


表已删除。1
7、关于不可用列的恢复(以下摘自网络)
刚才有个人问我如何修复被设置为UNUSED的字段,我考虑了一下,以下的方法可以恢复(以下步骤执行前要做好备份),没有经验的DBA不要轻易尝试。


1、创建实验表TTTA


SQL> CREATE TABLE TTTA ( A INTEGER,B INTEGER,C VARCHAR2(10),D INTEGER);
表已创建。
SQL> INSERT INTO TTTA VALUES (1,2,'3',4);
已创建 1 行。
SQL> INSERT INTO TTTA VALUES (2,3,'4',5);
已创建 1 行。
SQL> COMMIT;
提交完成。
ALTER TABLE TTTA SET UNUSED COLUMN C;
2、以下进行恢复


SQL> SELECT OBJ#

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle 中LONG RAW BLOB CLOB类型.. 下一篇Oracle 表压缩(Table Compression..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: