1、 ORACLE管理工作手册ORACLE管理工作手册 请注意:本文件只作为产品介绍之用,不属于您与金蝶签署的任何协议。本文件仅包括金蝶既定策略、产品及功能方面的信息,不能以本文件作为要求金蝶履行商务条款、产品策略以及开发义务的依据。本文件内容可能随时变更,恕不另行通知。前 言概述该文档主要目的是降低现场实施人员及用户Oracle数据库的管理难度,提高Oracle数据库技术能力,文档针对Oracle9i、10g两个版本提供了一套完整的Oracle数据库监控、管理的思路、方法步骤,依照该手册进行Oracle数据库的日常工作,能有效地把握Oracle后台数据库的整体运行健康状况,通过收集相关重要信息分
2、析,能很好地防范即将出现的系统风险,系统出现问题后尽快地定位问题,现场解决一部分常规数据库问题。对其它专业要求比较强的数据库问题,也能为后续Oracle专家深入分析、诊断问题提供规范、完整的信息。文档按问题处于的阶段分两部分事前阶段、事中阶段,事前阶段描述了每天、每周末、每月末针对数据库所需进行的管理工作,如:日常监控,包括有环境监控、数据库运行状况监控、性能监控;日常数据库管理,包括:系统运行快照采集、表空间管理、数据库备份恢复、表、索引统计分析、TOP会话、SQL执行计划信息查看等。涉及有相关图形化管理工具使用方法、数据库自动脚本、命令使用方法。事中阶段描述了数据库发生问题时的处理思路,需
3、要收集哪些相关信息。适用范围适于需求分析、设计、实现和测试、实施所有阶段。适于架构设计师、系统设计师、开发工程师和项目经理。适于EAS产品所有版本。约定符号约定在本文中可能出现下列标志,它们所代表的含义如下。符号说明表示有潜在风险,如果忽视这些文本,可能导致操作错误、数据丢失、设备性能降低或不可预知的结果。表示可以帮助您获取更多相关信息或提示您通过其它方式也可以获得相同结果。强调或补充说明所描述的信息。内容约定本处对文中通用信息作如下约定 l $EAS_HOME表示EAS服务器安装的根目录,即安装过程中输入的本地路径。 l $BOS_HOME表示BOS工具的安装根目录,即安装过程中输入的本地路
4、径。目 录概述2适用范围2约定21 事前阶段61.1 日常工作每天应做工作内容61.1.1 工作内容日常环境监控61.1.2 工作内容日常性能监控81.1.3 工作内容日常数据库管理181.2 日常工作每隔一周工作内容601.2.1 文件整理工作601.2.2 数据库全量备份601.2.3 根据一周数据增长率分析预留数据文件下一周所需增长空间611.2.4 索引使用情况及碎片分析641.2.5 对用户所有表、索引进行统计分析661.2.6 导出表、索引最新统计分析数据721.2.7 性能报告分析731.3 日常工作每月应做工作内容731.3.1 性能全面分析731.3.2 备份数据转备731.
5、4 日常工作数据库第一次安装部署后需做的工作731.4.1 Statspack系统快照采集工具初始化731.4.2 创建统计信息导出表741.4.3 运行EAS用户下所有表、索引统计分析,导出基准统计信息741.4.4 创建Oracle10g 逻辑备份dump文件存放目录752 事中阶段752.1 Oracle数据库出现问题时需掌握的相关信息752.1.1 问题症状描述752.1.2 问题在什么地方出现752.1.3 问题在什么时间出现762.1.4 问题在什么条件下出现762.1.5 问题涉及的范围762.1.6 问题是否能重现772.1.7 数据库运行环境软、硬件基本信息772.1.8 O
6、racle性能相关772.2 Oracle数据库问题的解决途径771 事前阶段1.1 日常工作每天应做工作内容1.1.1 工作内容日常环境监控1) 系统运行环境监控查看Oracle 数据文件、控制文件、联机日志及归档日志存放的文件系统或裸设备空间使用情况。重点关注Oracle软件及数据文件所在卷空间使用率:su - oracleAIX、linux查看磁盘空间:df kv HP-UX查看磁盘空间:bdf检测操作系统CPU、内存、交换区、I/O配置状况AIX :CPU、内存、网络、IO、进程、页面交换:topasLinux、HP-UX :CPU、内存、网络、IO、进程、页面交换: top2) 数据
7、库运行状况监控外部检查Oracle实例核心后台进程是否都存在、状态是否正常$ ps -ef|grep ora_查看数据库实例是否能正常连接、访问SQL select status from v$instance;监听是否正常$ lsnrctl status内部是否有表空间出现故障SQL select tablespace_name,status from dba_tablespaces;日志文件是否正常SQL Select * from v$log;SQL Select * from v$logfile;1.1.2 工作内容日常性能监控1) 间隔一段时间使用操作系统top等工具监控系统资源动态
8、运行状况CPU、内存、网络、IO、进程、页面交换等主要活动监控: top、topas、vmstat、iostat等2) 间隔一段时间对数据库性能进行监控Oracle 9i 图形工具Performance Manager监控顶层会话及顶层SQL1 打开OEM控制台,选中要监控的数据库。2 工具中选择 Diagnostic PackPerformance Manager,也可直接选中Top Session或Top SQL。Oracle9i 的Performance Manager工具监控内容主要有:内存的使用情况,IO情况,Oracle数据库进程情况,sql语句运行情况等,主界面如下: 可以通过顶
9、层会话下钻获取到相关SQL执行计划等信息,也可以直接查看TopSql选项获取当前执行最频繁、消耗资源最多的SQL语句:在数据页签下面列出了监控的选项列表,可以根据各类选项对SQL语句进行排序。选中相关SQL语句,单击右键选择“下钻”到“解释计划”查看执行计划: 执行计划显示如下:Oracle10g OEM工具监控顶层会话及获取SQL详细信息登录Oracle10g OEM,选择性能其它监视链接:顶级活动点击顶级会话中的会话ID 点击SQL ID,查看该顶级会话中SQL的详细信息点击计划标签,查看该SQL语句的详细执行计划浏览该顶层会话对应SQL语句的详细信息字符界面下Sql语句及用户进程信息采集
10、l 通过视图查看当前主要影响性能SQL语句语法模版SELECT * FROM (SELECT hash_value,address,substr(sql_text,1,40) sql, list of columns, list of derived values FROM V$SQL or V$SQLXS or V$SQLAREA WHERE list of threshold conditions for columns ORDER BY list of ordering columns DESC)WHERE rownum 100000 AND executions 10 ORDER BY
11、 buffer_gets DESC)WHERE rownum select sid,serial#,username from v$session;开始跟踪结束跟踪Exec dbms_system.set_ev(9,437,10046,8,用户名);Exec dbms_system.set_ev(9,437,10046,0,用户名);生成的跟踪文件在user_dump_dest目录下 tkprof工具输出跟踪报表信息tkprof /opt/oracle/admin/ytcw/udump/ytcw_ora_1026.trc /opt/oracle/admin/ytcw/udump/ytcw_or
12、a_1026.prf aggregate=yes sys=no sort=fchela1.1.3 工作内容日常数据库管理1) 一天内间隔一定时间运行检查警告日志文件中最新错误信息Linux、Unix系列平台:vi alertsid.log输入:“/ORA” 回车进行查找Windows平台下使用常用的文本编辑工具即可查看搜索警告日志文件中Oracle错误信息系统运行状况快照采集每天根据实际情况,在以下三个阶段手工运行Statspack快照采集,输出快照报表:l 正常工作压力下l 每天业务最高峰期l 特殊业务运行阶段Oracle 9i自动化脚本方式快照采集创建当前时间点快照如需采集当前数据库运行状
13、况快照,取20分钟时间间隔运行该脚本两次自动执行statspack快照脚本:statspack_auto_exec.sh#!/bin/sh# creator: james_jiang# function: produce statpack snapshotecho Auto Execute Statspack$ORACLE_HOME/bin/sqlplus /nolog EOFconnect perfstat/perfstatexec statspack.snapecho Auto execute statspack successfully!exitEOF输出最近两个快照时间点之间的快照信息
14、报表自动产生最近两个快照时间点统计信息快照脚本:statspack_auto_report.sh#!/bin/sh# creator: james_jiang# function:get statpack reportecho Auto create statspack snapshot!SQLPLUS=$ORACLE_HOME/bin/sqlplusLOGFILE=$ORACLE_HOME/spreport.logREPFILE=$ORACLE_HOME/spreport.lst$ORACLE_HOME/bin/sqlplus -S perfstat/perfstat EOFSET ECHO
15、 OFFSET HEADING OFFSET FEEDBACK OFFSET PAGESIZE 0SET LINESIZE 1000SET TRIMSPOOL ONSPOOL $LOGFILEselect SNAP_ID from (select SNAP_ID from stats$snapshot where INSTANCE_NUMBER=1 order by SNAP_TIME desc) where rownum3;SPOOL OFF;set echo onset feedback onset heading onexitEOFline1=tail -1 $LOGFILEline2=
16、head -1 $LOGFILEecho line1 is$line1echo line2 is$line2$ORACLE_HOME/bin/sqlplus -S perfstat/perfstat connect target sys/oraclermanconfigure controlfile autobackup on;rmanconfigure controlfile autobackup format for device type disk to f:rman_bak%F.ctl;rmanconfigure snapshot controlfile name to f:rman_
17、baksnap_%F.ctl;Rman备份命令写到一个脚本中,在命令行中执行这个脚本RMAN TARGET / NOCATALOG sys/oracle CMDFILE f: backup_incre_1.rcv LOG f: backup_incre_1.log以下为增量备份脚本,备份同时删除一天前的所有归档日志。该命令可设置为crontab(unix/linux),bat批处理任务(Windows),每天在特定的时间点自动运行。增量备份脚本: backup_incre_1.rcvrun allocate channel c1 type DISK ;backup incremental le
18、vel = 1 format f:rman_bakincre_1_%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);增量备份脚本: backup_incre_1.rcvrun allocate channel c1 type DISK ;backup incremental level = 1 format f:rman_bakincre_1_%d_%s_%p.ba
19、k(database include current controlfile);backup format f:rman_bakarch%u_%s_%p.bak(archivelog from time sysdate-1 all delete input);显示RMAN备份集信息:RMAN list backupset;手工删除闪回区归档日志oracle 归档日志满处理方法如下,通常 Oracle 或第三方备份软件备份完归档后都应该及时删除已经备份的归档日志,否则归档日志会占用大量磁盘空间#su - oracle$rman target / rman DELETE ARCHIVELOG AL
20、L COMPLETED BEFORE SYSDATE-7; #比如删除7天前的所有归档或者也可以手工直接通过操作系统 rm 等命令删除归档日志,然后通过以下命令做同步。rman crosscheck archivelog all;rman delete expired archivelog all;上述脚本中涉及的文件路径需根据现场环境具体情况进行相应修改。Oracle10g OEM图形化方式设置RMAN备份自动执行任务RMAN备份主要参数设置登录10g OEM,选择维护备份设置磁盘设备备份路径、并行度指定(根据服务器cpu个数匹配)备份策略设置主要是指定备份磁盘位置及备份保留时间,下图设置中
21、为周备份策略考虑,保留最近7天备份。两种RMAN自动调度备份策略1. 使用Oracle建议的自动调度备份策略选择维护调度备份选择“调度Oracle建议的备份”选择备份目标介质,缺省备份到磁盘介质该备份策略内容描述设置该策略执行数据库全量或增量备份的调度时间2. 自定义RMAN自动备份策略选择“调度定制备份”选择备份类型、模式、归档日志、过时备份清理策略 备份目标介质设置(缺省使用前面“备份设置”中设置的参数)备份自动执行的调度时间设置(通常设置在系统空闲时进行,如晚上12点过后)备份设置信息复查,确定后提交作业通过查看作业可以了解备份任务进展情况。3. 查看当前数据库RMAN备份信息选择维护备
22、份/恢复中“备份报告”可以查看所有备份执行情况注:前面描述的是数据库全量备份的调度策略设置,增量备份的调度策略设置方法类似,只需要在备份类型中选择增量备份即可。设置完成后EAS数据库自动备份策略为一周一次全量备份,在星期六晚上12点进行。周一到周五每天晚上12点执行一次增量备份,保留最近7天备份,过期备份、归档日志自动删除。Oracle逻辑备份(EXP/EXPDP)操作系统级设置自动备份任务root用户登录操作系统,运行crontab e,添加以下内容:50 23 * * 1-6 su oracle -c /usr/app/oracle/expdp/eas_expdp_MontoSat.sh
23、/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开始导出数据,并删除上周一到周六导出的备份数据。逻辑备份脚本逻辑备份脚本 eas_expdp_MontoSat.sh(星期一到星期六)#=# SCRIPT : eas_expdp_MontoSat.sh# AUTHOR : James_jiang# Date : 2007-10-10# REV : 1.0# PLATFORM : AIX Linux Sol
24、aris HpUnix# PURPOSE : This script is used to run logic backup.# Copyright(c) 2007 Kingdee Co.,Ltd.# All Rights Reserved#=DAY=date +%uFILE_TARGET=eas_expdp_expr $DAY.dmpFILE_LOG=eas_expdp_expr $DAY.log export FILE_TARGET FILE_LOG #导出的Oracle实例名,尤其是服务器存在多个实例时需指定ORACLE_SID=orcl ORACLE_BASE=/home/app/or
25、acleORACLE_HOME=$ORACLE_BASE/oracle/product/10.2.0/db_1export ORACLE_SID ORACLE_BASE ORACLE_HOMEPATH=$PATH:$HOME/bin:$ORACLE_HOME/binexpdp system/oracle schemas=nm directory=eas_expdp_dir dumpfile=$FILE_TARGET logfile=$FILE_LOG job_name=cases_export parallel=4逻辑备份脚本 eas_expdp_Sunday.sh(星期日)sqlplus /
26、as sysdbaSQLcreate directory eas_expdp_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 Lin
27、ux Solaris HpUnix# PURPOSE : This script is used to run logic backup.#=DAY=date +%uFILE_TARGET=eas_expdp_expr $DAY.dmpFILE_LOG=eas_expdp_expr $DAY.log export FILE_TARGET FILE_LOG #导出的Oracle实例名,尤其是服务器存在多个实例时需指定ORACLE_SID=orcl ORACLE_BASE=/home/app/oracleORACLE_HOME=$ORACLE_BASE/oracle/product/10.2.0/
28、db_1cd /home/oracle/10gautoexpdprm -f eas_expdp*.dmp eas_expdp*.logexpdp system/oracle schemas=nm 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导出
29、目录需要创建,具体方法请参看本文档四日常工作数据库第一次安装部署后需做的工作。根据监控信息,对需要的表、索引统计分析Oracle9i 自动化脚本方式对表、索引进行统计分析Oracle9i缺省不对表进行改动监控,如果需要根据监控信息来判断是否需对表进行重新统计分析,则需要手工打开表监控开关,如下:打开表监控开关:alter table 表名 monitoring;/监控表信息记录在sys.dba_tab_modifications视图中根据监控信息对用户统计信息分析收集脚本:dbms_stats.gather_schema_stats(ownname=nmeas,options=GATHER A
30、UTO)Oracle10g 自动化任务表、索引统计分析方式Oracle10g 缺省自动对所有表变动进行监控,并自动执行所有用户统计分析,可以禁止该缺省方式,在dbconsole中手工配置对特定用户统计分析任务。Oracle10g 禁用、启用缺省数据库自动统计信息分析收集任务:exec dbms_scheduler.disable(SYS.GATHER_STATS_JOB);exec dbms_scheduler.enable(SYS.GATHER_STATS_JOB);Oracle10g OEM图形工具自定义配置统计分析任务登录OEM,选择管理统计信息管理管理优化程序统计信息选择“操作”搜集优
31、化程序统计信息选择“方案”,点击下一步设置用户统计信息分析自动执行的时间调度,示例中设置的是从2007-03-29开始,每天晚上12点自动执行用户NMEAS统计信息分析。用户统计信息分析任务设置完整栏目显示提交完成任务设置查看数据库中所有自动调度任务执行情况OEM中选择栏目:管理统计信息管理(管理优化程序统计信息)选择相关链接作业调度程序上述配置的自动统计分析任务利用Oracle自动监控来判断哪些对象改动较大,需要重新进行统计分析,然后在调度的时间对其重新进行统计分析。1.2 日常工作每隔一周工作内容1.2.1 文件整理工作l 警告日志、跟踪文件、dump文件清理l 备份文件整理l Stats
32、pack统计分析报告整理1.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.rcvrun allocate channel c1 type DISK ;backup incremental level = 0 format f:rman_bakincre_0_%d_%s_%p.bak(d
33、atabase include current controlfile);backup format f:rman_bakarch%u_%s_%p.bak(archivelog from time sysdate-1 all delete input);删除过期备份:RMANdelete expired backup;2) Oracle 10g OEM 图形方式创建RMAN全量备份数据库任务具体方法、步骤请参看数据库日常工作每天应做工作内容中RMAN备份部分。1.2.3 根据一周数据增长率分析预留数据文件下一周所需增长空间1) SQL脚本方式查看数据文件空间使用率查看脚本:SELECT df.
34、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_f
35、ree_space, v$parameter p WHERE p.NAME = db_block_size GROUP BY file_id) x WHERE x.file_id = df.file_idORDER BY 1, 22) Oracle 9i OEM 数据文件管理3) Oracle 10g OEM 数据文件管理1.2.4 索引使用情况及碎片分析1) 表包含的索引及相关列检查1. 表及索引创建、修改日期检查EAS用户登录到数据库,执行语句:SQLSELECT OBJECT_NAME,OBJECT_TYPE,CREATED,LAST_DDL_TIME,STATUS FROM USER_
36、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
37、.INDEX_NAME=B.OBJECT_NAME AND B.OBJECT_NAME=C.INDEX_NAMEAND C.TABLE_NAME IN(,)如需输出语句执行结果信息,可在语句执行前spool tableindex.list,执行完成后再spool off;2) 自动化脚本方式对索引进行碎片分析每周监测一次索引的碎片情况,根据情况制定索引的重建频率以提高索引使用效率。1、产生EAS用户分析索引的脚本:SQLselect analyze index | index_name | VALIDATE STRUCTURE from user_indexes; 2、执行EAS用户下所有索引
38、分析: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;3) 打开索引自动监控开关如数据库中新增加、修改了索引,则可以打开这些索引的自动监控监测索引的使用情况,根据使用情况,删除未使用的索引,并添加能提高查询和处理性能的索引。 SQL a