oracle跨平台数据迁移 expdp/impdp 字符集问题 导致ORA-02374 ORA-12899 ORA-02372

环境描述:

源数据库环境:

操作系统:Windows SERVER 2008R2

数据库版本:单实例 ORACLE 11.2.0.1

目标端数据库环境:

操作系统:redhat linux 6.5 x86 64bit

数据库版本:ORACLE 11g RAC 11.2.0.4

故障描述:

从源数据库expdp导出数据,然后往目标数据库impdp导入的时候报错:

ORA-02374: conversion error loading table "QBJMES"."PROJECT"

ORA-12899: value too large for column PROJECT_SPEC (actual: 103, maximum: 100)

ORA-02372: data for row: PROJECT_SPEC : 0X‘3730B6A1BCB6302E382A302E362A323035302A39363028312E‘

故障分析:

源数据库字符集: zhsgbk16

目标端数据库字符集:al32utf8

zhsgbk16 和 utf8 对数据编码之后,存储格式不同,对于中文来讲,gbk存放一个汉字占用2个字节,utf8存放一个汉字占用3个字节,这样就会导致,比方说:原先GBK字符编码的数据库中的某张表中,存放中文的字段:colum001的类型是varchar 长度为200 ,并且该字段的大多数行的现有数据长度基本上在180个字节,那么该表导入UTF8编码的数据库中时,该字段原先存储的大多数180个字节的汉字,就需要180*3/2=270个字节左右的字符长度才能正常存放;而此时在执行impdp导入操作的时候,表结构是不会改变的,也就是原先的字段定义colum001的长度还是保持着200,因此在导入的时候,就会报错,出现上述错误信息。

处理方式:

第一种:重新导出,导入

在源库执行导出操作之前,把qbjmes.project 字段改成超过103  。

然后再往目标库导入的时候,就不会报错了。

第二种:清空报错表的数据,修改相关字段的长度,然后重新导入只导入该表的数据。

第三种:修改源数据库字符集(不建议使用),然后执行重新导出操作,详细的步骤如下:

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP MOUNT EXCLUSIVE;

SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;

SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;

SQL>ALTER DATABASE OPEN;

SQL>ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;

SQL>SHUTDOWN immediate;

SQL>startup;

时间: 2024-12-23 23:37:54

oracle跨平台数据迁移 expdp/impdp 字符集问题 导致ORA-02374 ORA-12899 ORA-02372的相关文章

Oracle数据迁移expdp/impdp

Oracle数据迁移expdp/impdp目的:指导项目侧自行进行简单的数据泵迁移工作. 本文实验环境:Oracle 11.2.0.4,利用数据库自带的scott示例用户进行试验测试. 1.首先需要创建Directory 2.使用expdp导出用户数据 2.1 只导出scott用户的元数据,且不包含统计信息: 2.2 只导出scott用户的数据: 2.3 只导出scott用户下的emp,dept表及数据: 2.4 只导出scott用户下的emp,dept表结构: 2.5 导出scott用户下所有

Oracle使用数据泵 (expdp/impdp)实施迁移

Oracle使用数据泵 (expdp/impdp)实施迁移 实验环境: 1.导出环境:RedHat6.4+Oracle 11.2.0.4.0,利用数据库自带的scott示例用户进行试验测试. Directory:wjq  à /tmp/seiang_wjq 2.导入环境:Centos7.1+Oracle 12.2.0.1.0   Oracle12c默认没有scott用户 Directory:imp_wjq  à /tmp/imp_comsys 一.导出数据: 特别注意:如果后续要导入的数据库版本

Oracle数据泵expdp/impdp

Oracle11g以后的新特性使得默认条件下在分配表空间时忽略空表,以减少表空间的资源占用,这样使得在使用Oracle的exp导出用户数据时就会忽略空表,这样就会造成数据的不完整,当然在使用exp导出数据时也不是没有办法,这个以前有提到过,在此就不做过多的赘述了http://jim123.blog.51cto.com/4763600/1934205.使用这种方法是可以解决在使用exp导出用户数据时不会忽略空表,但是还有更为高效的办法就是使用expdp/impdp --Oracle数据泵,来对Or

ORACLE备份还原(expdp/impdp)

1. 创建目录 SQL> create directory dump_file as '/db/backup'; 2. 目录赋权限 SQL> grant read,write on directorydump_file to bam; 查看目录 SQL> select * from dba_directories; 3. 备份 SQL>expdp user/pwd directory=dump_filedumpfile=expdp_%U.dmp logfile=expdp.log

oracle学习-数据迁移

如果只是迁移表空间或者数据文件,可以先将表空间或者数据文件offline之后移动位置,并通过 alert database rename 和 alter tablespace rename 将位置变化写入控制文件即可 例 迁移数据文件 ALTER DATABASE DATAFILE '所要迁移的数据文件' OFFLINE; 拷贝到新位置 ALTER DATABASE RENAME FILE '索要迁移的数据文件' TO '新位置的数据文件'; 介质恢复 RECOVE DATAFILE '新位置的

MS SQL到Oracle的数据迁移笔记

MS SQL到Oracle的数据迁移笔记 一.任务背景 旧系统使用MS SQL Server数据库,新系统使用Oracle数据库,现在需要将旧系统中的数据迁移到新系统中,旧数据按照约定的规则转换后,能够在新系统中使用或查询.另外,新系统的实施人员并不清楚旧系统的数据结构,且两个新旧两个系统的使用的数据结构有较大的差异.为了叙述方便,将旧系统维护人员简称为A,新系统实施人员简称为B. 二.总体思路 1.  A与B根据各自了解的信息,一起制定中间表: 2.  A从MS SQL Server提取数据,

利用expdp/impdp数据泵对oracle进行数据迁移

按照惯例先报系统环境: 导出环境: 操作系统Release版本:CentOS 6.5 OS内核Kernel版本:2.6.32-431.el6.x86.64 Oracle版本信息: SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Rel

oracle数据库迁移expdp/impdp(分享四)

本项目是疾控中心的一个oracle小数据量迁移过程分享,具体显示结果就不显示. 迁移数据分为以下几个步骤: 分为如下五个部分: 源数据库库环境确认 目标数据库操作 源数据库端导出数据 目标数据库导入数据 迁移后检查 源数据库库环境确认 查看数据库创建时间 select dbid,name,to_char(created,'yyyy-mm-dd hh24:mi:ss'),log_mode from v$DATABASE; 查看数据库字符集(一定目标库也一样) select userenv('lan

详解oracle 12c通过数据泵expdp/impdp工具实现对数据备份、恢复

简介 Oracle Database 10g引入了最新的数据泵(Data Dump)技术,数据泵导出导入(EXPDP和IMPDP)的作用1.实现逻辑备份和逻辑恢复2.数据库用户之间移动对象3.数据库之间移动对象4.实现表空间搬移 实验环境 系统环境:centos7.4Oracle服务IP地址:192.168.100.99光盘挂载目录:/mnt/sr0安装相关目录:/opt 命令步骤 一.创建测试用户并授权 1.创建数据备份目录 [[email protected] ~]# mkdir /opt/