Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9168576
  • 博文数量: 1669
  • 博客积分: 16831
  • 博客等级: 上将
  • 技术积分: 12594
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-25 07:23
个人简介

柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!

文章分类

全部博文(1669)

文章存档

2023年(4)

2022年(1)

2021年(10)

2020年(24)

2019年(4)

2018年(19)

2017年(66)

2016年(60)

2015年(49)

2014年(201)

2013年(221)

2012年(638)

2011年(372)

分类: Oracle

2012-01-30 11:34:16

日常工作手册

 

 

 

                                            

文档控制

 

修改记录

 

 

 

审阅

 

姓名

职位

 

 

李娇华

 

 

 

 

 

背景概述. 1

工作内容. 2

每天的工作. 2

每周的工作. 7

每月的工作. 9

每季度的工作. 10

附录. 11

 

 



检查数据库状态 

确认所有的INSTANCE状态以及listener状态正常,登陆到所有数据库或例程,检测ORACLE后台进程:

$ ps –ef|grep ora

$ lsnrctl status

SQL> select status from v$instance;

 

检查文件系统

如果文件系统的剩余空间过小或增长较快,需对其进行确认并删除不用的文件以释放空间。

$df –k

$df -h

 

检查警告日志文件(alert_SID.log

Oracle在运行过程中,会在警告日志文件(alert_SID.log)中记录数据库的一些运行情况:数据库的启动、关闭,启动时的非缺省参数;数据库的重做日志切换情况,记录每次切换的时间,及如果因为检查点(checkpoint)操作没有执行完成造成不能切换,会记录不能切换的原因;对数据库进行的某些操作,如创建或删除表空间、增加数据文件;

数据库发生的错误,如表空间不够、出现坏块、数据库内部错误(ORA600)定期检查日志文件,根据日志中发现的问题及时进行处理

问题

处理

启动参数不对

检查初始化参数文件

因为检查点操作或归档操作没有完成造成重做日志不能切换

如果经常发生这样的情况,可以考虑增加重做日志文件组;想办法提高检查点或归档操作的效率;

有人未经授权删除了表空间

检查数据库的安全问题,是否密码太简单;如有必要,撤消某些用户的系统权限

出现坏块

检查是否是硬件问题(如磁盘本生有坏块),如果不是,检查是那个数据库对象出现了坏块,对这个对象进行重建

表空间不够

增加数据文件到相应的表空间

出现ORA-600

根据日志文件的内容查看相应的TRC文件,如果是Oraclebug,要及时打上相应的补丁

alert_SID.log通常是在$ORACLE_BASE/admin//bdump目录下。

使用 Unix ‘tail’或者more命令查看该日志信息(为了方便查询,每天查询后将查询的日志mv到与日志同一目录下的bak目录下);

 

定期检查警告日志、TRC文件及listener日志

如果这些日志量非常大,占用很大的资源空间,可考虑定期删除以便释放资源。

一般情况下这些文件存在的相关目录:

警告日志: $ORACLE_BASE/admin//bdump  

或者

通过  SQL> show parameter background_dump_dest参数查看其存放位置;

Trc文件: $ORACLE_BASE/admin//udump

或者

通过  SQL> show parameter user_dump_dest参数查看其存放位置;

Listener日志: $ORACLE_HOME/network/log

 

查看数据库连接信息

定时对数据库的连接情况进行检查,看与数据库建立的会话数目是不是正常,如果建立了过多的连接,会消耗数据库的资源。同时,对一些“挂死”的连接,可能需要手工进行清理。

以下的SQL语句列出当前数据库建立的会话情况:

Select count(*) from v$session; ――查看当前会话连接数

 

select sid,serial#,username,program,machine,status from v$session;

 

SID    SERIAL#     USERNAME       PROGRAM                    MACHINE      STATUS

----  ---------- ------------ ---------------------------- ------------ --------

   1   3                       oracle@xz15saledb (PMON)     xz15saledb   ACTIVE

   2   3                       oracle@xz15saledb (DBW0)     xz15saledb   ACTIVE

   3   3                       oracle@xz15saledb (DBW1)     xz15saledb   ACTIVE

   4   3                       oracle@xz15saledb (LGWR)     xz15saledb   ACTIVE

   5   3                       oracle@xz15saledb (CKPT)     xz15saledb   ACTIVE

   6   3                       oracle@xz15saledb (SMON)     xz15saledb   ACTIVE

   7   3                       oracle@xz15saledb (RECO)     xz15saledb   ACTIVE

   8    1                       oracle@xz15saledb (CJQ0)    xz15saledb   ACTIVE

   9    3                       oracle@xz15saledb (ARC0)    xz15saledb   ACTIVE

  10    3                       oracle@xz15saledb (ARC1)    xz15saledb   ACTIVE

  11  11319    ZK   AccPrtInv_svr@xz15tuxedo2 (TNS V1-V3)   xz15tuxedo2  INACTIVE

  13  48876    ZG           upload@xz15saleap (TNS V1-V3)   xz15saleap   INACTIVE

  17  20405    ZK    AccCreateRpt@xz15tuxedo1 (TNS V1-V3)   xz15tuxedo1  INACTIVE

  20  12895    ZK       OweScanSvr@xz15billdb (TNS V1-V3)   xz15billdb   INACTIVE

其中,

SID  会话(session)ID号;

SERIAL#  会话的序列号,和SID一起用来唯一标识一个会话;

USERNAME  建立该会话的用户名;

PROGRAM  这个会话是用什么工具连接到数据库的;

STATUS  当前这个会话的状态,ACTIVE表示会话正在执行某些任务,INACTIVE表示当前会话没有执行任何操作;

 

如果DBA要手工断开某个会话,则执行:(一般不建议使用这种方式去杀掉数据库的连接,这样有时候session不会断开。容易引起死连接。建议通过sid查到操作系统的spid,使用ps –ef|grep spidno的方式确认spid不是ORACLE的后台进程。使用操作系统的kill -9命令杀掉连接

alter system kill session 'SID,SERIAL#';

 

注意:

上例中SID110(USERNAME列为空)的会话,是Oracle的后台进程,不要对这些会话进行任何操作。

 

检查数据库当日备份的有效性。

RMAN备份方式: 检查第三方备份工具的备份日志以确定备份是否成功

EXPORT备份方式:  检查exp日志文件以确定备份是否成功

对其他备份方式:  检查相应的日志文件

检查数据文件的状态

SQL>select file_name,status from dba_data_files;

SQL>select count(*) from dba_data_files;

SQL>select count(*) from dba_data_files where status='AVAILABLE';

如果数据文件的STATUS列不是AVAILABLE,那么就要采取相应的措施,如对该数据文件进行恢复操作,或重建该数据文件所在的表空间。

检查表空间的使用情况

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"

检查数据库的等待事件

set pages 80

set lines 120

col event for a40

select sid,event,p1,p2,p3,WAIT_TIME,SECONDS_IN_WAIT from v$session_wait where event not like 'SQL%' and event not like 'rdbms%'

如果数据库长时间持续出现大量像latch freeenqueuebuffer busy waitsdb file sequential readdb file scattered read等等待事件时,需要对其进行分析,可能存在问题的语句。

锁表问题的处理

查询目前锁对象信息,更细节的锁处理方式请查看工作中长用脚本

col sid for 999999

col username for a10

col schemaname for a10

col osuser for a16

col machine for a16

col terminal for a20

col owner for a10

col object_name for a30

col object_type for a10

select sid,serial#,username,SCHEMANAME,osuser,MACHINE,

terminal,PROGRAM,owner,object_name,object_type,o.object_id

from dba_objects o,v$locked_object l,v$session s

where o.object_id=l.object_id and s.sid=l.session_id;

解锁处理:

alter system kill session '&sid,&serial#';

检查数据库性能,记录数据库的cpu使用、IObuffer命中率等等

使用vmstat,iostat,sar,top等命令进行信息收集并检查这些信息,判断资源使用情况。

查看是否有僵死进程

select spid from v$process where addr not in (select paddr from v$session);

有些僵尸进程有阻塞其他业务的正常运行,定期杀掉僵尸进程


监控数据量的增长情况

根据本周每天的检查情况找到空间扩展很快的数据库对象,并采取相应的措施

--- 删除历史数据

规定数据库中至少保留6个月的历史数据,所以以前的历史数据可以考虑备份然后进行清除以便释放其所占的资源空间。

--- 扩表空间

alter tablespace add datafile ‘’ size  autoextend off;

注意:

在数据库结构发生变化时,如增加了表空间,增加了数据文件或重做日志文件这些操作,都会造成Oracle数据库控制文件的变化,DBA应及进行控制文件的备份,备份方法是:

执行SQL语句:

alter database backup controlfile to '/home/backup/control.bak';

或:

alter database backup controlfile to trace;

这样,会在USER_DUMP_DEST(初始化参数文件中指定)目录下生成创建控制文件的SQL命令。

检查无效的数据库对象

SELECT owner, object_name, object_type FROM dba_objects WHERE status= 'INVALID';

检查不起作用的约束

SELECT owner, constraint_name, table_name, constraint_type, status

FROM dba_constraints

WHERE status ='DISABLE' and constraint_type='P';

检查无效的trigger

SELECT owner, trigger_name, table_name, status FROM dba_triggers WHERE status = 'DISABLED';

检查数据库定时作业的完成情况

如果数据库使用了OracleJOB来完成一些定时作业,要对这些JOB的运行情况进行检查:

select job,log_user,last_date,failures

from dba_jobs;

如果FAILURES列是一个大于0的数的话,说明JOB运行失败,要进一步的检查。


寻找数据库性能调整的机会

使用statspack收集统计数据,比较每天对数据库性能的监控报告,确定是否有必要对数据库性能进行调整

数据库性能调整

如有必要,进行性能调整

提出下一步空间管理计划

根据每周的监控,提出空间管理的改进方法

 



 

阅读(1594) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~