我的编程空间,编程开发者的网络收藏夹
学习永远不晚

dimp时报错,字符串截断

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

dimp时报错,字符串截断

现象描述

达梦也有自己的逻辑备份工具(dexp 、dimp )用法和Oracle 类似,详细用法可以参考官方手册dexp&dimp.pdf

但是,我们有时候在进行dimp 时,会碰到字符串截断的问题。

碰到这种问题,我们怎么解决呢?

受限我们一定要非常明确,字符串截断这个报错,一定就只是精度不足,这里只是针对两种可能的情况的,描述下该问题。

只需要考虑两个问题:

Ø   是否表结构不一致,就是dexp 的表,是varchar (500 ),我们导入的表只是varchar (400

这种情况少,因为有时候我们经常是全用户新建导入,表结构也是源端带入过来的。

Ø   Dexp 源端的数据库实例字符集,是否和dimp 目的端数据库实例的字符集一致

这个是我们可能没有注意的问题。

处理方法

处理方法一:核查表结构是否一致

是否表结构不一致,就是dexp 的表,是varchar (500 ),我们导入的表只是varchar (400 )

这个问题好理解,就是字面意思,我们只需要把目的表的精度改成和源端一致,重新清空目的表,再导入即可。

处理方法二:核查数据库实例字符集

我们碰到这个问题的时候,实际上就是我们从UTF-8 的数据库实例上dexp 出来的数据库,往GB18030 的数据库实例上dimp ,才会碰到这个问题。

默认情况下,达梦数据库实例的varchar 字段的精度,表示的含义是字节,而对于汉字而言,在UTF-8 编码下的字节占用,是比GB18030 编码下的字节占用,要大。

所以反过来说,对于dexp&dimp 搬过来的表结构,都是一致的情况下,比如:都是varchar (400 ),可以存放的汉子个数,是不一样的。

备注:

-           对于同一项目内的数据库实例、可能需要互相进行数据传递的实例之间,务必把数据库底层参数(含字符集)规划并切实设置成一致!

-           同一项目内的数据库实例,请务必保持一致、非同一项目内,有数据传递需求,但是相关性不搞,且确实不能保持一致的字符集,可以通过手动放大目的端数据库实例上的varchar 字段精度。为什么可以这样处理,方法二中已经说明。

这是一个把数据库实例中目标表中的所有varchar 字段,精度放大一倍的脚本(当成SQL 执行):通过控制游标查出来的表即可。

declare

begin

for rs in(

select sch.name sch,tab.name tab,col.name   col,COl.length$ len from sysobjects sch,sysobjects tab ,syscolumns col

where sch.id=tab.schid and   sch.name||'.'||tab.name in (

'USER.TABUTKMONITOR',

'USER.TABUTHORIZATIONRISKLOG',

'USER.TABUSTOMER',

'USER.TABARD',

'USER.TABOSSREPORT',

'USER.TABUDGETENTITYCARDS',

'USER.TABRANSACTIONLOG',

'USER.TABCCOUNT',

'USER.TABSTOMERINFO',

'USER.TABRANSACTIONLOG',

'USER.TABUTHORIZATIONRISKLOG'

)

and tab.id=col.id and col.TYPE$ in   ('VARCHAR','VARCHAR2') ) loop

declare

begin

 execute immediate 'alter table   "'||rs.sch||'"."'||rs.tab||'" modify '||rs.col||'   varchar('||rs.len*2||');';

exception when others then

 print(sqlerrm);

end;

end loop;

end;

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

dimp时报错,字符串截断

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

shell字符串截取报错:Bad substitution怎么办

小编给大家分享一下shell字符串截取报错:Bad substitution怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!问题重现:当前系统Ubuntu16
2023-06-09

shell字符串截取报错:Bad substitution的解决

问题重现: 当前系统Ubuntu16 shell进行字符串截取 运行 ${GIT_COMMIT:0:6}报错:/tmp/jenkins7505855461406722507.sh: 4: /tmp/jenkins75058554614067
2022-06-04

MySQL解决Navicat设置默认字符串时的报错问题

目录简介问题复现原因分析解决方案简介说明本文介绍用Navicat添加字段(字符串类型)并设置默认值时的报错问题。问题描述在java开发过程中,经常会遇到给已有的表添加字段的场景。在插入新字段的时候,表里边可能已经有很多数据了,这时
2022-06-16

java判断字符串是否是时间的方法介绍

java判断字符串是否是时间的方法:(推荐:java视频教程)引入jar包:import org.apache.commons.lang3.time.DateUtils;java判断是否是时间代码: private static String[] par
java判断字符串是否是时间的方法介绍
2015-10-25

php如何判断一个字符串是否是时间戳

这篇文章主要介绍了php如何判断一个字符串是否是时间戳的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php如何判断一个字符串是否是时间戳文章都会有所收获,下面我们一起来看看吧。什么是时间戳?时间戳是指从格林威治
2023-07-05

oracle中字符串长度报错如何解决

在Oracle中,可以使用LENGTH函数来获取字符串的长度。如果遇到报错,可能是因为参数不正确或者数据库连接有问题。要解决这个问题,可以尝试以下方法:确保正确使用LENGTH函数,并且参数是一个字符串或者列名。检查字符串的编码格式,确
oracle中字符串长度报错如何解决
2024-04-22

python使用json将字符串转字典报错的解决

这篇文章主要介绍了python使用json将字符串转字典报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-08

解决Python中字符串和数字拼接报错的方法

前言 众所周知Python不像JS或者PHP这种弱类型语言里在字符串连接时会自动转换类型,如果直接将字符串和数字拼接会直接报错。 如以下的代码:# coding=utf8 str = '你的分数是:' num = 82 text = str
2022-06-04

Oracle数据库查询时报错: ORA-29275:部分多字节字符

1、如下图查询此条流水的相关信息时,此条流水中的字符串(有汉字的)有可能会出问题,例如乱码,非法中文字符等 2、此时将要查询流水中,有可能出现非法中文字符的用to_nchar("字段")查询,如下图:
Oracle数据库查询时报错: ORA-29275:部分多字节字符
2016-06-20

编程热搜

目录