源oracle数据库是GBK字符集,目标库是UTF8字符集,现在需要将源库的一个表空间数据导入到目标库。我的解决方法有点繁琐,首先直接导出源库的表空间

expdp trmuser/trmpass schemas=trmuser DIRECTORY=ORACLEDMP dumpfile=trmpass-$(date +%Y%m%d).dmp;

  然后在目标库导入表空间

 impdp trmuser/trmpass remap_schema=trmuser:trmuser remap_tablespace=trm_data:trm_data DIRECTORY=ORACLEDMP dumpfile=trmpass-20190109.dmp table_exists_action=replace parallel=4 logfile=trmuser.log

  导入后查看错误日志trmuser.log,然后执行程序,生成源库所要扩字段的SQL语句。

  TableObject.java

package com.efounder.sdu.test;public class TableObject {// 表名String tableName;// 字段名String columnName;// 原先最大值Integer oldMaxSize;// 现最大值Integer maxSize;Integer lineNum;// 修改字段的sqlString sql;public Integer getLineNum() {return lineNum;}public void setLineNum(Integer lineNum) {this.lineNum = lineNum;}public String getSql() {return sql;}public void setSql(String sql) {this.sql = sql;}public String getTableName() {return tableName;}public void setTableName(String tableName) {this.tableName = tableName;}public String getColumnName() {return columnName;}public void setColumnName(String columnName) {this.columnName = columnName;}public Integer getMaxSize() {return maxSize;}public void setMaxSize(Integer maxSize) {this.maxSize = maxSize;}public Integer getOldMaxSize() {return oldMaxSize;}public void setOldMaxSize(Integer oldMaxSize) {this.oldMaxSize = oldMaxSize;}
}

  CWZTTest4.java(根据自己用户表空间信息进行修改)

package com.efounder.sdu.test;import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;/*** todo** @author wangxin* @version 2018/12/22 22:34*/
public class CWZTTest4 {public static String SPACE = " ";public static void main(String[] args) throws Exception {String format = "yyyy-MM-dd HHmm";SimpleDateFormat sdf = new SimpleDateFormat(format);Long time = System.currentTimeMillis();String timeSuffix = "————" + sdf.format(new Date(Long.valueOf(time)));String localFilePath = "D:\\ChangeColumnLengthSql\\";// CHANGE ME-1String logName = "trm_impdp_20181223";String logFileName = localFilePath + logName + ".log";String outputFileName = localFilePath + logName + timeSuffix + ".txt";// CHANGE ME-2String oldUsername = "trmuser";// CHANGE ME-3String newUsername = "trmuser";String oldTablespaceName = "trm_data";String newTablespaceName = "trm_data";String newDirectory = "trm_dir";System.out.println(outputFileName);analyseLog(logFileName, outputFileName, oldUsername, newUsername, oldTablespaceName, newTablespaceName, newDirectory);}private static void analyseLog(String logFileName, String outputFileName, String oldUsername, String newUsername, String oldTablespaceName, String newTablespaceName, String newDirectory) throws Exception {
//        String path = "F:\\gateway\\gateway_impdp_20181225.log";String path = logFileName;File file = new File(path);InputStreamReader reader = new InputStreamReader(new FileInputStream(file));BufferedReader br = new BufferedReader(reader);String line = "";line = br.readLine();Map<String, TableObject> map = new LinkedHashMap<>();while (line != null) {String tableNameLine = "";String columnAndSizeLine = "";if (line.indexOf("ORA-02374") >= 0) {tableNameLine = line;line = br.readLine();columnAndSizeLine = line;String tableName = tableNameLine.split("\"")[3];String[] columnSize = columnAndSizeLine.split("ORA-12899: value too large for column |[ (]|maximum: |[)]");String columnName = columnSize[1];String oldMaxSzieStr = columnSize[6];Integer maxSize = Integer.parseInt(oldMaxSzieStr) * 2;String sql = "";sql += "ALTER TABLE " + tableName + " MODIFY (" + columnName + " VARCHAR2(" + maxSize + "));\r\n";sql += "UPDATE SYS_OBJCOLS SET COL_LEN = '" + maxSize + "' WHERE OBJ_ID = '" + tableName + "' AND COL_ID ='" + columnName + "';\r\n";sql += "\r\n";TableObject tableObject = new TableObject();tableObject.setTableName(tableName);tableObject.setColumnName(columnName);tableObject.setMaxSize(maxSize);tableObject.setSql(sql);map.put(tableName + "-" + columnName, tableObject);}line = br.readLine();}File outputFile = new File(outputFileName);OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(outputFile));BufferedWriter bufferedWriter = new BufferedWriter(writer);for (TableObject to : map.values()) {bufferedWriter.write(to.getSql());}bufferedWriter.close();Set<String> set = map.keySet();StringBuilder sb = new StringBuilder();StringBuilder sb2 = new StringBuilder();List<String> tableList = new ArrayList<>();for (String s : set) {String table = s.split("-")[0];tableList.add(table);sb.append(table);sb.append(",");sb2.append(oldUsername + "." + table);sb2.append(",");}String sqlStr = sb.toString();sqlStr = sqlStr.substring(0, sqlStr.length() - 1);String sqlStr2 = sb2.toString();sqlStr2 = sqlStr2.substring(0, sqlStr2.length() - 1);String expdp = "expdp " + oldUsername + "/zjtest TABLES=" +sqlStr +SPACE +"DIRECTORY=ORACLEDMP" +SPACE +"dumpfile=" + newUsername + "_uat_expdp_tableadd.dmp" +SPACE +"logfile=" + newUsername + "_expdp_tableadd.log";System.out.println(expdp + "\r\n");String impdp = "impdp " + newUsername + "/pansoft2019 TABLES=" +sqlStr2 +SPACE +"remap_schema=" + oldUsername + ":" + newUsername +SPACE +"remap_tablespace=" + oldTablespaceName + ":" + newTablespaceName +SPACE +"DIRECTORY=" + newDirectory + "" +SPACE +"dumpfile=" + newUsername + "_uat_expdp_tableadd.dmp" +SPACE +"table_exists_action=replace" +SPACE +"logfile=" + newUsername + "_expdp_tableadd.log";System.out.println(impdp);}
}

