ALTER SESSION ENABLE PARALLEL DML ;
alter session force parallel dml parallel &PARALLELS;
alter session force parallel query parallel &PARALLELS;
-- 2.重定义为分区,使用 rowid,建议为临时表开启行迁移
alter table &INT_TAB enable row movement;
-- 3.检查 dbms_redefinition 是否在这个表上工作
--基于主键
-- exec
DBMS_REDEFINITION.CAN_REDEF_TABLE('custinfo','fm',DBMS_REDEFINITION.CONS_USE_PK)
;
--基于 rowid
begin
dbms_redefinition.can_redef_table(uname => '&USERNAME',
tname => '&SOURCE_TAB',
options_flag => DBMS_REDEFINITION.CONS_USE_ROWID);
end;
/
-- 4.调用 DBMS_REDEFINITION.START_REDEF_TABLE 存储过程启动重定义进程
-- 接下来开始重新定义
-- BEGIN
-- DBMS_REDEFINITION.START_REDEF_TABLE(UNAME =>'custinfo',
ORIG_TABLE=>'fm',INT_TABLE=>'int_fm',OPTIONS_FLAG=>dbms_redefinition.cons_use_pk
);
-- END;
-- 基于 rowid
-- number , varchar2 互转要用 to_char 或 to_number 做映射。
-- select listagg(column_name || ' ' || column_name || ',' ) from
dba_tab_columns where table_name=upper('&SOURCE_TAB');
set timing on;
begin
DBMS_REDEFINITION.START_REDEF_TABLE(uname => '&USERNAME',
orig_table => '&SOURCE_TAB',
int_table => '&INT_TAB',
col_mapping => 'ID ID,INC_DATETIME
INC_DATETIME,to_char(RANDOM_ID) RANDOM_ID,RANDOM_STRING RANDOM_STRING',
options_flag => DBMS_REDEFINITION.CONS_USE_ROWID);
end;
/
-- 5.复制依赖对象。(自动创建任何触发器、索引、物化视图日志、授予和对 custinfo.int_fm 的约束)。
-- copy_indexes => 0 索引报错可以设置为 0
DECLARE
num_errors PLS_INTEGER;
BEGIN
DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS(uname => '&USERNAME',
orig_table => '&SOURCE_TAB',
int_table => '&INT_TAB',
copy_indexes => DBMS_REDEFINITION.cons_orig_params,
copy_triggers => TRUE,
copy_constraints => TRUE,
copy_privileges => TRUE,
ignore_errors => FALSE,
num_errors => num_errors,
copy_statistics => TRUE);
END;
评论