1.报错:

数据泵执行导入时报错:ORA-12899: value too large for column "SCOTT"."TEST112"."JOIN" (actual: 9, maximum: 8)

2.分析:

由报错,可知,应该是源端表和目标端表字符长度不一致,目标端字符长度最大值无法容纳源端表,所以导入会报错ORA-12899

解决思路:

1)更改目标端字段长度(最简单),改完之后可成功导入

2)通过dblink,目标端CTAS时直接指定字符类型,然后插入目标端表

3)直接在源端CTAS建立中间表,然后用数据泵导出中间表数据,然后把dmp文件传到目标端,目标端执行数据泵导入

3.解决:

最终和研发沟通,研发说目标端表无法更改字符类型,因为分析需要varchar2(8),而源端也无法更改字符类型。

生产环境源端和目标端数据库不在一个网络,而且不允许打通,所以dblink方式无法使用

所以只能通过CTAS构建中间表时转换字符类型,然后用数据泵把中间表导出,再导入目标端即可。

实验环境模拟:

1)建立两张表test111和test112,test111作为源端表,test112作为目标端表

SQL> create table test111(id number(10),join date);

SQL> insert into test111 values(1,sysdate);

1 row created.

SQL> insert into test111 values(2,sysdate-1);

1 row created.

SQL> commit;

SQL> create table test112(id number(10),join varchar2(8));

Table created.

2)首先查看目标端和源端的表结构,和字段类型是否一致,发现源端表test111的join列字符类型为date,而目标端表test112字符类型为varchar2(8)

1)SQL> desc test111;
 Name                       Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                            NUMBER(10)
 JOIN                            DATE

SQL> desc test112;
 Name                       Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                            NUMBER(10)
 JOIN                            VARCHAR2(8)

2)并向test111插入两条数据,最终test111有两条数据,test112表为空

SQL> select id,to_char(join,'yyyymmdd') from test111;

    ID TO_CHAR(JOIN,'YYYYMMDD')
---------- ------------------------
     1 20200313
     2 20200312

SQL> select * from test112;

no rows selected

3)CTAS建立中间表test118,经过数据类型转换使得test111的值插入test118

SQL> create table test118 as select id,to_char(join,'yyyymmdd') join from test111;

Table created.

SQL> select * from test118;

    ID JOIN
---------- ------------------------
     1 20200313
     2 20200312

SQL> desc test118;
 Name                       Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                            NUMBER(10)
 JOIN                            VARCHAR2(8)

4)用数据泵导出test118数据

mkdir -p /home/oracle/expdp

chmod -R 777 /home/oracle/expdp

create directory expdp as '/home/oracle/expdp';

grant all on directory expdp on scott;

expdp scott/tiger directory=expdp  tables=test118 dumpfile=test118%U.dmp logfile=test118.log

5)再次用数据泵导入test112

[oracle@host01 expdp]$ impdp scott/tiger remap_table=test118:test112 dumpfile=test118%U.dmp logfile=test118.log directory=expdp table_exists_action=append

6)结果验证(test111数据成功导入test112,只不过join列显示有点差别,因为字符类型不同)

SQL> select * from test112;

    ID JOIN
---------- ------------------------
     1 20200313
     2 20200312

SQL> select * from test111;

    ID JOIN
---------- ------------------
     1 13-MAR-20
     2 12-MAR-20

