日期:2014-05-16  浏览次数:20294 次

一次意外的修改导致的oracle启动错误

?? 客户的32位的windows2003r2上的oracle装好了但没想到sga太小,不到100M,心思着应该可以和32位的linux一样可以调大些,就改成了7G,没想到重启数据库后数据库也登录不了:提示 ORA-27100: shared memory realm already exists,查了查资料,原来windows32位最大支持sga是1.7G,只能改回去了:

?

  • C:\sqlplus /nolog
  • conn /as sysdba
  • SQL> create pfile from spfile;
    刚创建的pfile文件一般在windows 的$ORACLE_HOME/database/目录下,init$ORACLE_SID.ora
  • 修改 init$ORACLE_SID.ora文件中的:
  • *.pga_aggregate_target=1073741824? (字节Byte:1024M*1024*1024)
    *.sga_target=943718400? (字节Byte900M*1024*1024)

  • SQL> create spfile from pfile;
  • (有些windows系统生成的spfile文件 在$ORACLE_HOME/database/目录下)

?

然后重启动oracle的两个服务,一个是数据库,一个是TNS监听器服务。

最后建议还是用64位操作系统,对于后期数据量日益增大有很大好处,不会因为内存溢出而宕机。

?

参考连接:

http://space.itpub.net/12778571/viewspace-586517

?

附:

Windows XP支持的最大内存问题
http://www.wucailiang.com/zuidaneicun/
Windows XP系统属于32位操作系统,32位系统平台,其寻址能力上限为4GB,不过要这4GB的最后1GB空间基本上都被显卡等设备所占据了,所以系统实际上无法访问3GB至4GB地址段的物理内存。具体到32位的Windows XP,它也只能认出3GB的内存,而且单个进程最多只能使用2GB的空间。即使是32位版的Windows vista也无法临驾于这个寻址的限制。

Windows XP 32bit设计使用内存最小为64M最大为4GB ,但这并不意味着能够在32bit版本的XP下完全使用4GB物理内存,4GB内存仅仅被用于大物理内存的物理地址扩展和调优功能时开启且需要修改启动参数,但在默认参数下用户内存被限制在2GB,此时的用户模式内存地址范围是0x0000000-0x7FFFFFFF,使用参数打开调优功能及物理地址扩展后用户内存空间限制在3GB,此时用户模式内存扩展到0x0000000-0xBFFFFFF,当然你可以使用PAE,3G和PAE参数都在BOOT.INI文件内修改。

更为权威的解释大家可以参看:http://www.dansdata.com/askdan00015.htm,不过是英文的,概要也是:32位操作系统地区可以访问4G的空间,不过这里的4G是指寻址空间,而并不能简单的对应到内存上去,我们之所以经常把这个空间当成内存大小,是因为内存是CPU寻址的主要对象。事实上,操作系统的寻址包括了在内存条,显卡内存,声卡网卡以及其他硬件中断里的寻址,因此4GB是操作系统能处理的所有的设备地址加在一起的总和。