《最新Oracle数据库日常检查文档.doc》由会员分享,可在线阅读,更多相关《最新Oracle数据库日常检查文档.doc(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateOracle数据库日常检查文档城管数据库检查文档数据库日常检查文档1. 检查表空间使用情况:1.1 检查是否开启自扩展功能:select tablespace_name,file_name,file_id,autoextensible,round(increment_by*8191)/(1024*1024),2)|M as 自扩展大小M from dba_data_f
2、iles; 目的:检查表空间是否开启自扩展功能。若检查自扩展特别小,请用下面的方法把自扩展根据数据量增长情况调大。alter database datafile 新增加数据文件路径 autoextend on next *M maxsize unlimited;-把*替换为你需要的自扩展大小1.2 检查表空间的使用情况:select a.tablespace_name,a.totals 总大小M,b.frees 空闲大小M,round(a.totals-b.frees)/a.totals,4)*100|% 使用率from (select sum(bytes)/(1024*1024) as to
3、tals,tablespace_namefrom dba_data_filesgroup by tablespace_name) a,(select sum(bytes)/(1024*1024) as frees,tablespace_namefrom dba_free_spacegroup by tablespace_name) bwhere a.tablespace_name=b.tablespace_name ;目的:当表空间没有开启自扩展功能时,表空间的使用率大于等于85%时,需要向表空间增加数据文件。开启自扩展功能的表空间,检查常用的表空间自扩展的大小不小于100M。注:检查ulog
4、用户对应的表空间:select default_tablespacefrom dba_userswhere username=ULOG; Ulog用户下的tlog表主要是记录日志的,因为大部分的报表涉及记录日志。所以,ulog用户对应的表空间不管是开启还是未开启自扩展功能,当ulog对应的表空间的使用率大于等于85%时,就对性能有影响,考虑truncate释放空间或是扩空间。解决办法:手工降低使用率的方法:Alter database datafile 数据文件的路径 resize *M;另一种情况:当前的文件是开启自扩展的,但是要扩展的数据文件已经到达限制值32G了,此时的解决办法:alte
5、r tablespace 表空间名 add datafile 新增加数据文件路径 size 5120M;-向表空间中增加数据文件alter database datafile 新增加数据文件路径 autoextend on next 100M maxsize unlimited;-开启自动扩展alter database datafile 达到最大值的数据文件路径 AUTOEXTEND off;-关闭之前文件的自扩展2. 定期检查磁盘的使用情况:2.1 Windows下检查执行下面sql,获得数据文件的路径:select file_name from dba_data_files;Window
6、s下直接检查数据文件所在的盘的总大小和可用空间,当使用率为85%时,清除数据文件所在的盘上无用的数据,或考虑增加硬件。2.2 Linux或是unix下:Linux或是unix下检查oracle的安装所用的盘,检查变量ORACLE_BASE所在目录的磁盘的使用情况,当使用率大于或等于90%时,需要清除无用的资料或是考虑增加硬件。例如,linux下用df命令 :rootrac1 /# df文件系统 1K-块 已用 可用 已用% 挂载点/dev/sda1 10115104 8671272 921724 91% /dev/sda2 15398476 5604628 8999036 39% /u01/o
7、racletmpfs 871640 0 871640 0% /dev/shm3. 常规检查:3.1 检查是否有无效的对象:select owner as 用户,object_name as 对象名,object_type as 对象类型 from dba_objects where status=INVAID;目的:若查询有结果,对无效对象需要重新编译。 Alter object_type owner.object_name compile;3.2 检查不可用的主键:select owner,constraint_name,table_namefrom dba_constraints wher
8、e status!=ENABLED and constraint_type=P;目的:若查询有数据,执行下面语句的执行结果。select alter table |owner|.|table_name| enable constraints |constraint_name|; from dba_constraints where status!=ENABLED and constraint_type=P;3.3 检查不可用的触发器:select owner,trigger_namefrom dba_triggers where status!=ENABLED;目的:若查询有数据,执行下面语句
9、的执行结果。select alter trigger |owner|.|trigger_name| enable;from dba_triggers where status!=ENABLED;3.4 检查session和process:对照当前使用数和参数设置值:Select count(*) from v$session ;Select count(*) from v$process;数据库设置值:select name,value from v$parameter where name in(sessions,processes);注:以 v$开头的表需要是业务高峰时的数据对分析才有作用
10、。注:现场工程在使用pl/sql developer时,因多个sql窗口会增加sessions和process数,尽量在一个sql窗口操作。3.5 检查job:检查参数:当前数据库的并发可执行的job数量:select name,valuefrom v$parameterwhere name=job_queue_processes;查询当前数据中所有的job:select * from dba_jobs;涉及检查项:LOG_USER,提交任务的用户 ;PRIV_USER,赋予任务权限的用户 ;SCHEMA_USER,对任务作语法分析的用户模式;THIS_DATE,表示正在运行任务的开始时间;L
11、AST_DATE:最后一次成功运行完此job的时间;NEXT_DATE:下一次运行job的开始时间; INTERVAL:用于计算下一运行时间的表达式;What:执行任务的PL/SQL块。结果判断:1、 若有创建在sys或是system用户下的业务job需要删除,重新创建在业务用户下。2、 如果Next_date是晚上21点执行的job,在第二天上午9点查询dba_jobs表时,this_date列不为空表示此job仍在执行。那么就需要优化what列显示的存储过程了。3、 当FAILURE0时,job不能执行成功。检查并发可执行的job进程数是否够用,根据next_date判断下次需要并发执行的
12、job数与参数job_queue_processes的设置数比较?若不够,修改方法:Alter system set job_queue_processes=11 scope=both;3.6 检查数据文件的状态:select * from v$datafile where status not in(SYSTEM,ONLINE);目的:若查询无结果,表示数据文件正常。3.7 检查数据库的模式:Select name,Created, Log_Mode From V$Database;若log_mode为archive,当value不为空时,检查对应目录下的空间使用情况:select valu
13、e from v$parameter where name= log_archive_dest_1;若归档日志存在use_db_recovery_file_dest下,检查下面视图归档日志的使用情况:select percent_space_usedfrom v$flash_recovery_area_usage where file_type=ARCHIVELOG;当空间使用百分比(percent_space_used)为85%时,需要释放空间。若使用的是asm自动存储管理,检查空闲大小是否够用:select group_number,name,total_MB as 总大小,free_MB
14、 as 空闲大小from v$asm_diskgroup;3.8 检查锁的情况:检查是否发生阻塞:select /*+ ordered*/ sql_text, spid, p.pid, s.sid, s.username, s.program, process from v$sqlarea q, v$session s, v$process p where q.address = s.sql_address and q.hash_value = s.sql_hash_value and s.paddr = p.addr and exists (select sid from v$lock wh
15、ere block=1 and sid=s.sid);目的:若有结果,发回sql的执行结果,开发人员检查sql涉及的程序。 导出结果后杀掉session。杀session步骤:Alter system kill session SID,SERIAL#;有时候杀掉session后,session对应的进程好长时间不释放,占用资源,需要从操作系统级杀掉session: select spid, osuser, s.program from v$session s,v$process pwhere s.paddr=p.addr and s.sid=&sid;1)在unix上,用root身份执行命令:
16、 #kill -9 123(上面语句查询出的spid)2)在windows用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为:orakill sid thread 例如:orakill cangzhoucg 123检查是否有锁等待:select /*+ ordered*/ sql_text, spid, p.pid, s.sid, s.username, s.program, process from v$sqlarea q, v$session s, v$process p where q.address = s.sql_address and q.hash_
17、value = s.sql_hash_value and s.paddr = p.addr and exists (select sid from v$lock where request 0 and block1 and sid=s.sid);检查目的:检查哪些语句一直在等待资源释放,正常的锁等待时间不会持续很长,持续时间较长的就尽快导出结果以便处理。4. 检查数据库的alert日志执行下面sql获得alert日志的路径:select a.value| 下的alert_|b.instance_name|.log from v$parameter a,gv$instance bwhere a.
18、name =background_dump_dest;注:若数据库为集群环境,查出的结果是二条,需要分别取二台数据库服务器所查目录下的alert日志。目的:检查最近日期的alert日志是否有以ora-开头的错误或异常信息。5. 检查tlog的错误日志select * from ulog.tlog where llevel=30 and ldate=sysdate-1 order by id desc;目的:检查tlog表的错误日志。6. 数据库连接不上时当发现连接不上数据库,若是单实例的从以下方面检查:1、 检查网络是否正常;2、 检查数据库目前的运行状态,若用pl/sql也连接不上时,采用sqlplus执行。Select instance_name,status from v$instance;-正常情况下status为open状态若是rac,首先检查集群服务是否都启动正常:Crs_stat t -此命令在windows下直接在c:下执行,若在linux或是unix下,切换操作系统用户oracle下,执行此命令,正常情况下状态都应该online。-