欢迎来到天天文库
浏览记录
ID:24271726
大小:54.00 KB
页数:4页
时间:2018-11-13
《oracle的imp命令导入备份数据》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Oracle的imp命令导入备份数据笔者在做项目过程中遇到以下问题,在客户提供的数据库备份文件需要导入到数据库中,以便使用,数据库为Oracle9.1.1,安装在P-00016:不支持要求的字符集转换(从类型830到852)IMP-00000:未成功终止导入使用2进制文件编辑工具,如uedit32。打开导出的dmp文件,获取2、3字节的内容,如0001,先把它转换为10进制数,为1,使用函数NLS_CHARSET_NAME即可获得该字符集:SQL>selectnls_charset_name(1)fromdual;NLS_CHARSET_NAME(1)-
2、------------------US7ASCII可以知道该dmp文件的字符集为US7ASCII,如果需要把该dmp文件的字符集换成ZHS16GBK,则需要用NLS_CHARSET_ID获取该字符集的编号:笔者遇到的问题为830到852类型转换错误,进入Oracle的sqlplus,进行以下查询:SQL>selectnls_charset_name(830)fromdual;NLS_CHARSET_NA--------------JA16EUCSQL>selectnls_charset_name(852)fromdual;NLS_CHARSET_
3、NAME----------------ZHS16GBKSQL>SQL>selectnls_charset_id('zhs16gbk')fromdual;NLS_CHARSET_ID('ZHS16GBK')--------------------------852把852换成16进制数,为354,把2、3字节的0001换成0354,即完成了把该dmp文件字符集从us7ascii到zhs16gbk的转化,这样,再把该dmp文件导入到zhs16gbk字符集的数据库就可以了。影响oracle数据库字符集最重要的参数
4、是NLS_LANG参数。它的格式如下:NLS_LANG=language_territory.charset.它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。其中:Language指定服务器消息的语言,territory指定服务器的日期和数字格式,charset指定字符集。如:AMERICAN_AMERICA.ZHS16GBK.可以使用以下命令获取字符集名称:SQL>selectuserenv('language')fromdual;USERENV('LANGUAGE')----------
5、---------------------------------------------------------------------SIMPLIFIEDCHINESE_CHINA.UTF8SQL>用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:SQL>selectnls_charset_name(to_number(&
6、#039;0354','xxxx'))fromdual;NLS_CHARSET_NAME(TO_NUMBER('0354','XXXX'))--------------------------------------------------------------------------------ZHS16GBKSQL>03033e45.....其中的033e就是字符集对应的值。上文说过,dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文件的第2第3字节的内容就可以‘骗’
7、过oracle的检查。这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我们常用的一些字符集,如US7ASCII,p文件,所以影响不大。 具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文件的第2和第3个字节。比如想将dmp文件的字符集改为ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码: SQL>selectto_char(nls_charset_id('ZHS16GBK'),'xxxx')fromdual; 0354 然后将
8、dmp文件的2、3字节修改为0354即
此文档下载收益归作者所有