一、故障描述:
同事修改ORACLE数据库的参数,修改完毕并保存spfile后重启数据库报错:ORA-00093 : pga_aggregate_limit must be between 8000M and 100000G
二、故障排除思路
找到pfile,修改报错的参数的参数值,如果没有找到pfile的话,就登录到数据库里(不用管数据库起没起来),执行一下命令创建pfile文件。
create pfile='xxxxxx' from spfie; # xxxxx是新建的pfile绝对路径
然后修改pfile,利用pfile启动数据库
startup pfile='xxxxx';
利用pfile创建spfile
create spfile from pfile;
重启数据库就可以了。
shutdown immediate;
startup;
之所以这么做是因为 spfile是二进制文件,不可以直接修改的,但是pfile可以修改,所以我们可以迂回作战,利用现在的spfile生成pfile,修改pfile,然后用修改过的pfile再生成spfile。
三、遇到的问题
没有在$ORACLE_HOME/dbs/下找到数据库对应的pfile,spfile的位置是在ASM磁盘组里。其实这种情况按照上面的方法也能修复,不过到了最后一步,创建完新的spfile后重启数据库发现数据库使用的还是原来的spfile,因为这个数据库是RAC集群数据库,所以使用集群命令查看spfile路径。发现spfile路径还是原来的路径
srvcrl config database -db xxx;
这就需要修改spfile路径,使用以下集群命令
srvctl modify database -db xxx -spfile 'xxxxxxx';
这时又报错CRS-0245,用户权限不够
既然如此,那就用root用户来执行命令,注意,此时需要使用集群命令的绝对路径,不然很可能会提示找不到srvctl命令
/xxx/xxx/xxx/xxx/bin srvctl modify database -db xxx -spfile 'xxxxx'
此时就可以了。
四、尚未解决的问题
ORACLE提供了在数据库里修改spfile位置的命令
SQL> alter system set spfile='xxxxxxx'
但是当我去执行时报错:
ORA-32017: failure in updating SPFILE
ORA-32019: The parameter SPFILE cannot be updated in the server parameter file
我在网上也找不到如何解决,如果有进来的大佬知道如何解决,请指点一下小弟,我如果之后找到了解决方法,也会更新到这里的。