本篇文章主要介绍了"dbms_redefinition",主要涉及到方面的内容,对于Oracle感兴趣的同学可以参考一下:
首先查看DBMS_REDEFINITION包所带存储过程的功能:1. ABSORT_REDEF_TABLE:清理重定义的错误和中止重定义;2. CAN_REDE...
首先查看DBMS_REDEFINITION包所带存储过程的功能:
1. ABSORT_REDEF_TABLE:清理重定义的错误和中止重定义;
2. CAN_REDEF_TABLE:检查表是否可以进行重定义;
3. COPY_TABLE_DEPENDENTS:同步依赖的对象,如索引、权限、约束、触发器等;
SET SERVEROUTPUT ON
DECLARE
error_count pls_integer := 0;
BEGIN
DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS('HLB',
'TEST',
'TEST_TMP',
dbms_redefinition.cons_orig_params ,
TRUE,
TRUE,
TRUE,
FALSE,
error_count);
DBMS_OUTPUT.PUT_LINE('errors := ' || TO_CHAR(error_count));
END;
/
4. FINISH_REDEF_TABLE:结束在线重定义;
5. REGISTER_DEPENDENTS_OBJECTS:注册依赖的对象,如索引、约束、触发器等;
该存储过程和 COPY_TABLE_DEPENDENTS 有同样的效果
6. START_REDEF_TABLE:开始在线重定义;
7. SYNC_INITERIM_TABLE:同步增量数据;
8. UNREGISTER_DEPENDENT_OBJECT:不注册依赖的对象,如索引、约束、触发器等;
下面以一个具体的实例做演示,该表有100个G,整个过程只花了1小时。
10:20:05 sys@TBDB>select * from (SELECt SUM(BYTES)/1024/1024/1024 FROM dba_SEGMENTS where SEGMENT_NAME ='GE_BI_SCAN_SIGN_RATE_DTL');
SUM(BYTES)/1024/1024/1024
-------------------------
100.181702
第一步:
检查表能否进行在线重定义
exec
dbms_redefinition.can_redef_table('USRBI', 'GE_BI_SCAN_SIGN_RATE_DTL',DBMS_REDEFINITION.CONS_USE_ROWID);
第二步:
创建目标表
GE_BI_SCAN_SIGN_RATE_DTL_TEMP
第三步:
开始进行在线重定义