oracle导出报错00091,Exp导出报错EXP-00091分析解决

Oracle EXP/IMP是早期推出数据备份还原工具。因其简单易用、功能强大的特性,广泛的被行业接受。一些开发工具(如PL/SQL Developer)中甚至集成嵌入了EXP/IMP工具。一些国内开发团队默认数据部署策略中,EXP/IMP也占到了相当比例。

随着Oracle版本的推进,新特性的推出,特别是海量数据库不断出现在企业应用环境下,传统的EXP/IMP工具架构已经不能承担发展的需要。于是在10g版本中,Oracle推出了服务端运行的数据泵Data Pump工具。到11g版本中,Data Pump已经成为成熟的数据导入导出、备份解决方案。

但是在实际开发领域,Exp/Imp还是有很大的市场。虽然11g中已经不推荐使用Exp/Imp,但是很多厂商部署小数据应用还是采用Exp/Imp方法。

本次记录的是一次部署导出Exp中出现的问题,记录下来,留待需要的朋友需要。

1、问题综述

厂商上线部署系统,进行最后的数据导出导入测试。由于不是最终的环境,而且上线系统数据量初始比较少,所以推荐使用Exp/Imp或者Data Pump工具。在导出过程中,系统数据虽然成功导出,但是出现报错EXP-00091。对应截屏照片如下(安全原因,屏蔽部分信息):

00724552fd3230eb687d37ce9ffccf58.png

导出操作最后以成功。但是在日志中,每个数据表数据虽然可以导出,但是对应的统计量导出时候,报错EXP-00091。Exporting questionable statistics,导出统计量信息问题。

笔者之前没有遇到过这种问题,对于导出操作前厂商进行过何种操作也没有相关信息,可以获得的导出语句如下:

13dc547653c930825e22c3516dd4678f.png

导出语法也没有什么额外的信息过程。一时间笔者也没有处理的思路。

2、问题分析和检索

留下错误信息提示和语句信息之后,笔者查询了Oracle MOS官方网站,希望找到对应的资料。在文档EXP Utility Reports EXP-91 During Export (文档ID 730106.1)中,笔者找到了这个问题的解释。

Oracle统计量是CBO的工作基础。Oracle优化器在发展历程中,经历了从RBO到CBO的演变过程。RBO时代,优化器生成规则是以代码的方式固化在Oracle代码中的。而CBO的工作是基于数据对象统计量。统计量反映在实体上,就是一系列的元数据信息。在9i时代,CBO与RBO共同作用,而且统计量是需要人工进行收集维护的。而且,由于数据变化的原因,在一些早期CBO版本中,“实时”统计量往往还不能获得最好的执行计划。

所以,在9i的Exp/Imp工具开始,统计量导出就成为Exp工具默认行为。Exp/Imp工具是一个客户端工具,客户端的字符集设置nls_lang和数据库服务器端是存在不同的。如果nls_lang环境变量设置与数据库服务器设置不同,就会导致这个问题出现。

下面我们通过实验来试图重现错误,来证实我们的推论。

3、错误模拟

我们使用oracle 11gR2来进行测试模拟,具体版本号为11.2.0.4。客户端操作系统为Windows。

SQL> select * from v$version;

BANNER

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

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

PL/SQL Release 11.2.0.4.0 - Production

CORE11.2.0.4.0Production

TNS for 64-bit Windows: Version 11.2.0.4.0 - Production

NLSRTL Version 11.2.0.4.0 – Production

当前,服务器NLS关键参数如下。注意,查看nls信息一定是数据库层面的。

SQL> select * from nls_database_parameters;

PARAMETERVALUE

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

NLS_LANGUAGEAMERICAN

NLS_TERRITORYAMERICA

NLS_CURRENCY$

NLS_ISO_CURRENCYAMERICA

NLS_NUMERIC_CHARACTERS.,

NLS_CHARACTERSETAL32UTF8

(篇幅原因,有省略……)

Nls_lang环境变量的参数格式包括nls_language、nls_territory和nls_characterset。具体格式如下:

NLS_LANG=_.< Characterset>

首先,我们先查看一下正常的Exp导出过程。

C:\Users\admin>set nls_lang=american_america.al32utf8

C:\Users\admin>exp \"/ as sysdba\" owner=scott file=scott.dmp

Export: Release 11.2.0.4.0 - Production on Sat Jul 26 19:34:55 2014

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

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit

Production

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

Export done in AL32UTF8 character set and AL16UTF16 NCHAR character set

About to export specified users ...

. exporting pre-schema procedural objects and actions

. exporting foreign function library names for user SCOTT

. exporting PUBLIC type synonyms

. exporting private type synonyms

. exporting object type definitions for user SCOTT

About to export SCOTT's objects ...

. exporting database links

. exporting sequence numbers

. exporting cluster definitions

. about to export SCOTT's tables via Conventional Path ...

. . exporting tableBONUS0 rows exported

. . exporting tableDEPT4 rows exported

. . exporting tableEMP14 rows exported

. . exporting tableSALGRADE5 rows exported

(篇幅原因,有省略……)

. exporting statistics

Export terminated successfully without warnings.

没有错误信息出现,如果我们随意调整一个nls_lang参数,情况就发生了不同。

C:\Users\admin>set nls_lang=american_china.zhs16gbk –设置完全不同的nls_lang参数

C:\Users\admin>exp \"/ as sysdba\" owner=scott file=scott.dmp

Export: Release 11.2.0.4.0 - Production on Sat Jul 26 19:38:00 2014

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

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

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

Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set

server uses AL32UTF8 character set (possible charset conversion)

About to export specified users ...

. exporting pre-schema procedural objects and actions

. exporting foreign function library names for user SCOTT

. exporting PUBLIC type synonyms

. exporting private type synonyms

. exporting object type definitions for user SCOTT

About to export SCOTT's objects ...

. exporting database links

. exporting sequence numbers

. exporting cluster definitions

. about to export SCOTT's tables via Conventional Path ...

. . exporting tableBONUS0 rows exported

EXP-00091: Exporting questionable statistics.

. . exporting tableDEPT4 rows exported

EXP-00091: Exporting questionable statistics.

EXP-00091: Exporting questionable statistics.

. . exporting tableEMP14 rows exported

EXP-00091: Exporting questionable statistics.

EXP-00091: Exporting questionable statistics.

. . exporting tableSALGRADE5 rows exported

EXP-00091: Exporting questionable statistics.

. exporting synonyms

(篇幅原因,有省略……)

Export terminated successfully with warnings.

当nls_lang参数和字符集不匹配的情况出现之后,EXP-00091错误就出现了。实验能够重现。

4、问题解决方案

定位了故障原因,要解决也就相对简单了。针对这个问题,有几个策略可以使用:

首先,是调整nls_lang为正确的参数取值;其次,是使用statistics=none,显示的不进行统计量导出;最后就是直接使用Data Pump工具。

5、结论

数据备份还原操作是我们最经常进行的数据库操作之一。选择合适的工具、方法,熟悉各种参数的含义和作用,是作为DBA应尽的基本责任。不问实际情况,直接拷贝网络上的代码步骤,是对自己工作不负责的行为。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值