某客户数据库为10.2.0.4 RAC,运行在HP-UX平台上,如下所示:
某日,在使用exp进行本地全库逻辑导出时发现很慢,导出语句的主要语法如下:
exp full=y buffer=10M direct=y statistics=none file=.. log =..
可以看到客户对exp导出已经进行了优化,使用了直接路径导出(direct=y ),并且不导统计信息(statistics=none) ,但导出速度依然不可接受,一个晚上只导出了20G,这是极为不正常的。
数据库exp导出速度的主要影响因素如下:
存储的I/O性能。
exp的导出参数。
数据库资源的争用。
exp导出期间,操作系统资源和存储I/O正常,如下所示:
Mon Jul 8 20:27:00 EAT 2013
procs memory page faults cpu
r b w avm free re at pi po fr de sr in sy cs us sy id
6 1 0 3632805 6982185 0 0 1 0 0 0 0 13059 130731 4225 5 1 94
7 1 0 3840773 6969343 0 0 0 0 0 0 0 16492 228979 9570 15 1 84
4 1 0 3519137 6936935 0 0 0 0 0 0 0 13698 162008 6590 8 1 91
4 1 0 3967479 6893185 0 0 0 0 0 0 0 13660 175978 6911 9 1 90
5 1 0 4021955 6847447 0 0 0 0 0 0 0 14958 204016 8399 10 1 89
6 1 0 3916920 6795387 0 0 1 0 0 0 0 15059 234239 7520 11 1 88
7 1 0 4202389 6673342 0 0 0 0 0 0 0 16642 756681 39425 16 2 83
3 0 0 4274821 6657615 0 0 0 0 0 0 0 15079 189115 8325 11 1 88
3 1 0 3874784 6629859 0 0 0 0 0 0 0 14310 255546 17619 14 1 85
5 0 0 4084843 6605861 0 0 0 0 0 0 0 16176 163433 7805 12 1 87
检查了存储I/O性能和exp导出参数,确定没有问题。于是进一步检查数据库资源的争用情况。AWR报告的采样时间为为20:00至第二天8:00,即exp逻辑导出时间。如下所示:
exp导出期间,数据库的TOP 5等待事件极为不正常,几乎可以肯定不正常的等待事件才导致了exp导出缓慢,如下所示:
根据以上等待事件,可以看到SHARED POOL出现了严重问题,SQL的解析时间占DB TIME的88.56%。如下所示:
但发生故障时,系统每秒的解析数并不高,每秒解析才50个左右,如下所示:
进一步查看系统解析数最高的应用模块,发现全都是exp发起的,如下所示:
AWR报告查看到这里,就已经很明确了。接下来就查看exp最消耗资源的SQL语句,在这里主要查看最消耗CPU资源的exp语句,发现是查询SYS用户下的EXU9XML。如下所示:
而且每次执行需要读取58536个逻辑I/O。这是极为不正常的。如下所示:
而且逻辑读最高的对象为SYS用户下OPQTYPE$基表(占83.84%),这同样是极为不正常的,如下所示:
碰到这种情况,我们首先想到的是借助MOS工具,查询Oracle是否有相关BUG,果然在729248.1有相关解释,解决方法如下:
$ sqlplus /nolog
SQL> connect / as sysdba
SQL> create index OPQTYPE_IDX1 on OPQTYPE$(TYPE,BITAND (FLAGS, 2));
SQL> execute dbms_stats.gather_table_stats ('SYS', 'OPQTYPE$');
按照MOS提供的解决方法,在OPQTYPE$表建立相关索引之后,exp导出速度变为正常。
总结:
这个案例给我们的启发是当发生故障时,需要多角度的考察多个环节,然后借助MOS工具从而快速地解决问题。
分享到:
相关推荐
运行导出时提示exp.exe已停止工作,到bin目录下运行也不行,下载覆盖下就好了。
oracle 11g R2 新增的特性,exp无法导出空表,可以通过expdp命令导出,具体在附件里。
Oracle11g使用exp导出空表,解决备份无法导出空表的问题
oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出。此资源提供将空表导出的的两种方法。
装Oracle10g的服务端的版本一般是10.1.0.2,而客户端的版本是10.2.0.1,版本不一致,导入导出就会有问题,需要把这个文件替换到客户端文件夹。
文档里面共包含四个文件,对应oracle10g 的 exp/imp,expdb/impdb
oracle11g的bin包,包含exp.exe和IMP.EXE.exp.exe文件,可用于plsql导入导出
Oracle从11g导出到10g。经过测试可以通过。 这里表空间、用户名、用户密码都是aa。
此文档中详细的记载了oracle10g中,如何实现数据的导入导出,现在拿出来与广大学习数据库的朋友们分享!
oracle 导出 命令 exp 写成BAT 双击就可执行
oracle11g的BIN目录,包含导出导入等命令
oracle11g导出还原到oracle10g
Oracle导入导出自动备份
Oracle导出程序Exp的使用
Oracle11g和oracle10g之间数据的导入导出.
oracle数据泵导出为低版本命令。 从11g导出为10g版本,经过多次测试没有问题,而且导出速度非常快。
oracle缺少exp.exe的同学可下载oracle缺少exp.exe的同学可下载oracle缺少exp.exe的同学可下载
如何用命令exp导出指定表的数据
Oracle 19c 备份恢复-导入导出
linux oracle 定时 导出脚本;