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.0\db_1\network\admin\listener.o
  ra下 找到listener.ora。 2
  原来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 Sharedmemory realmdoes 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.
  文件已创建。
  6.然后用文本编辑器打开zgznew.ora,找到SGA_MAX_SIZE参数,并将它修改到1.7G以下,注意,参数值的单位是字节。修改好之后保存,然后再通过命令创建spfile二进制文件:
  SQL> create spfile from pfile='d:\zgznew.ora' ;
  文件已创建。
  7.此时再用startup命令启动实例就可以成功了:
  Total System Global Area 529079780 bytes
  Fixed Size 454116 bytes
  Variable Size 503316480 bytes
  Database Buffers 25165824 bytes
  Redo Buffers 143360 bytes
  数据库装载完毕。
  数据库已经打开。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值