一次DB time抖动发现的expdp的bug

最近收到一封报警邮件,提示还是DB time突然提高,时间发生在早晨的时候,想必大过节的也不会有人这么卖力工作把数据库负载弄上去。
############ DB time抖动 被平均
ZABBIX-监控系统:
------------------------------------
报警内容: DB time is too high
------------------------------------
报警级别: PROBLEM
------------------------------------
监控项目: DBtime:404 %
------------------------------------
报警时间:2015.10.07-06:01:09
查看了一下快照得到的DB time,发现DB time已经被严重平均化。
Current Instance
~~~~~~~~~~~~~~~~

      DBID DB_NAME     INST_NUM INST_NAME
---------- --------- ---------- ----------------
 495508159 TESTDB               1 testdb

DB_NAME   BEGIN_SNAP   END_SNAP SNAPDATE                    LVL DURATION_MINS     DBTIME
--------- ---------- ---------- -------------------- ---------- ------------- ----------
TESTDB    75839      75840 07 Oct 2015 05:00             1            30          5
               75840      75841 07 Oct 2015 05:30             1            30          8
               75841      75842 07 Oct 2015 06:00             1            30         21
               75842      75843 07 Oct 2015 06:30             1            30          5
               75843      75844 07 Oct 2015 07:00             1            30          5
               75844      75845 07 Oct 2015 07:30             1            30          5
               75845      75846 07 Oct 2015 08:01             1            30          5
               75846      75847 07 Oct 2015 08:30             1            29          5
               75847      75848 07 Oct 2015 09:00             1            30          5
               75848      75848 07 Oct 2015 09:30             1            30          0
通过这个是看不出来数据库有明显的异常问题的,但是在短时间内确实出现了很高的抖动。我们来分析一下。
首先以快照的时间点为基准,查看在哪个时间段里是否有负载高的sql在运行。结果一抓还真是,占用了90%的比例,不得不让人怀疑
$ ksh showsnapsql.sh 75842
   SNAP_ID SQL_ID        EXECUTIONS_DELTA ELAPSED_TI PER_TOTAL
---------- ------------- ---------------- ---------- ----------
     75842 0rn7dhhuc1z2x                4 955s       91%
     75842 fydajknsuzadw           396470 23s        2%
     75842 520mkxqpf15q8           397806 11s        1%
     75842 0h6b2sajwb74n             2408 0s         0%
     75842 0k8522rmdzg4k              433 0s         0%
看看这个语句是什么来头。
$ ksh showsql.sh 0rn7dhhuc1z2x
HASH_VALUE PLAN_HASH_VALUE DISK_READS BUFFER_GETS      SORTS EXECUTIONS   CPU_TIME ELAPSED_TIME_S WAIT_TIME_EACH
---------- --------------- ---------- ----------- ---------- ---------- ---------- -------------- --------------
 885062749               0    4971881    12064454          0          4   56510410            277      220299792

SQL_FULLTEXT
----------------------------------------------------------------------------------------------------
 BEGIN
   SYS.KUPW$WORKER.MAIN('EXP_JXDB_20151007', 'SYS');
 END;
语句是一个看似陌生的pl/sql调用,如果对这个部分心存疑虑,但是还是一知半解,我们来看看数据库日志,看看有什么发现。
可以看到黄色部分的错误。
Wed Oct 07 05:00:20 CST 2015
ALTER SYSTEM ARCHIVE LOG
Wed Oct 07 05:00:20 CST 2015
Thread 1 advanced to log sequence 78503 (LGWR switch)
  Current log# 1 seq# 78503 mem# 0: /U01/app/oracle/oradata/testdb/redo01.log
Wed Oct 07 05:00:25 CST 2015
ALTER SYSTEM ARCHIVE LOG
Wed Oct 07 05:00:25 CST 2015
Thread 1 advanced to log sequence 78504 (LGWR switch)
  Current log# 2 seq# 78504 mem# 0: /U01/app/oracle/oradata/testdb/redo02.log
