表的联机在线重定义

我拿联机在线重定义常用的作用:
1)回收高水位
2)将普通表转化为分区表


--因为对象改变了,同义词失效,相关存储过程失效
--索引名字和表空间能保持不变
--默认需要主键进行重定义,否则使用rowid

--检查是否可以在线重定义
begin
DBMS_REDEFINITION.CAN_REDEF_TABLE (
   uname         => 'COMM',
   tname         => 'ACTION_PRESENT_RECODE',
   options_flag  => DBMS_REDEFINITION.CONS_USE_PK, --DBMS_REDEFINITION.CONS_USE_ROWID
   part_name     => NULL);
end ;
/

--按照在线重定义后的最终表结构,创建中间表
create table INT_ACTION_PRESENT_RECODE as select * from ACTION_PRESENT_RECODE WHERE 1=2 ;
实际执行的过程中,还是得把表的ddl定义给捞出来,重新执行一遍。
使用create table as的方法会丢失很多东西,比如字段的default值、comment等。
尤其是default值会导致应用出问题。

--开始重定义过程
begin
DBMS_REDEFINITION.START_REDEF_TABLE (
   uname          => 'COMM',
   orig_table     => 'ACTION_PRESENT_RECODE',
   int_table      => 'INT_ACTION_PRESENT_RECODE',
   col_mapping    => NULL,
   options_flag   => DBMS_REDEFINITION.CONS_USE_PK,
   orderby_cols   => NULL,
   part_name      => NULL);
end;
/

--将相关的表信息拷贝过去
--Automatically create any triggers, indexes, grants, and constraints.
DECLARE
num_errors PLS_INTEGER;
begin
DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS(
   uname                    => 'COMM',
   orig_table               => 'ACTION_PRESENT_RECODE',
   int_table                => 'INT_ACTION_PRESENT_RECODE',
   copy_indexes             => 1,
   copy_triggers            => TRUE,
   copy_constraints         => TRUE,
   copy_privileges          => TRUE,
   ignore_errors            => FALSE,
   num_errors               => num_errors,
   copy_statistics          => TRUE);
end ;
/

--将重定义过程的变化量同步过去
begin
DBMS_REDEFINITION.SYNC_INTERIM_TABLE (
   uname          => 'COMM',
   orig_table     => 'ACTION_PRESENT_RECODE',
   int_table      => 'INT_ACTION_PRESENT_RECODE',
   part_name      => NULL);
end ;
/

--结束重定义
begin
DBMS_REDEFINITION.FINISH_REDEF_TABLE (
   uname       => 'COMM',
   orig_table  => 'ACTION_PRESENT_RECODE',
   int_table   => 'INT_ACTION_PRESENT_RECODE',
   part_name   => NULL);
end ;
/

--如果有错误,用该过程强制结束重定义过程
begin
DBMS_REDEFINITION.ABORT_REDEF_TABLE (
   uname       => 'COMM',
   orig_table  => 'ACTION_PRESENT_RECODE',
   int_table   => 'INT_ACTION_PRESENT_RECODE',
  part_name    => NULL);
end ;
/

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10867315/viewspace-712992/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10867315/viewspace-712992/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值