1.
1.1. 检查数据库创建日期
Select
Created, Log_Mode From V$Database;
CREATED LOG_MODE
-----------
------------
2014/8/17
1 NOARCHIVELOG
1.2. 检查数据库版本信息
Select
version from Product_component_version where SUBSTR(PRODUCT,1,6)='Oracle';
1.3. 检查实例状态
SQL> SELECT inst_id,
instance_name, host_name, VERSION, TO_CHAR (startup_time, 'yyyy-mm-dd
hh24:mi:ss') startup_time, status, archiver, database_status FROM gv$instance;
SELECT inst_id, dbid,
NAME, TO_CHAR (created, 'yyyy-mm-dd hh24:mi:ss') created, log_mode, TO_CHAR
(version_time, 'yyyy-mm-dd hh24:mi:ss') version_time,open_mode FROM
gv$database;
INST_ID DBID NAME CREATED LOG_MODE VERSION_TIME OPEN_MODE
---------- ----------
--------- ------------------- ------------ -------------------
--------------------
1 94264408 RACDB1 2014-08-17 16:34:32 NOARCHIVELOG 2014-08-17
16:34:32 READ WRITE
其中“STATUS”表示Oracle当前的实例状态,必须为“OPEN”;“DATABASE_STATUS”表示Oracle当前数据库的状态,必须为“ACTIVE”。
SQL> select
name,log_mode,open_mode from v$database;
NAME LOG_MODE OPEN_MODE
--------- ------------
--------------------
RACDB1 ARCHIVELOG
READ WRITE
其中“LOG_MODE”表示Oracle当前的归档方式。“ARCHIVELOG”表示数据库运行在归档模式下,“NOARCHIVELOG”表示数据库运行在非归档模式下。在我们的系统中数据库必须运行在归档方式下。
1.4.
查看前台进程
ps -C oracle -o 'rsz,sid,cmd'|grep LO
free -m|egrep -v 'total|buffers'|awk
'{ print $1,$3 }'
Oracle 的前台进程是操作系统进程,它和oracle
session 一一对应,官方建议,oracle sesson
=1.5*process +20
1.5. 查看数据库连接的session
SQL> select count(*) from
v$session;
1.6. 查看连接到数据库的模式
select program from v$process order
by program;
select d.NAME,s.NAME from
v$dispatcher d,v$shared_server s,v$circuit c where d.PADDR=c.DISPATCHER and
s.PADDR=c.SERVER
(S012)以s001等就是共享模式连接
1.7. 查看并发连接数
select count(*) from v$session where
status='ACTIVE';
1.8. 查看最大的连接'processes'
SQL>
select value from v$parameter where name = 'processes'
1.9. 监控系统后台进程
SQL> Select name,Description From
V$BGPROCESS Where Paddr<>'00';
1.10.
查看数据库初始化参数
select name,value from v$parameter where
isbasic='TRUE' order by name;
这些参数是当前数据库已经应用的参数
1.11.
检查PGA使用情况
select
name,value from v$pgastat where name in ('maximum PGA allocated','total PGA
allocated');
1.12.
检查SGA状态
SELECT request_misses, request_failures FROM v$shared_pool_reserved;
Select component,current_size,min_size,max_size
from v$sga_dynamic_components;
REQUEST_MISSES
REQUEST_FAILURES
--------------
----------------
0 0
期望结果:request_misses和request_failures应该接近于0。
巡检说明:request_misses是保留列表没有满足请求的可用内存片从而开始利用LRU列表刷新对象的次数;request_failures是未找到满足请求的内存次数。
1.13.
检查Oracle服务进程
[oracle@racdb1 ~]$ ps -ef|grep ora_|grep -v grep&&ps
-ef|grep ora_|grep -v grep|wc ?l
oracle 4459 1 0
15:53 ? 00:00:00 ora_pmon_racdb1
oracle 4461 1 0
15:53 ? 00:00:17 ora_vktm_racdb1
oracle 4465 1 0
15:53 ? 00:00:00 ora_gen0_racdb1
oracle 4467 1 0
15:53 ? 00:00:00 ora_diag_racdb1
oracle 4469 1 0
15:53 ? 00:00:00 ora_dbrm_racdb1
oracle 4471 1 0
15:53 ? 00:00:00 ora_psp0_racdb1
oracle 4473 1 0
15:53 ? 00:00:02 ora_dia0_racdb1
oracle 4475 1 0
15:53 ? 00:00:00 ora_mman_racdb1
oracle 4477 1 0
15:53 ? 00:00:00 ora_dbw0_racdb1
oracle 4479 1 0
15:53 ? 00:00:01 ora_lgwr_racdb1
oracle 4481 1 0
15:53 ? 00:00:05 ora_ckpt_racdb1
oracle 4483 1 0
15:53 ? 00:00:00 ora_smon_racdb1
oracle 4527 1 0
15:53 ? 00:00:00 ora_arc0_racdb1
oracle 4485 1 0
15:53 ? 00:00:00 ora_reco_racdb1
在检查Oracle的进程命令输出后,输出显示至少应包括以下一些进程:
. Oracle写数据文件的进程,输出显示为:“ora_dbw0_racdb1”
. Oracle写日志文件的进程,输出显示为:“ora_lgwr_racdb1”
. Oracle监听实例状态的进程,输出显示为:“ora_smon_racdb1”
. Oracle监听客户端连接进程状态的进程,输出显示为:“ora_pmon_racdb1”
. Oracle进行归档的进程,输出显示为:“ora_arc0_racdb1”
. Oracle进行检查点的进程,输出显示为:“ora_ckpt_racdb1”
. Oracle进行恢复的进程,输出显示为:“ora_reco_racdb1”
1.14.
检查Oracle监听状态
[oracle@racdb1 ~]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 21-JAN-2015
17:00:42
Copyright (c) 1991, 2009, Oracle.
All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=racdb1)))
STATUS of the LISTENER
------------------------
Alias
LISTENER
Version
TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date
21-JAN-2015 12:37:48
Uptime 0 days 4 hr. 22 min. 53 sec
Trace Level off
Security ON:
Local OS Authentication
SNMP OFF
Listener Parameter File
/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/racdb1/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=racdb1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.10)(PORT=1521)))
Services Summary...
Service "racdb1" has 1 instance(s).
Instance "racdb1",
status UNKNOWN, has 3 handler(s) for this service...
Service "racdb1.us.example.com" has 1 instance(s).
Instance "racdb1",
status READY, has 1 handler(s) for this service...
Service "racdb1XDB.us.example.com" has 1 instance(s).
Instance "racdb1",
status READY, has 1 handler(s) for this service...
The command completed successfully
“Services Summary”项表示Oracle的监听进程正在监听哪些数据库实例,输出显示中至少应该有“racdb1XDB”这一项。
1.15.
检查监听进程是否存在
[oracle@racdb1 ~]$ ps
-ef|grep lsn|grep -v grep
oracle 2140 1 0
12:37 ? 00:00:01
/u01/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr LISTENER -inherit
1.16.
检查操作系统日志文件
[root@racdb1 ~]# cat /var/log/messages |grep failed
查看是否有与Oracle用户相关的出错信息。
1.17.
检查oracle日志文件
SQL> select value
from v$diag_info where name='Diag Trace';
VALUE
--------------------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/racdb1/racdb1/trace
cat /u01/app/oracle/diag/rdbms/racdb1/racdb1/trace/alert_racdb1.log
| grep ora-
cat /u01/app/oracle/diag/rdbms/racdb1/racdb1/trace/alert_racdb1.log
| grep err
[oracle@racdb1 trace]$ cat
/u01/app/oracle/diag/rdbms/racdb1/racdb1/trace/alert_racdb1.log | grep fail
Oracle在运行过程中,会在警告日志文件(alert_SID.log)中记录数据库的一些运行情况:数据库的启动、关闭,启动时的非缺省参数;数据库的重做日志切换情况,记录每次切换的时间,及如果因为检查点(checkpoint)操作没有执行完成造成不能切换,会记录不能切换的原因;对数据库进行的某些操作,如创建或删除表空间、增加数据文件;数据库发生的错误,如表空间不够、出现坏块、数据库内部错误(ORA-600)等。定期检查日志文件,根据日志中发现的问题及时进行处理:
|
问题 |
处理 |
|
启动参数不对 |
检查初始化参数文件 |
|
因为检查点操作或归档操作没有完成造重做日志不能切换 |
如果经常发生这样的情况,可以考虑增加重做日日志文件组;想办法提高检查点或归档操作的效率; |
|
有人未经授权删除了表空间 |
检查数据库的安全问题,是否密码太简单;如有必要,撤消某些用户的系统权限 |
|
出现坏块 |
检查是否是硬件问题(如磁盘本生有坏块),如果不是,检查是那个数据库对象出现了坏块,对这个对象进行重建 |
|
表空间不够 |
增加数据文件到相应的表空间 |
|
出现ORA-600 |
根据日志文件的内容查看相应的TRC文件,如果是Oracle的bug,要及时打上相应的补丁 |
1.18.
检查Oracle核心转储目录
SQL> select value
from v$parameter where name='core_dump_dest';
VALUE
--------------------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/racdb1/racdb1/cdump
[oracle@racdb1 cdump]$ ls
/u01/app/oracle/diag/rdbms/racdb1/racdb1/cdump/*.trc|wc -l
如果上面命令的结果每天都在增长,则说明Oracle进程经常发生核心转储。这说明某些用户进程或者数据库后台进程由于无法处理的原因而异常退出。频繁的核心转储特别是数据库后台进程的核心转储会导致数据库异常终止。Oracle 常用日志文件位置查询
select * from v$parameter where
name='background_dump_dest';
select * from v$parameter where
name='user_dump_dest';
select * from v$parameter where
name='core_dump_dest';
select * from v$parameter where
name='audit_file_dest';
select * from v$parameter where
name='audit_syslog_level';
1.19.
检查Root用户和Oracle用户的email
[oracle@racdb1 racdb1]$ tail -n 200 /var/mail/oracle
[oracle@racdb1 racdb1]$ tail -n 200 /var/mail/root
查看有无与Oracle用户相关的出错信息。




