前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle 20c新特性:TRANSFORM支持索引压缩

Oracle 20c新特性:TRANSFORM支持索引压缩

作者头像
Grainger
发布2022-04-24 09:49:31
8820
发布2022-04-24 09:49:31
举报
文章被收录于专栏:数据与未来数据与未来

Oracle 20c 通过引入新的 TRANSFORM 参数子句 INDEX_COMPRESSION_CLAUSE  来支持索引压缩。此子句使您可以控制在导入期间是否执行索引压缩。

    数据泵 impdp 命令行模式下TRANSFORM参数介绍。

  • 语法和说明
代码语言:javascript
复制
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 选项不会禁用日志记录。
  • DWCS_CVT_IOTS: [Y | N ] 此转换对 TABLE 对象类型有效。 如果设置为 Y,它会在创建表时通过 ORGANIZATION INDEX 子句来指示数据泵将索引组织表转换为堆组织表。 如果设置为 N(默认值),则生成的DDL将保留源对象的表特征。
  • DWCS_CVT_CONSTRAINTS: [Y | N ] 此转换对以下对象类型有效:TABLE 和 CONSTRAINT 对象类型。 如果设置为Y,它将指示数据泵创建禁用的pk,fk或uk约束。 如果设置为N(默认值),它将根据源数据库状态将数据泵定向到创建 pk,fk或uk约束。
  • INDEX_COMPRESSION_CLAUSE [NONE | compression_clause] 此转换对对象类型INDEX有效。与 TABLE_COMPRESSION_CLAUSE 一样,INDEX_COMPRESSION_CLAUSE 使您可以控制导入时的索引压缩。 如果指定了 NONE,则省略索引压缩子句(并且为索引提供表空间的默认压缩)。但是,如果使用压缩,则 Oracle 建议您使用 COMPRESS ADVANCED LOW。使用指定的压缩创建索引。 如果索引压缩子句超过一个单词,则必须将其包含在单引号或双引号中。另外,您的操作系统可能要求您将子句括在转义字符(例如反斜杠字符)中。例如: TRANSFORM=INDEX_COMPRESSION_CLAUSE:\"COMPRESS ADVANCED LOW\" 指定此转换将更改作业中所有索引的压缩类型。 注意:INDEX_COMPRESSION_CLAUSE 转换仅在Oracle 20c中支持。
  • INMEMORY:[Y | N] 此转换对以下对象类型有效:TABLE 和 TABLESPACE。 INMEMORY 转换与内存中列存储(IM列存储)有关。IM列存储是系统全局区域(SGA)的可选部分,用于存储表,表分区和其他数据库对象的副本。在IM列存储中,数据是按列而不是行填充的,就像在SGA的其他部分一样,并且针对快速扫描对数据进行了优化。IM列存储不会替代缓冲区高速缓存,而是作为补充,以便两个存储区都可以不同格式存储相同数据。IM列存储包含在Oracle Database In-Memory选项中。 如果在导入时指定了Y(默认值),则数据泵会为所有具有一个的对象保留IM列存储子句。在导入时重新创建这些对象时,数据泵会生成与导出时与那些对象的设置匹配的IM列存储子句。 如果在导入时指定了N,则数据泵将从具有一个的所有对象中删除IM列存储子句。如果没有存储在表空间中的对象的IM列存储子句,则该对象将从表空间继承IM列存储子句。因此,如果要迁移数据库,并且希望新数据库使用IM列存储功能,则可以使用适当的IM列存储子句预先创建表空间,然后在导入命令上使用 TRANSFORM=INMEMORY:N。然后,该对象从新的预先创建的表空间继承IM列存储子句。 如果不使用 INMEMORY 转换,则必须单独更改每个对象以添加适当的IM列存储子句。 注意:INMEMORY 转换仅在Oracle Database 12c第1版(12.1.0.2)或更高版本中可用。
  • INMEMORY_CLAUSE:"string with a valid in-memory parameter” INMEMORY_CLAUSE 转换与内存中列存储(IM列存储)相关。IM列存储是系统全局区域(SGA)的可选部分,用于存储表,表分区和其他数据库对象的副本。在IM列存储中,数据是按列而不是行填充的,就像在SGA的其他部分一样,并且针对快速扫描对数据进行了优化。IM列存储不会替代缓冲区高速缓存,而是作为补充,以便两个存储区都可以不同格式存储相同数据。IM列存储包含在Oracle Database In-Memory选项中。 指定此转换时,数据泵会将字符串的内容用作 INMEMORY_CLAUSE,用于所有导入的对象(其DDL中具有IM列存储子句)。当您要为转储文件中的对象覆盖IM列存储子句时,此转换很有用。 您提供的字符串必须用双引号引起来。如果要在命令行上输入命令,请注意,某些操作系统可能会在分析命令期间删除引号,这会导致错误。您可以通过使用反斜杠转义符(\)来避免此错误。例如:

