在9I前我们一般通过MOVE的方式来对表的数据重整,如果表非常大,而IO又不块的时候,MOVE的的过程可能相当漫长, 甚至不能在线完成,而且还需要REBUILD索引,这样降低的高可用性。 因此9I提出了DBMS_REDEFINITION包引入了在线表重定义的功能。 该原理类似MV-物化视图 在线重定义由三个大的步骤组成 完全同步 => 增量同步 =>切换 注: oracle9i环境中,不要在sys用户下做,否则会出错,如下部分 SQL> conn /as sysdba 已连接。 SQL> SQL> create table t1 2 as 3 select * from stage 4 order by dbms_random.random; 表已创建。 SQL> begin 2 for x in 1..10 3 loop insert into t1 4 select OWNER,OBJECT_NAME,SUBOBJECT_NAME,object_id+x*100000,DATA_OBJECT_ID,OBJECT_TYPE, 5 CREATED,LAST_DDL_TIME,TIMESTAMP,STATUS,TEMPORARY,GENERATED,SECONDARY from stage; 6 commit; 7 end loop; 8 end; 9 / PL/SQL 过程已成功完成。 SQL> alter table t1 add constraint check_gt_zero check (object_id>0); 表已更改。 SQL> create trigger t1_trigger 2 before insert on t1 3 begin 4 dbms_output.put_line( 'hello world' ); 5 end; 6 / create trigger t1_trigger * ERROR 位于第 1 行: ORA-04089: 无法对 SYS 所有的对象创建触发器 SQL> exec dbms_redefinition.can_redef_table( user, 'T1' ); BEGIN dbms_redefinition.can_redef_table( user, 'T1' ); END; * ERROR 位于第 1 行: ORA-12087: 在 "SYS" 拥有的表上不允许联机重新定义 ORA-06512: 在"SYS.DBMS_REDEFINITION", line 8 ORA-06512: 在"SYS.DBMS_REDEFINITION", line 247 ORA-06512: 在line 1 下面准备切换到scott用户上测试 SQL> conn /as sysdba 已连接。 SQL> create table scott.stage as select *from stage; 表已创建。 SQL> conn scott/tiger 已连接。 SQL> drop table t1; 表已丢弃。 SQL> create table t1 2 as 3 select * from stage 4 order by dbms_random.random; 表已创建。 SQL> alter table t1 add constraint check_gt_zero check (object_id>0); 表已更改。 SQL> create trigger t1_trigger 2 before insert on t1 3 begin 4 dbms_output.put_line( 'hello world' ); 5 end; 6 / 触发器已创建 SQL> select 'indexes', index_name from user_indexes where table_name = 'T1' 2 union all 3 select 'constraints', constraint_name from user_constraints where table_name = 'T1' 4 union all 5 select 'triggers', trigger_name from user_triggers where table_name = 'T1'; 'INDEXES' INDEX_NAME ----------- ------------------------------ constraints SYS_C003068 constraints SYS_C003069 constraints SYS_C003070 constraints SYS_C003071 constraints SYS_C003072 constraints CHECK_GT_ZERO triggers T1_TRIGGER 已选择7行。 SQL> desc t1 名称 是否为空? 类型 ----------------------------------------- -------- ---------------------------- OWNER NOT NULL VARCHAR2(30) OBJECT_NAME NOT NULL VARCHAR2(30) SUBOBJECT_NAME VARCHAR2(30) OBJECT_ID NOT NULL NUMBER DATA_OBJECT_ID NUMBER OBJECT_TYPE VARCHAR2(18) CREATED NOT NULL DATE LAST_DDL_TIME NOT NULL DATE TIMESTAMP VARCHAR2(19) STATUS VARCHAR2(7) TEMPORARY VARCHAR2(1) GENERATED VARCHAR2(1) SECONDARY VARCHAR2(1) SQL> create table t2 ( 2 OWNER VARCHAR2(30) not null, 3 OBJECT_NAME VARCHAR2(30) not null, 4 SUBOBJECT_NAME VARCHAR2(30), 5 OBJECT_ID NUMBER not null, 6 DATA_OBJECT_ID NUMBER, 7 OBJECT_TYPE VARCHAR2(19), 8 CREATED DATE not null, 9 LAST_DDL_TIME DATE not null, 10 TIMESTAMP VARCHAR2(19), 11 STATUS VARCHAR2(7), 12 TEMPORARY VARCHAR2(1), 13 GENERATED VARCHAR2(1), 14 SECONDARY VARCHAR2(1), 15 NAMESPACE NUMBER, == 新增的列 16 EDITION_NAME VARCHAR2(30) == 新增的列 17 ) partition by hash(object_id) partitions 8; == 设置HASH分区 表已创建。 SQL> exec dbms_redefinition.can_redef_table( user, 'T1' ); ==判断这个表是否能在线重定义,9I只有主键1种,10G还有BY ROWID BEGIN dbms_redefinition.can_redef_table( user, 'T1' ); END; * ERROR 位于第 1 行: ORA-06550: 第 1 行, 第 7 列: PLS-00201: 必须说明标识符 'DBMS_REDEFINITION' ORA-06550: 第 1 行, 第 7 列: PL/SQL: Statement ignored ==执行失败,因为没有权限 SQL> conn /as sysdba 已连接。 SQL> GRANT EXECUTE ON DBMS_REDEFINITION TO SCOTT; ==这里必须有执行包的权限,注意,即使有DBA权限也没用 授权成功。 SQL> GRANT EXECUTE_CATALOG_ROLE TO SCOTT; 授权成功。 SQL> GRANT CREATE ANY TABLE TO SCOTT; 授权成功。 SQL> GRANT ALTER ANY TABLE TO SCOTT; 授权成功。 SQL> GRANT DROP ANY TABLE TO SCOTT; 授权成功。 SQL> GRANT LOCK ANY TABLE TO SCOTT; 授权成功。 SQL> GRANT SELECT ANY TABLE TO SCOTT; 授权成功。 SQL> conn scott/tiger 已连接。 == 下面开始验证是否可以采用PK重定义表,不报错即可 SQL> exec DBMS_REDEFINITION.CAN_REDEF_TABLE('SCOTT', 'T1' , dbms_redefinition.cons_use_pk); BEGIN DBMS_REDEFINITION.CAN_REDEF_TABLE('SCOTT', 'T1' , dbms_redefinition.cons_use_pk); END; * ERROR 位于第 1 行: ORA-12089: 不能联机重新定义无主键的表 "SCOTT"."T1" == 因为9I默认重定义是基于主键,主键没有,创建不成功 ORA-06512: 在"SYS.DBMS_REDEFINITION", line 8 ORA-06512: 在"SYS.DBMS_REDEFINITION", line 247 ORA-06512: 在line 1 SQL> alter table t1 add constraint t1_pk primary key(object_id); 表已更改。 SQL> exec DBMS_REDEFINITION.CAN_REDEF_TABLE('SCOTT', 'T1' , dbms_redefinition.cons_use_pk); PL/SQL 过程已成功完成。 == 检查通过,开始重定义 exec dbms_redefinition.start_redef_table( user, 'T1', 'T2','OWNER OWNER ,OBJECT_NAME OBJECT_NAME ,SUBOBJECT_NAME SUBOBJECT_NAME ,OBJECT_ID OBJECT_ID ,DATA_OBJECT_ID DATA_OBJECT_ID ,OBJECT_TYPE OBJECT_TYPE ,CREATED CREATED ,LAST_DDL_TIME LAST_DDL_TIME ,TIMESTAMP TIMESTAMP ,STATUS STATUS ,TEMPORARY TEMPORARY ,GENERATED GENERATED ,SECONDARY SECONDARY ,0 NAMESPACE, ''YES'' EDITION_NAME') * ERROR 位于第 1 行: ORA-12091: 不能联机重新定义具有实体化视图的表 "SCOTT"."T1" ORA-06512: 在"SYS.DBMS_REDEFINITION", line 8 ORA-06512: 在"SYS.DBMS_REDEFINITION", line 146 ORA-06512: 在line 1 SQL> exec dbms_redefinition.start_redef_table( user, 'T1', 'T2') BEGIN dbms_redefinition.start_redef_table( user, 'T1', 'T2'); END; * ERROR 位于第 1 行: ORA-12006: 具有相同 user.name 的实体化视图已经存在 --有时候测试会报这个错误 ORA-06512: 在"SYS.DBMS_REDEFINITION", line 8 ORA-06512: 在"SYS.DBMS_REDEFINITION", line 146 ORA-06512: 在line 1 ==解决办法:我们需要将之前步骤中产生的物化视图和日志删除。用下列语句查找并清除: SQL> select log_table from user_snapshot_logs; LOG_TABLE ------------------------------ MLOG$_ADMIN_EMP MLOG$_T1 SQL> SQL> SQL> drop snapshot log on t1; ==实体化视图日志已删除。 SQL> select TABLE_NAME , status from user_snapshots; TABLE_NAME STATUS ------------------------------ ------- INT_ADMIN_EMP VALID T2 VALID ==以前称为SNAPSHOT ==以后的版本称为MVIEW,物化视图 SQL> select mview_name, compile_state from user_mviews; MVIEW_NAME COMPILE_STATE ------------------------------ ------------------- INT_ADMIN_EMP ERROR T2 ERROR SQL> drop materialized view T2; ==实体化视图已删除。 exec dbms_redefinition.start_redef_table( user, 'T1', 'T2','OWNER OWNER ,OBJECT_NAME OBJECT_NAME ,SUBOBJECT_NAME SUBOBJECT_NAME ,OBJECT_ID OBJECT_ID ,DATA_OBJECT_ID DATA_OBJECT_ID ,OBJECT_TYPE OBJECT_TYPE ,CREATED CREATED ,LAST_DDL_TIME LAST_DDL_TIME ,TIMESTAMP TIMESTAMP ,STATUS STATUS ,TEMPORARY TEMPORARY ,GENERATED GENERATED ,SECONDARY SECONDARY ,0 NAMESPACE, ''YES'' EDITION_NAME'') PL/SQL 过程已成功完成。 SQL> SELECT COUNT(*) FROM t1; COUNT(*) ---------- 320661 SQL> SELECT COUNT(*) FROM t2; COUNT(*) ---------- 320661 -- 执行拷贝命令,关联相关对象 DECLARE num_errors PLS_INTEGER; BEGIN DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS('scott', 't1','t2',DBMS_REDEFINITION.CONS_ORIG_PARAMS, TRUE, TRUE, TRUE, TRUE, num_errors); END; ERROR 位于第 4 行: ORA-06550: 第 4 行, 第 78 列: PLS-00302: 必须说明 'CONS_ORIG_PARAMS' 组件 ORA-06550: 第 4 行, 第 1 列: PL/SQL: Statement ignored == COPY_TABLE_DEPENDENTS 是10g的新特性,9i中不存在 SQL> alter table t2 add constraint t2_check_gt_zero check (object_id>0); 表已更改。 SQL> alter table t2 add constraint t2_pk primary key(object_id); 表已更改。 SQL> create trigger t2_trigger 2 before insert on t2 3 begin 4 dbms_output.put_line( 'hello world' ); 5 end; 6 / 触发器已创建 SQL> select 'indexes', index_name from user_indexes where table_name = 'T1' 2 union all 3 select 'constraints', constraint_name from user_constraints where table_name = 'T1' 4 union all 5 select 'triggers', trigger_name from user_triggers where table_name = 'T1'; 'INDEXES' INDEX_NAME ----------- ------------------------------ indexes T1_PK constraints SYS_C003088 constraints SYS_C003089 constraints SYS_C003090 constraints SYS_C003091 constraints SYS_C003092 constraints CHECK_GT_ZERO constraints T1_PK triggers T1_TRIGGER 已选择9行。 SQL> select 'indexes', index_name from user_indexes where table_name = 'T2' 2 union all 3 select 'constraints', constraint_name from user_constraints where table_name = 'T2' 4 union all 5 select 'triggers', trigger_name from user_triggers where table_name = 'T2'; 'INDEXES' INDEX_NAME ----------- ------------------------------ indexes T2_PK constraints SYS_C003094 constraints SYS_C003095 constraints SYS_C003096 constraints SYS_C003097 constraints SYS_C003098 constraints T2_CHECK_GT_ZERO constraints T2_PK triggers T2_TRIGGER 已选择9行。 == session 2 插入一条新纪录 -- SQL> insert into t1(OWNER,OBJECT_NAME,OBJECT_ID,CREATED,LAST_DDL_TIME) 2 values ('SYS','HELLO',1888888,sysdate-1,sysdate); 已创建 1 行。 SQL> commit; 提交完成。 == 回到 session 1 ==sync_interim_table能够将新增的数据同步到中间表,并且加速FINISH的同步工作量,FINISH会锁表 SQL> exec dbms_redefinition.sync_interim_table('scott', 't1', 't2'); PL/SQL 过程已成功完成。 SQL> select * from t2 where object_id=1888888; OWNER OBJECT_NAME ------------------------------ ------------------------------ SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE ------------------------------ ---------- -------------- ------------------- CREATED LAST_DDL_T TIMESTAMP STATUS T G S NAMESPACE ---------- ---------- ------------------- ------- - - - ---------- EDITION_NAME ------------------------------ SYS HELLO 1888888 07-5月 -09 08-5月 -09 0 YES SQL> SELECT COUNT(*) FROM t1; COUNT(*) ---------- 320662 SQL> SELECT COUNT(*) FROM t2; COUNT(*) ---------- 320662 ==将中间表同步原表,完成重定义 SQL> exec dbms_redefinition.finish_redef_table('SCOTT','T1','T2') PL/SQL 过程已成功完成。 SQL> desc t1 名称 是否为空? 类型 ----------------------------------------- -------- ------------------ OWNER NOT NULL VARCHAR2(30) OBJECT_NAME NOT NULL VARCHAR2(30) SUBOBJECT_NAME VARCHAR2(30) OBJECT_ID NOT NULL NUMBER DATA_OBJECT_ID NUMBER OBJECT_TYPE VARCHAR2(19) CREATED NOT NULL DATE LAST_DDL_TIME NOT NULL DATE TIMESTAMP VARCHAR2(19) STATUS VARCHAR2(7) TEMPORARY VARCHAR2(1) GENERATED VARCHAR2(1) SECONDARY VARCHAR2(1) NAMESPACE NUMBER EDITION_NAME VARCHAR2(30) SQL> select 'indexes', index_name from user_indexes where table_name = 'T1' 2 union all 3 select 'constraints', constraint_name from user_constraints where table_name = 'T1' 4 union all 5 select 'triggers', trigger_name from user_triggers where table_name = 'T1'; 'INDEXES' INDEX_NAME ----------- ------------------------------ indexes T2_PK constraints SYS_C003094 constraints SYS_C003095 constraints SYS_C003096 constraints SYS_C003097 constraints SYS_C003098 constraints T2_CHECK_GT_ZERO constraints T2_PK triggers T2_TRIGGER 已选择9行。 SQL> select count(*) from t1; COUNT(*) ---------- 320662 SQL> select * from t1 where object_id=1888888; OWNER OBJECT_NAME ------------------------------ ------------------------------ SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE ------------------------------ ---------- -------------- ------------------- CREATED LAST_DDL_T TIMESTAMP STATUS T G S NAMESPACE ---------- ---------- ------------------- ------- - - - ---------- EDITION_NAME ------------------------------ SYS HELLO 1888888 07-5月 -09 08-5月 -09 0 YES ==增量的1888888记录也同步进去了 ==注意,T2在START_REDEF_TABLE前可以建立索引、触发器、约束,这样在FINISH后不需要单独再进行交换 10G在线重定义测试 ~~~~~~~~~~~~~~~ 测试结果: SQL> create table t1 2 as 3 select * from stage 4 order by dbms_random.random; SQL> alter table t1 add constraint t1_pk primary key(object_id); 表已更改。 SQL> alter table t1 add constraint check_gt_zero check (object_id>0); 表已更改。 SQL> create trigger t1_trigger 2 before insert on t1 3 begin 4 dbms_output.put_line( 'hello world' ); 5 end; 6 / 触发器已创建 SQL> select 'indexes', index_name from user_indexes where table_name = 'T1' 2 union all 3 select 'constraints', constraint_name from user_constraints where table_name = 'T1' 4 union all 5 select 'triggers', trigger_name from user_triggers where table_name = 'T1'; 'INDEXES' INDEX_NAME ----------- ------------------------------ indexes T1_PK constraints SYS_C005428 constraints SYS_C005429 constraints SYS_C005430 constraints SYS_C005431 constraints SYS_C005432 constraints T1_PK constraints CHECK_GT_ZERO triggers T1_TRIGGER 已选择9行。 SQL> desc t1 名称 是否为空? 类型 ----------------------------------------------------------------- -------- ----------------------------------- OWNER NOT NULL VARCHAR2(30) OBJECT_NAME NOT NULL VARCHAR2(30) SUBOBJECT_NAME VARCHAR2(30) OBJECT_ID NOT NULL NUMBER DATA_OBJECT_ID NUMBER OBJECT_TYPE VARCHAR2(19) CREATED NOT NULL DATE LAST_DDL_TIME NOT NULL DATE TIMESTAMP VARCHAR2(19) STATUS VARCHAR2(7) TEMPORARY VARCHAR2(1) GENERATED VARCHAR2(1) SECONDARY VARCHAR2(1) SQL> create table t2 ( 2 OWNER VARCHAR2(30), 3 OBJECT_NAME VARCHAR2(30), 4 SUBOBJECT_NAME VARCHAR2(30), 5 OBJECT_ID NUMBER, 6 DATA_OBJECT_ID NUMBER, 7 OBJECT_TYPE VARCHAR2(19), 8 CREATED DATE, 9 LAST_DDL_TIME DATE, 10 TIMESTAMP VARCHAR2(19), 11 STATUS VARCHAR2(7), 12 TEMPORARY VARCHAR2(1), 13 GENERATED VARCHAR2(1), 14 SECONDARY VARCHAR2(1), 15 NAMESPACE NUMBER, 16 EDITION_NAME VARCHAR2(30) 17 ) partition by hash(object_id) partitions 8; create table t2 ( * 第 1 行出现错误: ORA-00955: 名称已由现有对象使用 SQL> drop table t2; 表已删除。 create table t2 ( OWNER VARCHAR2(30), OBJECT_NAME VARCHAR2(30), SUBOBJECT_NAME VARCHAR2(30), OBJECT_ID NUMBER, DATA_OBJECT_ID NUMBER, OBJECT_TYPE VARCHAR2(19), CREATED DATE, LAST_DDL_TIME DATE, TIMESTAMP VARCHAR2(19), STATUS VARCHAR2(7), TEMPORARY VARCHAR2(1), GENERATED VARCHAR2(1), SECONDARY VARCHAR2(1), NAMESPACE NUMBER, == 新增的列 EDITION_NAME VARCHAR2(30) == 新增的列 ) partition by hash(object_id) partitions 8;== 设置HASH分区 Table altered. 表已创建。 SQL> exec dbms_redefinition.can_redef_table( user, 'T1' ); PL/SQL 过程已成功完成。 SQL> exec dbms_monitor.session_trace_enable; PL/SQL 过程已成功完成。 SQL> exec dbms_redefinition.start_redef_table( user, 'T1', 'T2', orderby_cols => 'OBJECT_ID' ); BEGIN dbms_redefinition.start_redef_table( user, 'T1', 'T2', orderby_cols => 'OBJECT_ID' ); END; * 第 1 行出现错误: ORA-01031: 权限不足 ORA-06512: 在 "SYS.DBMS_REDEFINITION", line 50 ORA-06512: 在 "SYS.DBMS_REDEFINITION", line 1343 ORA-06512: 在 line 1 --用sys登陆执行 start------------------------------------------- SQL> exec dbms_redefinition.start_redef_table( 'TESTUSER', 'T1', 'T2', orderby_cols => 'OBJECT_ID' ) PL/SQL 过程已成功完成。 --用sys登陆执行 end------------------------------------------- SQL> select object_id, object_name from t1 OLD_TABLE where rownum<=5; OBJECT_ID OBJECT_NAME ---------- ------------------------------ 28591 /7e59f4a3_SystemIdentity 27656 /c7e340d5_FontRenderContext 15623 /9be69f43_BasicSplitPaneUIFocu 37397 com/sun/mail/pop3/Status 7551 DBA_REPOBJECT SQL> select object_id, object_name from t2 NEW_TABLE where rownum<=5; OBJECT_ID OBJECT_NAME ---------- ------------------------------ 931 V$PGA_TARGET_ADVICE 943 V$DLM_MISC 955 V$DLM_RESS 957 V$HVMASTER_INFO 984 V_$BH --用sys登陆执行 start------------------------------------------- SQL> variable nerrors number SQL> begin 2 dbms_redefinition.copy_table_dependents 3 ( 'TESTUSER', 'T1', 'T2', 4 copy_indexes => dbms_redefinition.cons_orig_params, 5 num_errors => :nerrors ); 6 end; 7 / PL/SQL 过程已成功完成。 SQL> print nerrors NERRORS ---------- 0 --用sys登陆执行 end------------------------------------------- SQL> select table_name, 'indexes', index_name from user_indexes where table_name in ('T1','T2') 2 union all 3 select table_name, 'constraints', constraint_name from user_constraints where table_name in ('T1','T2') 4 union all 5 select table_name, 'triggers', trigger_name from user_triggers where table_name in ('T1','T2'); TABLE_NAME 'INDEXES' INDEX_NAME ------------------------------ ----------- ------------------------------ T2 indexes TMP$$_T1_PK0 T1 indexes T1_PK T1 constraints SYS_C005428 T1 constraints SYS_C005429 T1 constraints SYS_C005430 T1 constraints SYS_C005431 T1 constraints SYS_C005432 T1 constraints T1_PK T1 constraints CHECK_GT_ZERO T2 constraints TMP$$_CHECK_GT_ZERO0 T2 constraints TMP$$_SYS_C0054280 TABLE_NAME 'INDEXES' INDEX_NAME ------------------------------ ----------- ------------------------------ T2 constraints TMP$$_SYS_C0054290 T2 constraints TMP$$_SYS_C0054300 T2 constraints TMP$$_SYS_C0054310 T2 constraints TMP$$_SYS_C0054320 T2 constraints TMP$$_T1_PK0 T1 triggers T1_TRIGGER T2 triggers TMP$$_T1_TRIGGER0 已选择18行。 SQL> exec dbms_redefinition.finish_redef_table( user, 'T1', 'T2' ); BEGIN dbms_redefinition.finish_redef_table( user, 'T1', 'T2' ); END; * 第 1 行出现错误: ORA-01031: 权限不足 ORA-06512: 在 "SYS.DBMS_REDEFINITION", line 76 ORA-06512: 在 "SYS.DBMS_REDEFINITION", line 1376 ORA-06512: 在 line 1 --用sys登陆执行 start------------------------------------------- SQL> exec dbms_redefinition.finish_redef_table( 'TESTUSER', 'T1', 'T2' ); PL/SQL 过程已成功完成。 SQL> --用sys登陆执行 end------------------------------------------- SQL> select object_id, object_name from t1 NEW_TABLE where rownum<=5; OBJECT_ID OBJECT_NAME ---------- ------------------------------ 931 V$PGA_TARGET_ADVICE 943 V$DLM_MISC 955 V$DLM_RESS 957 V$HVMASTER_INFO 984 V_$BH SQL> select object_id, object_name from t2 OLD_TABLE where rownum<=5; OBJECT_ID OBJECT_NAME ---------- ------------------------------ 28591 /7e59f4a3_SystemIdentity 27656 /c7e340d5_FontRenderContext 15623 /9be69f43_BasicSplitPaneUIFocu 37397 com/sun/mail/pop3/Status 7551 DBA_REPOBJECT SQL> select 'indexes', index_name from user_indexes where table_name = 'T1' 2 union all 3 select 'constraints', constraint_name from user_constraints where table_name = 'T1' 4 union all 5 select 'triggers', trigger_name from user_triggers where table_name = 'T1'; 'INDEXES' INDEX_NAME ----------- ------------------------------ indexes T1_PK constraints CHECK_GT_ZERO constraints SYS_C005428 constraints SYS_C005429 constraints SYS_C005430 constraints SYS_C005431 constraints SYS_C005432 constraints T1_PK triggers T1_TRIGGER 已选择9行。 SQL> drop table t2; 表已删除。 SQL> SET LINESIZE 1000 SQL> SET FEEDBACK OFF SQL> set long 999999 SQL> SET PAGESIZE 1000 SQL> select dbms_metadata.get_ddl( 'TABLE', 'T1' ) from dual; DBMS_METADATA.GET_DDL('TABLE','T1') -------------------------------------------------------------------------------- CREATE TABLE "TESTUSER"."T1" ( "OWNER" VARCHAR2(30) CONSTRAINT "SYS_C005428" NOT NULL ENABLE NOVALIDATE, "OBJECT_NAME" VARCHAR2(30) CONSTRAINT "SYS_C005429" NOT NULL ENABLE NOVALIDATE, "SUBOBJECT_NAME" VARCHAR2(30), "OBJECT_ID" NUMBER CONSTRAINT "SYS_C005430" NOT NULL ENABLE NOVALIDATE, "DATA_OBJECT_ID" NUMBER, "OBJECT_TYPE" VARCHAR2(19), "CREATED" DATE CONSTRAINT "SYS_C005431" NOT NULL ENABLE NOVALIDATE, "LAST_DDL_TIME" DATE CONSTRAINT "SYS_C005432" NOT NULL ENABLE NOVALIDATE, "TIMESTAMP" VARCHAR2(19), "STATUS" VARCHAR2(7), "TEMPORARY" VARCHAR2(1), "GENERATED" VARCHAR2(1), "SECONDARY" VARCHAR2(1), "NAMESPACE" NUMBER, "EDITION_NAME" VARCHAR2(30), CONSTRAINT "CHECK_GT_ZERO" CHECK (object_id>0) ENABLE NOVALIDATE, CONSTRAINT "T1_PK" PRIMARY KEY ("OBJECT_ID") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "TESTTBS" ENABLE NOVALIDATE ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE( BUFFER_POOL DEFAULT) TABLESPACE "TESTTBS" PARTITION BY HASH ("OBJECT_ID") (PARTITION "SYS_P41" TABLESPACE "TESTTBS", PARTITION "SYS_P42" TABLESPACE "TESTTBS", PARTITION "SYS_P43" TABLESPACE "TESTTBS", PARTITION "SYS_P44" TABLESPACE "TESTTBS", PARTITION "SYS_P45" TABLESPACE "TESTTBS", PARTITION "SYS_P46" TABLESPACE "TESTTBS", PARTITION "SYS_P47" TABLESPACE "TESTTBS", PARTITION "SYS_P48" TABLESPACE "TESTTBS") SQL>