  生成扩充字段SQL语句示例:

ALTER TABLE ZJ_JYMX MODIFY (F_FX VARCHAR2(4));
UPDATE SYS_OBJCOLS SET COL_LEN = '4' WHERE OBJ_ID = 'ZJ_JYMX' AND COL_ID ='F_FX';ALTER TABLE ZJ_JYMX MODIFY (F_DFDW VARCHAR2(60));
UPDATE SYS_OBJCOLS SET COL_LEN = '60' WHERE OBJ_ID = 'ZJ_JYMX' AND COL_ID ='F_DFDW';ALTER TABLE ZJ_NBCDYWXX MODIFY (F_DFDW VARCHAR2(60));
UPDATE SYS_OBJCOLS SET COL_LEN = '60' WHERE OBJ_ID = 'ZJ_NBCDYWXX' AND COL_ID ='F_DFDW';ALTER TABLE ZJ_DBXX MODIFY (F_YHMC VARCHAR2(60));
UPDATE SYS_OBJCOLS SET COL_LEN = '60' WHERE OBJ_ID = 'ZJ_DBXX' AND COL_ID ='F_YHMC';ALTER TABLE ZJ_DBYWXX MODIFY (F_YHMC VARCHAR2(60));
UPDATE SYS_OBJCOLS SET COL_LEN = '60' WHERE OBJ_ID = 'ZJ_DBYWXX' AND COL_ID ='F_YHMC';ALTER TABLE ZJ_HSZHZL MODIFY (F_FKZY VARCHAR2(60));
UPDATE SYS_OBJCOLS SET COL_LEN = '60' WHERE OBJ_ID = 'ZJ_HSZHZL' AND COL_ID ='F_FKZY';ALTER TABLE ZJ_NBCDFDLL MODIFY (F_SJDW VARCHAR2(60));
UPDATE SYS_OBJCOLS SET COL_LEN = '60' WHERE OBJ_ID = 'ZJ_NBCDFDLL' AND COL_ID ='F_SJDW';ALTER TABLE ZJ_NBDCZQ MODIFY (F_SJDW VARCHAR2(60));
UPDATE SYS_OBJCOLS SET COL_LEN = '60' WHERE OBJ_ID = 'ZJ_NBDCZQ' AND COL_ID ='F_SJDW';ALTER TABLE ZJ_PJSQXX MODIFY (F_CPRZH_YH VARCHAR2(60));
UPDATE SYS_OBJCOLS SET COL_LEN = '60' WHERE OBJ_ID = 'ZJ_PJSQXX' AND COL_ID ='F_CPRZH_YH';ALTER TABLE ZJ_SXFL MODIFY (F_SXHT VARCHAR2(60));
UPDATE SYS_OBJCOLS SET COL_LEN = '60' WHERE OBJ_ID = 'ZJ_SXFL' AND COL_ID ='F_SXHT';ALTER TABLE ZJ_SXHTFS MODIFY (F_HTBH VARCHAR2(60));
UPDATE SYS_OBJCOLS SET COL_LEN = '60' WHERE OBJ_ID = 'ZJ_SXHTFS' AND COL_ID ='F_HTBH';ALTER TABLE ZJ_SXHTPZ MODIFY (F_HTBH VARCHAR2(60));
UPDATE SYS_OBJCOLS SET COL_LEN = '60' WHERE OBJ_ID = 'ZJ_SXHTPZ' AND COL_ID ='F_HTBH';ALTER TABLE ZJ_SXYWXX MODIFY (F_DWMC VARCHAR2(60));
UPDATE SYS_OBJCOLS SET COL_LEN = '60' WHERE OBJ_ID = 'ZJ_SXYWXX' AND COL_ID ='F_DWMC';ALTER TABLE ZJ_SXYWXX MODIFY (F_JGMC VARCHAR2(120));
UPDATE SYS_OBJCOLS SET COL_LEN = '120' WHERE OBJ_ID = 'ZJ_SXYWXX' AND COL_ID ='F_JGMC';ALTER TABLE ZJ_TZHEAD MODIFY (F_XMMC VARCHAR2(100));
UPDATE SYS_OBJCOLS SET COL_LEN = '100' WHERE OBJ_ID = 'ZJ_TZHEAD' AND COL_ID ='F_XMMC';ALTER TABLE ZJ_BHSQXX MODIFY (F_KZYHFHMC VARCHAR2(60));
UPDATE SYS_OBJCOLS SET COL_LEN = '60' WHERE OBJ_ID = 'ZJ_BHSQXX' AND COL_ID ='F_KZYHFHMC';ALTER TABLE ZJ_BHSQXX MODIFY (F_SYRMC VARCHAR2(80));
UPDATE SYS_OBJCOLS SET COL_LEN = '80' WHERE OBJ_ID = 'ZJ_BHSQXX' AND COL_ID ='F_SYRMC';ALTER TABLE ZJ_FKZLB MODIFY (F_FK_ZHMC VARCHAR2(60));
UPDATE SYS_OBJCOLS SET COL_LEN = '60' WHERE OBJ_ID = 'ZJ_FKZLB' AND COL_ID ='F_FK_ZHMC';ALTER TABLE BIZ_MONITOR MODIFY (F_LXMC VARCHAR2(120));
UPDATE SYS_OBJCOLS SET COL_LEN = '120' WHERE OBJ_ID = 'BIZ_MONITOR' AND COL_ID ='F_LXMC';ALTER TABLE MDM_ITEM MODIFY (F_CHAR6 VARCHAR2(60));
UPDATE SYS_OBJCOLS SET COL_LEN = '60' WHERE OBJ_ID = 'MDM_ITEM' AND COL_ID ='F_CHAR6';ALTER TABLE ZJ_BHYWXX MODIFY (F_SQSY VARCHAR2(2000));
UPDATE SYS_OBJCOLS SET COL_LEN = '2000' WHERE OBJ_ID = 'ZJ_BHYWXX' AND COL_ID ='F_SQSY';ALTER TABLE ZJ_JNJSXX MODIFY (F_FK_JGMC VARCHAR2(120));
UPDATE SYS_OBJCOLS SET COL_LEN = '120' WHERE OBJ_ID = 'ZJ_JNJSXX' AND COL_ID ='F_FK_JGMC';ALTER TABLE ZJ_NBCDXX MODIFY (F_SJDW VARCHAR2(60));
UPDATE SYS_OBJCOLS SET COL_LEN = '60' WHERE OBJ_ID = 'ZJ_NBCDXX' AND COL_ID ='F_SJDW';

