Oracle DBA日常工作手册

时间:2022-04-24 02:33:30

Oracle DBA日常工作手册

 

概述...2

第一章.  事前阶段...3

一 、 日常工作-每天应做工作内容...3

1、工作内容-日常环境监控...3

1.1系统运行环境监控...3

1.2数据库运行状况监控...3

2、工作内容-日常性能监控...4

2.1 间隔一段时间使用操作系统top等工具监控系统资源动态运行状况...4

2.2间隔一段时间对数据库性能进行监控...4

3、工作内容-日常数据库管理...13

3.1一天内间隔一定时间运行...13

3.2 每天工作结束后、系统空闲时运行...25

二 、日常工作-每隔一周工作内容...52

1. 文件整理工作...52

2. 数据库全量备份...52

2.1 Oracle 9i RMAN自动化脚本方式全量备份...52

2.2 Oracle 10g OEM 图形方式创建RMAN全量备份数据库任务...52

3. 根据一周数据增长率分析预留数据文件下一周所需增长空间...53

3.1 SQL脚本方式查看...53

3.2 Oracle 9i OEM 数据文件管理...54

3.3 Oracle 10g OEM 数据文件管理...55

4. 索引使用情况及碎片分析...55

4.1表包含的索引及相关列检查...55

4.2自动化脚本方式对索引进行碎片分析...56

4.3打开索引自动监控开关...56

5. 对用户所有表、索引进行统计分析...57

5.1 查询EAS用户所有表、索引的最新统计分析时间...57

5.2 自动化脚本方式对所有表、索引统计分析...57

5.3 Oracle 10g OEM图形化自定义对所有表、索引统计分析的自动化调度任务...57

6. 导出表、索引最新统计分析数据...63

7. 性能报告分析...64

三 、 日常工作-每月应做工作内容...64

1. 性能全面分析...64

全面分析一次STATSPACK报告...64

空间使用增长的全面分析...64

2. 备份数据转备...64

四 日常工作-数据库第一次安装部署后需做的工作...64

1. Statspack-系统快照采集工具初始化...64

2. 创建统计信息导出表...65

3. 运行EAS用户下所有表、索引统计分析,导出基准统计信息...65

4. 创建Oracle10g 逻辑备份dump文件存放目录...65

第二章 事中阶段...66

一、Oracle数据库出现问题时需掌握的相关信息...66

1. 问题症状描述...66

2. 问题在什么地方出现...66

3. 问题在什么时间出现...66

4. 问题在什么条件下出现...66

5. 问题涉及的范围...67

6. 问题是否能重现...67

7. 数据库运行环境软、硬件基本信息...67

8. Oracle性能相关...67

二、Oracle数据库问题的解决途径...68

 

概述

该文档主要目的是降低现场实施人员及用户Oracle数据库的管理难度,提高Oracle数据库技术能力,文档针对Oracle9i、10g两个版本提供了一套完整的Oracle数据库监控、管理的思路、方法步骤,依照该手册进行Oracle数据库的日常工作,能有效的把握Oracle后台数据库的整体运行健康状况,通过收集相关重要信息分析,能很好的防范即将出现的系统风险,系统出现问题后尽快的定位问题,现场解决一部分常规数据库问题。对其它专业要求比较强的数据库问题,也能为后续Oracle专家深入分析、诊断问题提供规范、完整的信息。

文档按问题处于的阶段分两部分-事前阶段、事中阶段,事前阶段描述了每天、每周末、每月末针对数据库所需进行的管理工作,如:日常监控,包括有环境监控、数据库运行状况监控、性能监控;日常数据库管理,包括:系统运行快照采集、表空间管理、数据库备份恢复、表、索引统计分析、TOP会话、SQL执行计划信息查看等。涉及有相关图形化管理工具使用方法、数据库自动脚本、命令使用方法。事中阶段描述了数据库发生问题时处理思路,需要收集哪些相关信息。

第一章.  事前阶段

一、日常工作-每天应做工作内容

1、工作内容-日常环境监控

1.1系统运行环境监控

查看Oracle 数据文件、控制文件、联机日志及归档日志存放的文件系统或裸设备空间使用情况。

 

重点关注Oracle软件及数据文件所在卷空间使用率:

su - oracle

AIXlinux查看磁盘空间:df –kv

HP-UX查看磁盘空间:bdf

 

检测操作系统CPU、内存、交换区、I/O配置状况

 

AIX

CPU、内存、网络、IO、进程、页面交换:topas

LinuxHP-UX

CPU、内存、网络、IO、进程、页面交换: top

 

1.2数据库运行状况监控

1.2.1 外部

检查Oracle实例核心后台进程是否都存在、状态是否正常

$ ps -ef|grep ora_

