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、付费专栏及课程。

余额充值