IMPDP导入HCC表遭遇ORA-64307

本来说好再也不测HCC的。

下午有同事问impdp导入HCC表遭遇:

显然是因为把HCC的表导入到非支持HCC的环境或者存储上了。

这个问题其实解决起来不复杂。不过测试范围稍微广一点,还是有别的要注意的。

模拟一下,创建一个HCC的表。大小和行数如下:

之后我们把这个表导出,作为测试数据。

导出预估305.2MB

注意,我源库是19.2,我需要导入到低版本,我指定了version参数。

导出实际文件为306MB

通过上面的比对可以发现,库中对HCC表的体积计算是15MB,而导出之后是305MB,意味着导出数据是不压缩的 。导出过程发生了解压行为。

下面分别将这个导出文件导入到11.2和12.2中。

11.2导入:

显然,我们遇到了ORA-64307报错

12.2导入:

同样的报错

为什么我选了11.2跟12.2这两个版本来重现一个一抹一样的错误。

事实上,在目标端是11.2和目标端是12.2的时候,处理的方式是不一样的。

从12.1开始,可以简单的一个导入参数来解决这个问题:

transform=table_compression_clause:none

子句的意思是表压缩语法予以忽略。下面是测试结果。

以305MB导入成功

这个没什么好说的,但是11.2是没有表压缩规避语法的。

MOS上给出了两个解法:

1,impdp的时候指定sqlfile的方式把建表语句拿到,然后手工编辑这个sql文件,把相关compress for的子句都删除,然后创建好表,再然后导入的时候table_exist_action=append或者truncate来直接加载数据。

这个作为DBA的常规操作这里不讨论了。

2,我找了一下11.2的transform语法:

transform=segment_attributes:n:table

但是MOS上没有说到这个语法。从字面意思理解,它是忽略整个segment的所有属性来导入表,这当然包括压缩属性了。把这个参数提供给同事,确实可以无错导入了。不过,这个参数的影响范围太大了,太大了。

这个参数到底忽略了多少表属性呢?

发表评论