查看数据库实例是否能正常连接、访问

SQL> select status from v$instance;

监听是否正常

$ lsnrctl status

1.2.2 内部

是否有表空间出现故障

SQL> select tablespace_name,status from dba_tablespaces;

日志文件是否正常

SQL> Select * from v$log;

SQL> Select * from v$logfile;

 

2、工作内容-日常性能监控

2.1 间隔一段时间使用操作系统top等工具监控系统资源动态运行状况

CPU、内存、网络、IO、进程、页面交换等主要活动监控:: top、topas、vmstat、iostat等

 

2.2间隔一段时间对数据库性能进行监控

2.2.1 Oracle 9i 图形工具-Performance Manager监控顶层会话及顶层SQL

1. 打开OEM控制台,选中要监控的数据库。

2. 工具中选择 Diagnostic Pack-Performance Manager,也可直接选中Top Session或Top SQL。

 

Oracle9i 的Performance Manager工具监控内容主要有:内存的使用情况,IO情况,Oracle数据库进程情况,sql语句运行情况等,主界面如下:

  

可以通过顶层会话下钻获取到相关SQL执行计划等信息,也可以直接查看TopSql选项获取当前执行最频繁、消耗资源最多的SQL语句

 在数据页签下面列出了监控的选项列表,可以根据各类选项对SQL语句进行排序。

选中相关SQL语句,单击右键选择“下钻”到“解释计划”查看执行计划:

 

 

执行计划显示如下:

2.2.2 Oracle10g OEM工具监控顶层会话及获取SQL详细信息

登录Oracle10g OEM,选择性能- 其它监视链接:*活动

 

点击*会话中的会话ID

 

点击SQL ID,查看该*会话中SQL的详细信息

 

 

点击计划标签,查看该SQL语句的详细执行计划

 

 

浏览该顶层会话对应SQL语句的详细信息

 

 

2.2.3 字符界面下Sql语句及用户进程信息采集

n  通过视图查看当前主要影响性能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 <= [number of top SQL statements];

实际举例

SELECT * FROM

  (SELECT hash_value,address,substr(sql_text,1,40) sql,

      buffer_gets, executions, buffer_gets/executions "Gets/Exec"

   FROM V$SQLAREA

   WHERE buffer_gets > 100000 AND executions > 10

  ORDER BY buffer_gets DESC)

WHERE rownum <= 10;

 

n  跟踪用户进程获取统计信息:

获取要跟踪的用户进程

SQL> 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_ora_1026.prf

aggregate=yes sys=no sort=fchela

 

3、工作内容-日常数据库管理

 3.1一天内间隔一定时间运行

3.1.1检查警告日志文件中最新错误信息

LinuxUnix系列平台

vi alertsid.log

输入:“/ORA-” 回车进行查找

Windows 平台下使用常用的文本编辑工具即可查看搜索警告日志文件中Oracle错误信息

 

3.1.2系统运行状况快照采集

每天根据实际情况,在以下三个阶段手工运行Statspack快照采集,输出快照报表:

l  正常工作压力下

l  每天业务最高峰期

l  特殊业务运行阶段

3.1.2.1 Oracle 9i自动化脚本方式快照采集

创建当前时间点快照

如需采集当前数据库运行状况快照,取20分钟间隔两次运行该脚本。

自动执行statspack快照脚本:statspack_auto_exec.sh

#!/bin/sh

# creator: james_jiang

# function:   produce statpack snapshot

echo "Auto Execute Statspack"

$ORACLE_HOME/bin/sqlplus /nolog <<EOF

connect perfstat/perfstat

exec statspack.snap

echo "Auto execute statspack successfully!"

exit

EOF

 

 

输出最近两个快照时间点之间的快照信息报表

自动产生最近两个快照时间点统计信息快照脚本:statspack_auto_report.sh

#!/bin/sh

# creator: james_jiang

# function:get statpack report

echo " Auto create statspack snapshot!"

SQLPLUS=$ORACLE_HOME/bin/sqlplus

LOGFILE=$ORACLE_HOME/spreport.log

REPFILE=$ORACLE_HOME/spreport.lst

$ORACLE_HOME/bin/sqlplus -S perfstat/perfstat <<EOF

SET ECHO OFF

SET HEADING OFF

SET FEEDBACK OFF

SET PAGESIZE 0

SET LINESIZE 1000

SET TRIMSPOOL ON

SPOOL $LOGFILE

select SNAP_ID from (select SNAP_ID from stats\$snapshot where INSTANCE_NUMBER=1 order by SNAP_TIME desc) where rownum<3;

SPOOL OFF;

set echo on

set feedback on

set heading on

exit

EOF

 

line1=`tail -1 $LOGFILE`

line2=`head -1 $LOGFILE`

