14exitEOFline1=`tail —1$LOGFILE`line2=`head -1$LOGFILE`echo”line1is”$line1echo”line2is”$line2$ORACLE_HOME/bin/sqlplus -Sperfstat/perfstat〈<EOFdefinebegin_snap=$line1defineend_snap=$line2definereport_name=$REPFILE@?/rdbms/admin/spreport。sqlecho ”Autocreatestatspacksnapshot successfully!”exitEOF3。1.2。2Oracle 10gOEM图形管理工具实现系统快照采集自动化脚本执行快照收集主要是Oracle9i版本的使用方式,Oracle10gOEM图形工具自动执行快照采集,缺省1小时收集一次,可以根据实际情况修改收集间隔时间、降低对系统性能影响。系统快照自动收集时间、间隔、保留期限设置登录Oracle10g OEM,选择管理 -自动工作量档案库
15点击编辑,查看或修改快照收集时间及间隔
16Oracle10g缺省系统快照每隔一小时执行一次,保留最近15天的所有快照,可根据实际情况修改调整,点确定后保存所做修改。
17创建当前时间点系统快照点击管理快照和保留的快照集下面的当前快照ID
18选择创建保留快照集,点击创建
19选择“是”开始执行快照创建快照在当前时间点成功创建。
20输出两个快照时间点之间的快照信息报表修改原来“创建保留的快照集”为“查看报告”,选择起始快照号,点击创建
21选择结束快照号,点击“确定"
22开始创建两个快照时间点之间的所有统计信息报告
23另存该输出快照报告为HTML文件
24注:生成的统计信息快照报告放在专门目录下,定期对其整理、分析,作为EAS数据库运行整体状况及问题诊断的依据.3.2每天工作结束后、系统空闲时运行3.2.1表空间使用率3.2。1.1 SQL脚本方式查看脚本:FREESPACE.SQLSELECT a.tablespace_name,ROUND (100-b.free/a.total *100)used_pct, ROUND(a.total /1024/ 1024) "total(MB)”, ROUND(b。free/1024/1024)”free_total(MB)”, ROUND(b.max_free/1024/1024)”free_max(MB)",b。free_cntfragment FROM(SELECT tablespace_name,SUM(BYTES)total FROMdba_data_files GROUPBY tablespace_name) a, (SELECT tablespace_name, SUM(BYTES) free, MAX(BYTES)max_free, COUNT(BYTES)free_cnt FROMdba_free_space GROUPBY tablespace_name)bWHEREa。tablespace_name=b。tablespace_name 3.2。1.2图形界面查看表空间使用率Oracle9iOEM表空间管理
25Oracle10gOEM表空间管理登录OEM后选择管理- 表空间
26n3。2。2数据库备份及日志清理数据库备份主要提供两种方式,物理备份及逻辑备份,物理备份主要使用OracleRMAN工具,逻辑备份主要使用Oracle导出工具Exp及Expdp.
27Oracle物理备份(RMAN)该方式下周一到周五每天做一次增量备份,并检查备份是否正确,同时清理归档日志.3.2.2。1Oracle 9iRMAN自动化脚本增量备份RMAN备份环境初始化设置:rmannocatalogrman〉connecttargetsys/oraclerman>configure controlfile autobackupon;rman〉configurecontrolfileautobackupformatfordevicetypediskto’f:\rman_bak\%F。ctl';rman>configuresnapshotcontrolfilenameto’f:\rman_bak\snap_%F.ctl';Rman备份命令写到一个脚本中,在命令行中执行这个脚本RMAN TARGET/NOCATALOGsys/oracleCMDFILEf:\backup_incre_1。rcvLOG f:\backup_incre_1。log该命令可设置为crontab(unix/linux),bat批处理任务(Windows),在每天特定的时间点自动运行。增量备份脚本: backup_incre_1。rcvrun{allocatechannelc1 typeDISK ;backup incrementallevel =1format'f:\rman_bak\incre_1_%d_%s_%p.bak’(databaseincludecurrent controlfile);backupformat 'f:\rman_bak\arch%u_%s_%p。bak'(archivelogfrom time’sysdate-1'all deleteinput);}显示RMAN备份集信息:RMAN〉listbackupset;
28注:上述脚本中涉及的文件路径需根据现场环境具体情况进行相应修改。3.2。2.2 Oracle10gOEM图形化方式设置RMAN备份自动执行任务RMAN备份主要参数设置登录10g OEM,选择维护 - 备份设置磁盘设备备份路径、并行度指定(根据服务器cpu个数匹配)
29备份策略设置主要是指定备份磁盘位置及备份保留时间,下图设置中为周备份策略考虑,保留最近7天备份。
30两种RMAN自动调度备份策略1)使用Oracle建议的自动调度备份策略选择维护-调度备份
31选择“调度Oracle建议的备份”
32选择备份目标介质,缺省备份到磁盘介质该备份策略内容描述
33设置该策略执行数据库全量或增量备份的调度时间
34
351)自定义RMAN自动备份策略选择“调度定制备份”
36选择备份类型、模式、归档日志、过时备份清理策略
37 备份目标介质设置(缺省使用前面“备份设置”中设置的参数)
38备份自动执行的调度时间设置(通常设置在系统空闲时进行,如晚上12点过后)
39备份设置信息复查,确定后提交作业
40
41通过查看作业可以了解备份任务进展情况。1)查看当前数据库RMAN备份信息选择维护-备份/恢复中“备份报告”可以查看所有备份执行情况
42注:前面描述的是数据库全量备份的调度策略设置,增量备份的调度策略设置方法类似,只需要在备份类型中选择增量备份即可。设置完成后EAS数据库自动备份策略为一周一次全量备份,在星期六晚上12点进行。周一到周五每天晚上12点执行一次增量备份,保留最近7天备份,过期备份、归档日志自动删除。Oracle逻辑备份(EXP/EXPDP)1) 操作系统级设置自动备份任务root用户登录操作系统,运行crontab–e,添加以下内容:5023**1-6su–oracle—c/usr/app/oracle/expdp/eas_expdp_MontoSat.sh〉 /dev/null2〉&1#星期一到星期六晚上11点50导出数据5023**0su– oracle—c/usr/app/oracle/expdp/eas_expdp_Sunday.sh〉/dev/null2>&1#星期日11点50开始导出数据,并删除上周一到周六导出的备份数据。
432)逻辑备份脚本逻辑备份脚本 eas_expdp_MontoSat。sh(星期一到星期六)#====================================================#SCRIPT :eas_expdp_MontoSat.sh# AUTHOR :James_jiang#Date : 2007—10—10# REV :1.0# PLATFORM:AIXLinux SolarisHpUnix#PURPOSE : Thisscriptis used torunlogic backup.#Copyright(c)2007 KingdeeCo。,Ltd.# AllRightsReserved#=====================================================DAY=`date+%u`FILE_TARGET=eas_expdp_`expr$DAY'。dmpFILE_LOG=eas_expdp_`expr$DAY`.logexportFILE_TARGETFILE_LOG#导出的Oracle实例名,尤其是服务器存在多个实例时需指定ORACLE_SID=orcl ORACLE_BASE=/home/app/oracleORACLE_HOME=$ORACLE_BASE/oracle/product/10.2.0/db_1exportORACLE_SIDORACLE_BASEORACLE_HOMEPATH=$PATH:$HOME/bin:$ORACLE_HOME/binexpdpsystem/oracleschemas=nmdirectory=eas_expdp_dirdumpfile=$FILE_TARGET logfile=$FILE_LOG job_name=cases_export parallel=4逻辑备份脚本 eas_expdp_Sunday。sh(星期日)sqlplus”/assysdba”SQL>createdirectoryeas_expdp_dir as’/usr/app/oracle/expdp';SQL〉grant read,writeondirectoryeas_expdp_dirto salhr;Oracle10g版本逻辑备份使用expdp工具,在部署导出自动任务前需创建导出dmp文件存放目录并授权给EAS数据库用户:#!/bin/sh#=====================================================#SCRIPT:eas_expdp_Sunday.sh#AUTHOR :James_jiang
44#Date :2007-10—10#REV:1.0#PLATFORM :AIXLinuxSolarisHpUnix#PURPOSE : Thisscriptisused to runlogicbackup.#=====================================================DAY=`date +%u`FILE_TARGET=eas_expdp_`expr$DAY`.dmpFILE_LOG=eas_expdp_`expr$DAY`.logexport FILE_TARGETFILE_LOG#导出的Oracle实例名,尤其是服务器存在多个实例时需指定ORACLE_SID=orcl ORACLE_BASE=/home/app/oracleORACLE_HOME=$ORACLE_BASE/oracle/product/10。2。0/db_1cd/home/oracle/10gautoexpdprm-feas_expdp*。dmpeas_expdp*.logexpdpsystem/oracleschemas=nmdirectory=eas_expdp_dirdumpfile=$FILE_TARGET logfile=$FILE_LOGjob_name=cases_exportparallel=4附:上述脚本中导出路径/usr/app/oracle/expdp需根据现场实际情况修改,备份脚本eas_expdp_MontoSat.sh、eas_expdp_Sunday.sh需赋予可执行权限。Expdp导出目录需要创建,具体方法请参看本文档 四日常工作-数据库第一次安装部署后需做的工作3.2。3根据监控信息,对需要的表、索引统计分析3。2。3.1Oracle9i自动化脚本方式对表、索引进行统计分析Oracle9i缺省不对表进行改动监控,如果需要根据监控信息来判断是否需对表进行重新统计分析,则需要手工打开表监控开关,如下:打开表监控开关:alter table表名monitoring;//监控表信息记录在sys.dba_tab_modifications视图中根据监控信息对用户统计信息分析收集脚本:dbms_stats.gather_schema_stats(ownname=〉'nmeas',options=>’GATHERAUTO’)
453。2.3.2Oracle10g自动化任务表、索引统计分析方式Oracle10g缺省自动对所有表变动进行监控,并自动执行所有用户统计分析,可以禁止该缺省方式,在dbconsole中手工配置对特定用户统计分析任务。Oracle10g禁用、启用缺省数据库自动统计信息分析收集任务:execdbms_scheduler.disable('SYS.GATHER_STATS_JOB');execdbms_scheduler。enable('SYS.GATHER_STATS_JOB');Oracle10gOEM图形工具自定义配置统计分析任务登录OEM,选择管理-统计信息管理-管理优化程序统计信息选择“操作”-搜集优化程序统计信息
46选择“方案”,点击下一步
47设置用户统计信息分析自动执行的时间调度示例中设置的是从2007-03-29开始,每天晚上12点自动执行用户NMEAS统计信息分析,
48用户统计信息分析任务设置完整栏目显示
49提交完成任务设置
50查看数据库中所有自动调度任务执行情况OEM中选择栏目:管理-统计信息管理(管理优化程序统计信息)选择相关链接-作业调度程序
51注:上述配置的自动统计分析任务利用Oracle自动监控来判断哪些对象改动较大,需要重新进行统计分析。然后在调度的时间对其重新进行统计分析。一、日常工作-每隔一周工作内容1.文件整理工作n警告日志、跟踪文件、dump文件清理n备份文件整理nStatspack统计分析报告整理2.数据库全量备份2。1Oracle 9iRMAN自动化脚本方式全量备份Rman备份命令写到一个脚本中,在命令行中执行这个脚本RMANTARGET/NOCATALOGsys/oracleCMDFILEe:\backup_incre_0.rcv LOGe:\backup_incre_0.log数据库完全备份脚本: backup_full_0。rcvrun{allocatechannel c1typeDISK;backupincrementallevel=0format’f:\rman_bak\incre_0_%d_%s_%p。bak'(databaseinclude currentcontrolfile);backup format 'f:\rman_bak\arch%u_%s_%p。bak'(archivelogfrom time’sysdate-1'alldeleteinput);}删除过期备份:RMAN〉deleteexpired backup;2.2Oracle10gOEM图形方式创建RMAN全量备份数据库任务具体方法、步骤请参看数据库日常工作-每天应做工作内容中RMAN备份部分
521.根据一周数据增长率分析预留数据文件下一周所需增长空间3.1SQL脚本方式查看数据文件空间使用率查看脚本: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 FROMdba_data_filesdf, (SELECT file_id, MAX(block_id *p.VALUE) hw, SUM (BYTES) free FROMdba_free_space,v$parameterp WHERE p.NAME='db_block_size’ GROUPBYfile_id) x WHERE x。file_id=df。file_idORDERBY1,2
533.2Oracle9iOEM 数据文件管理
543。3 Oracle10g OEM 数据文件管理2.索引使用情况及碎片分析4.1表包含的索引及相关列检查1、表及索引创建、修改日期检查EAS用户登录到数据库,执行语句:
55SQL〉SELECTOBJECT_NAME,OBJECT_TYPE,CREATED,LAST_DDL_TIME,STATUS FROM USER_OBJECTS;1、表包含的索引及索引相关列检查SQL>SELECT INDEX_NAME,TABLE_NAME,COLUMN_NAME FROMUSER_IND_COLUMNSWHERETABLE_NAMELIKE'T_%'ORDERBYTABLE_NAME;2、特定表及其关联索引、列详细信息检查SELECTA.TABLE_NAME,A.INDEX_NAME,COLUMN_NAME,CREATED,LAST_DDL_TIME,LAST_ANALYZEDFROMUSER_IND_COLUMNSA,USER_OBJECTS B,USER_INDEXESCWHERE A。INDEX_NAME=B。OBJECT_NAMEANDB。OBJECT_NAME=C.INDEX_NAMEANDC.TABLE_NAMEIN('','')注:如需输出语句执行结果信息,可在语句执行前spooltableindex。list,执行完成后再spool off;4.2自动化脚本方式对索引进行碎片分析每周监测一次索引的碎片情况,根据情况制定索引的重建频率以提高索引使用效率.1、产生EAS用户分析索引的脚本:SQL>select'analyzeindex '|| index_name ||'VALIDATE STRUCTURE’fromuser_indexes;2、执行EAS用户下所有索引分析:SQL>analyzeindex〈index_name〉 VALIDATESTRUCTURE;……。。3、基于分析结果,查看索引碎片率:SQL>selectname,del_lf_rows_len,lf_rows_len,(del_lf_rows_len/lf_rows_len)*100fromindex_stats;索引碎片率(%)= (被删除的索引长度/索引总长)*1004、对碎片率高的索引执行重建整理SQL>alterindex〈索引名〉rebuild;4。3打开索引自动监控开关如数据库中新增加、修改了索引,则可以打开这些索引的自动监控。监测索引的使用情况,根据使用情况,删除未使用的索引,并添加能提高查询和处理性能的索引。SQL〉alterindex<索引名> monitoringusage;
56SQL> alterindex〈索引名〉nomonitoringusage;SQL〉 selectindex_name,used fromv$object_usage;1.对用户所有表、索引进行统计分析5.1查询EAS用户所有表、索引的最新统计分析时间表:SQL>select table_name,last_analyzed fromuser_tables orderby2;索引:SQL〉select table_name,index_name,last_analyzedfrom user_indexesorderby1,3注:last_analyzed字段显示的日期太老,则表明该表或索引最近未做统计分析,如果恰好最近大量更新、导入或删除了记录,需要重新对其执行统计分析。5。2 自动化脚本方式对所有表、索引统计分析对用户所有对象进行完整统计信息分析收集脚本:dbms_stats。gather_schema_stats(ownname=〉'nmeas',method_opt=>’FORALLINDEXED COLUMNSSIZE auto',estimate_percent =〉100,degree=>DBMS_STATS。DEFAULT_DEGREE,cascade=〉true)9i需(加入crontab或bat任务)5。3Oracle 10gOEM图形化自定义对所有表、索引统计分析的自动化调度任务登录OEM,选择管理-统计信息管理-管理优化程序统计信息-“操作”-搜集优化程序统计信息
57范围选项方案中选择“定制选项"
58添加用来做统计信息收集的EAS用户配置周统计信息收集Oracle相关参数
59配置周统计信息收集任务执行的调度时间(下图中配置的为每周星期六晚上12点自动执行统计信息搜集)
60浏览周统计信息收集任务配置的完整信息
61提交完成周统计信息收集任务配置
62注: 每周末EAS用户下所有表、索引通过上述任务执行完整的统计分析。1.导出表、索引最新统计分析数据将导出的统计分析数据导入测试库,可以在测试库重新构建性能关键或所有sql语句执行计划、与基准执行计划进行比较。导出用户当前统计信息:exec dbms_stats.export_schema_stats(’nmeas','stats_export')注:存储导出信息的表stats_export需在安装部署EAS后台数据库时创建.可以考虑与周统计信息收集放在同一job中
631.性能报告分析就一周来的statspack报告进行整理、分析,主要关注:n数据库整体性能状况指标n数据库主要等待事件n最消耗cpu、内存资源、I/O的SQL语句二、日常工作-每月应做工作内容1.性能全面分析全面分析一次STATSPACK报告n数据库主要性能指标n数据库主要等待事件n最消耗cpu、内存资源、I/O的SQL语句空间使用增长的全面分析n确定是否需要扩充存储空间n考虑预留足够下个月使用的空间2. 备份数据转备将一个月以来的Rman备份文件打包,转存到外部存储介质,有条件最好存放异地。三 日常工作-数据库第一次安装部署后需做的工作1.Statspack-系统快照采集工具初始化Oracle9i 自动化脚本方式初始化Statspack工具安装statspack工具SQL〉@?/rdbms/admin/spcreate创建用户perfstat要求输入口令:perfstat要求输入表空间:users
64及临时表空间:temp……创建完成。注:Oracle10gOEM图形化系统快照采集不用进行Statspack初始化1.创建统计信息导出表创建用户统计信息导出表:exec dbms_stats。create_stat_table(’nmeas’,’stats_export')2.运行EAS用户下所有表、索引统计分析,导出基准统计信息对用户所有对象进行完整统计信息分析收集脚本:dbms_stats.gather_schema_stats(ownname=>'nmeas’,method_opt=〉'FORALLINDEXED SIZE auto’,estimate_percent=>dbms_stats.auto_sample_size,degree=>DBMS_STATS。DEFAULT_DEGREE,cascade=>true)导出用户当前统计信息:execdbms_stats。export_schema_stats(’nmeas','stats_export')3.创建Oracle10g逻辑备份dump文件存放目录Oracle用户登录操作系统,执行:sqlplus"/assysdba”SQL〉createdirectoryeas_expdp_dir as ’/usr/app/oracle/expdp’;SQL>grantread,writeondirectory eas_expdp_dir to eas用户名;注:目录/usr/app/oracle/expdp根据实际环境修改。
65第一章事中阶段既使按规范操作手册对数据库进行日常监控、管理,也不能避免数据库运行过程中产生各式各样的问题,这些问题涉及的原因方方面面,因此,在出现问题的事中阶段关键是收集、掌握问题发生时所有相关信息,并对其进行分析,准确的定位问题,找出最好的解决办法。一、Oracle数据库出现问题时需掌握的相关信息1.问题症状描述返回的错误代码及描述信息:lEAS应用返回“ORA-”错误信息l警告日志文件-Alertsid。log出现“ORA—”错误信息2.问题在什么地方出现l安装db的哪一步l备份、恢复到哪一步报错l应用程序运行时报错l应用程序连接报错l数据库正常启动、关闭报错l数据库正常使用报错(日志文件)3.问题在什么时间出现l一段时间内持续出现l某个特定时间点出现4.问题在什么条件下出现l硬、软件升级,更新补丁后l批处理作业在运行导致
66l操作系统存储进行改动l反病毒软件运行l业务高峰期(并发用户数多少,此时是否有大量用户在做报表、计算等复杂业务)1.问题涉及的范围l个别系统或区域l相关的所有系统或区域2.问题是否能重现3.数据库运行环境软、硬件基本信息l操作系统平台版本、补丁号l数据库版本、补丁号l第三方软件版本、补丁号lCpu、内存、交换区配置l存储配置及空间使用率4.Oracle性能相关如出现Oracle数据库整体性能下降、某功能响应时间过长甚至没反应等性能问题,除了需了解上述的信息外,还需要进行额外信息收集:lOracle数据库这段时间系统运行快照报告l定位该功能主要sql后,导出及相关表、索引结构及统计数据注:该信息收集的方法、步骤请参看第一章相关章节
67二、Oracle数据库问题的解决途径l现场对问题进行分析,结合数据库相关知识、经验积累解决l参看Oracle相关技术手册解决l通过电话、EMAIL等方式咨询各类Oracle专家解决