Wed Oct 07 06:00:01 CST 2015
The value (30) of MAXTRANS parameter ignored.
kupprdp: master process DM00 started with pid=319, OS id=6066
         to execute - SYS.KUPM$MCP.MAIN('EXP_JXDB_20151007', 'SYS', 'KUPC$C_1_20151007060002', 'KUPC$S_1_20151007060002', 0);
kupprdp: worker process DW01 started with worker id=1, pid=320, OS id=6074
         to execute - SYS.KUPW$WORKER.MAIN('EXP_JXDB_20151007', 'SYS');
kupprdp: worker process DW02 started with worker id=2, pid=316, OS id=6096
         to execute - SYS.KUPW$WORKER.MAIN('EXP_JXDB_20151007', 'SYS');
kupprdp: worker process DW03 started with worker id=3, pid=318, OS id=6098
         to execute - SYS.KUPW$WORKER.MAIN('EXP_JXDB_20151007', 'SYS');
kupprdp: worker process DW04 started with worker id=4, pid=322, OS id=6100
         to execute - SYS.KUPW$WORKER.MAIN('EXP_JXDB_20151007', 'SYS');
Wed Oct 07 06:00:35 CST 2015
Thread 1 advanced to log sequence 78505 (LGWR switch)
  Current log# 3 seq# 78505 mem# 0: /U01/app/oracle/oradata/jxdb/redo03.log
Wed Oct 07 06:04:40 CST 2015
Thread 1 advanced to log sequence 78506 (LGWR switch)
  Current log# 1 seq# 78506 mem# 0: /U01/app/oracle/oradata/jxdb/redo01.log
Wed Oct 07 07:55:56 CST 2015
Thread 1 advanced to log sequence 78507 (LGWR switch)
  Current log# 2 seq# 78507 mem# 0: /U01/app/oracle/oradata/jxdb/redo02.log
Wed Oct 07 09:29:01 CST 2015
Thread 1 advanced to log sequence 78508 (LGWR switch)
可以从错误看出这个是在尝试做一个导出的任务时抛出了错误,那么对于这个错误的解释,在mos上查了一圈,发现有一个帖子比较相近

ORA-01017 When Running EXPDP From Enterprise Manager (文档 ID 467198.1)

oracle官方的解释是
The cause of this problem has been identified in Bug:5631628. It is caused by using an user account whose password contains a '$'.
可能是用户密码中含有特殊字符导致的,但是我们这边设定的sys用户密码还没有用这个特殊字符,其他用户是否密码是否含有特殊字符自己也无从考证,因为安全和职责的考虑,应用的数据库用户密码对dba是不透明的。但是可以确定的是这个问题是基于EM导致的,而我们使用EM还没有设定scheduler之类的任务,所以还是不大可能。
然后怀疑是否为连接数超出导致的副作用,结果一看这个库的process还是很充足的,所以应该没有这类的问题。
sys@JXDB> show parameter process
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes                      integer     0
db_writer_processes                  integer     2
gcs_server_processes                 integer     0
job_queue_processes                  integer     10
log_archive_max_processes            integer     2
processes                            integer     1500
继续找,最后发现一个bug和现在的问题比较符合,
DataPump Export/Import Generate Messages "The Value (30) Of Maxtrans Parameter Ignored" in Alert Log (文档 ID 455021.1)        
就因为那个警告很相符,发现还有这么一个bug.
按照文档中提供的思路自己在其它环境测试了一下,创建了一个表指定maxtrans为25,结果表创建成功.
SQL> create table test001 (col001 number) initrans 10 maxtrans 25;
但是立刻查看alert日志,发现了下面一段警告
#######
Wed Oct 07 16:04:53 CST 2015
The value (25) of MAXTRANS parameter ignored.

