数据库字符集zhs16cgb231280,导出时用us7ascii导出,如何再导回去!

logpushpin 2003-08-04 10:44:31
oracle7.3.4数据库, 字符集是zhs16cgb231280, 但是在备份的时候,却用us7ascii导出. 结果:无论将导出的dmp导入到zhs16cgb231280的数据库中或者是us7ascii的数据库中,导入后中文显示的都是乱码! 如何解决? 请高手指教,谢谢!!
...全文
113 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
BlueskyWide 2003-08-04
  • 打赏
  • 举报
回复
在客户端的注册表HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE->HOME0中,如无系统变量NLS_LANG,则“新建”->“字符串”,重命名为“NLS_LANG”,并赋值为zhs16cgb231280,再导出时不需要重启Oracle。
logpushpin 2003-08-04
  • 打赏
  • 举报
回复
感谢,不过我的那个dmp是在数据库字符集是zhs16cgb231280, 但是导出却用的us7ascii导出的,显然这样做dmp就有问题
kerisyml 2003-08-04
  • 打赏
  • 举报
回复
由于业务原因,需要将一英文字符集(American_America.WE8ISO8859P1)的数据库DMP文件导入到一中文字符集(SIMPLIFIED CHINESE_CHINA.ZHS16GBK)的数据库中。由于字符集的料,终于解决了问题不同,需要将中文字符集的数据库环境改变成英文字符集。遇到很多的麻烦,通过在网上查找资。在这个过程中,发现网友们也有同样的问题,为了,让大家在以后能够顺利的完成此类工作,现将把我导入成功的过程写出来,与大家共享。



一、系统环境:



导出环境:



主机:Compaq 小型机

操作系统:Unix

数据库:oracle8.1.7{英文字符集(American_America.WE8ISO8859P1)}



导入环境:



主机:普通Pc 机

主频:PIII750

内存:192M

操作系统:Windows 2000 server

数据库:Oracle8.1.7中文字符集(SIMPLIFIED CHINESE_CHINA.ZHS16GBK)



注:导出过程省略



二、导入过程



1、 将win2000系统中的oracle注册表



[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE]中的[NLS_LANG]键值

“SIMPLIFIED CHINESE_CHINA.ZHS16GBK”改成

“American_America.WE8ISO8859P1”



2、 用system用户的身份,在Sql-plus 下执行以下语句:



update sys.props$ set value$='WE8ISO8859P1' where name='NLS_CHARACTERSET';



update sys.props$ set value$='WE8ISO8859P1' where name='NLS_NCHAR_CHARACTERSET';



commit;



3、 重新启动oracle



4、 开始导入数据库



userid = 用户名/密码@连结串

buffer = 60000

log = c:\dmp.log

file = c:\导入数据文件名称.dmp

fromuser = 用户名

touser = 用户名



这里要注意,要确保导入的表空间和用户已经建立并与导出文件一至,还要确认用户是否拥有dba的权限,否则有可能会影响导入数据的完整。



5、 检查导入效果,在目前环境下,测试数据是否正确,是否有乱码,是否有未成功导入的表和其他触发器、过程和函数等信息。确认导入没有问题后,进入到下一步。

6、 将win2000下oracle字符集环境恢复成中文字符集。

[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE]中的[NLS_LANG]键值

“American_America.WE8ISO8859P1” 改回

“SIMPLIFIED CHINESE_CHINA.ZHS16GBK”

7、 用system用户的身份,在Sql-plus 下执行以下语句:



update sys.props$ set value$=' ZHS16GBK ' where name='NLS_CHARACTERSET';



update sys.props$ set value$=' ZHS16GBK ' where name='NLS_NCHAR_CHARACTERSET';



commit;



8、 重新启动数据库。



检查你的数据库中的数据,如果没有乱码,而且你的程序能够在这个环境下正常运行,那么恭喜你,你也成功了!!
LGQDUCKY 2003-08-04
  • 打赏
  • 举报
回复
你的操作系统是98的或2000话,
就得修改两个地方,修改数据库字符级和修改注册表字符信息。
数据库字符级是修改SYS.PROPS$注册表是修改
HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE->HOME0中NLS_LANG,
把他修改成你备份文件里的字符级
gladness 2003-08-04
  • 打赏
  • 举报
回复
打开一个cmd窗口
set NLS_LANG=american_america.us7ascii
在此窗口中接着运行imp

看看行不行

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