今天下班到家,接到一同事电话,说是用Oracle9i的客户端连接Oracle10g后,修改某些参数后,导致Oracle10无法正常启动,小机重启了好几次都不行。
远程连接之后,用Oracle用户在sqlplus下面startup时,系统提示如下:
ORA-00824: cannot set sga_target due to existing internal settings, see alert log for more information
看来是sga_target这个参数设置的有问题。在网上查了查sga_target参数的信息(具体可见我的另外一篇转载的文章:ORACLE10--SGA_MAX_SIZE与SGA_TARGET),了解到它是oracle10里新的内存参数,用于动态调整SGA内存的各组成部分。它的内容同样是存储在spfile中。
在此之前,在另一片文章ORACLE9i——优化SGA最大值超过1.7G后导致实例无法启动 中,通过pfile和spfile之间的关系解决了因调整SGA_MAX_SIZE无法启动实例的问题,那么利用这种关系同样可以解决今天sga_target的问题。
而且,经过实践我发现,上次使用的方法太过于繁琐,今天通过实践找到一个简便方法。
但是思路都是一样的:想办法把sga_target的值修改到正常阀值内,然后再启动数据库实例
按照这种思路:
1、我们完全可以先用pfile的配置参数启动数据库实例
2、通过pfile重建spfile文件(create spfile from pfile)
3、关闭数据库实例
4、正常启动数据库实例
具体的操作如下:
[oracle@RedHat pfile]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Tue Oct 20 00:20:19 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn /as sysdba
Connected to an idle instance.
SQL> startup pfile='/home/oracle/admin/zgz/pfile/init.ora.82220096537'
--“通过pfile文件启动oracle实例”
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218968 bytes
Variable Size 88082024 bytes
Database Buffers 188743680 bytes
Redo Buffers 7168000 bytes
Database mounted.
Database opened.
SQL> create spfile from pfile='/home/oracle/admin/zgz/pfile/init.ora.82220096537';--“通过pfile重建spfile文件”
File created.
SQL> shutdown immediate --"关闭数据库实例"
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup --"通过spfile文件正常启动oracle实例"
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218968 bytes
Variable Size 88082024 bytes
Database Buffers 188743680 bytes
Redo Buffers 7168000 bytes
Database mounted.
Database opened.
SQL>
瞧!和上次的方法比起来是不是很简便,完全在命令行下就可以完成。
学习就是这样,同样一个问题,要不断掌握更简便的方法,才是进步!
但是在具体的解决过程中,当我用shutdown immediate来关闭数据库时,系统突然报以下错误:ORA-03113: end-of-file on communication channel
以前没有遇到过,在网上搜了搜,造成这个错误的原因有很多,大部分是网络连接不好造成的,结果我关掉现在的SSH窗口,重新建立一个SSH连接,问题解决。
: