Oracle 数据库日常巡检(4)

create table aa as select a.* from sb_zsxx a,chained_rows b where a.rowid=b.head_rowid and b.table_name ='SB_ZSXX';
delete from sb_zsxx where rowid in (select head_rowid from chained_rows where table_name = 'SB_ZSXX');
insert into sb_zsxx select * from chained_row where table_name = 'SB_ZSXX';

5.7 定期做统计分析
对于采用Oracle Cost-Based-Optimizer的系统,需要定期对数据对象的统计信息进行采集更新,使优化器可以根据准备的信息作出正确的explain plan。在以下情况更需要进行统计信息的更新:
a. 应用发生变化
b. 大规模数据迁移、历史数据迁出、其他数据的导入等
c .数据量发生变化
查看表或索引的统计信息是否需更新,如:

Select table_name,num_rows,last_analyzed From user_tables where table_name ='DJ_NSRXX'
select count(*) from DJ_NSRXX如num_rows和count(*)

如果行数相差很多,则该表需要更新统计信息,建议一周做一次统计信息收集,如:

exec sys.dbms_stats.gather_schema_stats(ownname=>'CTAIS2',cascade => TRUE,degree => 4);

5.8 检查缓冲区命中率

SELECT a.VALUE + b.VALUE logical_reads,
      c.VALUE phys_reads,
      round(100 * (1 - c.value / (a.value + b.value)), 4) hit_ratio
  FROM v$sysstat a, v$sysstat b, v$sysstat c
 WHERE a.NAME = 'db block gets'
  AND b.NAME = 'consistent gets'
  AND c.NAME = 'physical reads';

如果命中率低于90%则需加大数据库参数db_cache_size。

5.9 检查共享池命中率

select sum(pinhits) / sum(pins) * 100 from v$librarycache;

如低于95%,则需要调整应用程序使用绑定变量,或者调整数据库参数shared pool的大小。

5.10 检查排序区

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)。

5.11 检查日志缓冲区

select name,value from v$sysstat where name in ('redo entries','redo buffer allocation retries');

如果redo buffer allocation retries/redo entries超过1%,则需要增大log_buffer。

6. 检查数据库安全性

在本节主要检查Oracle数据库的安全性,包含:检查系统安全信息,定期修改密码,总共两个部分。

6.1. 检查系统安全日志信息

系统安全日志文件的目录在/var/log下,主要检查登录成功或失败的用户日志信息。

检查登录成功的日志:

[root@rac2 ~]# grep -i accepted /var/log/secure

Jan 8 08:44:43 rac2 sshd[29559]: Accepted password for root from ::ffff:10.10.10.6 port 1119 ssh2……

检查登录失败的日志:

[root@rac2 ~]# grep -i inval /var/log/secure &&grep -i failed /var/log/secure

Jan 9 10:30:44 rac2 sshd[3071]: Invalid user ydbuser from ::ffff:192.168.3.5

Jan 9 10:30:56 rac2 sshd[3071]: Failed password for invalid user ydbuser from ::ffff:192.168.3.5 port 36005 ssh2

Jan 9 10:30:56 rac2 sshd[3071]: Failed password for invalid user ydbuser from ::ffff:192.168.3.5 port 36005 ssh2

Jan 10 22:44:38 rac2 sshd[21611]: Failed password for root from ::ffff:10.10.10.6 port 1723 ssh2

在出现的日志信息中没有错误(Invalid、refused)提示,如果没有(Invalid、refused)视为系统正常,出现错误提示,应作出系统告警通知。

6.2. 检查用户修改密码

在数据库系统上往往存在很多的用户,如:第三方数据库监控系统,初始安装数据库时的演示用户,管理员用户等等,这些用户的密码往往是写定的,被很多人知道,会被别有用心的人利用来攻击系统甚至进行修改数据。需要修改密码的用户包括:
数据库管理员用户SYS,SYSTEM;其他用户。
登陆系统后,提示符下输入cat /etc/passwd,在列出来的用户中查看是否存在已经不再使用的或是陌生的帐号。若存在,则记录为异常。

修改密码方法:

alter user USER_NAME identified by PASSWORD;

7. 其他检查

在本节主要检查当前crontab任务是否正常,检查Oracle Job是否有失败等共六个部分。

7.1 检查当前crontab任务是否正常

[oracle@AS14 ~]$ crontab -l

7.2 Oracle Job是否有失败

select job,what,last_date,next_date,failures,broken from dba_jobs Where schema_user='CAIKE';

如有问题建议重建job,如:

exec sys.dbms_job.remove(1);
commit;
exec sys.dbms_job.isubmit(1,'REFRESH_ALL_SNAPSHOT;',SYSDATE+1/1440,'SYSDATE+4/1440');
commit;

7.3. 监控数据量的增长情况

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5fc5caf4df1dea8054a2d4d9d75145d4.html