在sqlplus客户端中执行语句“sqlplus perfstat/perfstat @%binPath%/setSnap.txt”
而setSnap.txt里面的内容为
EXECUTE statspack.snap;
select snap_id from stats$snapshot;
quit
可是没有创建statspack,当执行这条语句时,抛出以下异常:
BEGIN statspack.snap; END;
*
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00201: identifier 'STATSPACK.SNAP' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
很明显,'STATSPACK.SNAP'没有创建起来,于是,上网查找创建STATSPACK.SNAP的过程。网上资料一大堆。比如:
http://blog.csdn.net/lejuo/archive/2008/12/18/3552211.aspx
http://piaoling.javaeye.com/blog/294119
但是,在照搬网上说法,要求在sqlplus中执行@ spcreate.sql时候,过程中有可能出错,spcreate.sql脚本执行过程中,如果有任何错误,则会中断执行。于是又执行@spdrop.sql,spdrop.sql脚本执行过程中,如果有些错误,不会中断执行,继续执行下面的语句。
对于执行spcreate.sql脚本时,在创建用户perfstat或者创建表空间perfstat之后,如果会出错,有可能要删除用户perfstat,或者删除表空间perfstat。
我的创建表空间的脚本是:
CREATE TABLESPACE perfstat
DATAFILE 'F:/oracle/product/10.2.0/oradata/g10/perfstat01.dbf' SIZE 100m
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 100k;
创建完之后,成功了。可是执行spcreate.sql脚本时,出错了,报出:‘…initial…’等错误。
分析问题,可能是在创建表空间过程中,初始表空间没有指定大小抑或太小了。
于是,修正步骤如下:
1.删除原有的perfstat用户和perfstat空间。
以sysdba身份用sqlplus连接oracle:
sqlplus system/manager
执行语句:
drop user perfstat cascade;
drop tablespace perfstat;
同时删除原有的表空间文件:
F:/oracle/product/10.2.0/oradata/g10/PERFSTAT01.DBF
2.重新创建statspack.snap
按照的说法:http://piaoling.javaeye.com/blog/294119
只是,创建表空间的语句变成了:
create tablespace PERFSTAT
datafile'F:/oracle/product/10.2.0/oradata/g10/perfstat01.dbf' size 500M
autoextend on next 500M maxsize unlimited
minimum extent 5M
default storage( initial 5M
next 5M
minextents 1
maxextents unlimited
pctincrease 0);
这样的创建过程经过验证无误。