oracle+dba日常工作手册

banshan 贡献于2017-03-15

作者 james_jiang  创建于2007-05-14 07:21:00   修改者wanjin  修改于2011-10-09 06:04:00字数16150

文档摘要:检查文件系统以及oracle数据库数据文件所在卷的使用(剩余空间),如果文件系统的剩余空间小于20%,需要删除不用的文件以释放空间;
关键词:

Oracle DBA日常工作手册 第一章 . 事前阶段 一 、 日常工作-每天应做工作内容 1、工作内容-日常环境监控 1.1系统运行环境监控 检查文件系统以及oracle数据库数据文件所在卷的使用(剩余空间),如果文件系统的剩余空间小于20%,需要删除不用的文件以释放空间; UNIX系统的文件系统及数据文件所在卷的空间使用率: su – oraprod或者su - oratest AIX、linux查看磁盘空间:df –k HP-UX查看磁盘空间:bdf 1.2数据库运行状况监控 1.2.1 外部 确认所有的INSTANCE状态正常(保证实例正常),检查Oracle实例核心后台进程是否都存在、状态是否正常 $ ps -ef|grep oraprod 查看数据库实例是否能正常连接、访问 SQL> select status,instance_name from v$instance; 监听是否正常 $ lsnrctl status 1.2.2 内部 是否所有表空间都处于online状态 SQL> select tablespace_name,status from 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文件中的错误。  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). 检查回滚段  回滚段的状态一般是在线的,除了一些为复杂工作准备的专用段一般状态是离线的。 a) 每个数据库都有一个回滚段名字的列表。  b) 你可以用V$ROLLSTAT 来查询在线或是离线的回滚段的现在状态; 1.2.3 日常操作 1).不要在服务器上直接执行rm操作 当有文件需要删除时,把这些文件mv到一个规定的文件夹,然后CD进入此文件夹再进行删除操作。(注意:在rm日志文件时直接rm即可,若rm文件夹一定要rm –r) 2).数据库备份校验 命令:rman target /连接到数据库,rman>restore database validate; 3).查看数据库连接信息 定时对数据库的连接情况进行检查,看与数据库建立的会话数目是不是正常,如果建立了过多的连接,会消耗数据库的资源。同时,对一些“挂死”的连接,可能需要手工进行清理。 以下的SQL语句列出当前数据库建立的会话情况: 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要手工断开某个会话,则执行: 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','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,failures from dba_jobs; 如果FAILURES列是一个大于0的数的话,说明JOB运行失败,要进一步的检查。 7).控制文件的备份 在数据库结构发生变化时,如增加了表空间,增加了数据文件或重做日志文件这些操作,都会造成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)中记录坏块的信息: 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,owner,segment_name FROM  dba_extents WHERE  file_id = AND between block_id AND block_id+blocks-1; 2.决定修复方法 如果发生坏块的对象是一个索引,那么可以直接把索引DROP掉后,再根据表里的记录进行重建; 如果发生坏块的表的记录可以根据其它表的记录生成的话,那么可以直接把这个表DROP掉后重建; 如果有数据库的备份,则恢复数据库的方法来进行修复; 如果表里的记录没有其它办法恢复,那么坏块上的记录就丢失了,只能把表中其它数据块上的记录取出来,然后对这个表进行重建。 3.用Oracle提供的DBMS_REPAIR包标记出坏块 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.如果表上存在索引,则要重建表上的索引 1.3 检查oracle数据库表空间的使用情况 1.3.1 检查表空间的使用情况 1、查询表空间的总容量 select tablespace_name,sum(bytes)/1024/1024 MB from dba_data_files group by tablespace_name; 2、查询表空间未使用的大小 select tablespace_name,sum(bytes)/1024/1024 MB from dba_free_space group by tablespace_name; 3、(一)查看表空间已经使用的百分比 select a.tablespace_name,a.bytes/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_free_space group by tablespace_name) b where a.tablespace_name=b.tablespace_name order 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/total_size*100,2)||'%' free_rate from (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) b where a.tablespace_name=b.tablespace_name(+); (三) 表空间碎片查询 select 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语句,看表空间的碎片有没有减少。如果没有效果,并且表空间 对表空间的扩充对表空间的数据文件大小进行扩展,或向表空间增加数据文件,具体操作见“存储管理”部份。 1.3.2 查看oracle数据库的表空间包含的数据文件与增加或者删除数据文件 1、查看表空间中包含的数据文件以及数据文件的状态与是否自动扩展大小 select file_name,tablespace_name,status,autoextensible,increment_by,bytes/1024/1024 bytes from dba_data_files 2、增加数据文件 alter tablespace WANJIN add datafile 'E:\U01\APP\ORACLE\ORADATA\WANJINDBA\WANJIN3.DBF' size 10M (autoextend on maxsize 20G) 上述语句解释:向WANJIN表空间中增加一个10M大小,最大自动扩展到20G的一个数据文件,括号内的命令可以不执行 直接更改数据文件的大小: alter tablespace WANJIN Datafile ‘E:\U01\APP\ORACLE\ORADATA\WANJINDBA\WANJIN3.DBF’ resize=100M 3、删除表空间数据文件 Alter tablespace WANJIN Drop datafile ‘E:\U01\APP\ORACLE\ORADATA\WANJINDBA\WANJIN3.DBF’ 4、检查无效的数据库对象  SELECT owner, object_name, object_type FROM dba_objects  WHERE status=’INVALID’ 5、检查不起作用的约束  SELECT owner, constraint_name, table_name,  constraint_type, status  FROM dba_constraints  WHERE status = 'DISABLED’ AND constraint_type = 'P'  6、检查无效的trigger  SELECT owner, trigger_name, table_name, status  FROM dba_triggers  WHERE status = 'DISABLED’ 7、检查数据库控制文件 在数据库已经启动的情况下:select * from v$controlfile 如果数据库没有启动则: SQL>show parameter control_files; 8、查看参数文件是否存在 SQL>show 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" from 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 like '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,&serial#'; 2、工作内容-日常性能监控 2.1 间隔一段时间使用操作系统top等工具监控UNIX操作系统资源动态运行状况 CPU、内存、网络、IO、进程、页面交换等主要活动监控:: top、topas、vmstat、sar、iostat等 2.2间隔一段时间对数据库性能进行监控 Oracle 11g 图形工具-Performance Manager监控顶层会话及顶层SQL 1. 打开OEM控制台,选中要监控的数据库(oracle中OEM后台进程运行命令: Windows:dos下执行emctl start dbconsole Linux在su - oraprod下执行emctl start dbconsole 网址是: 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一天内间隔一定时间运行 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小时收集一次,可以根据实际情况修改收集间隔时间、降低对系统性能影响。 系统快照自动收集时间、间隔、保留期限设置 登录Oracle10g OEM,选择服务器-自动工作量资料档案库 点击编辑,查看或修改快照收集时间及间隔 Oracle11g缺省系统快照每隔一小时执行一次,保留最近8天的所有快照,可根据实际情况修改调整,点确定后保存所做修改。 创建当前时间点系统快照 点击管理快照和保留的快照集下面的当前快照ID 选择起始快照,点击创建 选择“是”开始执行快照创建 快照在当前时间点成功创建。 输出两个快照时间点之间的快照信息报表 把“创建保留的快照集”改为“查看报告”,选择起始快照号,点击“开始” 选择结束快照号,点击“确定” 开始创建两个快照时间点之间的所有统计信息报告 另存该输出快照报告为HTML文件 注:生成的统计信息快照报告放在专门目录下,定期对其整理、分析,作为EAS数据库运行整体状况及问题诊断的依据。 3.2 每天工作结束后、系统空闲时运行 3.2.1 图形界面查看表空间使用率 Oracle 11g OEM表空间管理 登录OEM后选择主目录-空间概要—数据库大小 在该界面下可以看到表空间使用率,以及可以添加表空间和增加数据文件。 3.2.2数据库备份及日志清理 数据库备份主要提供两种方式,物理备份及逻辑备份,物理备份主要使用Oracle RMAN工具,逻辑备份主要使用Oracle导出工具Exp及Expdp。 Oracle 物理备份(RMAN) 该方式下周一到周五每天做一次增量备份,并检查备份是否正确,同时清理归档日志。 Oracle11g OEM图形化方式设置RMAN备份自动执行任务 RMAN备份主要参数设置 登录11g OEM,选择:可用性 - 备份/恢复/备份设置 磁盘设备备份路径、并行度指定(根据服务器cpu个数匹配) 在这里的的用户名和密码是操作系统的用户和密码; 备份策略设置 主要是指定备份磁盘位置及备份保留时间,下图设置中为周备份策略考虑,保留最近7天备份。 两种RMAN自动调度备份策略 1) 使用Oracle建议的自动调度备份策略 选择可用性—管理-调度备份 选择“调度Oracle建议的备份” 选择备份目标介质,缺省备份到磁盘介质 该备份策略内容描述 设置该策略执行数据库全量或增量备份的调度时间 调度oracle建议的备份:复查 2) 自定义RMAN自动备份策略 选择“可用性—管理—调度备份—调度定制备份” 选择备份类型、归档日志、过时备份清理策略 备份目标介质设置(缺省使用前面“备份设置”中设置的参数) 备份自动执行的调度 备份设置信息复查,确定后提交作业 通过查看作业可以了解备份任务进展情况。 3) 查看当前数据库RMAN备份信息 选择可用性-管理—备份报告,可以查看所有备份执行情况 注:前面描述的是数据库全量备份的调度策略设置,增量备份的调度策略设置方法类似,只需要在备份类型中选择增量备份即可。设置完成后EAS数据库自动备份策略为一周一次全量备份,在星期六晚上12点进行。周一到周五每天晚上12点执行一次增量备份,保留最近7天备份,过期备份、归档日志自动删除。 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) 逻辑备份脚本 逻辑备份脚本 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 +%a` FILE_TARGET=eas_expdp_`expr $DAY'.dmp FILE_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 sysdba" SQL>create directory eas_expdp_dir as '/usr/app/oracle/expdp'; SQL>grant 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 script is used to run logic backup. #===================================================== DAY=`date +%a` FILE_TARGET=eas_expdp_`expr $DAY`.dmp FILE_LOG=eas_expdp_`expr $DAY`.log export FILE_TARGET FILE_LOG cd /usr/app/oracle/expdp rm -f eas_expdp*.dmp eas_expdp*.log expdp salhr/salhr schemas=salhr directory=eas_expdp_dir dumpfile=$FILE_TARGET logfile=$FILE_LOG job_name=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缺省不对表进行改动监控,如果需要根据监控信息来判断是否需对表进行重新统计分析,则需要手工打开表监控开关,如下: 打开表监控开关: 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 dbms_scheduler.disable('SYS.GATHER_STATS_JOB'); exec dbms_scheduler.enable('SYS.GATHER_STATS_JOB'); Oracle10g OEM图形工具自定义配置统计分析任务 登录OEM,选择管理-统计信息管理-管理优化程序统计信息 选择“操作”-搜集优化程序统计信息 选择“方案”,点击下一步 设置用户统计信息分析自动执行的时间调度 示例中设置的是从2007-03-29开始,每天晚上12点自动执行用户NMEAS统计信息分析, 用户统计信息分析任务设置完整栏目显示 提交完成任务设置 查看数据库中所有自动调度任务执行情况 OEM中选择栏目:管理-统计信息管理(管理优化程序统计信息) 选择相关链接-作业调度程序 注:上述配置的自动统计分析任务利用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 e:\ backup_incre_0.log 数据库完全备份脚本: backup_full_0.rcv run {allocate channel c1 type DISK ; backup incremental level = 0 format 'f:\rman_bak\incre_0_%d_%s_%p.bak' (database include current controlfile); backup format 'f:\rman_bak\arch%u_%s_%p.bak' (archivelog from time 'sysdate-1' all delete input); } 删除过期备份: RMAN>delete expired 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, 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_id ORDER BY 1, 2 3.2 Oracle 9i OEM 数据文件管理 3.3 Oracle 10g OEM 数据文件管理 4. 索引使用情况及碎片分析 4.1表包含的索引及相关列检查 1、 表及索引创建、修改日期检查 EAS用户登录到数据库,执行语句: SQL>SELECT 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、 特定表及其关联索引、列详细信息检查 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_NAME AND C.TABLE_NAME IN('','') 注:如需输出语句执行结果信息,可在语句执行前spool tableindex.list,执行完成后再spool off; 4.2自动化脚本方式对索引进行碎片分析 每周监测一次索引的碎片情况,根据情况制定索引的重建频率以提高索引使用效率。 1、产生EAS用户分析索引的脚本: SQL>select 'analyze index ' || index_name ||' VALIDATE STRUCTURE' from user_indexes; 2、执行EAS用户下所有索引分析: SQL> analyze index VALIDATE STRUCTURE; …….. 3、基于分析结果,查看索引碎片率: SQL> select name,del_lf_rows_len,lf_rows_len,(del_lf_rows_len/lf_rows_len)*100 from index_stats; 索引碎片率(%) = (被删除的索引长度/索引总长)*100 4、对碎片率高的索引执行重建整理 SQL> alter index <索引名> rebuild; 4.3打开索引自动监控开关 如数据库中新增加、修改了索引,则可以打开这些索引的自动监控。 监测索引的使用情况,根据使用情况,删除未使用的索引,并添加能提高查询和处理性能的索引。 SQL> alter index <索引名> monitoring usage; SQL> alter index <索引名> nomonitoring usage; SQL> select index_name,used from v$object_usage; 5. 对用户所有表、索引进行统计分析 5.1 查询EAS用户所有表、索引的最新统计分析时间 表: SQL>select table_name,last_analyzed from user_tables order by 2; 索引: SQL>select table_name,index_name,last_analyzed from user_indexes order by 1,3 注:last_analyzed字段显示的日期太老,则表明该表或索引最近未做统计分析,如果恰好最近大量更新、导入或删除了记录,需要重新对其执行统计分析。 5.2 自动化脚本方式对所有表、索引统计分析 对用户所有对象进行完整统计信息分析收集脚本: dbms_stats.gather_schema_stats(ownname=>'nmeas',method_opt=>'FOR ALL INDEXED COLUMNS SIZE auto',estimate_percent =>100,degree=>DBMS_STATS.DEFAULT_DEGREE,cascade=>true) 9i需(加入crontab或bat任务) 5.3 Oracle 10g OEM图形化自定义对所有表、索引统计分析的自动化调度任务 登录OEM,选择管理-统计信息管理-管理优化程序统计信息-“操作”-搜集优化程序统计信息 范围选项方案中选择“定制选项” 添加用来做统计信息收集的EAS用户 配置周统计信息收集Oracle相关参数 配置周统计信息收集任务执行的调度时间(下图中配置的为每周星期六晚上12点自动执行统计信息搜集) 浏览周统计信息收集任务配置的完整信息 提交完成周统计信息收集任务配置 注: 每周末EAS用户下所有表、索引通过上述任务执行完整的统计分析。 6. 导出表、索引最新统计分析数据 将导出的统计分析数据导入测试库,可以在测试库重新构建性能关键或所有sql语句执行计划、与基准执行计划进行比较。 导出用户当前统计信息: exec dbms_stats.export_schema_stats('nmeas','stats_export') 注:存储导出信息的表stats_export需在安装部署EAS后台数据库时创建。 可以考虑与周统计信息收集放在同一job中 7. 性能报告分析 就一周来的statspack报告进行整理、分析,主要关注: n 数据库整体性能状况指标 n 数据库主要等待事件 n 最消耗cpu、内存资源、I/O的SQL语句 三 、 日常工作-每月应做工作内容 1. 性能全面分析 全面分析一次STATSPACK报告 n 数据库主要性能指标 n 数据库主要等待事件 n 最消耗cpu、内存资源、I/O的SQL语句 空间使用增长的全面分析 n 确定是否需要扩充存储空间 n 考虑预留足够下个月使用的空间 2. 备份数据转备 将一个月以来的Rman备份文件打包,转存到外部存储介质,有条件最好存放异地。 四 日常工作-数据库第一次安装部署后需做的工作 1. Statspack-系统快照采集工具初始化 Oracle 9i 自动化脚本方式初始化Statspack工具 安装statspack工具 SQL> @?/rdbms/admin/spcreate 创建用户perfstat 要求输入口令:perfstat 要求输入表空间:users 及临时表空间:temp ……创建完成。 注:Oracle 10g OEM图形化系统快照采集不用进行Statspack初始化 2. 创建统计信息导出表 创建用户统计信息导出表: exec dbms_stats.create_stat_table('nmeas','stats_export') 3. 运行EAS用户下所有表、索引统计分析,导出基准统计信息 对用户所有对象进行完整统计信息分析收集脚本: dbms_stats.gather_schema_stats(ownname=>'nmeas',method_opt=>'FOR ALL INDEXED SIZE auto',estimate_percent=>dbms_stats.auto_sample_size,degree=>DBMS_STATS.DEFAULT_DEGREE,cascade=>true) 导出用户当前统计信息: exec dbms_stats.export_schema_stats('nmeas','stats_export') 4. 创建Oracle10g 逻辑备份dump文件存放目录 Oracle用户登录操作系统,执行: sqlplus "/as sysdba" SQL>create directory eas_expdp_dir as '/usr/app/oracle/expdp'; SQL>grant read,write on directory eas_expdp_dir to eas用户名; 注:目录/usr/app/oracle/expdp根据实际环境修改。 第二章 事中阶段 既使按规范操作手册对数据库进行日常监控、管理,也不能避免数据库运行过程中产生各式各样的问题,这些问题涉及的原因方方面面,因此,在出现问题的事中阶段关键是收集、掌握问题发生时所有相关信息,并对其进行分析,准确的定位问题,找出最好的解决办法。 一、Oracle数据库出现问题时需掌握的相关信息 1. 问题症状描述 返回的错误代码及描述信息: l EAS应用返回“ORA-”错误信息 l 警告日志文件-Alertsid.log出现“ORA-”错误信息 2. 问题在什么地方出现 l 安装db的哪一步 l 备份、恢复到哪一步报错 l 应用程序运行时报错 l 应用程序连接报错 l 数据库正常启动、关闭报错 l 数据库正常使用报错(日志文件) 3. 问题在什么时间出现 l 一段时间内持续出现 l 某个特定时间点出现 4. 问题在什么条件下出现 l 硬、软件升级,更新补丁后 l 批处理作业在运行导致 l 操作系统存储进行改动 l 反病毒软件运行 l 业务高峰期(并发用户数多少,此时是否有大量用户在做报表、计算等复杂业务) 5. 问题涉及的范围 l 个别系统或区域 l 相关的所有系统或区域 6. 问题是否能重现 7. 数据库运行环境软、硬件基本信息 l 操作系统平台版本、补丁号 l 数据库版本、补丁号 l 第三方软件版本、补丁号 l Cpu、内存、交换区配置 l 存储配置及空间使用率 8. Oracle性能相关 如出现Oracle数据库整体性能下降、某功能响应时间过长甚至没反应等性能问题,除了需了解上述的信息外,还需要进行额外信息收集: l Oracle数据库这段时间系统运行快照报告 l 定位该功能主要sql后,导出及相关表、索引结构及统计数据 注:该信息收集的方法、步骤请参看第一章相关章节 二、Oracle数据库问题的解决途径 l 现场对问题进行分析,结合数据库相关知识、经验积累解决 l 参看Oracle相关技术手册解决 l 通过电话、EMAIL等方式咨询各类Oracle专家解决

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档