带着一丝疑虑查看了是否存在遗留问题,发现还不少,之前有一些遗留的中间expdp的job表和中间表。
SQL> select table_name from user_tables where table_name like 'EXP%';
TABLE_NAME
------------------------------
EXP_TESTDB_20131204
EXP_TESTDB_20131027
EXP_TESTDB_20130806
EXP_TESTDB_20130705
EXP_TESTDB_20130704
EXP_TESTDB_20130703
EXP_TESTDB_20120328
EXP_TESTDB_20120325
EXP_TESTDB_20120323
EXP_TESTDB_20120322
EXP_TESTDB_20120321
EXPPKGOBJ$
EXPPKGACT$
EXPIMP_TTS_CT$
EXPDEPOBJ$
EXPDEPACT$
EXPACT$
目前为止倒没有发现相关的ora错误,但是也是隐患,还是果断删除。
好了,问题已经明确了,是在10g使用expdp导出的一个bug,为什么会在早晨有这个expdp的任务呢。
经过一番排查发现,这台服务器上设置了一个crontab,会在每天早晨做一个全库expdp备份,同时还有rman的全库备份,听起来是有冗余吧,所以也算是遗留问题,有了备库有了rman备库已经足够了,这个时候也可以考虑不用这个逻辑备份了。
那么我印象中还有一些库也是10gR2的,但是似乎从来没有收到过任何的ora错误。这是为什么呢。还是因为这些库中只有rman备库,没有做expdp的全库备份。带着好奇心在一台负载很低的10g库上尝试了一下expdp全库备份,结果发现ORA错误还是出现了。
Tue Oct 06 03:30:27 CST 2015
Thread 1 advanced to log sequence 2170 (LGWR switch)
  Current log# 1 seq# 2170 mem# 0: /U01/app/oracle/oradata/acctestdb/redo01.log
Tue Oct 06 07:23:58 CST 2015
Thread 1 advanced to log sequence 2171 (LGWR switch)
  Current log# 2 seq# 2171 mem# 0: /U01/app/oracle/oradata/acctestdb/redo02.log
Wed Oct 07 01:10:35 CST 2015
Thread 1 advanced to log sequence 2172 (LGWR switch)
  Current log# 3 seq# 2172 mem# 0: /U01/app/oracle/oradata/acctestdb/redo03.log
Wed Oct 07 03:30:01 CST 2015
The value (30) of MAXTRANS parameter ignored.
kupprdp: master process DM00 started with pid=27, OS id=22201
         to execute - SYS.KUPM$MCP.MAIN('SYS_EXPORT_FULL_01', 'SYS', 'KUPC$C_1_20151007033001', 'KUPC$S_1_20151007033001', 0);
kupprdp: worker process DW01 started with worker id=1, pid=29, OS id=22203
         to execute - SYS.KUPW$WORKER.MAIN('SYS_EXPORT_FULL_01', 'SYS');
Wed Oct 07 09:00:12 CST 2015
Thread 1 advanced to log sequence 2173 (LGWR switch)
  Current log# 1 seq# 2173 mem# 0: /U01/app/oracle/oradata/acctestdb/redo01.log   
 
所以分析了这个问题,也进一步论证了,这个问题对于实际的数据还是没有直接影响,但是根据实际需要,其实还是有备库,rman备份就够了。
所以这个问题就需要进一步进行确认,把expdp从定时任务中去除。

时间: 2024-10-15 17:43:26

一次DB time抖动发现的expdp的bug的相关文章

DB time抖动的原因分析

9月22日,"DBA+社群"开讲啦!由搜狐畅游高级DBA杨建荣在"DBA+北京群"进行了一次关于DB time抖动的原因分析的线上主题分享.小编特别整理出其中精华内容,供大家学习交流.     嘉宾简介    杨建荣,Oracle ACE-A,YEP成员,现就职于搜狐畅游,拥有6年以上的数据库开发和运维经验,曾任amdocs DBA,负责亚太电信运营商的数据业务支持.擅长电信数据业务,数据库迁移和性能调优.   拥有Oracle 10g OCP,OCM, MySQL

我们在各种开源项目中发现的 10000 个 bug

为了改善我们的静态代码分析的方法论,以及改进我们的静态分析工具PVS-Studio,我们会定期地用他们验证各种各样的开源项目.我们找到了很多bug,事实证明,再牛的人也会拼写错误 / 注意力不集中,没有人能保证不犯错.即便是在Microsoft Code Contracts, Qt, Linux kernel, CryEngine, VirtualBox, LibreOffice, Firefox, Boost, Tor这些项目里,依旧如此.目前我们检测了262个项目,都是官方发布版!我们一共记

DB time抖动的原因分析案例

