2024年1月14日发(作者:)

数据库巡检

张浩

数据库检测

硬件机型 HP DL580 G7

是否集群 是

系统实际用户数 10

数据库进程

进入操作系统,登陆Oracle用户,命令:su — oracle

进入操作系统,登陆Oracle用户

进程情况 命令:ps -ef|grep ora_

Oracle 11g后台进程

DBRM

说明: 数据库资源管理进程(The database resource manager

process),负责设置资源计划和其他的资源管理的工作。

DIAG

说明: 数据库诊断进程(The diagnosibility process),负责维护管理各种用于诊断的转储文件,并执行oradebug命令。

DIA0

说明: 另一个数据库诊断进程,负责检测Oracle数据库中的挂起(hang)和死锁的处理。

PSP0

说明: process spawner,用于产生oracle进程

SMCO

说明: space management coordinator,该进程负责空间管理协调管理工作,负责执行空间的分配和回收。

Wnnn

说明: 命名为W000,W001,W002..。。。,由smcO动态产生执行上述相关任务.

VKTM

说明: virtual keeper of time,用于提供wall-clock time,(每秒钟更新一次)。提供每二十毫秒更新一次的

reference—time counter,看起来有点类似计时器的功能。

GMON

说明: 用于维护asm磁盘组的磁盘之间的关系.

KATE

说明: 当ASM的磁盘离线的时候,该进程负责asm的元文件的io读写。

MARK

说明: 如果有向asm离线磁盘的missed 写请求,该进程将ASM分配的单元的状态标记为stale

FBDA

Process

说明

1 / 8

说明: 涉及到flashback—data—archive新特性的一个进程,The

flashback data archiver proces。用于将”轨表”(tracked

tables)的历史数据进行归档。当"轨表”上的事务提交以后,fbda进程负责将数据的前镜像保存到flashback archive区域.

该进程还负责flashback的数据归档的空间管理、分配、保留,跟踪tracked transactions.

什么是"轨表”(tracked tables): 是指启用了flashback archive特性的表。

RMSn

说明: The Oracle RAC management processes,负责执行Oracle RAC的管理任务,比如RAC相关资源的创建和集群中新实例的

添加。

DSKM

说明: The slave diskmon process , 负责oracle 实例、asm实例和磁盘的管理进程之间的io fencing 信息的交换.如果

使用SAGE的存储,该进程还负责SAGE存储的一些信息的管理.

RAC 进程

GSD global services daemon全局服务守护进程

lock process(LCK) 锁管理进程

DIAG:DIAGNOSABILITY DAEMON失败进程的诊断信息捕获进程

Operating System—Dependent(OSD) 操作系统资源访问进程

LMS — Gobal Cache Service Process 全局缓存服务进程

LMD - Global Enqueue Service Daemon全局查询服务守护进程

LMON—Global Enqueue Service Monitor全局查询服务监视进程

LCK0 — Instance Enqueue Process 实例查询进程

Space

进程状态

使用情况

df -h

监听状态

运行情况

命令:lsnrctl status

配置正常

Listener

命令:sqlplus “/as sysdba”

命令:

More /u01/app/oracle/product/11。2。0/db_1/network/log/sqlnet。log

有错误才有日志

标准配置

位置:/u01/app/oracle/product/11.2.0/db_1/network/admin

正常

Tnsping tnsname(数据库实例名)

标准配置

/u01/app/oracle/diag/rdbms/〈SID〉/

查看日志

配置情况

Tnsname 运行情况

查看状态

Alert

2 / 8

配置情况

运行情况

正常

More alert_

CRS

服务运行情况

资源运行情况

运行情况

运行情况

crsctl check crs

检查crs的健康情况

crs_stat –t

用来查看RAC中各节点上resources的运行状况,Resources的属性等

ocrcheck

验证OCR的状态以及空间使用情况

crsctl query css votedisk

Votingdisk 状态查询

# su — grid

$ asmcmd

ASMCMD> ls

DATA/