数据泵导入,报错:ORA-12899: value too large for column "SCOTT"."TEST112"."JOIN" (actual: 9, maximum: 8)的更多相关文章

  1. 数据泵导出报错ORA-31693 ORA-02354 ORA-01466

    1.Oracle数据泵导出schema时有报错: Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - P ...

  2. 数据导入报错:Got a packet bigger than‘max_allowed_packet’bytes的问题

    数据导入报错:Got a packet bigger than‘max_allowed_packet’bytes的问题 2个解决方法: 1.临时修改:mysql>set global max_a ...

  3. 数据导入报错 Got a packet bigger than‘max_allowed_packet’bytes

    数据导入报错:Got a packet bigger than‘max_allowed_packet’bytes的问题 2个解决方法: 1.临时修改:mysql>set global max_a ...

  4. Oracle数据泵导入dmp文件,报ORA-39083、ORA-01917错误解决办法

    将10.16.23.111数据库服务器中的数据库名称为cwy_init1的数据导出,随后在10.16.23.112数据库服务器创建空库cwy_init2,将导出的cwy_init1数据文件(cwy_i ...

  5. Oracle数据泵导入dmp文件,报UDI-12154、ORA-12154错误解决办法

    1. 数据泵导入dmp文件,报UDI-12154.ORA-12154 1.1 导入命令 impdp cwy_init/init@orcl directory=DATA_PUMP_DIR dumpfil ...

  6. 【EXPDP/IMPDP】数据泵导入导出遇到目录没有权限问题

    当执行数据泵导出的时候,报了如下错误: ORA-39002: invalid operation ORA-39070: Unable to open the log file. ORA-39087: ...

  7. 【EXPDP/IMPDP】ORACLE数据泵导入导出案例(expdp & impdp)

    概要: 因项目需要,通常需要将生产库下的部分数据抽取并恢复到测试库上 本文主要介绍数据泵导入导出的几种情况以及错误处理 案例环境: rhel-server-6.5-x86_64 oracle 11.2 ...

  8. AFNetWoring导入报错解决方案

    第一个当报cannot find interface declaration for 'UIImage或者use of undeclared identifier 'UIImage'时我们要在报错页面 ...

  9. 开启gtid导入报错

    导入报错 [root@redis02 data]# mysql -u root -p < ht.sqlEnter password: ERROR 1840 (HY000) at line 24: ...

随机推荐

  1. 『居善地』接口测试 — 4、Requests库发送GET请求

    目录 1.使用Requests库发送带参数的GET请求 2.查看GET请求的内容 3.带请求头.参数的Get请求 Requests库GET请求是使用HTTP协议中的GET请求方式对目标网站发起请求. ...

  2. 基于Mysql的编程语言(实验六、七)

    本文参考1:MYSQL对sql的拓展 本文参考2:MySQL编程基础 本文参考3:MySql数据库编程 (侵删) 一.变量的定义 1.用户变量 set @变量名=表达式: 说明:无提前进行定义,直接用 ...

  3. Unity shader 护盾shield的简单实现

    先上效果图 shader所用的贴图资源 扰动 直接对uv进行变换就可以了,记得首先把六边形格子地图的Tilling调高点 先预先调成合适大小的六边形,然后repeat铺满整个护盾 // Tiles a ...

  4. OO随笔之和蔼的第四单元——UML系列

    本单元的OO作业相比以前的,实在可以以和蔼来形容.但是和蔼并不意味着什么都不做,这单元的两次作业,特点在于每种查询难度不大,但是有很多需要商榷的细节点和查询种类比较多.由于UML图和java8之间,存 ...

  5. Nifi:nifi的基本使用

    Nifi的安装使用 Nifi安装 首先说一下Nifi的安装,这里Nifi可以支持Windows版和Linux,只需要去官网:http://nifi.apache.org/ 根据自己需要的版本,选择下载 ...

  6. MySQL之数据定义语言(DDL)

    写在前面 本文中 [ 内容 ] 代表啊可选项,即可写可不写. SQL语言的基本功能介绍 SQL是一种结构化查询语言,主要有如下几个功能: 数据定义语言(DDL):全称Data Definition L ...

  7. [Scala] 面向对象

    类定义 当属性是private时,scala会自动为其生成get和set方法 只希望scala生成get,不生成set,可定义为常量 不生成get和set方法,使用private[this]关键字 1 ...

  8. 更新索引库: $locate string 寻找包含有string的路径: $updatedb

    更新索引库: $locate string 寻找包含有string的路径: $updatedb 与find不同,locate并不是实时查找.你需要更新数据库,以获得最新的文件索引信息.

  9. Docker Swarm(五)Config 配置管理

    前言 在动态的.大规模的分布式集群上,管理和分发配置文件也是很重要的工作.传统的配置文件分发方式(如配置文件放入镜像中,设置环境变量,volume 动态挂载等)都降低了镜像的通用性. Docker 1 ...

  10. 目录和文件 按创建时间排序du -h --time --max-depth=1 . |sort -r -t $'\t' -k 2 Linux查看文件夹大小,并按文件夹创建时间排序

    目录和文件 按创建时间排序 # du -h --time --max-depth=1 . |sort -r -t $'\t' -k 230M 2020-04-01 14:54 .28K 2020-04 ...