由于工作需要,单位的服务器进行升级,使用至强CPU,内存为8GB,系统为windows2003,数据库为oracle8i所以一直在查找如何在32 位系统中使oracle使用超过4G内存的问题,baidu了n篇文章,发现在细节上写的都不够详细,又到微软网站上查找,终于对原理和方法有了一个大致了解,在此写出来供大家参考,如有错误还请指正。
1、由于32位系统内存寻址只能到4G,所以在32位系统上使用超过4G的内存,首先要使用支持大内存的软硬件,比如使用至强的CPU(虽然是32位CPU,但是上增加了扩展寻址的能力),windows2003企业版或数据中心版。
2、在操作系统中启用PAE(Physical Address Extensions )功能,这样oracle便可以通过windows的AWE(Address Windowing Extensions)API使用多余4G的内存。
方法:打开系统根目录下的隐藏文件 Boot.ini ,添加 PAE 开关:
(1)multi(0)disk(0)rdisk(0)partition(2)\%systemroot%="Windows Server 2003, Datacenter Edition" /PAE
(2)multi(0)disk(0)rdisk(0)partition(2)\%systemroot%="Windows Server 2003, Datacenter Edition" /3GB /PAE
我们知道32位windows对于每个进程都分配4GB内存(虚拟内存),其中起始的2GB归windows核心使用。因此这两种方法的区别就在于:
方法一只使用了/PAE开关表示启用/PAE功能但是系统对每个进程仍然采用2G核心、2G应用程序的内存分配方式。
方法二除了/PAE开关还使用了/3GB开关表示不仅启用/PAE功能并且系统对每个进程采用1G核心、3G应用程序的内存分配方式。不过这种方式不支持大于16GB的内存,也就是说如果你的实际内存超过16GB则只能使用方法一,这是因为大于16GB后1G的核心内存已经不够windows实现PAE功能。
3、给运行Oracle数据库的操作系统帐户,授予"Lock Pages in Memory"的系统权限。
执行 gpedit.msc打开“组策略”控制台
“计算机配置”->“Windows 设置”->“安全设置”->“本地策略”->“用户权利指派”
双击右边“锁定内存中的页”(或名为"内存中锁定页"),在“本地安全策略设置”对话框中,单击“添加”按钮,在“选择用户或组”对话框中,添加有权运行 oracle的帐户。
4、配置oracle数据库的参数文件(init*.ora),添加USE_INDIRECT_DATA_BUFFERS=TRUE参数,表示使用扩展的内存。
5、修改注册表中的AWE_WINDOW_MEMORY键值为合适值。该值表示在3GB内存中(如果使用了/3GB开关,如果没有使用该开关则为2GB)有多少用于数据库块缓存。
注意:
(1)该值位置在HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0为二进制类型,单位为bytes。
(2)如果不存在表示使用默认值1GB。
(3)该值太大或太小都有可能导致数据库无法启动。