当Oracle数据库挂起或变得无响应时,你该怎么办?传统上,唯一的选择是重新启动数据库。但是从12c开始,Oracle引入了一个新特性,即实时自动数据库诊断监视器(Real-Time ADDM),它可以在传统连接失败时以latch-less方式连接到数据库,并进行诊断。
关于号主,姚远:
Oracle ACE(Oracle和MySQL数据库方向)
华为云最有价值专家
《MySQL 8.0运维与优化》的作者
拥有 Oracle 10g、12c和19c OCM等数十项数据库认证
曾任IBM公司数据库部门经理
20+年DBA经验,服务2万+客户
精通C和Java,发明两项计算机专利
01
—
概述
02
—
模拟性能问题
以下脚本通过模拟登录风暴来伪造性能问题:
#!/bin/bash# Oracle database connection detailsDB_HOST="192.168.???.???"DB_PORT="1521"DB_SID="?????.example.com"DB_USER="scott"DB_PASSWORD="scott"# Number of concurrent processesNUM_PROCESSES=1000# Function to perform loginperform_login() {sqlplus -S ${DB_USER}/${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_SID} <<EOFexec DBMS_LOCK.sleep(20);EXIT;EOF# Run concurrent login processesfor ((i=1; i<=$NUM_PROCESSES; i++)); doperform_login &donewaitecho "Concurrent logins completed."
03
—
使用图形界面生成Real-Time ADDM 报告
普通连接:它对数据库执行标准 JDBC 连接。
诊断连接:当无法进行正常的 JDBC 连接时,它对数据库执行latch-less的连接,此模式用于极端挂起情况。

04
—
使用命令行生成Real-Time ADDM 报告
DBA_HIST_REPORTS视图捕获 SQL Monitor、DBOP 和Real-Time ADDM 的 XML 报告。您可以检查该视图,看看是否生成了任何Real-Time ADDM 报告。
select distinct component_name from dba_hist_reports;COMPONENT_NAME--------------------------------------------------------------------------------sqlmonitorperf
DBA_HIST_REPORTS视图以获取Real-Time ADDM 报告:
SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';SQL> select REPORT_ID,PERIOD_START_TIME,PERIOD_END_TIME,GENERATION_TIME,report_summary from dba_hist_reports where component_name = 'perf';REPORT_ID PERIOD_START_TIME PERIOD_END_TIME GENERATION_TIME REPORT_SUMMARY7865 2024-02-21 10:44:45 2024-02-21 10:44:45 2024-02-21 10:44:45 <report_repository_summary><trigger id="0" impact="1709.85" id_desc="High Load" impact_desc="1709.85 active sessions"></trigger></report_repository_summary>
Report ids in this workload repository.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~declare*ERROR at line 1:ORA-20000: No valid reports found in the specified time range. Please specify adifferent begin and end timeORA-06512: at line 11
另一个脚本“rtaddmrpti.sql”允许您手动选择数据库和报告周期。加粗的项目需要用户输入:
SQL> @?/rdbms/admin/rtaddmrpti.sqlInstances in this Report reposistory~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Db Id Inst Num---------- --------3148008031 1Default to current database**Enter value for dbid:**Using database id: 3148008031Enter begin time for report:-- Valid input formats:-- To specify absolute begin time:-- [MM/DD[/YY]] HH24:MI[:SS]-- Examples: 02/23/03 14:30:15-- 02/23 14:30:15-- 14:30:15-- 14:30-- To specify relative begin time: (start with '-' sign)-- -[HH24:]MI-- Examples: -1:15 (SYSDATE - 1 Hr 15 Mins)-- -25 (SYSDATE - 25 Mins)Default to -60 mins**Enter value for begin_time: -600**Report begin time specified: -600Enter duration in minutes starting from begin time:Defaults to SYSDATE - begin_timePress Enter to analyze till current time**Enter value for duration:**Report duration specified:Using 21/02/2024 04:24:05 as report begin timeUsing 21/02/2024 14:24:14 as report end timeReport ids in this workload repository.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~DBID REPORT_ID TIME trigger_cause impact---------- --------- -------------------- ------------------------- ----------3148008031 7865 21/02/2024 10:44:45 High Load 1709.853148008031 7870 21/02/2024 11:31:13 High Load 1556.17Select a report id from the list. If the report id list is empty,please select a different begin time and end time.**Enter value for report_id: 7865**Report id specified : 7865Specify the Report Name~~~~~~~~~~~~~~~~~~~~~~~~The default report file name is rtaddmrpt_0221_1424.html. To use this name,press <return> to continue, otherwise enter an alternative.Enter value for report_name:Using the report name rtaddmrpt_0221_1424.html... Removed HTML Output ...Report written to rtaddmrpt_0221_1830.html
欢迎关注我的公众号,一起学习数据库技术👇
推荐文章👇
试看号主的拙作《MySQL 8.0运维与优化》(清华大学出版社)
托业890分的Oracle ACE为您翻译国际大佬的雄文(合集)
晒一下号主的19个Oracle认证(OCP+OCM),欢迎PK
文章转载自oracleace,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




