暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

关于一次Oracle数据库DMP文件导入的记述

强哥数据池塘 2018-01-25
532


这是一篇Pentaho产品不相关的Oracle数据库操作记录。仅以此纪念半夜之辛劳。


一 字符集探查


查看dmp的字符集和要导入的oracle的字符集是否一致。

查看oracle的字符集


SQL> select userenv('language') from dual;


USERENV('LANGUAGE')

-----------------------------------------------

SIMPLIFIED CHINESE_CHINA. ZHS16GBK


查看DMP文件字符集

使用UltraEdit打开,会看到字符集。



因DMP文件字符集(AL32UTF8)与Oracle数据库字符集(ZHS16GBK)不一致。导致通过IMP程序导入时报错:


IMP-00038: 无法转换为环境字符集句柄

IMP-00000: 未成功终止导入


二 Oracle数据库字符集更改


本次需更换的字符集.

AMERICAN_AMERICA.AL32UTF8

SIMPLIFIED CHINESE_CHINA.ZHS16GBK


查看字符集命令


select * from v$nls_parameters;

select * from nls_database_parameters;


oracle数据库的字符集更改 步骤


SQL> conn / as sysdba     --需要使用SYSDBA帐户 

SQL>  startup mount        

SQL>  shutdown immediate;   --停止数据库 

SQL>  startup mount;         --启动数据库到 mount 状态 

SQL> alter session set sql_trace=true; 

SQL>  alter system enable restricted session; 

SQL> alter system set job_queue_processes=0; 

SQL> alter system set aq_tm_processes=0; 

SQL> alter database open; 

SQL> alter database character set INTERNAL_USE AL32UTF8; --修改字符集ZHS16GBK-> AL32UTF8

SQL> shutdown immediate;        --再次关闭数据库 

SQL> STARTUP;            --启动数据库 


查询修改后的字符集


SQL> select userenv('language') from dual;


USERENV('LANGUAGE')

--------------------------------------------------------------------------------

SIMPLIFIED CHINESE_CHINA.AL32UTF8


三 导入DMP文件


1 实用程序IMP和IMPDP的区别


EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。


IMP只适用于EXP导出的文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出的文件,而不适用于EXP导出文件。


2 IMP实用程序导入DMP文件


由于不知此将导入的DMP文件是用exp实用程序导出还是用expdp实用程序导出。So,本次导入操作首先尝试使用exp实用程序对应的imp实用程序进行操作。


在CMD界面输入imp导入命令


C:\Users\Administrator>impdp scott/tiger file=c:\test1.dmp full=y ignore=y;


执行后依然报下述错误:

IMP-00038: 无法转换为环境字符集句柄

IMP-00000: 未成功终止导入


通过网络查找原因,造成此错误的疑是下述原因:


2.1 此DMP文件是采用expdp导出的数据文件,采用imp无法导入导致此错误。

解决方法:改用impdp实用程序执行导入操作。


2.2 由高版本数据库导出的数据文件,在低版本数据库无法正常导入。

解决方法:例如导出数据的服务器版本是11.2.0.1.0,导入的服务器版本为11.1.0.6.0导出语句末尾添加version=11.1.0.6.0。

Expdp 户名/密码 directory=目录名 dumpfile=备份文件名.dmp logfile=日志文件.log  version= 11.1.0.6.0


3 IMPDP实用程序导入DMP文件


再次尝试使用impdp实用程序进行导入操作。结果是成功的。证明此DMP文件是由expdp实用程序导出。


在使用impdp实用程序导入操作过程中,因导入语句拼写错误导致多种导入错误产生,在此记述,以备后事之师。


3.1 导入目录缺失


导入命令:


C:\Users\Administrator>impdp scott/tiger@XKZENON directory='c:\' DUMPFILE=test1.

dmp full=y;


错误信息:

ORA-39002: 操作无效

ORA-39070: 无法打开日志文件。

ORA-39087: 目录名 C:\ 无效


解决办法:

创建导入逻辑目录,并给导入账号scott赋予指定目录的操作权限。


SQL> create or replace directory expdir as 'c:\';

目录已创建。


SQL> grant read,write on directory expdir to scott;

授权成功。


3.2 导入账号为授权


导入命令修改为:

C:\Users\Administrator>impdp scott/tiger@XKZENON directory=expdir DUMPFILE=test1

.dmp full=y remap_schema=EDBADM:scott;


错误信息:

ORA-31631: 需要权限

ORA-39122: 未授权的用户不能执行 REMAP_SCHEMA 重新映射。


解决办法:

当执行impdp操作指定remap_schema参数时,需要具备imp_full_database权限。为导入账号scott进行授权。


SQL> grant imp_full_database to scott;

授权成功。


3.3 导入表空间缺失


加remap_schema参数后,提示tablespace不存在。错误信息忘记截图了哈:)。


在impdp导入命令中添加下述参数:

REMAP_TABLESPACE=sourcespacename:targetspacename


添加remap_tablespace参数后,依然提示表空间不存在。错误如下:


ORA-39083: 对象类型 TABLE:"SCOTT"."TEST1" 创建失败, 出现错误:

ORA-00959: 表空间 'USERS;' 不存在


解决办法:

通过网络查找原因,给出如下两种方法:创建导出数据源表空间或者加入ignore = y 参数。


3.4 导入成功


通过加入ignore = y 参数。终于成功的将DMP数据文件导入到Oracle数据库中。执行过程记录如下。


C:\Users\Administrator>impdp scott/tiger@XKZENON directory=expdir DUMPFILE=test1

.dmp full=y remap_schema=EDBADM:scott REMAP_TABLESPACE=EDS_EQP_IDX_TBS:users ign

ore=y;


Import: Release 11.2.0.1.0 - Production on 星期二 1月 23 00:12:46 2018


Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.


连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Produc

tion

With the Partitioning, OLAP, Data Mining and Real Application Testing options

由于以下参数, 旧有模式处于活动状态:

旧有模式参数: "ignore=TRUE" 位置: Command Line, 替换为: "table_exists_action=app

end"

已成功加载/卸载了主表 "SCOTT"."SYS_IMPORT_FULL_01"

启动 "SCOTT"."SYS_IMPORT_FULL_01":  scott/********@XKZENON directory=expdir DUMP

FILE=test1.dmp full=y remap_schema=EDBADM:scott REMAP_TABLESPACE=EDS_EQP_IDX_TBS

:users table_exists_action=append

处理对象类型 TABLE_EXPORT/TABLE/TABLE

处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA

. . 导入了 "SCOTT"."TEST1"                             372.4 MB 2882820 行

作业 "SCOTT"."SYS_IMPORT_FULL_01" 已于 00:13:36 成功完成


文章转载自强哥数据池塘,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论