代码语言:javascript
复制
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,则:
    • 在创建新对象表和类型的过程中,禁止分配导出的OID。而是分配一个新的OID。禁止分配导出的OID对克隆模式很有用,但不会影响引用的对象。
    • 在为与类型关联的表加载数据之前,数据泵在目标数据库中查找现有匹配类型时会跳过常规类型OID检查。仍然执行使用哈希码检查类型,版本号和类型名称的其他检查。
  • OMIT_ENCRYPTION_CLAUSE: [Y | N ] 此转换对 TABLE 对象类型有效。 如果设置为Y,它将指示数据泵禁止列加密子句。在源数据库中加密的列在导入的表中未加密。 如果设置为N(默认值),它将指示数据泵像源数据库中一样创建列加密子句。
  • PCTSPACE:some_number_greater_than_zero 此转换对以下对象类型有效: CLUSTERCONSTRAINT,INDEXROLLBACK_SEGMENTTABLE 和 TABLESPACE。 为此转换提供的值必须是大于零的数字。它表示用于更改范围分配和数据文件大小的百分比乘数。 您可以将 PCTSPACE 转换与“数据泵导出 SAMPLE”参数一起使用,以便存储分配的大小与采样数据子集匹配。
  • SEGMENT_ATTRIBUTES:[Y | N] 此转换对以下对象类型有效:CLUSTERCONSTRAINTINDEXROLLBACK_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] 此转换对以下对象类型有效:CLUSTERCONSTRAINT,INDEXROLLBACK_SEGMENT 和 TABLE。 如果将值指定为Y,则包含存储子句以及适当的DDL。默认值为Y。如果SEGMENT_ATTRIBUTES=N,则忽略此参数。
  • TABLE_COMPRESSION_CLAUSE:[NONE | compression_clause] 此转换对对象类型 TABLE 有效。

如果指定了 NONE,则省略表压缩子句(并且为表提供表空间的默认压缩)。 否则,该值是有效的表压缩子句(例如,NOCOMPRESSCOMPRESS BASIC等)。 表以指定的压缩率创建。

如果表压缩子句超过一个单词,则必须将其包含在单引号或双引号中。 另外,您的操作系统可能要求您将子句括在转义字符(例如反斜杠字符)中。 例如:

代码语言:javascript
复制
TRANSFORM=TABLE_COMPRESSION_CLAUSE:\"COLUMN STORE COMPRESS FOR QUERY HIGH\"

指定此转换将更改作业中所有表的压缩类型,包括为实例化视图提供存储的表。

  • 示例

对于以下示例,假设您已在hr模式中导出了 employees 表。然后导入表时产生的CREATE TABLE 语句类似于以下内容:

代码语言:javascript
复制
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。

代码语言:javascript
复制
impdp hr TABLES=hr.employees DIRECTORY=dpump_dir1 DUMPFILE=hr_emp.dmp
  TRANSFORM=SEGMENT_ATTRIBUTES:N:table

然后,employees 表的结果 CREATE TABLE 语句看起来类似于以下内容。它不包含 STORAGE 或 TABLESPACE 子句;而是使用HR模式的默认表空间的属性。

代码语言:javascript
复制
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 转换,如下所示:

代码语言:javascript
复制
impdp hr TABLES=hr.employees DIRECTORY=dpump_dir1 DUMPFILE=hr_emp.dmp
  TRANSFORM=STORAGE:N:table

通过不在 TRANSFORM 参数上指定对象类型,可以将 SEGMENT_ATTRIBUTES 和 STORAGE 转换应用于所有适用的表和索引对象,如以下命令所示:

代码语言:javascript
复制
impdp hr DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp SCHEMAS=hr TRANSFORM=SEGMENT_ATTRIBUTES:N
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 山东Oracle用户组 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档