try to make table partitioned:
create dummy table:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | CREATE TABLE USER . "PERS_DATA_OPERATION_LOG_REDEF" ( "ID" NUMBER NOT NULL ENABLE, "OBJECT_OID" NUMBER NOT NULL ENABLE, "OBJECT_SNILS" VARCHAR2(256), "OBJECT_FULL_NAME" VARCHAR2(4000), "SUBJECT_OID" NUMBER, "SUBJECT_SNILS" VARCHAR2(256), "SUBJECT_FULL_NAME" VARCHAR2(4000), "CRT_ON" TIMESTAMP (6) , "OPERATION_TYPE" VARCHAR2(256), CHECK (OPERATION_TYPE IN ( 'VIEW' , 'PASS_RESET' , 'REMOVE' , 'BGIR_RESTART' )) ENABLE, CONSTRAINT "PERS_DATA_OPERATION_LOG_PK1" PRIMARY KEY ( "ID" ) ) PARTITION BY RANGE ( "CRT_ON" ) INTERVAL(NUMTOYMINTERVAL(1, 'MONTH' )) (partition p0 VALUES LESS THAN ( TIMESTAMP ' 2011-01-01 00:00:00' ) ) ; |
start redef and get error:
1 2 3 4 5 | exec dbms_redefinition.can_redef_table ( 'USER' , 'PERS_DATA_OPERATION_LOG' ,dbms_redefinition.cons_use_pk); exec DBMS_REDEFINITION.start_redef_table ( 'USER' , 'PERS_DATA_OPERATION_LOG' , 'PERS_DATA_OPERATION_LOG_REDEF' , NULL ,DBMS_REDEFINITION.cons_use_pk); ORA-42016: shape of interim table does not match specified column mapping |
this is because original table have a timestamp with local timezone format
how to fix it:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | select listagg(column_name, ',' ) within group ( order by column_id) from dba_tab_columns where table_name= 'PERS_DATA_OPERATION_LOG' ; begin DBMS_REDEFINITION.start_redef_table( uname => 'USER' , orig_table => 'PERS_DATA_OPERATION_LOG' , int_table => 'PERS_DATA_OPERATION_LOG_REDEF' , col_mapping => 'ID,OBJECT_OID,OBJECT_SNILS,OBJECT_FULL_NAME,SUBJECT_OID,SUBJECT_SNILS,SUBJECT_FULL_NAME,to_timestamp(crt_on) crt_on,OPERATION_TYPE' , options_flag => DBMS_REDEFINITION.cons_use_pk); end ; SET SERVEROUTPUT ON DECLARE l_num_errors PLS_INTEGER; BEGIN DBMS_REDEFINITION.copy_table_dependents( uname => 'USER' , orig_table => 'PERS_DATA_OPERATION_LOG' , int_table => 'PERS_DATA_OPERATION_LOG_REDEF' , copy_indexes => DBMS_REDEFINITION.cons_orig_params, -- Non-Default copy_triggers => TRUE , -- Default copy_constraints => TRUE , -- Default copy_privileges => TRUE , -- Default ignore_errors => true , num_errors => l_num_errors); DBMS_OUTPUT.put_line( 'l_num_errors=' || l_num_errors); END ; / exec DBMS_REDEFINITION.SYNC_INTERIM_TABLE( 'USER' , 'PERS_DATA_OPERATION_LOG' , 'PERS_DATA_OPERATION_LOG_REDEF' ); EXEC DBMS_REDEFINITION.finish_redef_table( 'USER' , 'PERS_DATA_OPERATION_LOG' , 'PERS_DATA_OPERATION_LOG_REDEF' ); |
1 комментарий
INTERVAL(NUMTOYMINTERVAL(1, ‘MONTH’))