echo "line1 is"$line1

echo "line2 is"$line2

$ORACLE_HOME/bin/sqlplus -S perfstat/perfstat <<EOF

define begin_snap=$line1

define end_snap=$line2

define report_name=$REPFILE

@?/rdbms/admin/spreport.sql

echo "Auto create statspack snapshot successfully!"

exit

EOF

 

 

 

3.1.2.2 Oracle 10gOEM图形管理工具实现系统快照采集

自动化脚本执行快照收集主要是Oracle9i版本的使用方式,Oracle 10g OEM图形工具自动执行快照采集,缺省1小时收集一次,可以根据实际情况修改收集间隔时间、降低对系统性能影响。

系统快照自动收集时间、间隔、保留期限设置

登录Oracle10g OEM,选择管理- 自动工作量档案库

 

 

点击编辑,查看或修改快照收集时间及间隔

 

Oracle10g缺省系统快照每隔一小时执行一次,保留最近15天的所有快照,可根据实际情况修改调整,点确定后保存所做修改。

 

创建当前时间点系统快照

点击管理快照和保留的快照集下面的当前快照ID

 

选择创建保留快照集,点击创建

 

选择“是”开始执行快照创建

 

快照在当前时间点成功创建。

 

输出两个快照时间点之间的快照信息报表

修改原来“创建保留的快照集”为“查看报告”,选择起始快照号,点击创建

 

选择结束快照号,点击“确定”

 

开始创建两个快照时间点之间的所有统计信息报告

 

另存该输出快照报告为HTML文件

 

注:生成的统计信息快照报告放在专门目录下,定期对其整理、分析,作为EAS数据库运行整体状况及问题诊断的依据。

 

3.2 每天工作结束后、系统空闲时运行

3.2.1表空间使用率
3.2.1.1 SQL脚本方式查看

脚本:FREESPACE.SQL

SELECT 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_cnt fragment

  FROM (SELECT   tablespace_name, SUM (BYTES) total

            FROM dba_data_files

        GROUP BY tablespace_name) a,

       (SELECT   tablespace_name, SUM (BYTES) free, MAX (BYTES) max_free,

                 COUNT (BYTES) free_cnt

            FROM dba_free_space

        GROUP BY tablespace_name) b

WHERE a.tablespace_name=b.tablespace_name 

 

3.2.1.2 图形界面查看表空间使用率

Oracle9i OEM 表空间管理

  

Oracle10g OEM表空间管理

登录OEM后选择管理- 表空间

 

3.2.2数据库备份及日志清理

数据库备份主要提供两种方式,物理备份及逻辑备份,物理备份主要使用OracleRMAN工具,逻辑备份主要使用Oracle导出工具Exp及Expdp。

 

Oracle 物理备份(RMAN)

该方式下周一到周五每天做一次增量备份,并检查备份是否正确,同时清理归档日志。

3.2.2.1 Oracle 9i RMAN自动化脚本增量备份

RMAN备份环境初始化设置:

rman nocatalog

rman>connect target sys/oracle

rman>configure controlfile autobackup on;

rman>configure controlfile autobackup format for device type disk to'f:\rman_bak\%F.ctl';

rman>configure snapshot controlfile name to 'f:\rman_bak\snap_%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.rcv

run

{allocate channel c1 type DISK ;

backup incremental level = 1 format 'f:\rman_bak\incre_1_%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备份集信息:

RMAN> list backupset;

注:上述脚本中涉及的文件路径需根据现场环境具体情况进行相应修改。

3.2.2.2 Oracle10gOEM图形化方式设置RMAN备份自动执行任务

RMAN备份主要参数设置

登录10g OEM,选择维护 - 备份设置

磁盘设备备份路径、并行度指定(根据服务器cpu个数匹配)

 

备份策略设置

主要是指定备份磁盘位置及备份保留时间,下图设置中为周备份策略考虑,保留最近7天备份。

 

两种RMAN自动调度备份策略

1)    使用Oracle建议的自动调度备份策略

选择维护-调度备份

 

选择“调度Oracle建议的备份”

选择备份目标介质,缺省备份到磁盘介质

该备份策略内容描述

 

设置该策略执行数据库全量或增量备份的调度时间

 

 

 

2)    自定义RMAN自动备份策略

选择“调度定制备份”

 

选择备份类型、模式、归档日志、过时备份清理策略

 

备份目标介质设置(缺省使用前面“备份设置”中设置的参数)

 

备份自动执行的调度时间设置(通常设置在系统空闲时进行,如晚上12点过后)

 

备份设置信息复查,确定后提交作业

 

 

通过查看作业可以了解备份任务进展情况。

 

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.sheas_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 <index_name> 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需(加入crontabbat任务)

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专家解决