SQL> @spdrop
Dropping old versions (if any)
Synonym dropped.
Sequence dropped.
Synonym dropped.
Table dropped.
Synonym dropped.
View dropped. …… NOTE:
SPDUSR complete. Please check spdusr.lis for any errors.
(以上的安装过程描述是在 HP 11.11 + Oracle 8.1.7 平台上得到的)
2.1.2 测试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
可是有可能你会得到以下错误:
SQL> exec statspack.snap; BEGIN statspack.snap; END; *
ERROR at line 1:
ORA-01401: inserted value too large for column ORA-06512: at \ORA-06512: at \ORA-06512: at \ORA-06512: at line 1
这是Oracle 的一个Bug,Bug 号1940915。 该Bug 自8.1.7.3 后修正。
这个问题只会出现在多位的字符集, 需要修改spcpkg.sql 脚本,
$ORACLE_HOME/rdbms/admin/spcpkg.sql,将\修改为 \,然后重新运行该脚本。 该脚本错误部分: select l_snap_id , p_dbid
, p_instance_number , substr(sql_text,1,31) ...........
substr 会将多位的字符, 当作一个byte.substrb 则会当作多个byte。在收集数据时, statpack 会将 top10 的 sql 前 31 个字节 存入数据表中,若在SQL 的前31 个字有中文,就会出现此错误。 注意:运行 spcpkg.sql 也需要以 internal 用户登录 sqlplus
2.1.3 生成statspack报告
调用spreport.sql 可以生成分析报告:
当调用spreprot.sql 时,系统首先会查询快照列表,然后要求你选择生成报告的开始快照ID(begin_snap)和结束快照ID(end_snap),生成一个报告. 为了生成一个report,我们至少需要两次采样:
SQL> @spreport
DB Id DB Name Inst Num Instance ----------- ------------ -------- ------------ 2749170756 RES 1 res
Completed Snapshots
Snap Snap
Instance DB Name Id Snap Started Level Comment ------------ ------------ ----- ----------------- ----- ---------------------- res RES 1 26 Jul 2003 16:36 5 2 26 Jul 2003 16:37 5 3 26 Jul 2003 17:03 5
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Enter value for begin_snap:2 Begin Snapshot Id specified: 2
Enter value for end_snap: 3 End Snapshot Id specified: 3
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is sp_2_3. To use this name, press to continue, otherwise enter an alternative. Enter value for report_name: rep0726.txt
……
End of Report
在运行 spreport.sql 生成 statspack 报告的过程中,会有三个地方提示用户输入: 1、 开始快照ID; 2、 结束快照ID;
3、 输出报告文件的文件名,缺省的文件名是sp__
上面输入的开始快照ID是2,开始快照ID是3,输出报告文件的文件名是rep0726.txt
成功运行一次 statspack.snap 就会产生一个 snapshot ,在生成 statspack 报告的时候就可以看到这个 snap id 和 snap 运行的时间。运行 statspack.snap ,就是上面所说的采样,statspack 报告是分析两个采样点之间各种情况。
2.1.4 删除历史快照数据
前面讲过,成功运行一次 statspack.snap 就会产生一个 snapshot ,这个 snapshot 的基本信息是存放在 PERFSTAT.stats$snapshot 表中的,生成 statspack报告时会查询该表的数据,供用户选择准备分析的 snapshot 。如果运行 statspack.snap 次数多了以后,该表的数据也会增加,历史数据会影响正常运行的效果,因此需要定时清理一下历史快照数据。
删除stats$snapshot 数据表中的相应数据,其他表中的数据会相应的级连删除:
SQL> select max(snap_id) from stats$snapshot; MAX(SNAP_ID) ------------ 166
SQL> delete from stats$snapshot where snap_id < = 166; 143 rows deleted
你可以更改snap_id 的范围以保留你需要的数据。 在以上删除过程中,你可以看到所有相关的表都被锁定。 SQL> select a.object_id,a.oracle_username ,b.object_name