  然后在源库执行SQL语句进行扩充字段

  sqlplus trmuser/trmpass@10.20.31.201:1521/orcl

  在源库扩充完字段后重新导出数据,然后我选择最直接的方法目标库直接重建表空间然后重新导入,字符不一致问题解决。

转载于:https://www.cnblogs.com/zhangmingcheng/p/10247937.html

expdp 字符集从ZHS16GBK到AL32UTF8相关推荐

  1. oracle utf16转utf8,oracle字符集转换(ZHS16GBK转AL32UTF8)

    本想将windows 下oracle表空间传输到RAC linux上 但windows oracle字符集是ZHS16GBK, 而linux oracle 字符信是AL32UTF8 于时先将windo ...

  2. zhs16gbk对应mysql_字符集为ZHS16GBK的数据库导入到字符集为AL32UTF8的数据库

    相信大家都对字符集有相当的了解了,废话就不多说了!直接步入正题:这里主要是测试含有 汉字的数据从ZHS16GBK的数据库导入到字符集为AL32UTF8 数据库. 如有我没想到的其他情况,请大家提建议, ...

  3. plsql数据库异常---plsql 登录后,提示数据库字符集(AL32UTF8)和客户端字符集(ZHS16GBK)不一致

      plsql数据库异常---plsql 登录后,提示数据库字符集(AL32UTF8)和客户端字符集(ZHS16GBK)不一致 . plsql 登录后提示: Database character se ...

