Oracle 20c 通过引入新的 TRANSFORM 参数子句 INDEX_COMPRESSION_CLAUSE 来支持索引压缩。此子句使您可以控制在导入期间是否执行索引压缩。
数据泵 impdp 命令行模式下TRANSFORM参数介绍。
TRANSFORM = transform_name:value[:object_type]
transform_name 指定转换的名称。
object_type 是可选的。如果提供,则此参数指定要对其应用转换的对象类型。如果未指定对象类型,则转换将应用于所有有效的对象类型。
可用的转换如下,按字母顺序排列:
CONSTRAINT_NAME_FROM_INDEX: [Y | N ]
此转换对以下对象类型有效:TABLE 和 CONSTRAINT 对象类型。
此转换参数影响参考用户创建的索引的 pk 或 fk 约束的生成。如果设置为 Y,它将强制约束的名称与索引的名称匹配。
如果设置为 N(默认值),则约束将按源数据库中的名称创建。CONSTRAINT_USE_DEFAULT_INDEX: [Y | N ]
此转换对以下对象类型有效:TABLE 和 CONSTRAINT 对象类型。
此转换参数影响与 pk 或fk约束有关的索引的生成。如果设置为 Y,它将强制自动创建以强制约束的索引名称与约束名称相同。
如果设置为 N(默认值),那么将按照源数据库中的名称创建索引。DISABLE_ARCHIVE_LOGGING:[Y | N]
此转换对以下对象类型有效:INDEX 和 TABLE。
如果设置为 Y,则在导入数据之前,将禁用指定对象类型(TABLE 和/或 INDEX)的日志记录属性。如果设置为 N(默认值),则导入期间不会禁用存档日志记录。加载数据后,对象的日志记录属性将还原为其原始设置。如果未指定对象类型,则 DISABLE_ARCHIVE_LOGGING 行为将应用于 TABLE 和 INDEX 对象类型。此转换适用于文件模式导入和网络模式导入。它不适用于可移植表空间导入。
注意:如果数据库处于 FORCE LOGGING 模式,则在创建索引和表时DISABLE_ARCHIVE_LOGGING 选项不会禁用日志记录。TRANSFORM=INDEX_COMPRESSION_CLAUSE:\"COMPRESS ADVANCED LOW\"
指定此转换将更改作业中所有索引的压缩类型。
注意:INDEX_COMPRESSION_CLAUSE 转换仅在Oracle 20c中支持。
transform=inmemory_clause:\"INMEMORY MEMCOMPRESS FOR DML PRIORITY CRITICAL\"
或者,您可以将参数放入参数文件中。参数文件中的引号在处理过程中得到维护。 注意:INMEMORY_CLAUSE 转换仅在Oracle Database 12c第1版(12.1.0.2)或更高版本中可用。
LOB_STORAGE:[SECUREFILE | BASICFILE | DEFAULT | NO_CHANGE]
此转换对对象类型 TABLE 有效。
将使用指定的存储(SECUREFILE 或 BASICFILE)创建LOB段。如果值为 NO_CHANGE(默认值),则将使用与源数据库中相同的存储来创建LOB段。如果值为 DEFAULT,则省略关键字(SECUREFILE或BASICFILE),并使用默认存储创建LOB段。
指定此转换会更改作业中所有表的LOB存储,包括为实例化视图提供存储的表。
LOB_STORAGE转换在可移植的导入作业中无效。OID:[Y | N]
此转换对以下对象类型有效:
INC_TYPE,TABLE 和 TYPE。
如果在导入时指定Y(默认值),则将导出的OID分配给新的对象表和类型。 在目标数据库上查找现有匹配类型时,Data Pump还会执行OID检查。
如果在导入时指定了N,则:OMIT_ENCRYPTION_CLAUSE: [Y | N ]
此转换对 TABLE 对象类型有效。
如果设置为Y,它将指示数据泵禁止列加密子句。在源数据库中加密的列在导入的表中未加密。
如果设置为N(默认值),它将指示数据泵像源数据库中一样创建列加密子句。PCTSPACE:some_number_greater_than_zero
此转换对以下对象类型有效: CLUSTER
,CONSTRAINT,INDEX
,ROLLBACK_SEGMENT
,TABLE 和
TABLESPACE
。
为此转换提供的值必须是大于零的数字。它表示用于更改范围分配和数据文件大小的百分比乘数。
您可以将 PCTSPACE 转换与“数据泵导出 SAMPLE”参数一起使用,以便存储分配的大小与采样数据子集匹配。SEGMENT_ATTRIBUTES:[Y | N]
此转换对以下对象类型有效:CLUSTER
,CONSTRAINT
,INDEX
,ROLLBACK_SEGMENT,TABLE 和
TABLESPACE
。
如果将值指定为Y,则将包含段属性(物理属性,存储属性,表空间和日志记录)以及适当的DDL。默认值为Y。SEGMENT_CREATION:[Y | N]
此转换对对象类型 TABLE 有效。
如果设置为Y(默认值),则此转换会导致将SQL SEGMENT CREATION子句添加到 CREATE TABLE
语句中。也就是说,CREATE TABLE
语句明确表示 SEGMENT CREATION DEFERRED
或 SEGMENT CREATION IMMEDIATE
。如果值为N,则从 CREATE TABLE
语句中省略 SEGMENT CREATION 子句。将此参数设置为N可以为要加载的表使用默认的段创建属性。(此功能在Oracle Database 11g第2版(11.2.0.2)和更高版本中可用。STORAGE:[Y | N]
此转换对以下对象类型有效:CLUSTER
,CONSTRAINT,INDEX
,ROLLBACK_SEGMENT 和
TABLE
。
如果将值指定为Y,则包含存储子句以及适当的DDL。默认值为Y。如果SEGMENT_ATTRIBUTES=N,则忽略此参数。TABLE_COMPRESSION_CLAUSE:[NONE | compression_clause]
此转换对对象类型 TABLE 有效。如果指定了 NONE,则省略表压缩子句(并且为表提供表空间的默认压缩)。 否则,该值是有效的表压缩子句(例如,NOCOMPRESS
,COMPRESS BASIC
等)。 表以指定的压缩率创建。
如果表压缩子句超过一个单词,则必须将其包含在单引号或双引号中。 另外,您的操作系统可能要求您将子句括在转义字符(例如反斜杠字符)中。 例如:
TRANSFORM=TABLE_COMPRESSION_CLAUSE:\"COLUMN STORE COMPRESS FOR QUERY HIGH\"
指定此转换将更改作业中所有表的压缩类型,包括为实例化视图提供存储的表。
对于以下示例,假设您已在hr模式中导出了 employees 表。然后导入表时产生的CREATE
TABLE
语句类似于以下内容:
CREATE TABLE "HR"."EMPLOYEES"
( "EMPLOYEE_ID" NUMBER(6,0),
"FIRST_NAME" VARCHAR2(20),
"LAST_NAME" VARCHAR2(25) CONSTRAINT "EMP_LAST_NAME_NN" NOT NULL ENABLE,
"EMAIL" VARCHAR2(25) CONSTRAINT "EMP_EMAIL_NN" NOT NULL ENABLE,
"PHONE_NUMBER" VARCHAR2(20),
"HIRE_DATE" DATE CONSTRAINT "EMP_HIRE_DATE_NN" NOT NULL ENABLE,
"JOB_ID" VARCHAR2(10) CONSTRAINT "EMP_JOB_NN" NOT NULL ENABLE,
"SALARY" NUMBER(8,2),
"COMMISSION_PCT" NUMBER(2,2),
"MANAGER_ID" NUMBER(6,0),
"DEPARTMENT_ID" NUMBER(4,0)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 10240 NEXT 16384 MINEXTENTS 1 MAXEXTENTS 121
PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "SYSTEM" ;
如果您不想保留 STORAGE 子句或 TABLESPACE 子句,则可以使用导入 TRANSFORM 参数将它们从 CREATE
STATEMENT
中删除。将 SEGMENT_ATTRIBUTES 的值指定为N。
impdp hr TABLES=hr.employees DIRECTORY=dpump_dir1 DUMPFILE=hr_emp.dmp
TRANSFORM=SEGMENT_ATTRIBUTES:N:table
然后,employees 表的结果 CREATE
TABLE
语句看起来类似于以下内容。它不包含 STORAGE 或 TABLESPACE 子句;而是使用HR模式的默认表空间的属性。
CREATE TABLE "HR"."EMPLOYEES"
( "EMPLOYEE_ID" NUMBER(6,0),
"FIRST_NAME" VARCHAR2(20),
"LAST_NAME" VARCHAR2(25) CONSTRAINT "EMP_LAST_NAME_NN" NOT NULL ENABLE,
"EMAIL" VARCHAR2(25) CONSTRAINT "EMP_EMAIL_NN" NOT NULL ENABLE,
"PHONE_NUMBER" VARCHAR2(20),
"HIRE_DATE" DATE CONSTRAINT "EMP_HIRE_DATE_NN" NOT NULL ENABLE,
"JOB_ID" VARCHAR2(10) CONSTRAINT "EMP_JOB_NN" NOT NULL ENABLE,
"SALARY" NUMBER(8,2),
"COMMISSION_PCT" NUMBER(2,2),
"MANAGER_ID" NUMBER(6,0),
"DEPARTMENT_ID" NUMBER(4,0)
);
如前面的示例所示,SEGMENT_ATTRIBUTES 转换适用于存储和表空间属性。要仅忽略 STORAGE 子句并保留 TABLESPACE 子句,可以使用 STORAGE 转换,如下所示:
impdp hr TABLES=hr.employees DIRECTORY=dpump_dir1 DUMPFILE=hr_emp.dmp
TRANSFORM=STORAGE:N:table
通过不在 TRANSFORM 参数上指定对象类型,可以将 SEGMENT_ATTRIBUTES 和 STORAGE 转换应用于所有适用的表和索引对象,如以下命令所示:
impdp hr DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp SCHEMAS=hr TRANSFORM=SEGMENT_ATTRIBUTES:N