需要一个 2 进制文件编辑工具即可,如 uedit32。用编辑方式打开导出的 dmp 文件,获
取 2、3 字节的内容,如 00 01,先把它转换为 10 进制数,为 1,使用函数
NLS_CHARSET_NAME 即可获得该字符集:
SQL> select nls_charset_name(1) fromdual;
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
字符集的数据库就可以了。
2. 版本问题
Exp/Imp 很多时候,可以跨版本使用,如在版本 7 与版本 8 之间导出导入数据,但
这样做必须选择正确的版本,规则为:
总是使用 IMP 的版本匹配数据库的版本,如果要导入到 816,则使用 816 的导入工
具。
总是使用 EXP 的版本匹配两个数据库中低的那个版本,如在 815 与 816 之间互导,
则使用 815 的 EXP 工具。
imp 和 exp 版本不能往上兼容: imp可以导入低版本 exp 生成的文件, 不能导入高
版本 exp 生成的文件