# ---------------------------------------------------- #
# 系统负载 #
# ---------------------------------------------------- #
top -n1|head -20
netstat -apn|wc -l
netstat -pn -l|grep 1521 -c
df -h
# ---------------------------------------------------- #
# 检测实例 #
# ---------------------------------------------------- #
ps -ef|grep ora_.mon |grep -v grep
ps -ef|egrep "_pmon_|_smon_|_arc._|_dbw._|_lgwr_|_ckpt_" |egrep -v egrep
# ---------------------------------------------------- #
# 检测监听 #
# ---------------------------------------------------- #
netstat -pn -l -t|grep 1521|grep -v grep
ps -ef|grep tnslsnr|grep -v grep
# ---------------------------------------------------- #
# 检测Alert日志 #
# ---------------------------------------------------- #
sed -n "/`date -d "-3 day" +"%a %b %e"`/,$"p ${ORACLE_BASE}/admin/${ORACLE_SID}/bdump/alert_${ORACLE_SID}.log |grep ORA- -B 2 -A 5
# ---------------------------------------------------- #
# 查询数据库状态 #
# ---------------------------------------------------- #
column PLATFORM_NAME format a30
column DB_UNIQUE_NAME format a20
select DBID,NAME,DB_UNIQUE_NAME,to_char(CREATED,'yyyy-mm-dd') CREATD,
to_char(RESETLOGS_TIME,'yyyy-mm-dd') RSTIME,
LOG_MODE,OPEN_MODE,
DATABASE_ROLE DB_ROLE,
GUARD_STATUS DGSTAT,
PLATFORM_NAME,
FLASHBACK_ON
from v$database;
# ---------------------------------------------------- #
# 表空间使用 #
# ---------------------------------------------------- #
column name format a20
column "Used (M)" format a20
column "Free (MB)" format a20
SELECT d.status "Status", d.tablespace_name "Name", d.contents "Type", d.extent_management "Extent Management",
TO_CHAR(NVL(a.bytes/1024/1024, 0),'99,999,990.900') "Size (M)",
NVL(a.bytes -NVL(f.bytes, 0), 0)/1024/1024 ||'/'||NVL(a.bytes/1024/1024, 0) "Used (M)",
TO_CHAR(NVL((a.bytes -NVL(f.bytes, 0)) / a.bytes , 0)* 100, '990.00')||'%' "Used %" ,
nvl(f.bytes,0)/1024/1024||'/'||nvl(a.bytes/1024/1024,0) "Free (MB)",
to_char(nvl(nvl(f.bytes,0) / a.bytes,0)*100,'990.00')||'%' "Free (%)"
FROM sys.dba_tablespaces d,
(select tablespace_name, sum(bytes) bytes from dba_data_files group by tablespace_name) a,
(select tablespace_name, sum(bytes) bytes from dba_free_space group by tablespace_name) f
WHERE d.tablespace_name = a.tablespace_name(+)
AND d.tablespace_name = f.tablespace_name(+)
AND NOT (d.extent_management like 'LOCAL' AND d.contents like 'TEMPORARY')
UNION ALL
SELECT d.status "Status",d.tablespace_name "Name", d.contents "Type", d.extent_management "Extent Management",
TO_CHAR(NVL(a.bytes / 1024 / 1024, 0),'99,999,990.900') "Size (M)",
NVL(t.bytes, 0)/1024/1024||'/'||NVL(a.bytes/1024/1024, 0) "Used (M)",
TO_CHAR(NVL(t.bytes / a.bytes , 0)* 100, '990.00')||'%' "Used %",
(a.bytes-nvl(t.bytes,0))/1024/1024||'/'||nvl(a.bytes/1024/1024,0) "Free (MB)",
to_char(nvl((a.bytes-nvl(t.bytes,0)) / a.bytes,0)*100,'990.00')||'%' "Free (%)"
FROM sys.dba_tablespaces d,
(select tablespace_name, sum(bytes) bytes from dba_temp_files group by tablespace_name) a,
(select tablespace_name, sum(bytes_cached) bytes from v$temp_extent_pool group by tablespace_name) t
WHERE d.tablespace_name = a.tablespace_name(+)
AND d.tablespace_name = t.tablespace_name(+)
AND d.extent_management like 'LOCAL'
AND d.contents like 'TEMPORARY';
# ---------------------------------------------------- #
# 数据文件使用 #
# ---------------------------------------------------- #
col file_name format a50
SELECT df.file_id, df.file_name, df.size_mb,
NVL (free.maxfree, 0) maxfree_mb,
ROUND (NVL (free.free_mb, 0), 2) free_mb,
100 - ROUND (100.0 * NVL (free.free_mb, 0) / df.size_mb, 2) pct_used,
ROUND (100.0 * NVL (free.free_mb, 0) / df.size_mb, 2) pct_free,
df.status
FROM (SELECT file_id, file_name, tablespace_name, BYTES / 1048576 size_mb,status
FROM dba_data_files) df,
(SELECT file_id, SUM (BYTES) / 1048576 free_mb,
TRUNC (MAX (BYTES / 1024 / 1024), 2) maxfree
FROM dba_free_space
GROUP BY file_id) free
WHERE df.file_id = free.file_id(+)
ORDER BY 2;
# ---------------------------------------------------- #
# 等待事件 #
# ---------------------------------------------------- #
select event, sum(seconds_in_wait) "wait time(s)",count(sid) "count" from v$session_wait group by event;
# ---------------------------------------------------- #
# 引起等待事件的语句 #
# ---------------------------------------------------- #
select s.sql_text, sw.event
from v$session b,v$session_wait sw,v$sqltext s
where b.sid=sw.sid
and sw.event not like '%SQL*Net%'
and sw.EVENT NOT LIKE 'rdbms%'
and s.hash_value=b.sql_hash_value
and s.sql_id=b.sql_id
order by s.address,s.piece;
# ---------------------------------------------------- #
# redo log 切换频率 #
# ---------------------------------------------------- #
SELECT TO_CHAR (first_time, 'yyyy-mm-dd') DAY, COUNT (*) switch_times, SUM (DECODE (TO_CHAR (first_time, 'hh24'), '00', 1, 0)) h00, SUM (DECODE (TO_CHAR (first_time, 'hh24'), '01', 1, 0)) h01, SUM (DECODE (TO_CHAR (first_time, 'hh24'), '02', 1, 0)) h02, SUM (DECODE (TO_CHAR (first_time, 'hh24'), '03', 1, 0)) h03, SUM (DECODE (TO_CHAR (first_time, 'hh24'), '04', 1, 0)) h04, SUM (DECODE (TO_CHAR (first_time, 'hh24'), '05', 1, 0)) h05, SUM (DECODE (TO_CHAR (first_time, 'hh24'), '06', 1, 0)) h06, SUM (DECODE (TO_CHAR (first_time, 'hh24'), '07', 1, 0)) h07, SUM (DECODE (TO_CHAR (first_time, 'hh24'), '08', 1, 0)) h08,
SUM (DECODE (TO_CHAR (first_time, 'hh24'), '09', 1, 0)) h09,
SUM (DECODE (TO_CHAR (first_time, 'hh24'), '10', 1, 0)) h10,
SUM (DECODE (TO_CHAR (first_time, 'hh24'), '11', 1, 0)) h11,
SUM (DECODE (TO_CHAR (first_time, 'hh24'), '12', 1, 0)) h12,
SUM (DECODE (TO_CHAR (first_time, 'hh24'), '13', 1, 0)) h13,
SUM (DECODE (TO_CHAR (first_time, 'hh24'), '14', 1, 0)) h14,
SUM (DECODE (TO_CHAR (first_time, 'hh24'), '15', 1, 0)) h15,
SUM (DECODE (TO_CHAR (first_time, 'hh24'), '16', 1, 0)) h16,
SUM (DECODE (TO_CHAR (first_time, 'hh24'), '17', 1, 0)) h17,
SUM (DECODE (TO_CHAR (first_time, 'hh24'), '18', 1, 0)) h18,
SUM (DECODE (TO_CHAR (first_time, 'hh24'), '19', 1, 0)) h19,
SUM (DECODE (TO_CHAR (first_time, 'hh24'), '20', 1, 0)) h20,
SUM (DECODE (TO_CHAR (first_time, 'hh24'), '21', 1, 0)) h21,
SUM (DECODE (TO_CHAR (first_time, 'hh24'), '22', 1, 0)) h22,
SUM (DECODE (TO_CHAR (first_time, 'hh24'), '23', 1, 0)) h23
FROM v$log_history
WHERE first_time > TRUNC (SYSDATE - 1)
GROUP BY ROLLUP (TO_CHAR (first_time, 'yyyy-mm-dd'));
# ---------------------------------------------------- #
# redo log 缓冲区 #
# ---------------------------------------------------- #
期望结果:应该小于5%。
巡检说明:由于数据库的所有DML和DLL操作在执行之前必须在重做日志缓冲区生成一条记录,故重做日志缓冲区内的竞争将严重影响数据库的性能。在重做日志缓冲区内的竞争主要有两类,latch竞争和过量请求竞争。
SELECT TO_CHAR (ROUND ((r.VALUE / e.VALUE) * 100, 2), '990.99' ) || '%' "redolog buffer retry ratio" FROM v$sysstat r, v$sysstat e WHERE r.NAME = 'redo buffer allocation retries' AND e.NAME = 'redo entries';
# ---------------------------------------------------- #
# 检查无效的对象 #
# ---------------------------------------------------- #
select owner,object_id,object_name,object_type,status from dba_objects where owner in ( 'SMS', 'MMS', 'WAP', 'UNINET', 'SYS', 'SYSTEM') and status != 'VALID' order by owner;
SELECT object_id, owner || '.' || object_name object_name, object_type, status, TO_CHAR (created, 'yy-mm-dd hh24:mi:ss') created, TO_CHAR (last_ddl_time, 'yyyy-mm-dd hh24:mi:ss') last_ddl_time FROM all_objects WHERE status != 'VALID';