前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >对象迁移表空间引出的三个小问题

对象迁移表空间引出的三个小问题

作者头像
bisal
发布2019-01-30 09:48:17
4920
发布2019-01-30 09:48:17
举报

我们有一个开发库,默认表空间是TEST_TBS,但今天查看开发库的时候,发现有些表和字段并不在用户默认使用的表空间中,而在USERS表空间,之所以可能是之前开发人员执行SQL是从其他库复制过来的,连通tablespace USERS名称一块复制了,为了规范,就需要将这些对象转移下表空间,期间碰见了几个常见的小问题,值得记录一下。

问题1:新建的一张表,为什么dba_segments视图中没有找到对应的表和索引记录? 实验: 创建一张表和一个索引:

代码语言:javascript
复制
CREATE TABLE tbl_tbl(ID NUMBER);
CREATE INDEX idx_tbl_tbl ON tbl_tbl(ID);

检索dba_segments发现记录为空:

代码语言:javascript
复制
SELECT * FROM dba_segments WHERE segment_name IN ('TBL_TBL', 'IDX_TBL_TBL');

明明已经创建了,为何显示为空? 其实这还需要补充下,测试环境为11g,有一个新特性叫延迟分配段空间,就是不会像之前的版本中create table之后就会为其分配段空间,而是在真正使用了之后才会为其分配段空间,这样可以做到真正的节省,只有真正用了,才会给你空间,即使你创建了,也不会初始分配任何段空间。例如现在向其中插入一条数据:

代码语言:javascript
复制
INSERT INTO TBL_TBL VALUES(1);

即使此时rollback了,再查询如下语句,也是可以找到记录了:

代码语言:javascript
复制
SELECT * FROM dba_segments WHERE segment_name IN ('TBL_TBL', 'IDX_TBL_TBL');

另外,user_tables和user_indexes视图中都有一个SEGMENT_CREATED字段,在create之后,这个字段值都是NO,只有像上面真正使用了,该字段值才会变为YES。

问题2:如何移动表和索引对象? 这其实是一个语法问题了,对于表的移动:

代码语言:javascript
复制
alter table XXX move tablespace TEST_TBS;

对于索引的移动,这么用是错的:

代码语言:javascript
复制
alter index XXX move tablespace TEST_TBS;

应该是:

代码语言:javascript
复制
alter index XXX rebuild (online) tablespace TEST_TBS;

其中online的解释:

[ONLINE] Enables you to continue to perform updates, insertions, and deletions on a base table. It does not enable you to query the base table.

另外,找到所有需要移动的表:

代码语言:javascript
复制
SELECT 'alter table ' || table_name || ' move tablespace test_tbs;' FROM user_tables WHERE tablespace_name <> 'TEST_TBS';

找到所有需要移动的索引:

代码语言:javascript
复制
SELECT 'alter index ' || index_name || ' rebuild online tablespace test_tbs;' FROM user_indexes WHERE tablespace_name <> 'TEST_TBS';

问题3:LOB对象如何移动? 从user_indexes视图中可以查询出LOB对象,对于LOB对象如果使用上述alter index方式转表空间会提示:

ORA-02327:无法以数据类型LOB的表达式创建索引

应该使用如下语法:

代码语言:javascript
复制
alter table XXX MOVE lob(LOB字段名称) store as (tablespace test_tbs);
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年03月04日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档