数据泵导入,报错:ORA-12899: value too large for column "SCOTT"."TEST112"."JOIN" (actual: 9, maximum: 8)
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)的更多相关文章
- 数据泵导出报错ORA-31693 ORA-02354 ORA-01466
1.Oracle数据泵导出schema时有报错: Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - P ...
- 数据导入报错: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 ...
- 数据导入报错 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 ...
- Oracle数据泵导入dmp文件,报ORA-39083、ORA-01917错误解决办法
将10.16.23.111数据库服务器中的数据库名称为cwy_init1的数据导出,随后在10.16.23.112数据库服务器创建空库cwy_init2,将导出的cwy_init1数据文件(cwy_i ...
- Oracle数据泵导入dmp文件,报UDI-12154、ORA-12154错误解决办法
1. 数据泵导入dmp文件,报UDI-12154.ORA-12154 1.1 导入命令 impdp cwy_init/init@orcl directory=DATA_PUMP_DIR dumpfil ...
- 【EXPDP/IMPDP】数据泵导入导出遇到目录没有权限问题
当执行数据泵导出的时候,报了如下错误: ORA-39002: invalid operation ORA-39070: Unable to open the log file. ORA-39087: ...
- 【EXPDP/IMPDP】ORACLE数据泵导入导出案例(expdp & impdp)
概要: 因项目需要,通常需要将生产库下的部分数据抽取并恢复到测试库上 本文主要介绍数据泵导入导出的几种情况以及错误处理 案例环境: rhel-server-6.5-x86_64 oracle 11.2 ...
- AFNetWoring导入报错解决方案
第一个当报cannot find interface declaration for 'UIImage或者use of undeclared identifier 'UIImage'时我们要在报错页面 ...
- 开启gtid导入报错
导入报错 [root@redis02 data]# mysql -u root -p < ht.sqlEnter password: ERROR 1840 (HY000) at line 24: ...
随机推荐
- 关于Java处理串口二进制数据的问题 byte的范围 一个字节8bits
前置知识点 byte的范围[-128~127] 内存里表现为 0x00~0xFF 刚好是一个8bits的字节 问题 byte[] hexData = new byte[] {0x01, 0x03, 0 ...
- 基于任务的异步编程(Task,async,await)
这节讲一下比较高级的异步编程用法Task,以及两个异步关键字async和await. Task是在C#5.0推出的语法,它是基于任务的异步编程语法,是对Thread的升级,也提供了很多API,先看一下 ...
- 02 CTF WEB 知识梳理
1. 工具集 基础工具 Burpsuit, Python, FireFox(Hackbar, FoxyProxy, User-Agent Swither .etc) Burpsuit 代理工具,攻击w ...
- cmake和make
学计算机的,在写代码的时候,IDE安装好,环境按着教程配置好,就直接代码了,编辑器的具体原理只是一知半解,现在来系统学习一下,为了方便以后学习HElib! make和cmake 写程序大体步骤为: 1 ...
- MSSQL·查询T-SQL语句执行时间的三种方法
阅文时长 | 0.23分钟 字数统计 | 420.8字符 主要内容 | 1.引言&背景 2.自定义时间变量求差法 3.MSSQL内置方法 4.MSSQL选项开启时间统计 5.声明与参考资料 『 ...
- gdb 调试,当发现程序退出,需要定位程序退出位置时。
在进入gdb后设置,执行下面语句 handle SIGSEGV nopass handle SIGSEGV nostop 执行程序,触发问题,gdb侧执行c 故障出现时,执行bt,显示堆栈调用.
- 【转载】深入理解OpenStack-手动制作qcow2镜像
深入理解OpenStack-手动制作qcow2镜像 2018-01-18 手动制作镜像 1 官方虽提供qcow2系统镜像,但对于有需求的企业来说,还是定制镜像比较靠谱,下面就手动定制一个镜像 给虚拟机 ...
- 马哥Linux SysAdmin学习笔记(一)
Linux入门 Linux系统管理: 磁盘管理,文件系统管理 RAID基础原理,LVM2 网络管理:TCP/IP协议,Linux网络属性配置 程序包管理:rpm,yum 进程管理:htop,glanc ...
- ELK学习实验020:ELK使用kafka缓存
首先安装一个kafka集群,但是zookeeper使用单节点,可以让kafka快速跑起来,后续再研究kafka和zokkeeper的集群 1 安装Kafka集群 下面是三个节点都要做 [root@no ...
- python基础之面向对象(二)(封装、继承、多态)
一.封装 (1)封装是面向对象的一大特点 (2)面向对象编程的第一步--将属性和方法封装到一个抽象的类当中 (3)外界使用类创建对象,然后让对象调用方法 (4)对象方法的细节都被封装在类的内部 1.案 ...