oracle 批量移动指定scheme表和索引(包括lob索引)

移动表和索引到指定的表空间是dba必须知道的技能。

一、首先,我们来讲一下为什么要移动表到到空间,我经历过移动有两种情况要移动表和索引的

1、当表和索引产生打量了的碎片的时候;

2、重新设计单独的索引表空间,把表和索引分离。

二、开动

1、移动表,如果移动单个表到指定的空间,很简单。

alter table table_Name move tablespace jscn;
2、移动某个用户的所有表到指定的表空间,比如我们要移动jscn这个用户到jscndata表空间里面,我们首先以jscn移动登录plsq

[oracle@rac1 ~]$ sqlplus jscn/jscn123 SQL> set pagesize 200 SQL> select 'alter table '|| table_name ||' move tablespace jscndata;' from user_all_tables; 'ALTERTABLE'||TABLE_NAME||'MOVETABLESPACEJSCNDATA;' -------------------------------------------------------------------------------- alter table PRODUCT_POP_TYPE move tablespace jscndata; alter table PRODUCT_RELATION move tablespace jscndata; alter table PROMOTIONS_GIFT_P move tablespace jscndata; alter table PROMOTIONS_JOIN_P move tablespace jscndata; ...........

然后,我们把下面的语句刷一遍就可以了,

如果语句一直卡住,怎么办?

没事可以看看后台日志啊

tail -f /oracle/ora10g/admin/jscn/bdump/alert_jscn1.log

看到reod日志在疯狂地切换,因为我的数据很大啊,(redo不知道,我去,那你可以不用搞数据库了)

Current log# 2 seq# 308 mem# 0: +DATA/jscn/onlinelog/group_2.267.768517119
Thread 1 cannot allocate new log, sequence 309
Checkpoint not complete
Current log# 2 seq# 308 mem# 0: +DATA/jscn/onlinelog/group_2.267.768517119
Mon Dec 19 17:58:26 2011
Thread 1 advanced to log sequence 309 (LGWR switch)
Current log# 1 seq# 309 mem# 0: +DATA/jscn/onlinelog/group_1.278.768517115
Mon Dec 19 17:58:32 2011
Thread 1 advanced to log sequence 310 (LGWR switch)
Current log# 2 seq# 310 mem# 0: +DATA/jscn/onlinelog/group_2.267.768517119
Mon Dec 19 17:58:36 2011

查看一下结果

SQL> select table_name ,tablespace_name from user_tables; TABLE_NAME TABLESPACE_NAME ------------------------------ ------------------------------ PRODUCT_POP_TYPE JSCNDATA PRODUCT_RELATION JSCNDATA PROMOTIONS_GIFT_P JSCNDATA PROMOTIONS_JOIN_P JSCNDATA PROMOTIONS_OFFERS JSCNDATA ...........

3、移动索引

1)因为我们这里字段有clob类型,clob默认会创建索引,所以移动的时候要先移动clob字段所产生的索引。

下面这个例子,我要把jscn用户下所有的clob索引移动到jscnindex表空间中

SQL> set linesize 200 SELECT 'alter table ' ||t.table_name || ' move tablespace jscndata lob (' || t.column_name || ') store as(tablespace JSCNINDEX);' v_sql FROM user_lobs t V_SQL -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- alter table STORE_PAGE move tablespace jscndata lob (CONTENT) store as(tablespace JSCNINDEX); alter table STORE move tablespace jscndata lob (SHIP_TYPE_CONTENT) store as(tablespace JSCNINDEX); alter table STORE move tablespace jscndata lob (SERVICE_CONTENT) store as(tablespace JSCNINDEX); 然后把V_SQL里面的语句所有的全部刷一遍就可以了

2)重建普通的索引

SQL> set pagesize 200 SQL> select 'alter index '|| index_name ||' rebuild tablespace jscnindex;' from user_indexes; 'ALTERINDEX'||INDEX_NAME||'REBUILDTABLESPACEJSCNINDEX;' ------------------------------------------------------------------------------------------------------------------------------------------------ alter index YDORDERTRACER_UUID rebuild tablespace jscnindex; alter index PK_YDORDER rebuild tablespace jscnindex; alter index VISIT_LOG_ID rebuild tablespace jscnindex; alter index PK_VIR_ACCOUNT_LOG rebuild tablespace jscnindex; 把语句在plsql里面刷一遍就可以了
刷语句的过程中如果碰到

SQL> alter index SYS_IL0000052047C00118$$ rebuild tablespace jscnindex
*
ERROR at line 1:
ORA-02327: cannot create index on expression with datatype LOB

不要紧,miss就可以了



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值