Oracle Statspack 快速上手、使用手册



Oracle Statspack 是什么就不多说了,下面只介绍快速启动此功能的方法,相信在启动之后,所有了解Oracle的DBA们都能迅速玩会它。

目录:

一. 系统参数
二. 安装 Statspack
三. 测试安装好的 Statspack
四. 规划自动任务
五. 生成分析报告
六. 移除定时任务

------------------------------------------------------------------------------------------------------------

一. 系统参数

1.job_queue_processes (建立自动任务,执行数据收集,该参数需要大于 0。)

    SQL> alter system set job_queue_processes = 6 scope=both;

    系统已更改。

2.timed_statistics (防止因从操作系统请求时间而引起的开销,请将该值设置为 False。)

    SQL> alter system set timed_statistics = true;

    System altered

    SQL>

二. 安装 Statspack

安装 Statspack 需要用sys用户以sysdba身份登陆。需要在 本地安装或者通过 telnet 登陆到服务器。
首先登陆到数据库,最好转到$ORACLE_HOME/RDBMS/ADMIN 目录,这样执行脚本就可以方便些。

    $ORACLE_HOME/rdbms\admin>sqlplus "/ as sysdba"
    SQL*Plus: Release 9.*.*.*.* - Production on 星期* * 月 ** **:**:** ****
    Copyright (c) ****, ****, Oracle Corporation. All rights reserved.

    连接到: Oracle9i Enterprise Edition Release *.*.*.*.* - Production
    With the Partitioning, Oracle Label Security, OLAP and Oracle Data Mining options
    JServer Release 9.*.*.*.* - Production

    SQL>
        检查数据文件路径及磁盘空间,以决定创建数据文件的位置:
    SQL> select file_name from dba_data_files;
    FILE_NAME
    --------------------------------------------------------------------------------
    D:\ORACLE\ORADATA\EYGLE\SYSTEM01.DBF
    D:\ORACLE\ORADATA\EYGLE\TEMP01.DBF
    ……
    D:\ORACLE\ORADATA\EYGLE\HH_AM01.ORA

    已选择24行。

    SQL>


    创建存储数据的表空间,如果采样间隔较短,周期较长,打算长期使用,那么你可能需要一个大一点的表
空间( <=100M ),如果每个半个小时采样一次,连续采样一周,数据量是很大的。本例创建一个 500M 的测试表空间。

    SQL> create tablespace perfstat
       2 datafile 'd:\oracle\oradata\eygle\perfstat.dbf'
       3 size 500M
       4 extent management local;

    表空间已创建。
    SQL>


    检查是否存在安装所需要的脚本文件(对于不同的版本,脚本有所不同)
<-----------------------------------------------------------------------------------------------------------
    E:\Oracle\ora92\rdbms\admin>dir /w sp*
     驱动器 E 中的卷没有标签。
     卷的序列号是 ACC3-4340
    E:\Oracle\ora92\rdbms\admin 的目录
       spauto.sql       spcpkg.sql        spcreate.sql     spctab.sql      spcusr.sql    spdoc.txt
    spdrop.sql       spdtab.sql        spdusr.sql        sppurge.sql    sprepins.sql spreport.sql
    sprepsql.sql    sptrunc.sql      spuexp.par         spup816.sql     spup817.sql    spup90.sql
                  18 个文件             510,296 字节
                   0 个目录 4,146,565,120 可用字节
----------------------------------------------------------------------------------------------------------->
    接下来我们就可以开始安装 Statspack 了。这期间会提示你输入缺省表空间和临时表空间的位置,输入我们
为 perfstat 用户创建的表空间和你的临时表空间。

    SQL> @spcreate
    .
    .
    Specify PERFSTAT user's default tablespace
    输入 default_tablespace 的值: perfstat
    Using perfstat for the default tablespace

    用户已更改。

    用户已更改。

    Specify PERFSTAT user's temporary tablespace
    输入 temporary_tablespace 的值: temp

    注意:在 statspack 创建过程中,当提示输入口令时,你可以输入一个明文口令,但是如果输入口令不符合
规范(如 123 或以数字开头的口令),创建会失败。
<-----------------------------------------------------------------------------------------------------------
    ... Creating PERFSTAT user ...

    Choose the PERFSTAT user's password.

    Not specifying a password will result in the installation FAILING
    Specify PERFSTAT password
    输入 perfstat_password 的值: 123

    123

    PL/SQL 过程已成功完成。

    create user perfstat identified by 123
          *
    ERROR 位于第 1 行:
    ORA-00988: 缺少或无效口令
----------------------------------------------------------------------------------------------------------->

