expdp 字符集从ZHS16GBK到AL32UTF8
源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_ac
tion=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;
// 修改字段的sql
String 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-1
String logName = "trm_impdp_20181223";
String logFileName = localFilePath + logName + ".log";
String outputFileName = localFilePath + logName + timeSuffix + ".txt"; // CHANGE ME-2
String oldUsername = "trmuser";
// CHANGE ME-3
String 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
在源库扩充完字段后重新导出数据,然后我选择最直接的方法目标库直接重建表空间然后重新导入,字符不一致问题解决。
expdp 字符集从ZHS16GBK到AL32UTF8的更多相关文章
- plsql 登录后,提示数据库字符集(AL32UTF8)和客户端字符集(ZHS16GBK)不一致
plsql 登录后,提示数据库字符集(AL32UTF8)和客户端字符集(ZHS16GBK)不一致 (2014-07-25 18:40:34)转载▼ 标签: it 分类: Database Databa ...
- Win10 PLSQL 登录后,提示数据库字符集(AL32UTF8)和客户端字符集(ZHS16GBK)不一致
plsql 登录后提示: Database character set (AL32UTF8) and Client character set (ZHS16GBK) are different.Cha ...
- plsql数据库异常---plsql 登录后,提示数据库字符集(AL32UTF8)和客户端字符集(ZHS16GBK)不一致
今天遇到这个问题网上搜了一下答案找到了 转贴 http://blog.csdn.net/lidew521/article/details/8546155 plsql 登录后提示: Database c ...
- oracle更改字符集为zhs16GBK
PDBalter pluggable database PDBANBOB open; alter session set container=pdbanbob; ALTER SYSTEM ENABLE ...
- Oracle 11g 修改字符集 为 ZHS16GBK
方法一:sqlplus “用户/密码 as sysdba” sqlplus “sys/sys as sysdba” 方法二:sqlplus/nolog SQL> conn /as sysdba ...
- oracle 修改字符集 为ZHS16GBK
一.oracle server 端 字符集查询 select userenv('language') from dual 其中NLS_CHARACTERSET 为server端字符集 NLS_LANG ...
- 修改Oracle字符集为 ZHS16GBK
SQL*Plus: Release 11.2.0.1.0 Production on Wed Aug 10 13:12:48 2016 Copyright (c) 1982, 2009, Oracle ...
- Linux下修改Oracle数据库字符集命令
常见情形:从服务器备份Oracle数据库后再到本地机器上还原Oracle数据库的时候经常会碰见数据库字符编码不一致的情况,可以用以下命令来修改本地的Oracle数据库字符编码,然后顺利还原Oracle ...
- Oracle 字符集常见字符集及解决方案
Oracle 字符集常见字符集及解决方案 优先级别:alter session>环境变量>注册表>参数文件 一.查看字符集: 1.查询服务端字符集: select userenv(' ...
随机推荐
- JS 的加密库简介
作为前端,数据提交到后台之前,重要的数据要进行加密一下,虽然已经有 https 等技术,但是增加一道前端的加密还是相对更安全的.虽然,前端的加密很容破解,但是有总比没有强. 尤其是涉及到用户名和密码, ...
- mysql插入报主键冲突,解决方法主键索引重新排序
1.备份表结构 create table table_bak like table_name; 2.备份表数据 insert into table_bak select * from table_na ...
- 基于jQuery可悬停控制图片轮播代码
基于jQuery可悬停控制图片轮播代码.这是一款可悬停切换全屏轮播jQuery幻灯片.效果图如下: 在线预览 源码下载 实现的代码: <!-- 轮播广告 --> <div id= ...
- IMAP 读取含有附件邮件超慢问题
添加以下配置: Properties props = new Properties(); props.setProperty("mail.imap.partialfetch", & ...
- HTTP 06 用户认证
SSL 客户端认证具有高度的安全等级, 但是因为导入及维持费用等问题, 还未普及. 认证的方式有很多种, 多半是 基于表单的认证(即用户名/密码的方式) Session 管理及 Cookie 应用 基 ...
- 微信小程序——购物车结算
项目需要做个购物车结算功能,先分析需求: 1.全选,反选的功能.当选中的个数 = 购物车的数量时,勾选全选按钮,反之则取消选中全选按钮: 2.改变选中状态时,计算总价和总数量: 3.单个产品的数量加减 ...
- minicom for Mac 配置
安装:brew install minicom 配置: 串口是:dev/tty.usbserial minicons -s 配置一下: 流控要关掉,不然输入不了
- Android的Base64的坑
Base64.encodeToString加密后一直和Apache的对不上,多了换行符,最后使用了NO_WRAP就好了 Base64.encodeToString(src, Base64.URL_SA ...
- 九、Sql Server 基础培训《进度9-复杂查询练习》(实际操作)
知识点: 复杂查询1:统计全校有多少个男生.有多少个女生? 写法1(分组): select sex as 性别,count(*) as 人数 from student group by sex 写法2 ...
- 3D Object Classification With Point Convolution —— 点云卷积网络
今天刚刚得到消息,之前投给IROS 2017的文章收录了.很久很久没有写过博客,今天正好借这个机会来谈谈点云卷积网络的一些细节. 1.点云与三维表达 三维数据后者说空间数据有很多种表达方式,比如:RG ...