利用Oracle数据库嘛,难免都会导入导出,笔者就碰到一个问题,使用exp的时候,出了如下错误:
EXP-00091 Exporting questionable statistics.
EXP-00091: 不審な統計をエクスポートしています。
使用的exp/imp语句如下:
exp S001/Password@TestDB_01 tables=T_S001_ATTACH query=\" WHERE substr ( upd_ymd,0,8 ) ='20200713' \" file=/home/s001/data/T_S001_ATTACH_test_20200713_1 ;
imp S001/Password@TestDB_02 tables=T_S001_ATTACH file=/home/s001/data/T_S001_ATTACH_test_20200713_1.dmp fromuser=S001 touser=S001 ignore=Y;
然后解决这个错误的时候,大家的做法大概有两种,一种比较简单粗暴,你不是统计出错了嘛,那就别导出啦,
在exp中添加一个STATISTICS=NONE语句。
exp S001/Password@TestDB_01 tables=T_S001_ATTACH query=\" WHERE substr ( upd_ymd,0,8 ) ='20200713' \" file=/home/s001/data/T_S001_ATTACH_test_20200713_1 STATISTICS=NONE;
这样导出的时候,就不会报错啦。
毕竟这样怪怪的嘛,出错了你就不要了,紧急的时候也就罢了,那到底要不要紧呢?
首要要从这到底是个什么东西说起。
<统计信息是什么>
统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息。比如,表的行数,块数,平均每行的大小,索引的leaf blocks,索引字段的行数,不同值的大小等,都属于统计信息。
<统计信息用来干什么>
用途我觉得可能比较广吧。比如用于CBO(基于代价的优化器模式)评估COST生成执行计划。所以统计信息不准确,可能会影响业务的执行效率。
<导出的时候不导出也没关系吗?>
这个大概是我们最关系的问题了。
其实统计数据是Oracle自己内部可以再生成的,所以原则上不导入也没关系,导入之后别忘了再生成一下。
统计信息生成语句:※表单位或schema单位
execute dbms_stats.gather_table_stats(ownname=>'USERNAME',tabname=>'TABLE_NAME',cascade=>TRUE)
dbms_stats.gather_schema_stats(ownname => 'TEST',cascade => true)
并且,ORACLE会自动收集统计信息,当向表中插入/删除大量数据,数量量变化超过10%的时候系统会自动收集统计信息的。
我没有验证,imp的时候,岂止是10%,如果你是全表imp的话,那不就是100%?系统就自动帮你生成了吧?这个地方期待高手指摘啊。
还有一种做法,就是看这个错误的原因是什么,然后把修正一个,再导出,详细请参照下面的参考2.
大概就是说,错误的原因是数据库NLS_LANG(字符集)和系统环境变量NLS_LANG不一致,所以修改一个系统的NLS_LANG变量即可。
参考:
1,深入理解Oracle Statistic统计信息
https://www.cnblogs.com/princessd8251/articles/3568119.html
2,EXP-00091错误的说明和解决方法
https://blog.csdn.net/zyfromcq/article/details/84794740
3,TABLE_STATISTICS有什么用,impdp跳过以后有影响吗?
4,EXP-00091
https://www.shift-the-oracle.com/oerrs/exp-00091.html
本文地址:https://blog.csdn.net/shi_ly/article/details/107317279
如对本文有疑问, 点击进行留言回复!!
Navicate 如何导出数据库中的存储过程、事件、视图等?
每日一记:Oracle升级2020年4月份的数据库补丁Database Patch Set Update : 11.2.0.4.200414 (30670774)
Oracle 19.3 dataguard for Redhat 7.6
网友评论