从第三方拿来一个文件s201211.gz,我用gunzip解压缩,发现文件名为s201211,连后缀都没有,幸亏不大,只有几十M,用Editplus打开,初步判断是dmp文件,如是,添加个.dmp后缀,尝试导入数据库。
$ imp nts/nts file=s201211.dmp full=y
Import: Release 10.2.0.1.0 - Production on 星期四 12月 20 13:23:19 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
IMP-00037: Character set marker unknown
IMP-00000: Import terminated unsuccessfully
根据这个提示信息判断,貌似是字符集的问题。
查看该dmp文件的字符集
$ cat s201211.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6
0354
然后用以下SQL查出它对应的字符集:
SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;
NLS_CHARSET_NAME(TO_NUMBER('0354','XXXX'
----------------------------------------
ZHS16GBK
确认和本地数据库的一致。再次editplus打开,检查确认该文件完整后,用file看看这个文件
$ file s201211.dmp
s201211.dmp: POSIX tar archive
怎么会是压缩文件类型,不管了,再次解压试试。
$ tar -xvf s201211.dmp
s201211.dmp
再看看文件的类型
$ file s201211.dmp
s201211.dmp: DBase 3 data file (1380929624 records)
嗯,到了这里,应该可以导入了,再次执行上次的imp导入,顺利完成。