ORA_DATA/

ASMCMD> lsdg ora_data

OCR

Voting

Disk

运行情况

crs_stat —t | grep asm

ASM

使用情况

数据库

su – oracle

sqlplus “/as sysdba”

诊断结果及建议

数据库状select status from v$instance;

配置情况

Select * from v$parameter;

DBstatus

运行情况

使用资源情况

使用情况

数据文件状态

控制文件状态

日志文件状态

正常

select * from v$resource_limit;

select group_number,name,total_mb,free_mb from v$asm_diskgroup;

select name,status from v$datafile;

select status,name from v$controlfile;

select group#,members,archived,status from v$log;

ASM

DBfile

3 / 8

表空间使set pagesize 50

用率

column "Tablespace” format a13

column "UsedMB” format 99,999,999

column ”FreeMB" format 99,999,999

column "Total MB” format 99,999,999

select

fs。tablespace_name "Tablespace",

(pace - fs。freespace) ”Used MB”,

fs。freespace ”FreeMB”,

pace ”Total MB”,

round(100 * (fs。freespace / df。totalspace)) ”Pct Free”

from

(select

tablespace_name,

round(sum(bytes)/1048576) TotalSpace

from

dba_data_files

group by

tablespace_name

) df,

(select

tablespace_name,

round(sum(bytes)/1048576) FreeSpace

from

dba_free_space

group by

tablespace_name

) fs

where pace_name=pace_name

order by ”Pct Free”

/

运行情况

正常

select count(*) from v$session where status='ACTIVE';

Sessions 并发数

使用情况

select b。THREAD#,#,,,,ED,b。STATUS

Redo

from v$logfile a,v$log b where #=b。GROUP#;

配置情况

察看数据锁表有时候是瞬间的,长时间锁定的表才可能是死锁。

Performan库锁表

select l。*, , s。ACTION, _NAME

from gv$locked_object l, gv_$session s, all_objects o

ce

where l。SESSION_ID=s。SID

and o。OBJECT_ID=_ID

4 / 8

死锁

set linesize 200

column oracle_username for a16

column os_user_name for a12

column object_name for a30

SELECT l。xidusn, _id,l。oracle_username,_user_name,l。process,

n_id,s。serial#, l。locked_mode,o。object_name

FROM v$locked_object l,dba_objects o,v$session s

where l。object_id = o。object_id and = l。session_id;

select me||' '||t2。sid||' ’||t2。serial#||' ’||t2。logon_time||' '||t3。sql_text

from v$locked_object t1,v$session t2,v$sqltext t3

where n_id=

and t2。sql_address=t3。address

order by _time;

Selecteq_type"lock",total_req# ”gets",total_wait# ”waits”,cum_wait_time from v$enqueue_stat where

total_wait#〉0;

column username for a12

column program for a30

column event for a28

column p1text for a15

column p1 for 999,999,999,999,999

select s。username,m,,sw.p1text,sw。p1 from

v$session s,v$session_wait sw

where = and =’ACTIVE’

order by sw.p1;

select event,p1 "File #”,p2 "Block #”,p3 "Reason Code” from

v$session_wait

order by event;

where event = 'buffer busy waits’;

select owner,segment_name,segment_type,file_id,block_id from

dba_extents

where file_id = &P1 and &P2 between block_id and block_id + blocks

-1;

column event for a35;

column p1text for a40;

select sid,event,p1,p1text from v$session_wait order by event;

enqueue等待

等待事件

set linesize 200

RAC全局select * from v$event_name where NAME like 'gc%' and

等待事WAIT_CLASS=’Cluster';

5 / 8

数据文件select name,rd pbr,wrt pbw,f。phyblkrd

pyr,m,im

IO

from v$filestat f, v$dbfile fs

where # = # order by 2,3,4 desc;

表空间IO

select tablespace_name,sum(f。phyblkrd) pbr,sum(wrt)

pbw,sum(rd) pyr,sum(m),sum(f。writetim)

