oracle修改SGA后无法启动的临时解决方法

做oracle的优化,使用Console中打开数据库的配置,发现如图 由于里面有的值为零,于是我按照它的建议修改了对应的值。结果重启后oracle启动不起来了。

使用Console连接提示: 无法解析连接描述符中指定的SID。

使用pl/sql连接提示:ORA-12505:TNS:监听程序当前无法识别连接描述符中所给出的SID

1、 若数据库机器上没有装Console或者没有使用Console配置网络服务名.

则可以通过命令sqlplus sys/sys as sysdba 登录到服务器空闲进程。接着执行步骤4。

2、如果配置了网络服务名,则

在路径D:\oracle\product\10.2.0\db_1\network\admin\listener.o
ra下 找到listener.ora。

原来listener.ora内容:

# listener.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER
=
(SID_LIST
=
(SID_DESC
=
(SID_NAME
= PLSExtProc)
(ORACLE_HOME
= E:\oracle\product\10.2.0\db_1)
(PROGRAM
= extproc)
)
)

LISTENER
=
(DESCRIPTION_LIST
=
(DESCRIPTION
=
(ADDRESS
= (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS
= (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
)

 

 

改成(红色部分为增加部分):

# listener.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER
=
(SID_LIST
=
(SID_DESC
=
(SID_NAME
= PLSExtProc)
(ORACLE_HOME
= D:\oracle\product\10.2.0\db_1)
(PROGRAM
= extproc)
)
(SID_DESC
=
(GLOBAL_DBNAME
= XXX(网络服务名))
(ORACLE_HOME
= D:\oracle\product\10.2.0\db_1)
(SID_NAME
=
XXX(网络服务名)))
)

)

LISTENER
=
(DESCRIPTION_LIST
=
(DESCRIPTION
=
(ADDRESS
= (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS
= (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1568))
)
)

 

 

修改完 listener.ora后

使用console连接提示“数据库已关闭”。

使用pl/sql连接提示

ORA-27101 Shared memory realm does not exist
ORA-01034 ORACLE not available

查看db1文件夹下的alert_XXX(网络服务名).log。

里面记录 :Cannot set sga_target with db_block_buffers set

3、使用dos端登录oracle

sqlplus sys/sys@XXX(网络服务名). as sysdba
能够登陆
提示已经连接到空闲例程

4、找 pfile,在 /.../admin/XXX(服务名)/pfile 下,init.ora.XXXXXXX(数字串)

5、执行命令

SQL> startup pfile='pfile 路径'
通过指定的 pfile 启动数据库实例

结果如图

6、执行命令

SQL> create spfile from pfile='pfile 路径';(一定要有分号!)

创建成功会提示: 文件已创建。

数据库可以登录了,查看例程/配置/内存 ,恢复了原样。

对于32 BIT的Windows系统,有SGA 1.7G限制
某些OS系统本身也有一些内存参数限制

修改 SGA 文件:

SGA_MAX_SIZE是调优oracle9i非常重要的参数,但也是并不是调的越大越好。相反,oracle9i对SGA_MAX_SIZE的最大值有一个限制:1.7G,超过该值就会造成实例无法启动,系统报以下信息:

   1.当你控制台中设置完实例SGA最大值,点击“应用”后,oracle在“正在启动数据库”的过程中,提示:ORA-27102:out of memory,启动失败
   2.当你第二次手动启动实例时,系统会提示:ORA-27100:shared memory realm already exists,最终还是启动失败。
 
   解决该问题的思路:想办法把SGA_MAX_SIZE的值修改到1.7G以下,然后再启动
 
   解决该问题需要用到从oracle9i开始才拥有的特性:spfile。
   spfile是一个二进制文件,可以通过pfile来创建,而且可以通过rman备份。它管理的是初始化参数;
   spfile和pfile不同之处在于:
   1.在oracle9i之前使用pfile存储初始化参数设置,当oracle实例启动时去读取这些参数,任何参数的修改都必须重启实例才能生效。
 
   2.使用spfile来管理初始化参数,可以使用ALTER SYSTEM或者ALTER SESSION来动态修改那些可动态修改的参数,不必重启实例立即生效。
 
   3.除了第一次启动数据库时,oracle读取的是pfile,然后根据pfile来创建spfile,从此启动我们不在需要pfile。
 
   4.pfile是文本文件,可以通过文本编辑器来修改,而spfile是二进制文件,用文本编辑器无法正常编辑。可以修改文本格式的pfile之后,用“create spfile from pfile”命令将文本生成二进制的spfile
 
   好,大概了解了spfile和pfile之后,我们的思路应该很清晰了,下面是解决方法:
   1.手动把实例的服务关闭(在服务里找到“OracleServiceSID”服务,右击选择“停止”)
 
   2.打开【程序】-【Oracle - OraHome92】-【Configuration and Migration Tools】-【Administration Assistant for Windows NT
 
   3.在该页面中打开树形结构,找到实例结点,右击实例结点选择“启动/关闭选项”,取消“服务启动时启动历程”选项。
 
   4.右击实例结点,点击“启动服务”。
 
   5.运行中敲入“cmd”,进入sqlplus,然后通过命令创建可以修改的pfile文本文件:
C:\Documents and Settings\Administrator>sqlplus /nolog
SQL*Plus: Release 9.2.0.1.0 - Production on 星期四 9月 24 22:43:20 2009
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
SQL> conn /as sysdba
已连接到空闲例程。
SQL> create pfile='d:\zgznew.ora' from spfile;
文件已创建。
  
   6.然后用文本编辑器打开zgznew.ora,找到SGA_MAX_SIZE参数,并将它修改到1.7G以下,注意,参数值的单位是字节。修改好之后保存,然后再通过命令创建spfile二进制文件:
SQL> create spfile from pfile='d:\zgznew.ora' ;
文件已创建。
 
    7.此时再用startup命令启动实例就可以成功了:
SQL> startup
ORACLE 例程已经启动。
Total System Global Area  529079780 bytes
Fixed Size                   454116 bytes
Variable Size             503316480 bytes
Database Buffers           25165824 bytes
Redo Buffers                 143360 bytes
数据库装载完毕。
数据库已经打开。
posted @ 2010-02-08 17:43  XueM  Views(3431)  Comments(0Edit  收藏  举报