为什么 Oracle 的 dbms_metadata.get_ddl 返回不同的结果?
Why is Oracle's dbms_metadata.get_ddl returning different results?
我正在尝试使用 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
对比:
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 使用完全相同的脚本创建时,什么会导致结果不同?
查看 DBMS_METADATA.SET_TRANSFORM_PARAM
,尤其是 STORAGE
参数。
您第一次调用 DBMS_METADATA.GET_DDL
似乎启用了它(这是默认设置),但第二次调用没有。
如果您希望每次都能获得完全相同的结果,那么请注意提前调用 SET_TRANSFORM_PARAM
以了解影响输出的每个设置。
我正在尝试使用 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
对比:
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 使用完全相同的脚本创建时,什么会导致结果不同?
查看 DBMS_METADATA.SET_TRANSFORM_PARAM
,尤其是 STORAGE
参数。
您第一次调用 DBMS_METADATA.GET_DDL
似乎启用了它(这是默认设置),但第二次调用没有。
如果您希望每次都能获得完全相同的结果,那么请注意提前调用 SET_TRANSFORM_PARAM
以了解影响输出的每个设置。