EXP-00091 EXP导出错误问题困惑
今天要求将部分表数据导出
提供的exp导出脚本如下:
USERID=x/x@xBUFFER=102400ROWS=YLOG=T_DAYLOG_CALLBYSERVICE.logFILE=T_DAYLOG_CALLBYSERVICE.dmptables=T_DAYLOG_CALLBYSERVICEquery="wherelogdatebetweento_date('20150810','YYYYMMDD')andto_date('20150828','YYYYMMDD')"
尝试执行报错
$expparfile=T_DAYLOG_CALLBYSERVICE.PARExport:Release10.2.0.4.0-ProductiononTueSep116:05:152015Copyright(c)1982,2007,Oracle.Allrightsreserved.Connectedto:OracleDatabase10gEnterpriseEditionRelease10.2.0.4.0-64bitProductionWiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptionsExportdoneinZHS16GBKcharactersetandAL16UTF16NCHARcharactersetAbouttoexportspecifiedtablesviaConventionalPath.....exportingtableT_DAYLOG_CALLBYSERVICE10197rowsexportedEXP-00091:Exportingquestionablestatistics.EXP-00091:Exportingquestionablestatistics.Exportterminatedsuccessfullywithwarnings.
如其提示以报错EXP-00091,查看错误
[oracle@SH-SRV-UIDB:/u01/script]$oerr exp 00091
00091, 00000, "Exporting questionable statistics."
// *Cause: Export was able export statistics, but the statistics may not be
// usuable. The statistics are questionable because one or more of
// the following happened during export: a row error occurred, client
// character set or NCHARSET does not match with the server, a query
// clause was specified on export, only certain partitions or
// subpartitions were exported, or a fatal error occurred while
// processing a table.
// *Action: To export non-questionable statistics, change the client character
// set or NCHARSET to match the server, export with no query clause,
// export complete tables. If desired, import parameters can be
// supplied so that only non-questionable statistics will be imported,
// and all questionable statistics will be recalculated.
根据上述的要求可能是字符集不符合,或者导出时指定查询子,分区或子分区被导出,或处理表的时候发生的错误等(翻译能力有限,仅能这样理解)。
查看客户端和服务端字符集是否相符
SQL>selectuserenv('language')fromdual;USERENV('LANGUAGE')----------------------------------------------------AMERICAN_AMERICA.ZHS16GBKselect*fromnls_database_parameterstwheret.parameter='NLS_CHARACTERSET';select*fromv$nls_parameterswhereparameter='NLS_CHARACTERSET'
在环境变量中增加语言设定
exportNLS_LANG='AMERICAN_AMERICA.ZHS16GBK'echo$NLS_LANG
重新导出依旧报00091的错,尝试去掉query也报错,修改脚本尝试使用expdp工具导出表。
USERID=x/x@xDIRECTORY=BACKUPDIRCOMPRESSION=NONECONTENT=ALLLOGFILE=T_DAYLOG_CALLBYSERVICE.logDUMPFILE=T_DAYLOG_CALLBYSERVICE.dmpTABLES=T_DAYLOG_CALLBYSERVICEQUERY="wherelogdatebetweento_date('20150810','YYYYMMDD')andto_date('20150828','YYYYMMDD')"
查看日志正确导出,但仔细观察发现导出的行数与exp导出相同均为10197行。
Export:Release10.2.0.4.0-64bitProductiononTuesday,01September,201515:24:24Copyright(c)2003,2007,Oracle.Allrightsreserved.;;;Connectedto:OracleDatabase10gEnterpriseEditionRelease10.2.0.4.0-64bitProductionWiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptionsStarting"ICD"."SYS_EXPORT_TABLE_01":parfile=T_DAYLOG_CALLBYSERVICE.PAREstimateinprogressusingBLOCKSmethod...ProcessingobjecttypeTABLE_EXPORT/TABLE/TABLE_DATATotalestimationusingBLOCKSmethod:168MBProcessingobjecttypeTABLE_EXPORT/TABLE/TABLEProcessingobjecttypeTABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANTProcessingobjecttypeTABLE_EXPORT/TABLE/INDEX/INDEXProcessingobjecttypeTABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICSProcessingobjecttypeTABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS..exported"ICD"."T_DAYLOG_CALLBYSERVICE"980.4KB10197rowsMastertable"ICD"."SYS_EXPORT_TABLE_01"successfullyloaded/unloaded******************************************************************************DumpfilesetforICD.SYS_EXPORT_TABLE_01is:/u01/temp/T_DAYLOG_CALLBYSERVICE.dmpJob"ICD"."SYS_EXPORT_TABLE_01"successfullycompletedat15:24:28
也就是说,导出应该是成功的,但因为某些原因还是报错。
在文档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工具在导出时使用了统计功能,而报错的发生就和统计有关。问题没有能解决
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。