  4. oracle导出字符集ZHS16GBK,ORACLE11g数据库字符集从ZHS16GBK转为UTF8

    数据库字符集直接查看方法: select * fromnls_database_parameters; select * fromv$nls_parameters; 找到 NLS_LANGUAGE_N ...

  5. Oracle 修改字符集 为ZHS16GBK

    Oracle 修改字符集 为ZHS16GBK 相信很多人都会遇到安装oracle后字符集编码不一致而导致的各种问题,现在讲下如何修改字符集格式. 一.oracle server 端 字符集查询 sel ...

  6. 【Linux Centos6/7 Oracle11g 修改Oracle字符集为ZHS16GBK(附: 其它字符集查询命令)】

    Linux Centos6/7 Oracle11g 修改Oracle字符集为ZHS16GBK(附: 其它字符集查询命令) 1.登录到系统,切换到oracle用户权限 2.查询Oracle Sever端 ...

  7. USASCII7字符集导入ZHS16GBK字符集

    oracle旧数据迁移,两个库的字符集不一样,源库是USASCII7目标库是ZHS16GBK,上网找了方法,说二进制方式修改dmp文件的第2个字节内容改为03,第3个字节内容改为54,第49字节内容改 ...

  8. zhs16gbk mysql_Oracle 11g 修改字符集 为 ZHS16GBK

    方法一:sqlplus ldquo;用户/密码 as sysdbardquo; sqlplus ldquo;sys/sys as sysdbardquo; 方法二:sqlplus/nolog SQLg ...

  9. US7ASCII字符集转换为ZHS16GBK

    我们知道在导出文件中,记录着导出使用的字符集id,通过查看导出文件头的第2.3个字节,我们可以找到16进制表示的字符集ID,在Windows上, 我们可以使用UltraEdit等工具打开dmp文件,查 ...

  10. plsql数据库异常---plsql 登录后,提示数据库字符集(AL32UTF8)和客户端字符集(ZHS16GBK)不一致 .

    plsql 登录后提示: Database character set (AL32UTF8) and Client character set (ZHS16GBK) are different. Ch ...

最新文章

  1. 一个带有误差棒的另一个箱图
  2. 智能车竞赛技术报告 | 节能信标组 - 宿迁学院 - MAkkaPakka
  3. K-Means原理解析
  4. 随机生成图像 与 图像的转维(reshape)
  5. 如何统一集体的所有人的yum环境(以阿里云为例)
  6. POJ 2386 Lake Counting DFS水水
  7. 阿里云喻义:十年牧码,从码农走向工程师的进化之路
  8. Scrapy爬取美女图片续集 (原创)
  9. [elixir! #0023] 引擎盖下, `IO.puts` 如何运作
  10. 3-java学习笔记
  11. 题目66:矩阵中的路径
  12. 阶段3 1.Mybatis_12.Mybatis注解开发_3 mybatis注解开发保存和更新功能
  13. 不插字段,直接利用OracleSpatial计算
  14. 石油化工设备维护检修规程_【干货】罗茨鼓风机维护检修规程
  15. 2022年山东省安全员A证特种作业证考试题库模拟考试平台操作
  16. android将两张图片合并为一张图片
  17. 个人博客添加网易云音乐Flash插件
  18. 游戏开发之Unity学习(五)——鼠标打飞碟(Hit UFO)
  19. dd-wrt 去广告_如何在DD-WRT上使用Pixelserv删除广告
  20. 新生入学时遇到声称可以帮助代办入学手续进而代收学费的“老师”等,不能采取以下哪种方式应对?()

热门文章

  1. mysql xplugin_MySQL 5.7.12版本发布,更重要的是X Plugin也来了
  2. 华为模拟器ensp与真实机器连接使用的配置内容二
  3. JS连接数据库(需配置odbc)
  4. C# list删除 另外list里面的元素_python学习笔记第三课:List(列表)
  5. 如何在linux下运行php脚本,如何通过Linux命令行使用和运行PHP脚本
  6. 词云python灿烈,Python jieba分词、词云、文件读取、函数调用、匿名函数
  7. vs 通过命令参数 定义宏_YRC1000 宏程序命令(四十)
  8. 2018最新hadoop服务器环境配置教程(附详细步骤)
  9. 在项目中使用HTMLDom的事件冒泡机制
  10. jstack简单使用,定位死循环、线程阻塞、死锁等问题