暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

检查数据库基本状况

原创 远行 2023-07-02
222

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用户相关的出错信息。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论