为什么Oracle的dbms_metadata.get_ddl会返回不同的结果?

时间:2015-09-03 15:47:11

标签: oracle oracle12c

我正在尝试使用dbms_metadata.get_ddl比较两个模式。这两个模式是使用完全相同的SQL脚本创建的。但是在一个主键上,我在DDL中有所不同:

ALTER TABLE "SCHEMA_NAME"."AUDIT_EVENTS_LOG" ADD CONSTRAINT "AUDIT_EVENTS_LOG_PK" PRIMARY KEY ("LOG_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 FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "DATA_INDEX"  ENABLE

Vs的:

  ALTER TABLE "SCHEMA_NAME"."AUDIT_EVENTS_LOG" ADD CONSTRAINT "AUDIT_EVENTS_LOG_PK" PRIMARY KEY ("LOG_ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  TABLESPACE "DATA_INDEX"  ENABLE

两个模式都位于同一个数据库实例上。用于创建此主键的脚本(用于两个模式)是:

ALTER TABLE "AUDIT_EVENTS_LOG" ADD CONSTRAINT "AUDIT_EVENTS_LOG_PK" PRIMARY KEY ("LOG_ID")
  USING INDEX  TABLESPACE "DATA_INDEX" ENABLE;

当使用完全相同的脚本创建两者时,GET_DDL的结果会有什么不同?

1 个答案:

答案 0 :(得分:3)

查看DBMS_METADATA.SET_TRANSFORM_PARAM,尤其是STORAGE param。

看起来你第一次调用DBMS_METADATA.GET_DDL启用它(这是默认设置),但第二次调用没有。

如果您每次都想要获得完全相同的结果,那么请注意提前致电SET_TRANSFORM_PARAM以查看影响输出的每个设置。