如果安装成功,你可以看到如下的输出信息:
<-----------------------------------------------------------------------------------------------------------
    ….
    Creating Package STATSPACK...

    程序包已创建。

    没有错误。
    Creating Package Body STATSPACK...

    程序包主体已创建。

    没有错误。

    NOTE:
    SPCPKG complete. Please check spcpkg.lis for any errors.
----------------------------------------------------------------------------------------------------------->

    你可以查看.lis 文件查看安装时的错误信息。

   SQL> host dir *.lis
    SQL> host find "ORA-" *.lis
    SQL> host find "err" *.lis

    在 UNIX 上,你可以通过以下命令查看相应的错误信息
    $ ls *.lis
    $ grep ORA- *.lis
    $ grep err *.lis

    在这一步,如果出现错误,那么你可以运行 spdrop.sql 脚本来删除这些对象。然后重新运行 spcreate.sql 来
创建这些对象。运行 SQL*Plus, 以具有 SYSDBA 权限的用户登陆:

    SQL> @spdrop.sql

三. 测试安装好的 Statspack

    运行 statspack.snap 可以产生系统快照,运行两次,然后执行 spreport.sql 就可以生成一个基于两个时间点的报告。如果一切正常,说明安装成功。

SQL>execute statspack.snap
PL/SQL procedure successfully completed.
SQL>execute statspack.snap
PL/SQL procedure successfully completed.
SQL>@spreport.sql


四. 规划自动任务

    Statspack 正确安装以后,我们就可以设置定时任务,开始收集数据了。可以使用 spatuo.sql 来定义自动任务。spauto.sql 的关键内容:
    dbms_job.submit(:jobno, 'statspack.snap;',
     trunc(sysdate+1/24,'HH'), 'trunc(SYSDATE+1/24,''HH'')', TRUE, :instno);

    这个 job 任务定义了收集数据的时间间隔:
              一天有 24 个小时,1440 分钟,那么:
                     1/24 HH               每小时一次
                     1/48 HH               每半小时一次
                     1/144MI               每十分钟一次
                     1/288MI               每五分钟一次
    可以修改 spauto.sql 来更改执行间隔,如:

    dbms_job.submit(:jobno, 'statspack.snap;',
     trunc(sysdate+1/48,'MI'), 'trunc(SYSDATE+1/48,''MI'')', TRUE, :instno);

    然后执行 spauto,这样就建立了一个每 30 分钟执行一次的数据收集计划。可以查看 spauto.lis
来获得输出信息:
<-----------------------------------------------------------------------------------------------------------
    SQL> @spauto

    PL/SQL procedure successfully completed.

     ……
            ** **-*****-** **:**:**
----------------------------------------------------------------------------------------------------------->

    关于采样间隔,通常建议以 1 小时为时间间隔,特殊需要可设置半小时作为采样间隔,但是不推荐更短。因为 statspack 的执行本身需要消耗资源,对于繁忙的生产系统,太短的采样对系统的性能会产生较大的影响(甚至会使 statspack 的执行出现在采样数据中)。

五. 生成分析报告

    调用 spreport.sql 可以生成分析报告:
<-----------------------------------------------------------------------------------------------------------
    SQL> @spreport

    ……
    输入 report_name 的值: rep1205.txt

    Using the report name rep1205.txt
----------------------------------------------------------------------------------------------------------->

<-----------------------------------------------------------------------------------------------------------
    这样就生成了一个报告,可是如果中间停过机,那么你可能收到以下错误信息:

ERROR: Snapshots chosen span an instance shutdown: RESULTS ARE INVALID
STATSPACK report for

DB Name DB Id Instance Inst Num Release                                      OPS Host
------------ ----------- ------------ -------- ----------- --- ------------
----------------------------------------------------------------------------------------------------------->

    一个statspack 的报告不能跨越一次停机,但是之前或之后的连续区间,收集的信息依然有效。你可以选择之前或之后的采样生产report。

六. 移除定时任务

    移除一个定时任务,可以如下操作:
<-----------------------------------------------------------------------------------------------------------
    SQL> select job,log_user,priv_user,last_date,next_date,interval from user_jobs;

    JOB LOG_USER LAST_DATE NEXT_DATE INTERVAL

    ---------- ------------------------------ ------------------------------ ------------------------------
     22 PERFSTAT ****-**-*:**:**:** ****-**-* **:**:** trunc(SYSDATE+1/144,'MI')

    SQL> execute dbms_job.remove('22')

    PL/SQL procedure successfully completed
----------------------------------------------------------------------------------------------------------->

    当你完成了一个采样报告,你应该及时移除这个 job 任务,在生产环境中,遗漏一个无人照顾的 job 是非常危险的,如果 statspack 运行一个星期,采样的数据量是非常惊人的。


参考: http://hi.baidu.com/jackli00/blog/item/0fea4888be3ebcb90f2444c6.html

你可能感兴趣的:(oracle,sql,unix,Security,脚本)