《最新Oracle+DBA日常工作手册.doc》由会员分享,可在线阅读,更多相关《最新Oracle+DBA日常工作手册.doc(112页珍藏版)》请在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+DBA日常工作手册DBA日常工作手册Oracle DBA日常工作手册第一章 . 事前阶段一 、 日常工作每天应做工作内容1、工作内容日常环境监控1.1系统运行环境监控检查文件系统以及oracle数据库数据文件所在卷的使用(剩余空间),如果文件系统的剩余空间小于20%,需要删除不用的文件以释放空间;UNIX系统的文件系统及数据文件所在卷的空间使用率:su
2、oraprod或者su - oratestAIX、linux查看磁盘空间:df k HP-UX查看磁盘空间:bdf1.2数据库运行状况监控1.2.1 外部确认所有的INSTANCE状态正常(保证实例正常),检查Oracle实例核心后台进程是否都存在、状态是否正常$ ps -ef|grep oraprod查看数据库实例是否能正常连接、访问SQL select status,instance_name from v$instance;监听是否正常$ lsnrctl status1.2.2 内部是否所有表空间都处于online状态SQL select tablespace_name,status f
3、rom dba_tablespaces;select file#,status,name from v$datafile_header; select file_name,status,tablespace_name from dba_data_files;如果数据文件的STATUS列不是AVAILABLE或者ONLINE,那么就要采取相应的措施,如对该数据文件进行恢复操作,或重建该数据文件所在的表空间。Oracle数据库日志文件是否正常SQL Select * from v$log;SQL Select * from v$logfile;1).检查trace文件记录alert和trace文件
4、中的错误。telnet 192.168.150.1 su oraprod在oraprod用户下$ cd到bdump目录,通常是$ORACLE_BASE/admin/bdump使用Unix的tail -f命令来查看alert_.log文件如果发现任何新的ORA- 错误,记录并解决2).查看DBSNMP 的运行情况检查每个被管理机器的DBSNMP进程并将它们记录到日志中。在UNIX 中,在命令行中,键入ps ef | grep dbsnmp,将回看到2 个DBSNMP 进程在运行。如果没有,重启DBSNMP。(注意:此步骤在oraprod下只有1个进程,需要研究)3). 检查回滚段回滚段的状态一般
5、是在线的,除了一些为复杂工作准备的专用段一般状态是离线的。a) 每个数据库都有一个回滚段名字的列表。b) 你可以用V$ROLLSTAT 来查询在线或是离线的回滚段的现在状态;1.2.3 日常操作1).不要在服务器上直接执行rm操作当有文件需要删除时,把这些文件mv到一个规定的文件夹,然后CD进入此文件夹再进行删除操作。(注意:在rm日志文件时直接rm即可,若rm文件夹一定要rm r)2).数据库备份校验命令:rman target /连接到数据库,rmanrestore database validate;3).查看数据库连接信息定时对数据库的连接情况进行检查,看与数据库建立的会话数目是不是正
6、常,如果建立了过多的连接,会消耗数据库的资源。同时,对一些“挂死”的连接,可能需要手工进行清理。以下的SQL语句列出当前数据库建立的会话情况:Select count(*) from v$session; 查看当前会话连接数select sid,serial#,username,program,machine,status from v$session;其中, SID 会话(session)的ID号; SERIAL# 会话的序列号,和SID一起用来唯一标识一个会话; USERNAME 建立该会话的用户名; PROGRAM 这个会话是用什么工具连接到数据库的; STATUS 当前这个会话的状态,
7、ACTIVE表示会话正在执行某些任务,INACTIVE表示当前会话没有执行任何操作; 如果DBA要手工断开某个会话,则执行: alter system kill session SID,SERIAL#; 注意: USERNAME列为空的会话,是Oracle的后台进程,不要对这些会话进行任何操作4).查看并发会话量并发会话量正常时段为60以下,查询系统在20以下,如果超过这些指标,则认为系统有阻塞情况,需要查找原因,引起关注。查询系统并发的脚本为:select count(1) from v$session where status=ACTIVE and username not in(SYS,
8、SYSTEM);5).查看是否有僵死进程select spid from v$process where addr not in (select paddr from v$session);有些僵死进程有阻塞其他业务的正常运行,定期杀掉僵死进程6).检查数据库定时作业的完成情况如果数据库使用了Oracle的JOB来完成一些定时作业,要对这些JOB的运行情况进行检查:select job,log_user,last_date,failuresfrom dba_jobs;如果FAILURES列是一个大于0的数的话,说明JOB运行失败,要进一步的检查。7).控制文件的备份在数据库结构发生变化时,如增
9、加了表空间,增加了数据文件或重做日志文件这些操作,都会造成Oracle数据库控制文件的变化,DBA应及进行控制文件的备份,备份方法是: 执行SQL语句:alter database backup controlfile to /home/backup/control.bak; 或: alter database backup controlfile to trace; 这样,会在USER_DUMP_DEST(初始化参数文件中指定)目录下生成创建控制文件的SQL命令。8).数据库坏块的处理当Oracle数据库出现坏块时,Oracle会在警告日志文件(alert_SID.log)中记录坏块的信息:
10、 ORA-01578: ORACLE data block corrupted (file # 7, block # )ORA-01110: data file : /oracle1/oradata/V920/oradata/V816/users01.dbf 其中,AFN代表坏块所在数据文件的绝对文件号,代表坏块是数据文件上的第几个数据块出现这种情况时,应该首先检查是否是硬件及操作系统上的故障导致Oracle数据库出现坏块。在排除了数据库以外的原因后,再对发生坏块的数据库对象进行处理。解决方式:1确定发生坏块的数据库对象 SELECT tablespace_name,segment_type,
11、owner,segment_nameFROM dba_extentsWHERE file_id = AND between block_id AND block_id+blocks-1;2决定修复方法 如果发生坏块的对象是一个索引,那么可以直接把索引DROP掉后,再根据表里的记录进行重建; 如果发生坏块的表的记录可以根据其它表的记录生成的话,那么可以直接把这个表DROP掉后重建; 如果有数据库的备份,则恢复数据库的方法来进行修复; 如果表里的记录没有其它办法恢复,那么坏块上的记录就丢失了,只能把表中其它数据块上的记录取出来,然后对这个表进行重建。 3用Oracle提供的DBMS_REPAIR包
12、标记出坏块 exec DBMS_REPAIR.SKIP_CORRUPT_BLOCKS(,); 4使用Create table as select命令将表中其它块上的记录保存到另一张表上 create table corrupt_table_bak as select * from corrupt_table; 5用DROP TABLE命令删除有坏块的表 drop table corrupt_table; 6用alter table rename命令恢复原来的表 alter table corrupt_table_bak rename to corrupt_table; 7如果表上存在索引,则要
13、重建表上的索引 1.3 检查oracle数据库表空间的使用情况1.3.1 检查表空间的使用情况1、查询表空间的总容量select tablespace_name,sum(bytes)/1024/1024 MB from dba_data_filesgroup by tablespace_name;2、查询表空间未使用的大小select tablespace_name,sum(bytes)/1024/1024 MB from dba_free_spacegroup by tablespace_name;3、(一)查看表空间已经使用的百分比select a.tablespace_name,a.by
14、tes/1024/1024 Sum MB,(a.bytes-b.bytes)/1024/1024 used MB,b.bytes/1024/1024 free MB,round(a.bytes-b.bytes)/a.bytes)*100,2)percent_used from (select tablespace_name,sum(bytes) bytes from dba_data_files group by tablespace_name) a,(select tablespace_name,sum(bytes) bytes,max(bytes) largest from dba_fre
15、e_space group by tablespace_name) bwhere a.tablespace_name=b.tablespace_nameorder by (a.bytes-b.bytes)/a.bytes) desc (二)查看表空间空闲百分比select a.tablespace_name,round(a.total_size) total_size(MB),round(a.total_size)-round(b.free_size,3) used_size(MB),round(b.free_size,3) free_size(MB),round(b.free_size/to
16、tal_size*100,2)|% free_ratefrom (select tablespace_name,sum(bytes)/1024/1024 total_size from dba_data_files group by tablespace_name) a,(select tablespace_name,sum(bytes)/1024/1024 free_size from dba_free_space group by tablespace_name) bwhere a.tablespace_name=b.tablespace_name(+); (三) 表空间碎片查询selec
17、t tablespace_name,Sqrt(max(blocks)/ sum(blocks) * (100/Sqrt(Sqrt(count(blocks) FSFI,count(blocks),sum(blocks),max(blocks)from sys.dba_free_space group by tablespace_name;表空间的碎片合并:alter tablespace tablespace_name coalesce; 然后再执行查看表空间碎片的SQL语句,看表空间的碎片有没有减少。如果没有效果,并且表空间对表空间的扩充对表空间的数据文件大小进行扩展,或向表空间增加数据文件
18、,具体操作见“存储管理”部份。 1.3.2 查看oracle数据库的表空间包含的数据文件与增加或者删除数据文件1、查看表空间中包含的数据文件以及数据文件的状态与是否自动扩展大小select file_name,tablespace_name,status,autoextensible,increment_by,bytes/1024/1024 bytes from dba_data_files2、增加数据文件alter tablespace WANJINadd datafile E:U01APPORACLEORADATAWANJINDBAWANJIN3.DBFsize 10M (autoexte
19、nd on maxsize 20G)上述语句解释:向WANJIN表空间中增加一个10M大小,最大自动扩展到20G的一个数据文件,括号内的命令可以不执行直接更改数据文件的大小:alter tablespace WANJINDatafile E:U01APPORACLEORADATAWANJINDBAWANJIN3.DBF resize=100M3、删除表空间数据文件Alter tablespace WANJINDrop datafile E:U01APPORACLEORADATAWANJINDBAWANJIN3.DBF4、检查无效的数据库对象SELECT owner, object_name,
20、object_type FROM dba_objectsWHERE status=INVALID5、检查不起作用的约束SELECT owner, constraint_name, table_name,constraint_type, statusFROM dba_constraintsWHERE status = DISABLED AND constraint_type = P6、检查无效的triggerSELECT owner, trigger_name, table_name, statusFROM dba_triggersWHERE status = DISABLED7、检查数据库控制
21、文件在数据库已经启动的情况下:select * from v$controlfile如果数据库没有启动则: SQLshow parameter control_files;8、查看参数文件是否存在SQLshow parameter spfile;9、查看缓冲区命中率缓冲区命中率应该保证在95%以上。Select 1-(sum(decode(name,physical reads,value,0)/(sum(decode(name,db block gets,value,0)+(sum(decode(name,consistent gets,value,0) Buffer Hite Rate f
22、rom v$sysstat;10).检查数据库等待事件如果数据库长时间持续出现大量像buffer busy waits、db file scattered read、db file sequential read、enqueue、free buffer waits、latch free、log file sync、log file paralle write等等非空闲待事件时,需要对其进行分析,可能存在问题的语句。Select sid,event,p1,p2,p3,WAIT_TIME,SECONDS_IN_WAIT from v$session_wait where event not lik
23、e SQL% and event not like rdbms%;11).检查数据库锁表情况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,&se
24、rial#;2、工作内容日常性能监控2.1 间隔一段时间使用操作系统top等工具监控UNIX操作系统资源动态运行状况CPU、内存、网络、IO、进程、页面交换等主要活动监控: top、topas、vmstat、sar、iostat等2.2间隔一段时间对数据库性能进行监控Oracle 11g 图形工具Performance Manager监控顶层会话及顶层SQL1 打开OEM控制台,选中要监控的数据库(oracle中OEM后台进程运行命令:Windows:dos下执行emctl start dbconsoleLinux在su - oraprod下执行emctl start dbconsole网址是
25、: https:/localhost:1158/em/查看oracle版本命令:select banner from sys.v_$version;)2 介绍OEM主要内容Oracle 11g的OEM主要监控:主机CPU,IO情况,Oracle数据库进程情况,SQL相应时间等;登录Oracle 11g OEM,选择性能其它监视链接:顶级活动点击“顶级会话”中的“活动百分比”较高的“会话ID” 点击该会话ID对应的SQL ID,查看该顶级会话中SQL的详细信息点击“计划”“表”标签,查看该SQL语句的详细执行计划浏览该顶层会话对应SQL语句的详细信息3、工作内容日常数据库管理3.1一天内间隔一定
26、时间运行3.1.1检查警告日志文件中最新错误信息Linux、Unix系列平台:vi $ORACLE_BASE/bdump/alert_.log输入:“/ORA” 回车进行查找(此步骤为在.log文件中搜索包含该内容的语句)3.1.2系统运行状况快照采集每天根据实际情况,在以下三个阶段手工运行Statspack快照采集,输出快照报表:l 正常工作压力下l 每天业务最高峰期l 特殊业务运行阶段Oracle 11g OEM图形管理工具实现系统快照采集Oracle 11g OEM图形工具自动执行快照采集,缺省1小时收集一次,可以根据实际情况修改收集间隔时间、降低对系统性能影响。系统快照自动收集时间、间
27、隔、保留期限设置登录Oracle10g OEM,选择服务器自动工作量资料档案库点击编辑,查看或修改快照收集时间及间隔 Oracle11g缺省系统快照每隔一小时执行一次,保留最近8天的所有快照,可根据实际情况修改调整,点确定后保存所做修改。创建当前时间点系统快照点击管理快照和保留的快照集下面的当前快照ID选择起始快照,点击创建选择“是”开始执行快照创建快照在当前时间点成功创建。输出两个快照时间点之间的快照信息报表把“创建保留的快照集”改为“查看报告”,选择起始快照号,点击“开始”选择结束快照号,点击“确定”开始创建两个快照时间点之间的所有统计信息报告另存该输出快照报告为HTML文件注:生成的统计
28、信息快照报告放在专门目录下,定期对其整理、分析,作为EAS数据库运行整体状况及问题诊断的依据。3.2 每天工作结束后、系统空闲时运行3.2.1 图形界面查看表空间使用率 Oracle 11g OEM表空间管理登录OEM后选择主目录空间概要数据库大小在该界面下可以看到表空间使用率,以及可以添加表空间和增加数据文件。3.2.2数据库备份及日志清理数据库备份主要提供两种方式,物理备份及逻辑备份,物理备份主要使用Oracle RMAN工具,逻辑备份主要使用Oracle导出工具Exp及Expdp。Oracle 物理备份(RMAN)该方式下周一到周五每天做一次增量备份,并检查备份是否正确,同时清理归档日志
29、。Oracle11g OEM图形化方式设置RMAN备份自动执行任务RMAN备份主要参数设置登录11g OEM,选择:可用性 备份/恢复/备份设置磁盘设备备份路径、并行度指定(根据服务器cpu个数匹配)在这里的的用户名和密码是操作系统的用户和密码;备份策略设置主要是指定备份磁盘位置及备份保留时间,下图设置中为周备份策略考虑,保留最近7天备份。两种RMAN自动调度备份策略1) 使用Oracle建议的自动调度备份策略选择可用性管理调度备份选择“调度Oracle建议的备份”选择备份目标介质,缺省备份到磁盘介质该备份策略内容描述设置该策略执行数据库全量或增量备份的调度时间调度oracle建议的备份:复查
30、2) 自定义RMAN自动备份策略选择“可用性管理调度备份调度定制备份”选择备份类型、归档日志、过时备份清理策略 备份目标介质设置(缺省使用前面“备份设置”中设置的参数)备份自动执行的调度备份设置信息复查,确定后提交作业通过查看作业可以了解备份任务进展情况。3) 查看当前数据库RMAN备份信息选择可用性管理备份报告,可以查看所有备份执行情况注:前面描述的是数据库全量备份的调度策略设置,增量备份的调度策略设置方法类似,只需要在备份类型中选择增量备份即可。设置完成后EAS数据库自动备份策略为一周一次全量备份,在星期六晚上12点进行。周一到周五每天晚上12点执行一次增量备份,保留最近7天备份,过期备份
31、、归档日志自动删除。Oracle逻辑备份(EXP/EXPDP)1) 操作系统级设置自动备份任务root用户登录操作系统,运行crontab e,添加以下内容:50 23 * * 1-6 su oracle -c /usr/app/oracle/expdp/eas_expdp_MontoSat.sh /dev/null 2&1#星期一到星期六晚上11点50导出数据50 23 * * 0 su oracle -c /usr/app/oracle/expdp/eas_expdp_Sunday.sh /dev/null 2&1#星期日11点50开始导出数据,并删除上周一到周六导出的备份数据。2) 逻辑
32、备份脚本逻辑备份脚本 eas_expdp_MontoSat.sh(星期一到星期六)#!/bin/sh#=# SCRIPT : eas_expdp_MontoSat.sh# AUTHOR : James_jiang# Date : 2007-10-10# REV : 1.0# PLATFORM : AIX Linux Solaris HpUnix# PURPOSE : This script is used to run logic backup.# Copyright(c) 2007 Kingdee Co.,Ltd.# All Rights Reserved#=DAY=date +%aFILE
33、_TARGET=eas_expdp_expr $DAY.dmpFILE_LOG=eas_expdp_expr $DAY.log export FILE_TARGET FILE_LOG expdp salhr/salhr schemas=salhr directory=eas_expdp_dir dumpfile=$FILE_TARGET logfile=$FILE_LOG job_name=cases_export parallel=4 逻辑备份脚本 eas_expdp_Sunday.sh(星期日)sqlplus /as sysdbaSQLcreate directory eas_expdp_
34、dir as /usr/app/oracle/expdp;SQLgrant read,write on directory eas_expdp_dir to salhr;Oracle10g 版本逻辑备份使用expdp工具,在部署导出自动任务前需创建导出dmp文件存放目录并授权给EAS数据库用户:#!/bin/sh#=# SCRIPT : eas_expdp_Sunday.sh# AUTHOR : James_jiang# Date : 2007-10-10# REV : 1.0# PLATFORM : AIX Linux Solaris HpUnix# PURPOSE : This scrip
35、t is used to run logic backup.#=DAY=date +%aFILE_TARGET=eas_expdp_expr $DAY.dmpFILE_LOG=eas_expdp_expr $DAY.log export FILE_TARGET FILE_LOG cd /usr/app/oracle/expdprm -f eas_expdp*.dmp eas_expdp*.logexpdp salhr/salhr schemas=salhr directory=eas_expdp_dir dumpfile=$FILE_TARGET logfile=$FILE_LOG job_n
36、ame=cases_export parallel=4 附: 上述脚本中导出路径 /usr/app/oracle/expdp需根据现场实际情况修改,备份脚本eas_expdp_MontoSat.sh、eas_expdp_Sunday.sh需赋予可执行权限。Expdp导出目录需要创建,具体方法请参看本文档 四 日常工作数据库第一次安装部署后需做的工作3.2.3根据监控信息,对需要的表、索引统计分析3.2.3.1 Oracle9i 自动化脚本方式对表、索引进行统计分析Oracle9i缺省不对表进行改动监控,如果需要根据监控信息来判断是否需对表进行重新统计分析,则需要手工打开表监控开关,如下:打开表
37、监控开关:alter table 表名 monitoring;/监控表信息记录在sys.dba_tab_modifications视图中根据监控信息对用户统计信息分析收集脚本:dbms_stats.gather_schema_stats(ownname=nmeas,options=GATHER AUTO)3.2.3.2 Oracle10g 自动化任务表、索引统计分析方式Oracle10g 缺省自动对所有表变动进行监控,并自动执行所有用户统计分析,可以禁止该缺省方式,在dbconsole中手工配置对特定用户统计分析任务。Oracle10g禁用、启用缺省数据库自动统计信息分析收集任务:exec d
38、bms_scheduler.disable(SYS.GATHER_STATS_JOB);exec dbms_scheduler.enable(SYS.GATHER_STATS_JOB);Oracle10g OEM图形工具自定义配置统计分析任务登录OEM,选择管理统计信息管理管理优化程序统计信息选择“操作”搜集优化程序统计信息选择“方案”,点击下一步设置用户统计信息分析自动执行的时间调度示例中设置的是从2007-03-29开始,每天晚上12点自动执行用户NMEAS统计信息分析,用户统计信息分析任务设置完整栏目显示提交完成任务设置查看数据库中所有自动调度任务执行情况OEM中选择栏目:管理统计信息管
39、理(管理优化程序统计信息)选择相关链接作业调度程序注:上述配置的自动统计分析任务利用Oracle自动监控来判断哪些对象改动较大,需要重新进行统计分析。然后在调度的时间对其重新进行统计分析。二 、日常工作每隔一周工作内容1. 文件整理工作n 警告日志、跟踪文件、dump文件清理n 备份文件整理n Statspack统计分析报告整理2. 数据库全量备份2.1 Oracle 9i RMAN自动化脚本方式全量备份Rman备份命令写到一个脚本中,在命令行中执行这个脚本RMAN TARGET / NOCATALOG sys/oracle CMDFILE e: backup_incre_0.rcv LOG
40、e: backup_incre_0.log数据库完全备份脚本: backup_full_0.rcvrun allocate channel c1 type DISK ;backup incremental level = 0 format f:rman_bakincre_0_%d_%s_%p.bak(database include current controlfile);backup format f:rman_bakarch%u_%s_%p.bak(archivelog from time sysdate-1 all delete input);删除过期备份:RMANdelete exp
41、ired backup;2.2 Oracle 10g OEM 图形方式创建RMAN全量备份数据库任务具体方法、步骤请参看数据库日常工作每天应做工作内容中RMAN备份部分3. 根据一周数据增长率分析预留数据文件下一周所需增长空间3.1 SQL脚本方式查看数据文件空间使用率查看脚本:SELECT df.tablespace_name, ROUND (df.BYTES / 1024 / 1024) total(MB), ROUND (df.BYTES - x.free) / 1024 / 1024) used(MB), ROUND (x.hw / 1024 / 1024) hwatermarker,
42、 ROUND (x.free / 1024 / 1024) free(MB), df.file_name FROM dba_data_files df, (SELECT file_id, MAX (block_id * p.VALUE) hw, SUM (BYTES) free FROM dba_free_space, v$parameter p WHERE p.NAME = db_block_size GROUP BY file_id) x WHERE x.file_id = df.file_idORDER BY 1, 23.2 Oracle 9i OEM 数据文件管理3.3 Oracle
43、10g OEM 数据文件管理4. 索引使用情况及碎片分析4.1表包含的索引及相关列检查1、 表及索引创建、修改日期检查EAS用户登录到数据库,执行语句:SQLSELECT OBJECT_NAME,OBJECT_TYPE,CREATED,LAST_DDL_TIME,STATUS FROM USER_OBJECTS;2、 表包含的索引及索引相关列检查SQL SELECT INDEX_NAME,TABLE_NAME,COLUMN_NAME FROM USER_IND_COLUMNS WHERE TABLE_NAME LIKE T_% ORDER BY TABLE_NAME;3、 特定表及其关联索引、
44、列详细信息检查SELECT A.TABLE_NAME,A.INDEX_NAME,COLUMN_NAME,CREATED,LAST_DDL_TIME,LAST_ANALYZED FROM USER_IND_COLUMNS A,USER_OBJECTS B,USER_INDEXES C WHERE A.INDEX_NAME=B.OBJECT_NAME AND B.OBJECT_NAME=C.INDEX_NAMEAND C.TABLE_NAME IN(,)注:如需输出语句执行结果信息,可在语句执行前spool tableindex.list,执行完成后再spool off;4.2自动化脚本方式对索引进行碎片分析每周监测一次索引的碎片情况,根据情况制定索引的重建频率以提高索引使用效率。1、产生EAS用户分析索引的脚本:SQLselect analyze index | index_name | VALIDATE STRUCTURE from user_indexes; 2、执行EAS用户下所有索引分析:SQL analyze i