impdp导入中碰到的两个问题

简介:

前两天,需要将远程一个测试库用expdp导出的数据dump导入到本地的一个测试环境中,其中碰到了一些问题,值得小结下。

环境介绍:

  1. 数据量:10+表,<1000万的数据,dump文件大约400多MB
  2. 源库和目标库都是11.2.0.4
  3. 字符集不同,源库字符集是GBK,目标库字符集是UTF-8

导入命令:

test/test directory=exp_dump dumpfile=test.dmp logfile=test.log remap_schema=test1:test2 remap_tablespace=TBS_DAT_1:TBS_DAT_2,TBS_IDX_1:TBS_IDX_2

导入过程中碰到的两个问题:

(1) 中文字符集转换

KUP-11007: conversion error loading table "TEST"."T_PSR"
ORA-12899: 列 REASON_CODE 的值太大 (实际值: 21, 最大值: 20)
KUP-11009: data for row: REASON_CODE : 0X'BABDBFD5C6F7C8DDC1BFCFDED6C6'

这里涉及到了字符集转换的问题,中文在GBK字符集中占2位,但在UTF-8字符集中占3位,所以在GBK中保存小于20个字符的情况下,导入到了UTF-8的库中,就可能因为需要额外的字符空间导致超出字段长度定义,报了ORA-12899的错误。

(2) 主外键关联

ORA-31693: Table data object "TEST"."T_ITE" failed to load/unload and is being skipped due to error:
ORA-29913: error in executing ODCIEXTTABLEFETCH callout
ORA-02291: integrity constraint (TEST.FK_ITE_REF_PSR) violated - parent key not found

由于有些表之间是存在主外键关联的,expdp导出的时候选择了data_only仅导出数据,impdp导入的时候会因未插入主键记录而插入外键记录,出现ORA-02291的错误,对于这种情况可以选择先禁止主外键关联,导入后再恢复关联。

操作顺序:

(a) 导入前,执行如下SQL找到需要禁止的外键关联

select 'ALTER TABLE '||TABLE_NAME||' DISABLE CONSTRAINT '||constraint_name||';' 

from user_constraints WHERE CONSTRAINT_TYPE='R';

(b) 执行(a)的结果SQL

(c) 导入后,执行如下SQL找到需要恢复的外键关联

select 'ALTER TABLE '||TABLE_NAME||' ENABLE NOVALIDATE CONSTRAINT '||constraint_name||';' 

from user_constraints WHERE CONSTRAINT_TYPE='R';

NOVALIDATE参数不会验证已存储的数据,但未来再插入的记录则会遵循主外键关联的关系。

总结:

  1. 使用10g以上版本提供的expdp/impdp数据泵导入导出工具,较以往的exp/imp工具,无论是在参数的可选择性上,还是速度和压缩比上,都有了不小的改进,提供更为方便快速的数据导入导出方法给我们。
  2. 导入导出可能碰到最多的问题,字符集转换算是其中之一,要明确导入导出数据对字符集的依赖程度,才能确保数据导入导出的正确。
  3. 对于有主外键关联的数据,如果选择data_only仅导出数据,那么可在导入前禁止约束,这样导入过程不会受到主外键关联的影响,导入后可以恢复约束,保证约束的正确。

本文转自ICT时空 dbasdk博客,原文链接:impdp导入中碰到的两个问题 ,如需转载请自行联系原博主。

相关文章
|
Oracle 关系型数据库 数据库
Oracle expdp impdp导出导入命令及数据库备份
Oracle expdp impdp导出导入命令及数据库备份
292 0
|
Oracle 关系型数据库
PLSQL_数据泵导入进度查看Impdp/Expdp Status(案例)
20150701 Created By BaoXinjian 一、摘要 查看EXPDP/IMPDP的进度,当你当如导出的时候,如果数据量比较大,中途有些人会着急,不免想看看进度如何 1. 两个视图 DBA_DATAPUMP_JOBS; DBA_DATAPUMP_SESSIONS; 2.
3317 0
|
机器学习/深度学习 Oracle 关系型数据库
【expdp】10g数据泵expdp工具选项详解及应用示例
理解expdp各个选项的含义最好的途径就是逐一的进行测试,这样可以在感性上有一个真实的体验。 1.数据泵expdp导出工具与传统的exp导出工具的区别 1)exp是客户端程序,既可以在客户端使用,也可以在服务器端使用; 2)expdp是服务器端工具,只能在ORACLE服务器端使用,不能在客户端使用; 3)这两个工具生成的备份文件不能被对方与之对应的导入工具使用; 4)expdp在灵活性和功能性上与exp相比,有质上的飞跃。 2.expdp命令行选项列表 使用“-help”选项获得expdp命令可用的选项列表和简单的注释信息。 ora10g@linux5 /expdp$ expdp help
347 0
|
SQL 负载均衡 Oracle
使用datapump 导出导入同义词(export and import synonym using datapump)
      对于同义词的备份我们有多种方式来实现,如直接通过脚本生成同义词的创建脚本,或者使用dbms_metadata.get_ddl来提取同义词的定义脚本。
1803 1
|
Oracle 关系型数据库 数据库
expdp 导出简单笔记
expdp 导出简单笔记 1、要创建oracle可访问的目录必须赋予oracle:oinstall的权限 [root@oracle/]# chown -R oracle:oinstall /data1 2、切换到oracle用户 [roo...
915 0
|
关系型数据库 Oracle