impdp导入中碰到的两个问题
来源:互联网 发布:数据分析入门 python 编辑:程序博客网 时间:2024/06/05 06:56
前两天,需要将远程一个测试库用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仅导出数据,那么可在导入前禁止约束,这样导入过程不会受到主外键关联的影响,导入后可以恢复约束,保证约束的正确。
- impdp导入中碰到的两个问题
- impdp中遇到的两个问题
- maven导入依赖时碰到的两个小问题
- impdp导入遇到的问题
- dom4j解析xml中碰到的两个问题
- ServiceStack.Redis 使用过程中碰到的两个问题
- Navicat导入数据到数据库中碰到的问题
- 使用asp.net碰到的两个问题
- 今天碰到的两个android小问题
- mysql 今天碰到的两个问题。
- Hibernate程序碰到的两个问题
- 项目维护碰到的两个问题
- 两个开发中碰到的sql错误
- SQL中碰到的问题
- 工作中碰到的问题
- angularjs中碰到的问题
- js中碰到的问题
- 由impdp导入引起的oracle用户权限的问题
- CentOS下如何完全卸载MySQL?解决卸载不干净的问题
- 单链表的整表创建_头插法
- java中的static关键字
- 单链表的整表创建_尾插法
- Python多线程thread与threading实现
- impdp导入中碰到的两个问题
- Android初学笔记之<使用真机进行测试Android工程>
- 三++45
- 自学《算法导论》计划
- struts2使用可生成交互的两个列表框的optiontransferselect标签
- C++11 bind函数实现原理图
- [LeetCode] Course Schedule II
- 两栈共享空间
- linux vi使用