您的位置:首页 > 数据库 > Oracle

ORACLE AWR报告生成过程出现多个实例记录分析

2016-07-18 16:38 543 查看
在一次生成AWR报告中,发现在“InstancesinthisWorkloadRepositoryschema”部分,出现了多个实例记录信息(host敏感信息被用host1,host2,host3替换)。具体信息如下截图所示:

SQL>@?/rdbms/admin/awrrpt
CurrentInstance
~~~~~~~~~~~~~~~~
DBIdDBNameInstNumInstance
-------------------------------------------
3990839260SCM21SCM2
SpecifytheReportType
~~~~~~~~~~~~~~~~~~~~~~~
WouldyoulikeanHTMLreport,oraplaintextreport?
Enter'html'foranHTMLreport,or'text'forplaintext
Defaultsto'html'
Entervalueforreport_type:html
TypeSpecified:html
InstancesinthisWorkloadRepositoryschema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DBIdInstNumDBNameInstanceHost
--------------------------------------------------------
39908392601SCM2SCM2host1
*39908392601SCM2SCM2host2
39908392601SCM2SCM2host3
Using3990839260fordatabaseId
Using1forinstancenumber
Specifythenumberofdaysofsnapshotstochoosefrom
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enteringthenumberofdays(n)willresultinthemostrecent
(n)daysofsnapshotsbeinglisted.Pressing<return>without
specifyinganumberlistsallcompletedsnapshots.




其实这几个Host对于我来说,非常熟悉,一个是数据库迁移前的hostname,一个是hostname修改前的名称,一个是hostname修改后的名称。那么为什么出现这个情况呢?我们先从$ORACLE_HOME/rdbms/admin/awrrpt.sql脚本开始,看看这些记录是怎么获取的。

[oracle@MyOracleadmin]$moreawrrpt.sql
Rem$Header:awrrpt.sql24-oct-2003.12:04:53pbelknapExp$
Rem
Remawrrpt.sql
Rem
RemCopyright(c)1999,2003,OracleCorporation.Allrightsreserved.
Rem
RemNAME
Remawrrpt.sql
Rem
RemDESCRIPTION
RemThisscriptdefaultsthedbidandinstancenumbertothatofthe
Remcurrentinstanceconnected-to,thencallsawrrpti.sqltoproduce
RemtheWorkloadRepositoryreport.
Rem
RemNOTES
RemRunasselect_catalogprivileges.
RemThisreportisbasedontheStatspackreport.
Rem
RemIfyouwanttousethisscriptinannon-interactivefashion,
Remseethe'customer-customizablereportsettings'sectionin
Remawrrpti.sql
Rem
RemMODIFIED(MM/DD/YY)
Rempbelknap10/24/03-swrfrpttoawrrpt
Rempbelknap10/14/03-movingparamstorpti
Rempbelknap10/02/03-addingnon-interactivemodecmnts
Remmlfeng09/10/03-headingon
Remaime04/25/03-aime_going_to_main
Remmlfeng01/27/03-mlfeng_swrf_reporting
Remmlfeng01/13/03-Updatecomments
Remmlfeng07/08/02-swrfflushing
Remmlfeng06/12/02-Created
Rem
--
--Getthecurrentdatabase/instanceinformation-thiswillbeused
--laterinthereportalongwithbid,eidtolookupsnapshots
setechooffheadingonunderlineon;
columninst_numheading"InstNum"new_valueinst_numformat99999;
columninst_nameheading"Instance"new_valueinst_nameformata12;
columndb_nameheading"DBName"new_valuedb_nameformata12;
columndbidheading"DBId"new_valuedbidformat9999999999justc;
prompt
promptCurrentInstance
prompt~~~~~~~~~~~~~~~~
selectd.dbiddbid
,d.namedb_name
,i.instance_numberinst_num
,i.instance_nameinst_name
fromv$databased,
v$instancei;
@@awrrpti
undefinenum_days;
undefinereport_type;
undefinereport_name;
undefinebegin_snap;
undefineend_snap;
--
--Endoffile




如上所示,其实awrrpt.sql里面没有多少料,主要功能还是在awrrpti.sql中实现的。在awrrpti.sql里面,看到通过下面部分信息,定位到AWR里面的信息来源于awrinput.sql



检查awrinput.sql脚本,发现AWR那段数据来自于下面SQL语句

--
--RequesttheDBIdandInstanceNumber,iftheyarenotspecified
columninstt_numheading"InstNum"format99999;
columninstt_nameheading"Instance"formata12;
columndbb_nameheading"DBName"formata12;
columndbbidheading"DBId"formata12justc;
columnhostheading"Host"formata12;
prompt
prompt
promptInstancesinthisWorkloadRepositoryschema
prompt~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
selectdistinct
(casewhencd.dbid=wr.dbidand
cd.name=wr.db_nameand
ci.instance_number=wr.instance_numberand
ci.instance_name=wr.instance_nameand
ci.host_name=wr.host_name
then'*'
else''
end)||wr.dbiddbbid
,wr.instance_numberinstt_num
,wr.db_namedbb_name
,wr.instance_nameinstt_name
,wr.host_namehost
fromdba_hist_database_instancewr,v$databasecd,v$instanceci;
prompt
promptUsing&&dbidfordatabaseId
promptUsing&&inst_numforinstancenumber




最后发现原因是:视图dba_hist_database_instance里面存放的历史记录,记录了host的变化,所以上面SQL,出现了三条记录。
dba_hist_database_instance视图脚本

selectdbid,instance_number,startup_time,parallel,version,
db_name,instance_name,host_name,last_ash_sample_id
fromWRM$_DATABASE_INSTANCE

使用下面脚本找到对应的记录,然后删除那些历史数据就可以了。但是手工删除这个表的数据是否会有问题呢?也在测试环境测试了一下,没有任何问题,和同事讨论了一下,觉得这个数据的删除,不会出现什么问题。

SQL>SELECTHOST_NAME,MAX(STARTUP_TIME)FROMdba_hist_database_instance
2GROUPBYHOST_NAME;
SQL>DELETEFROMdba_hist_database_instanceWHERESTARTUP_TIME<=TO_DATE('2016-05-0500:00:00','YYYY-MM-DDHH24:MI:SS');
COMMIT;
266rowsdeleted.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: