Oracle 巡检精简版
Oracle巡检检查
1. 检查数据库基本状况
包含:检查Oracle实例状态,检查Oracle服务进程,检查Oracle监听进程,共三个部分。
1.1.检查Oracle实例,数据库状态
select status,database_status from v$instance;
其中“STATUS”表示Oracle当前的实例状态,必须为“OPEN”;“DATABASE_STATUS”表示Oracle当前数据库的状态,必须为“ACTIVE”。
1.2. 检查Oracle在线日志状态
select group#,status,type,member from v$logfile;
输出结果应该有3条以上(包含3条)记录,“STATUS”应该为非“INVALID”,非“DELETED”。
注:“STATUS”显示为空表示正常。
1.3. 检查Oracle表空间的状态,所有数据文件状态
select tablespace_name,status from dba_tablespaces;
输出结果中STATUS应该都为ONLINE。
select name,status from v$datafile;
输出结果中“STATUS”应该都为“ONLINE”,有SYSTEM正常。
select file_name,status from dba_data_files;
输出结果中“STATUS”应该都为“AVAILABLE”。
1.4. 检查无效对象
select owner, object_name, object_type
from dba_objects
where status != 'VALID'
and owner != 'SYS'
and owner != 'SYSTEM';
如果有记录返回,则说明存在无效对象。
若这些对象与应用相关,那么需要重新编译生成这个对象,或者:
SELECT owner, object_name, object_type
FROM dba_objects
WHERE status = 'INVALID';
1.5.检查数据库日志文件
find / -name alert *.log
vim (上述命令查找的文件)
查看是否有以ora-开头的报错 跟据报错信息反馈
1.6检查监听状态
lsnrctl status
是否正常启动
2. 检查Oracle相关资源的使用情况
--a.检查Oracle初始化文件中相关的参数值
--b.检查数据库连接情况,检查系统磁盘空间
--c.检查Oracle各个表空间使用情况,检查一些扩展异常的对象,
--d.检查system表空间内的内容,检查对象的下一扩展与表空间的最大扩展值,总共七个部分。
2.1. 检查Oracle初始化文件中相关参数值
select resource_name, max_utilization, initial_allocation, limit_value
from v$resource_limit;
若LIMIT_VALU-MAX_UTILIZATION<=5,则表明与RESOURCE_NAME相关的Oracle初始化参数需要调整。
可以通过修改Oracle初始化参数文件$ORACLE_BASE/admin/CKDB/pfile/initORCL.ora来修改。
2.2. 检查数据库连接情况
查看当前会话连接数,是否属于正常范围。
select count(*) from v$session;
select sid,serial#,username,program,machine,status from v$session;
其中:SID 会话(session)的ID号;
SERIAL# 会话的序列号,和SID一起用来唯一标识一个会话;
USERNAME 建立该会话的用户名;
PROGRAM 这个会话是用什么工具连接到数据库的;
STATUS 当前这个会话的状态,ACTIVE表示会话正在执行某些任务,INACTIVE表示当前会话没有执行任何操作;
如果建立了过多的连接,会消耗数据库的资源,同时,对一些“挂死”的连接可能需要手工进行清理。
如果DBA要手工断开某个会话,则执行:
- 通过sid查到操作系统的spid
ps –ef|grep spidno
- 杀掉连接
alter system kill session 'SID,SERIAL#';
注意:上例中SID为1到10(USERNAME列为空)的会话,是Oracle的后台进程,不要对这些会话进行任何操作。
2.3. 检查系统磁盘空间
如果文件系统的剩余空间过小或增长较快,需对其进行确认并删除不用的文件以释放空间。
[oracle@AS14 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda5 9.7G 3.9G 5.4G 42% /
/dev/sda1 479M 16M 438M 4% /boot
/dev/sda2 49G 19G 28G 41% /data
none 1014M 0 1014M 0% /dev/shm
2.4. 检查表空间使用情况
select f.tablespace_name,
a.total,
f.free,
round((f.free / a.total) * 100) "% Free"
from (select tablespace_name, sum(bytes / (1024 * 1024)) total
from dba_data_files
group by tablespace_name) a,
(select tablespace_name, round(sum(bytes / (1024 * 1024))) free
from dba_free_space
group by tablespace_name) f
WHERE a.tablespace_name = f.tablespace_name(+)
order by "% Free";
注意:如果空闲率%Free小于10%以上(包含10%)需判断是否自动扩展,则注意要增加数据文件来扩展表空间而不要是用数据文件的自动扩展功能。
-
修改表空间大小(谨慎处理)
查询datafile 路径,是否自动扩展,最大文件大小
select * from dba_data_files;
alter database datafile 'D:\ORACLE\PRODUCT\ORADATA\TEST\USERS01.DBF' resize 50m;
增加数据文件
alter tablespace 表空间名 add datafile 'E:\ORACLE\ORADATA\ORCL\NNC_DATA011.DBF' size 10240M autoextend on;
注意:请不要对表空间增加过多的数据文件,增加数据文件的原则是每个数据文件大小为2G或者4G,自动扩展的最大限制在8G。
3. 检查Oracle数据库备份结果(看每天是不是有一个备份就可以了)
a.检查数据库备份日志信息;
b.检查backup卷中文件产生的时间;
c.检查oracle用户的email;
d .rman备份 rman target /
数据浜备份 (看脚本调用卸载那个下面)list backupset
3.1. 检查数据库备份日志信息
假设:备份的临时目录为/backup/hotbakup,我们需要检查2009年7月22日的备份结果,则用下面的命令来检查:
cat /backup/hotbackup/hotbackup-09-7-22.log|grep –i error
备份脚本的日志文件为hotbackup-月份-日期-年份.log,在备份的临时目录下面。如果文件中存在“ERROR:”,则表明备份没有成功,存在问题需要检查。
3.2. 检查backup卷中文件产生的时间
ls –lt /backup/hotbackup
backup卷是备份的临时目录,查看输出结果中文件的日期,都应当是在当天凌晨由热备份脚本产生的。如果时间不对则表明热备份脚本没执行成功。
4 检查数据库cpu、I/O、内存性能(偶尔)
记录数据库的cpu使用、IO、内存等使用情况,使用vmstat,iostat,sar,top等命令进行信息收集并检查这些信息,判断资源使用情况。
4.1 CPU使用情况:
[root@sale8 ~]# top
top - 10:29:35 up 73 days, 19:54, 1 user, load average: 0.37, 0.38, 0.29
Tasks: 353 total, 2 running, 351 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.2% us, 0.1% sy, 0.0% ni,98.8% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 16404472k total, 12887428k used, 3517044k free, 60796k buffers
Swap: 8385920k total, 665576k used, 7720344k free, 10358384k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30495 oracle 15 0 8329m 866m 861m R 10 5.4 7:53.90 oracle
32501 oracle 15 0 8328m 1.7g 1.7g S 2 10.6 1:58.38 oracle
32503 oracle 15 0 8329m 1.6g 1.6g S 2 10.2 2:06.62 oracle
注意上面的蓝色字体部分,此部分内容表示系统剩余的cpu,当其平均值下降至10%以下的时视为CPU使用率异常,需记录下该数值,并将状态记为异常。
4.2 内存使用情况:
# free -m
total used free shared buffers cached
Mem: 2026 1958 67 0 76 1556
-/+ buffers/cache: 326 1700
Swap: 5992 92 5900
如上所示,蓝色部分表示系统总内存,红色部分表示系统使用的内存,黄色部分表示系统剩余内存,当剩余内存低于总内存的10%时视为异常。
4.3 系统I/O情况:
# iostat -k 1 3
Linux 2.6.9-22.ELsmp (AS14) 07/29/2009
avg-cpu: %user %nice %sys%iowait %idle
0.16 0.00 0.05 0.36 99.43
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 3.33 13.16 50.25 94483478 360665804
avg-cpu: %user %nice %sys%iowait %idle
0.00 0.00 0.00 0.00 100.00
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.00 0.00 0.00 0 0
如上所示,蓝色字体部分表示磁盘读写情况,红色字体部分为cpu IO等待情况。
4.4 系统负载情况:
uptime
12:08:37 up 162 days, 23:33, 15 users, load average: 0.01, 0.15, 0.10
如上所示,蓝体字部分表示系统负载,后面的3个数值如果有高于2.5的时候就表明系统在超负荷运转了,并将此值记录到巡检表,视为异常。
4.5 检查排序区
select name,value from v$sysstat where name like '%sort%';
如果disk/(memoty+row)的比例过高,则需要调整sort_area_size(workarea_size_policy=false)或pga_aggregate_target(workarea_size_policy=true)。