急!字符集不同的两个oracle 8i数据库之间怎样用exp和imp进行数据导出与导入?高分相送!!! 你可以导出数据库 a的dmp文件,然后用二进制编辑器打开该dmp文件,修改dmp文件中的字符集,就在文件头可以找到 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.ncn.cn/oracle/admin/nls_convert1.htmhttp://www2.ccw.com.cn/tips/9906/062804_04.asp set nls_lang = '你导出的字符集'然后导入 from csdn.net使用一点点技巧,就可以使导出/导入在不同的字符集的数据库上转换数据。这里需要一个2进制文件编辑工具即可,如uedit32。用编辑方式打开导出的dmp文件,获取2、3字节的内容,如00 01,先把它转换为10进制数,为1,使用函数NLS_CHARSET_NAME即可获得该字符集:(ultraedit 打开几百M到上G的文件很慢,我试了winHex,哪个速度啊,闪电!)SQL> select nls_charset_name(1) from dual;NLS_CHARSET_NAME(1)-------------------US7ASCII可以知道该dmp文件的字符集为US7ASCII,如果需要把该dmp文件的字符集换成ZHS16GBK,则需要用NLS_CHARSET_ID获取该字符集的编号:SQL> select nls_charset_id('zhs16gbk') from dual;NLS_CHARSET_ID('ZHS16GBK')-------------------------- 852把852换成16进制数,为354,把2、3字节的00 01换成03 54,即完成了把该dmp文件字符集从us7ascii到zhs16gbk的转化,这样,再把该dmp文件导入到zhs16gbk字符集的数据库就可以了。(注意,十进制数与十六进制之间的转换,想明白其中的道理)SQL> select nls_charset_id('zhs16cgb231280') from dual;NLS_CHARSET_ID('ZHS16CGB231280')-------------------------------- 850字符集 代码(十进制) 对应的dmp文件(2、3字节/二进制)ZHS16CGB231280 850 03 52ZHS16GBK 852 03 54以前一直用oracle8.0.5 , 安装好 oracle8.1.6 后发现SQL*Plus可以用,SQL*WorkSheet 总出现乱码,改了字符集也不对 --------------------------------------------------------------- 解决办法: 在$ORACLE_HOME\sysman\config目录下有一个配置文件名为dbappscfg.properties,找到这样一项,#SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 去掉注释符#,同时将其修改为SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 对于Windows操作系统,还需要修改一项,在文件中找到# SQLPLUS_SYSTEMROOT=c:\\WINNT40,去掉注释符,将其修改为你所在机器的操作系统主目录。如操作系统的主目录在D盘的Winnt下,则将其修改为 SQLPLUS_SYSTEMROOT=d:\\WINNT。 修改完成后,保存文件,退出编辑。重新连接SQL PLUS Worksheet,OK! --------------------------------------------------------------- 对于Oracle Enterprise Manager中的所有工具,有一个配置文件名为dbappscfg.properties,修改该文件即可解决上述问题。这个文件的位置在$ORACLE_HOME\sysman\config目录下,用任何的文本编辑器打开该文件,在这个文件里面,找到这样一项, # SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 去掉注释符#,同时将其修改为SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK。 对于Windows操作系统,还需要修改一项,在文件中找到# SQLPLUS_SYSTEMROOT=c:\\WINNT40,去掉注释符,将其修改为你所在机器的操作系统主目录。如操作系统的主目录在D盘的Winnt下,则将其修改为 SQLPLUS_SYSTEMROOT=d:\\WINNT。 对于后面一项的修改只对Windows操作系统进行,对UNIX操作系统则不需要。如果在Windows操作系统中不修改该项,在Oracle Enterprise Manager中,连接系统时,会提示如下的错误: ORA-12560 TNS:protocol adapter error 或者 ORA-12545 Connect failed because target host or object does not exist 修改完成后,保存文件,退出编辑。重新连接SQL PLUS Worksheet,字符集乱码问题得到解决,显示正确的简体中文字符集。 我处理此类就是:两个oracle都导出一个dmp文件,然后用二进制编辑器打开,比较第一行,从第五个开始比较,直到第八个字符,把这个4对字符串设置成一样即可,也就是说:二进制文件中第一行从第五对字符到第八队字符,这中间的四对字符就代表的是oracle字符集信息 alter profile 变量替换问题 Oracle中查询结果定时导出到EXCEl 表数据更新问题 求助!关于Informix与oracle数据库共用的SQL语句(查询第一条记录) oracle如何填充(insert into)嵌套表(nested table)? 谁知道Linux下裸设备安装Oracle11g的具体方法? SQL group by 返回值问题 华为的一条数据库查询优化笔试题(转) 倒在了一道小查询问题面前。 如何删除临时表 上传文件和下载文件......(高手快来) 多张表的导出~
http://www2.ccw.com.cn/tips/9906/062804_04.asp
然后导入
使用一点点技巧,就可以使导出/导入在不同的字符集的数据库上转换数据。这里需要一个2进制文件编辑工具即可,如uedit32。用编辑方式打开导出的dmp文件,获取2、3字节的内容,如00 01,先把它转换为10进制数,为1,使用函数NLS_CHARSET_NAME即可获得该字符集:(ultraedit 打开几百M到上G的文件很慢,我试了winHex,哪个速度啊,闪电!)
SQL> select nls_charset_name(1) from dual;
NLS_CHARSET_NAME(1)
-------------------
US7ASCII
可以知道该dmp文件的字符集为US7ASCII,如果需要把该dmp文件的字符集换成ZHS16GBK,则需要用NLS_CHARSET_ID获取该字符集的编号:
SQL> select nls_charset_id('zhs16gbk') from dual;
NLS_CHARSET_ID('ZHS16GBK')
--------------------------
852
把852换成16进制数,为354,把2、3字节的00 01换成03 54,即完成了把该dmp文件字符集从us7ascii到zhs16gbk的转化,这样,再把该dmp文件导入到zhs16gbk字符集的数据库就可以了。(注意,十进制数与十六进制之间的转换,想明白其中的道理)SQL> select nls_charset_id('zhs16cgb231280') from dual;NLS_CHARSET_ID('ZHS16CGB231280')
--------------------------------
850字符集 代码(十进制) 对应的dmp文件(2、3字节/二进制)
ZHS16CGB231280 850 03 52
ZHS16GBK 852 03 54
以前一直用oracle8.0.5 , 安装好 oracle8.1.6 后发现SQL*Plus可以用,SQL*WorkSheet 总出现乱码,改了字符集也不对
---------------------------------------------------------------
解决办法:
在$ORACLE_HOME\sysman\config目录下有一个配置文件名为dbappscfg.properties,找到这样一项,#SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
去掉注释符#,同时将其修改为SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
对于Windows操作系统,还需要修改一项,在文件中找到# SQLPLUS_SYSTEMROOT=c:\\WINNT40,去掉注释符,将其修改为你所在机器的操作系统主目录。如操作系统的主目录在D盘的Winnt下,则将其修改为 SQLPLUS_SYSTEMROOT=d:\\WINNT。
修改完成后,保存文件,退出编辑。重新连接SQL PLUS Worksheet,OK!
---------------------------------------------------------------
对于Oracle Enterprise Manager中的所有工具,有一个配置文件名为dbappscfg.properties,修改该文件即可解决上述问题。这个文件的位置在$ORACLE_HOME\sysman\config目录下,用任何的文本编辑器打开该文件,在这个文件里面,找到这样一项,
# SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
去掉注释符#,同时将其修改为SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK。
对于Windows操作系统,还需要修改一项,在文件中找到# SQLPLUS_SYSTEMROOT=c:\\WINNT40,去掉注释符,将其修改为你所在机器的操作系统主目录。如操作系统的主目录在D盘的Winnt下,则将其修改为 SQLPLUS_SYSTEMROOT=d:\\WINNT。
对于后面一项的修改只对Windows操作系统进行,对UNIX操作系统则不需要。如果在Windows操作系统中不修改该项,在Oracle Enterprise Manager中,连接系统时,会提示如下的错误:
ORA-12560 TNS:protocol adapter error
或者
ORA-12545 Connect failed because target host or object does not exist
修改完成后,保存文件,退出编辑。重新连接SQL PLUS Worksheet,字符集乱码问题得到解决,显示正确的简体中文字符集。
也就是说:二进制文件中第一行从第五对字符到第八队字符,这中间的四对字符就代表的是oracle字符集信息