oracle数据库快速定位问题指引

1、检查数据库服务器操作系统-磁盘\CPU\内存(内存主要看swap)等使用率

2检查数据库监听是否正常 lsnrctl status

3检查数据库实例是否正常

处理方法:

1、日志磁盘满的情况:直接删除早期归档日志文件;详细处理方式件附件1

    CPU和内存使用率满的情况:数据库操作系统不可用直接重启服务器。

2、若监听关闭,手动启动 lsnrctl start

若监听状态一致unknow ,可手动静态注册监听。

 alter system set local_listener=‘监听器名称' scope=both;

3、若实例状态非open,可重启下实例,shutdown immediate;startup

4检查数据库告警日志

1、cd /oradata/exa2nbuip/lxplmprd/lxplmprd2/diag/diag/rdbms/lxplmprd2/lxplmprd2/trace/

2、tail -1000f alert_lxplmprd2.log

主要关注ORA-0XXXX的告警信息,自行百度处理

1、检查数据库服务器操作系统-IO使用率,IO等待会导致数据库慢   iostat –x 2 10

处理方法:

 分析数据库物理读top5,进行优化

SELECT * FROM   (SELECT PARSING_USER_ID EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_text FROM  v$sqlarea ORDER BY disk_reads DESC ) 

  WHERE ROWNUM<5 ;

2、检查数据库锁及会话阻塞,数据库有锁的时候不一定会慢,要查看锁有没有导致会话阻塞

select blocking_session,sid,wait_class,seconds_in_wait from v$session where blocking_session is not null order by blocking_session;

处理方法:

1select sid,serial# from v$session where sid='22';

2alter system kill session ’22,56795’;

3、检测数据库等待事件

 set linesize 1024
 col event for a45
 select sid,event,p1,p2,p3, seconds_in_wait from   v$session_wait
 

另外可以用topsql脚本分析处理:

topsql脚本可放到本地D

cmd 进入D:

cd topsql

sqlplus system/密码@IP:端口/服务名

topsql.sql脚本

set linesize 200
col type for a10
select * from (
select
     ash.SQL_ID , ash.SQL_PLAN_HASH_VALUE Plan_hash, aud.name type,
     sum(decode(ash.session_state,'ON CPU',1,0))     "CPU",
     sum(decode(ash.session_state,'WAITING',1,0))    -
     sum(decode(ash.session_state,'WAITING', decode(wait_class, 'User I/O',1,0),0))    "WAIT" ,
     sum(decode(ash.session_state,'WAITING', decode(wait_class, 'User I/O',1,0),0))    "IO" ,
     sum(decode(ash.session_state,'ON CPU',1,1))     "TOTAL"
from v$active_session_history ash,
     audit_actions aud
where SQL_ID is not NULL
   and ash.sql_opcode=aud.action
   and ash.sample_time > sysdate - &minutes /( 60*24)
group by sql_id, SQL_PLAN_HASH_VALUE   , aud.name 
order by sum(decode(session_state,'ON CPU',1,1))   desc
) where  rownum < 10
/

topsql.sql脚本:

var tuning_task varchar2(100);
  DECLARE
          l_sql_id v$session.prev_sql_id%TYPE;
          l_tuning_task VARCHAR2(30);
        BEGIN
          l_sql_id:='&sqlid';
          l_tuning_task := dbms_sqltune.create_tuning_task(sql_id => l_sql_id);

          :tuning_task:=l_tuning_task;
          dbms_sqltune.execute_tuning_task(l_tuning_task);
          dbms_output.put_line(l_tuning_task);
      END;
   /

topsql.sql脚本:

print tuning_task;
SET linesize 180
SET longchunksize 180
SET pagesize 900
SET long 1000000
col TUNING_TASK format a80

SELECT dbms_sqltune.report_tuning_task('&task') FROM dual;

4redo日志切换频繁,归档日志剧增

logmnr使用:

select * from v$archived_log order by sequence# desc

begin

   dbms_logmnr.add_logfile(logfilename=>'/oradata/exa2nbuip/lxplmprd/lxplmprd2/fra/LXPLMPRD2/archivelog/2023_11_22/o1_mf_1_329_lotjyts5_.arc',options=>dbms_logmnr.new);

   dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);

end;

/

 select * from v$logmnr_contents

begin

   dbms_logmnr.end_logmnr;

   end;

/

可查看redo日志内容,发给开发团队解决。

5SGAPGA内存分析

可通过AWR报告分析:

su – oracle

Sqlplus / as sysdba

@?/rdbms/admin/awrrpt  本实例

@?/rdbms/admin/awrrpti   RAC中选择实例

选择“html”

附件1

使用sql命令查看:

Sql>sqlplus / as sysdba;

SQL> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            USE_DB_RECOVERY_FILE_DEST -–如果是直接路径可直接进去改路径删除早期归档日志

Oldest online log sequence     330

Next log sequence to archive   331

Current log sequence           331

SQL> show parameter db_recovery_file_dest;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_recovery_file_dest                string      /oradata/exa2nbuip/lxplmprd/lx

                                                 plmprd2/fra

db_recovery_file_dest_size           big integer 100G

SQL>

发现默认的归档路径/oradata/exa2nbuip/lxplmprd/lxplmprd2/fra而且限制使用空间100G

可直接进/oradata/exa2nbuip/lxplmprd/lxplmprd2/fra 路径下删除早期归档日志。

物理删除后,通过rman命令手动过期掉已删除的归档记录。(若磁盘空间未满也可通过rman删除归档日志)

使用delete expired archivelog all 命令删除所有过期归档日志:

rman target /

RMAN> crosscheck archivelog all;

delete expired archivelog all;

delete noprompt archivelog until time 'sysdate - 3' ;删除3天归档日志

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值