我们拥有使用Oracle 12C的生产环境。它具有两个实例,并且正在使用Oracle Data Guard在另一台服务器中具有副本。 每次发布新版本时,都必须截断一些没有索引的表,并使用inserts语句执行多个脚本,如下所示:
ALTER TABLE T_I18N DISABLE ALL TRIGGERS;
TRUNCATE TABLE T_I18N;
INSERT INTO T_I18N VALUES ('sp', 'Table 1', '0', 'Tabla 1');
INSERT INTO T_I18N VALUES ('sp', 'Table 2', '0', 'Tabla 2');
INSERT INTO T_I18N VALUES ('sp', 'Table 3', '0', 'Tabla 3');
.
.
ALTER TABLE HIS_I18N ENABLE ALL TRIGGERS;
以前,我们还禁用了所有主键和外键。为了提供更多信息,表结构如下:
CREATE TABLE "T_I18N"
("T_CODE" VARCHAR2(5 BYTE),
"T_KEY" VARCHAR2(200 BYTE),
"T_C_ID" NUMBER(6,0),
"T_VALUE" VARCHAR2(500 BYTE),
CONSTRAINT "HIN_PK" PRIMARY KEY ("T_CODE", "T_KEY", "T_C_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 "TB1" ENABLE,
CONSTRAINT "HIN_CEN_FK" FOREIGN KEY ("T_C_ID")
REFERENCES "TB1"."T_CEN" ("T_C_ID") ENABLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
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 "TB1";
包含更多Insert语句的脚本大约有20K,执行大约需要12分钟。我认为,这花费了太多时间,所以我采用了另一种方法。我试图删除表,重新创建它,然后执行脚本,只花了40秒。
我一直在Oracle网站上进行搜索,以了解为什么drop / recreate和truncate之间有如此大的差异,但是很遗憾,我找不到任何线索。
非常感谢。任何信息或建议,将不胜感激。
干杯!