今天来给大家分享一下DBtime抖动的诊断案例.讲到的不足之处还希望大家多多指正,共同提高.案例会分下面几个方面来说.  首先来说问题的背景.因为使用的数据库环境多且复杂,数据库不只有Oracle,所以通过gc来统一管理所有的数据库平台定制成本较高,使用zabbix可以满足系统级监控和MySQL等的监控报警,对于Oracle的监控通过扩展的Orabbix来实现. 而DB time这个监控项还是比较经典的一个指标,基本是作为DBA查看awr的首选指标.这个指标如此重要,但是似乎Oracle没有提供

我发现环信的bug,离线可以推送,在线就不推送

问题描述 测试了一下,当我从后台清除app后,可以正常接收消息,但是打开消息进入app内部后,在返回其他app时,发送消息就没有提示了..本人设计湿,所以一些开发的东西不太懂:我当时申请的是production的sandbox模式的推送,因此在申请证书的时候也是开发者.应用马上要上线了,请问是不是需要升级或者转换为production的推送,如何升级? 解决方案 在后台 做一下本地推送就可以了解决方案二:也发现了这个问题,在进入后台的时候做本地推送吧

VS 2017开发ASP.NET Core Web应用过程中发现的一个重大Bug

今天试着用VS 2017去开发一个.net core项目,想着看看.net core的开发和MVC5开发有什么区别,然后从中发现了一个VS2017的Bug. 首先,我们新建项目,ASP.NET Core Web应用程序,如图: 新建好后,我们按照习惯,在controller文件夹上面,点击鼠标右键,添加控制器...,出现了如下界面:   这个对话框什么意思呢?怎么会提示添加依赖项呢?按理来说,我们直接调试运行,项目就跑起来了!!! 先不管他,我们直接点击添加,然后稍等一会儿,等他添加依赖.完成后

Oracle 11.2.0.4 RAC Database for Windows 2012安装DB时收到[INS-35423]错误

    这是同事遇到的问题,在这里做个标记,希望对大家有所帮助. 一.问题描述. 操作系统:Microsoft Windows x64 (64-bit) 2012数据库版本:Oracle11g 11.2.0.4 经查询,11.2.0.4在windows2012上通过了验证.Grid安装成功,crs_stat -t 查看相关资源都是online,状态正常安装DB软件时,第4步,选择安装集群数据库时出现报错: [INS-35423] 安装程序检测到 Oracle Clusterware 未在本地节点

Sharepoint之配置向导创建DB失败

最近在重装Sharepoint 2010时,运行配置向导创建DB失败,异常的原因也比较奇怪.具体异常日志如下所示: 1: 9/16/2012 10:49:06 9 INF Creating a new farm with config db SharePoint_Config content db SharePoint_AdminContent_b2d2eaa3-a3cf-4420-a100-33926db462c4 server 10.10.10.111 for farm mode 2: 09

iOS 7.1.2发现日历Bug iOS 7.1.3或尽快解决

iOS 7.1.2发现日历Bug iOS 7.1.3或尽快解决苹果现在似乎对用户反馈的问题显得很积极啊.现在有国外媒体报道称,一位用户在iOS 7.1.2中发现了日历的Bug,随后他立即写邮件向苹果反馈了这个问题,让人没想到的事,苹果立刻进行了答复.在邮件中,苹果承诺该Bgu会在下一版系统更新中解决,其到来时间会非常快.iOS 8正式版到来前,诸如iOS 7.1.3这样的小更新应该会持续一段时间.

DBA避坑宝典:Oracle运维中的那些事儿

对于Oracle运维中的那些事儿,我的最终目的:不是比谁更惨,而是能够从中吸取经验和教训. 从我的理解来看,我会从下面的几个方面来进行说明DBA运维中的一些事儿. 每个部分都是非常关键的,缺一不可,而且每一部分都有很多的东西可以细化,我会逐一展开来说. (一)环境篇   首先来说说环境篇. DBA的角色及分工 对于DBA的分工,以前的公司对于DBA角色划分粒度还是很细的. 大体是按照核心和客户化定制层来划分的,核心层主要负责产品化,客户化层面主要负责定制.属于不同的产品线但又彼此紧密关联. Ph