from v$filestat f, dba_data_files fs

where f。file# = _id

group by tablespace_name

order by 2,3,4 desc;

长事务

set linesize 200

column name for a16

column username for a10

select ,b。xacts,,#,me,d。sql_text

from v$rollname a,v$rollstat b,v$session c,v$sqltext d,v$transaction e

where a。usn=b。usn

and b。usn=

and c。taddr=e。addr

and c。sql_address=d。ADDRESS

and _hashvalue=_value

order by a。name,c。sid,;

select sid,serial#,to_char(start_time,’yyyy-mm-dd hh24:mi:ss’)

start_time,sofar,totalwork,(sofar/decode(totalwork,0,1,totalwork))*100 ratio,message from v$session_longops

where message like '%RMAN%';

select sid,serial#,to_char(start_time,’yyyy—mm—dd hh24:mi:ss') start_time,sofar,totalwork,(sofar/decode(totalwork,0,1,totalwork))*100 ratio,message from v$session_longops

where sofar <〉 totalwork;

where (sofar/totalwork)*100 〈 100;

大事务

察看用户

sessionSelect count(*) from v$session;

如果session过多,察看select * from v$session,察看是什么程序

数量

6 / 8

归档的生set linesize 120

column begin_time for a26

成频率

column end_time for a26

select ,to_char(a。first_time,'yyyy-mm—dd hh24:mi:ss')

begin_time,

,to_char(b。first_time,'yyyy—mm-dd hh24:mi:ss’)

end_time,

round((b。first_time — _time)*24*60,2) minutes

from v$log_history a,v$log_history b

where = +1;

SELECT (1 - (SUM(DECODE(NAME, ’physical reads’, VALUE, 0))

/

(SUM(DECODE(NAME, ’db block gets', VALUE, 0)) +

SUM(DECODE(NAME, ’consistent gets', VALUE, 0))))) * 100

"缓冲区命中率"

FROM V$SYSSTAT;

SELECT name, gets, misses, immediate_gets, immediate_misses,

100 — Decode(gets,0,0,misses/(gets+misses))*100 ratio1,

100 - Decode(immediate_gets+immediate_misses,0,0,immediate_misses/(immediate_gets+immediate_misses))*100 ratio2

FROM v$latch WHERE name IN (’redo allocation', ’redo copy’);

SELECT EXECUTIONS , DISK_READS, BUFFER_GETS,

ROUND((BUFFER_GETS—DISK_READS)/BUFFER_GETS,2) Hit_radio,

ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run,

SQL_TEXT

FROM V$SQLAREA

WHERE EXECUTIONS>0

AND BUFFER_GETS 〉 0

AND (BUFFER_GETS—DISK_READS)/BUFFER_GETS < 0。8

ORDER BY 4 DESC;

select sql_text,buffer_gets,executions,buffer_gets/executions

from v$sqlarea where buffer_gets>1000000 order by 4 desc;

缓冲区命中率

重做日志命中率

低效SQL

TOP SQL

7 / 8

临时表空间情况

SELECT me 用户名,

se。sid,

#,

se。sql_address,

e,

se。program,

su。tablespace,

su。blocks*8192/1024/1024 "Used Space(M)”,

e,

su。contents

FROM v$session se,

v$sort_usage su

WHERE se。saddr=su。session_addr;

SELECT ,B。FIRST_TIME,A。FIRST_TIME,ROUND((A。FIRST__TIME)*24*60,2) MINATES

FROM V$LOG_HISTORY A,V$LOG_HISTORY B

WHERE =B。RECID +1 AND _TIME>SYSDATE — 20 AND

ROUND((A。FIRST_TIME—B。FIRST_TIME)*24*60,2)〈30

ORDER BY A。FIRST_TIME DESC;

SELECT OWNER,INDEX_NAME,INDEX_TYPE,TABLE_NAME,STATUS FROM

DBA_INDEXES

WHERE STATUS = 'UNUSABLE’;

在线日志情况

无效索引

8 / 8