9I在线重定义测试

来源:互联网 发布:淘宝买了东西店铺关 编辑:程序博客网 时间:2024/06/01 12:39
在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 8ORA-06512: 在"SYS.DBMS_REDEFINITION", line 247ORA-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_C003068constraints SYS_C003069constraints SYS_C003070constraints SYS_C003071constraints SYS_C003072constraints CHECK_GT_ZEROtriggers    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 ROWIDBEGIN 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 8ORA-06512: 在"SYS.DBMS_REDEFINITION", line 247ORA-06512: 在line 1SQL> 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 8ORA-06512: 在"SYS.DBMS_REDEFINITION", line 146ORA-06512: 在line 1SQL> 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 8ORA-06512: 在"SYS.DBMS_REDEFINITION", line 146ORA-06512: 在line 1==解决办法:我们需要将之前步骤中产生的物化视图和日志删除。用下列语句查找并清除:SQL> select log_table from user_snapshot_logs;LOG_TABLE------------------------------MLOG$_ADMIN_EMPMLOG$_T1SQL>SQL>SQL> drop snapshot log on t1;==实体化视图日志已删除。SQL> select TABLE_NAME , status from user_snapshots;TABLE_NAME                     STATUS------------------------------ -------INT_ADMIN_EMP                  VALIDT2                             VALID==以前称为SNAPSHOT==以后的版本称为MVIEW,物化视图SQL> select mview_name, compile_state from user_mviews;MVIEW_NAME                     COMPILE_STATE------------------------------ -------------------INT_ADMIN_EMP                  ERRORT2                             ERRORSQL> 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(*)----------    320661SQL> SELECT COUNT(*) FROM  t2;  COUNT(*)----------    320661               -- 执行拷贝命令,关联相关对象DECLAREnum_errors PLS_INTEGER;BEGINDBMS_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_PKconstraints SYS_C003088constraints SYS_C003089constraints SYS_C003090constraints SYS_C003091constraints SYS_C003092constraints CHECK_GT_ZEROconstraints T1_PKtriggers    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_PKconstraints SYS_C003094constraints SYS_C003095constraints SYS_C003096constraints SYS_C003097constraints SYS_C003098constraints T2_CHECK_GT_ZEROconstraints T2_PKtriggers    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                                  188888807-5月 -09 08-5月 -09                                            0YESSQL> SELECT COUNT(*) FROM  t1;  COUNT(*)----------    320662SQL> 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_PKconstraints SYS_C003094constraints SYS_C003095constraints SYS_C003096constraints SYS_C003097constraints SYS_C003098constraints T2_CHECK_GT_ZEROconstraints T2_PKtriggers    T2_TRIGGER已选择9行。SQL> select count(*) from t1;  COUNT(*)----------    320662SQL> 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                               188888807-5月 -09 08-5月 -09                                            0YES==增量的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_PKconstraints SYS_C005428constraints SYS_C005429constraints SYS_C005430constraints SYS_C005431constraints SYS_C005432constraints T1_PKconstraints CHECK_GT_ZEROtriggers    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 50ORA-06512: 在 "SYS.DBMS_REDEFINITION", line 1343ORA-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_REPOBJECTSQL> 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 numberSQL> 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_PK0T1                             indexes     T1_PKT1                             constraints SYS_C005428T1                             constraints SYS_C005429T1                             constraints SYS_C005430T1                             constraints SYS_C005431T1                             constraints SYS_C005432T1                             constraints T1_PKT1                             constraints CHECK_GT_ZEROT2                             constraints TMP$$_CHECK_GT_ZERO0T2                             constraints TMP$$_SYS_C0054280TABLE_NAME                     'INDEXES'   INDEX_NAME------------------------------ ----------- ------------------------------T2                             constraints TMP$$_SYS_C0054290T2                             constraints TMP$$_SYS_C0054300T2                             constraints TMP$$_SYS_C0054310T2                             constraints TMP$$_SYS_C0054320T2                             constraints TMP$$_T1_PK0T1                             triggers    T1_TRIGGERT2                             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 76ORA-06512: 在 "SYS.DBMS_REDEFINITION", line 1376ORA-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_$BHSQL> 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_REPOBJECTSQL> 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_PKconstraints CHECK_GT_ZEROconstraints SYS_C005428constraints SYS_C005429constraints SYS_C005430constraints SYS_C005431constraints SYS_C005432constraints T1_PKtriggers    T1_TRIGGER已选择9行。SQL> drop table t2;表已删除。SQL> SET LINESIZE 1000SQL> SET FEEDBACK OFFSQL> set long 999999SQL> SET PAGESIZE 1000SQL> 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>