首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

这是一篇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 databasecharacter 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 成功完成

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180125G043VF00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券