dmp文件导入抽取方法

一、确认dmp文件、oracle客户端和服务端的字符集

(1)dmp文件字符集确认:

使用UE打开dmp文件查看文件第2个和第3个字节内容,这两个字节记录了dmp文件的字符集。如0354,然后用以下sql查出它对应的字符集:

select nls_charset_name(to_number('0354','xxxx')) from dual;

结果显示为ZHS16GBK,若是使用UE打开不方便,也可使用linux命令查看:cat exp.dmp|od -x|head -1|awk '{print $2$3}'|cut -c 3-6

还可以使用imp命令尝试导入dmp文件,在日志文件或linux界面上可以查看该dmp文件的字符集。

(2)查看oracle 服务端的字符集

使用sql进行查询:select userenv('language') from dual;

结果类似: SIMPLIFIED CHINESE_CHINA.ZHS16GBK

(3)查看oracle客户端的字符集

使用linux命令查看:echo $NLS_LANG

结果类似如下:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

二、根据dmp文件的字符集修改oracle客户端和服务端的字符集

以下的修改以dmp文件的字符集为SIMPLIFIED CHINESE_CHINA.ZHS16GBK为例。

(1)修改oracle客户端字符集

修改/ect/下的profile文件中的:

export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"

(2)修改oracle服务端的字符集

使用以下sql语句进行修改:

sqlplus /nolog;

conn / as sysdba

shutdown immediate;

startup mount;

alter system enable restricted session;

alter system set job_queue_processes=0;

alter system set aq_tm_processes=0;

alter database open;

alter database character set internal_use ZHS16GBK;

shutdown immediate;

startup;

三、使用imp命令将dmp文件导入oracle数据库

切换到oracle用户,然后使用imp命令导入dmp文件,步骤如下:

su - oracle;

imp user/pwd@ip:1521/实例名 file=/filepath/exp.dmp log=/logpath/implog.log full=y ignore=y

四、使用sqluldr2抽取oracle数据库中的表数据到txt文件

首先安装sqluldr2软件,然后使用sqluldr2抽取oracle表数据到txt文件,具体步骤如下:

打开cmd命令,进入sqluldr2.exe目录

使用以下命令导出数据

sqluldr264.exe user="user/pwd@ip:1521/dbtrain" query= "select * from tablename" field=0x09 record=0x0a file= "E:\out.txt" charset=ZHS16GBK

命令中field为列分隔符,此处0x09为制表符,record为行分隔符,此处0x0a为换行符,具体指令见sqluldr2的帮助。

上一篇:【EXP】比较大的dmp文件导入的时候可以将界面关掉


下一篇:关于Oracle dmp文件导入随笔