ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle 10G 如何使用超过1.7G的内存

Oracle 10G 如何使用超过1.7G的内存

原创 Linux操作系统 作者:eric0435 时间:2012-05-25 09:29:43 0 删除 编辑

Oracle 10G 如何使用超过1.7G的内存

(2009-10-21 18:20:17)

转载

标签:

杂谈

 

如果你的ORACLE 版本是32位的,如果不做一些配置你是无论如何使用不到1.7G以上内存的。

前两天公司里一个软件系统,需要配置这样的环境,对于我这样的ORACLE所谓的高手,有点不知所措,甚至要硬着头皮去搞定它,
这可是到新公司接到的第一件活。必须搞定,否则ORACLE DBA就图有虚名了。于是马上上网搜一下,文章果然,但是大都雷同,
而且针对的是ORACLE9I 的。我在实验的时候,也把客户的环境搞杂了,实在惭愧呀。不过经过一天多的折腾,也算是搞出来了。

软件环境:
Oracle 10.2.0.1
OS:Windows 2003 Server SP2 32bit

硬件环境:
内存:4G
CPU:Intel Core(TM)2 6300 1.86Ghz

这个环境很重要,特别是ORACLE的版本,跟ORACLE9i的配置肯定是不一样的。

1) 操作系统配置AWE,主要是修改boot.ini文件

    右击"我的电脑",选择"属性"-->高级选项卡,找到启动与故障恢复,单击设置,然后单击编辑
   
  

/PAE选项,修改后的文件如下:
    [boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2003, Enterprise" /noexecute=optout /fastdetect/pae
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /NoExecute=OptIn

2) 配置oracle可以使用的内存,修改注册表。
  
找到ORACLE的注册表项HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1,再你的机器上KEY_OraDb10g_home1不是这个名称,
  
添加一个字符串值项:AWE_WINDOW_MEMORY ,这个值是你准备分配给数据库用的最大内存数(BYTE为单位),例如你想分配4G,那这个值就是
   4*1024*1024*1024

 

3) 获取可编辑的ORACLE初始化参数文件
Windows
命令行

Sqlplus "/ as sysdba"   REM (如果登陆不进去将当前用户加入到ora_dba组中)

SQLPLUS>CREATE PFILE='初始化参数文件的路径' from spfile

SQLPLUS>Shutdown immediate

SQLPLUS>exit

4) 编辑ORACLE初始化参数文件
请用Ulatra editor(当然其他的也可以,但是千万不要用记事本) 打开在第三步生成的初始化参数文件(最好能备份一下,以便出现差错的时候还可以使用最初的文件启动)

第一注销掉以下行:
sga_max_size
sga_target
DB_CACHE_SIZE

修改或者添加以下参数
*.db_block_buffers=262144
    #等于原来的DB_CACHE_SIZE/db_block_size, 例如你希望DB_CACHE_SIZE的大小是2G,则此值是2*1024*1024K/8K= 262144
*.SHARED_POOL_SIZE=419430400    #
是以byte为单位的   400M(这个参数设置过大会报错的,因为ORACLE AWE的配置不是针对他的)
*.log_buffer=73400320           #
是以byte为单位的   70M(这个参数设置过大会报错的,因为ORACLE AWE的配置不是针对他的)
*.use_indirect_data_buffers=true   #
这个参数的含义是我们是通过设置db_block_buffers来计算得到DB_CACHE_SIZE

 

5) 启动ORACLE,并重新创建spfile
 Windows
命令行下运行:
 Sqlplus "/ as sysdba"
 SQLPLUS>Startup pfile='
第四步修改后的初始化参数文件的路径'
 SQLPLUS>Create Spfile from pfile='
第四步修改后的初始化参数文件的路径'   #你会发现在你的ORACLE HOME/Database目录下新生成了一个文件SPFILEOracleSID.ORA
 SQLPLUS>Shutdown immediate

6) 将第三步生成的文件ORACLE HOME/Database/SPFILEOracleSID.ORA 复制到ORACLE HOME/dbs

前面两步的目的是恢复缺省的以spfile参数文件方式启动数据库,否则你的设置都将无效

7) 重新启动Oracle
Windows
命令行
Sqlplus "/ as sysdba"
SQLPLUS>Startup

 

本文来自:http://www.cnblogs.com/SharkXu/archive/2009/03/31/oracle10g_awe.html

google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad);

oracle4G以上内存的使用方法


来源:中国自学编程网   发布日期:2008-11-17 


由于工作需要,单位的服务器进行升级,使用至强CPU,内存为8GB,系统为windows2003,数据库为oracle8i所以一直在查找如何在32位系统中使oracle使用超过4G内存的问题,baidun篇文章,发现在细节上写的都不够详细,又到微软和oracle网站上查找,终于对原理和方法有了一个大致了解,在此写出来供大家参考,如有错误还请指正。
1
、由于32位系统内存寻址只能到4G,所以在32位系统上使用超过4G的内存,首先要使用支持大内存的软硬件,比如使用至强的CPU(虽然是32CPU,但是上增加了扩展寻址的能力),windows2003企业版或数据中心版。
2
、在操作系统中启用PAEPhysical Address Extensions )功能,这样oracle便可以通过windowsAWEAddress Windowing ExtensionsAPI使用多余4G的内存。
方法:打开系统根目录下的隐藏文件 Boot.ini ,添加 PAE 开关:
1multi(0)disk(0)rdisk(0)partition(2)\%systemroot%="Windows Server 2003, Datacenter Edition" /PAE
2multi(0)disk(0)rdisk(0)partition(2)\%systemroot%="Windows Server 2003, Datacenter Edition" /3GB /PAE
我们知道32windows对于每个进程都分配4GB内存(虚拟内存),其中起始的2GBwindows核心使用,剩余的归应用程序本身使用。因此这两种方法的区别就在于:
方法一只使用了/PAE开关表示启用/PAE功能但是系统对每个进程仍然采用2G核心、2G应用程序的内存分配方式。
方法二除了/PAE开关还使用了/3GB开关表示不仅启用/PAE功能并且系统对每个进程采用1G核心、3G应用程序的内存分配方式。不过这种方式不支持大于16GB的内存,也就是说如果你的实际内存超过16GB则只能使用方法一,这是因为大于16GB1G的核心内存已经不够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)该值太大或太小都有可能导致数据库无法启动。
这里解释一下:尽管我们现在拥有超过4GB的内存,但是这些多余的内存并不是oracle可以随便使用的,这些内存只能用于数据库块缓存(即db_buffer),而像share Poollog buffer等只能保存在应用程序可访问的3GB内存中(如果使用了/3GB开关,如果没有使用该开关则为2GB)。在这里我将4GB以外内存中的数据库块缓存叫做AWE数据块缓存(自己起的名字:-))。这里又有问题了,oracle缓冲的数据块并不能全部保存到4GB以外的内存中,还必须在应用程序可直接访问的3GB内存(如果使用了/3GB开关,如果没有使用该开关则为2GB)中使用一部分空间来保存,这一部分内存我称为直接数据块缓存(自己起的名字:-))。也就是说数据块缓存=AWE数据块缓存+直接数据块缓存,为什么会这样呢,因为oracle缓冲到内存中的每个数据块的头部必须保存到直接数据块缓存中,是不能够保存到“AWE数据块缓存中的,并且每个数据块的大小(db_block_size)和数据块的多少(db_block_buffers)都会影响到头部占用空间的多少。并且访问直接数据块缓存要比“AWE数据块缓存快,因此AWE_WINDOW_MEMORY一般来讲需要设置的尽量大(但不能无限大,比如必须小于3GB),oracle建议以默认值为基础,以20%递增扩大,进行测试。比如先测试1GB大小,在测试1.2GB大小等等。
一般来讲AWE_WINDOW_MEMORY有一个最小公式
min(AWE_WINDOW_MEMORY)=(4096 * db_block_size * db_block_lru_latches)/8
其中:
max buffer pools
是一个常量=8
sets_per_tool=2*cpu_count
use_indirect_data_buffers=true
sets_per_tool=cpu_count/2
use_indirect_data_buffers<>true

32Windows上使用超过1.7GB SGA的方法


正常情况下,Oracle SGA32位操作系统下的最高上限是1.7GB;若要调到1.7GB以上,就会提示ORA-27102out of memory)错误。
要想使SGA超过1.7GB,则必须使用Windows提供的4GT4G Tunning)技术。4GT技术原则上可以使用在物理内存不超过2GB的状况下,但Oracle公司不推荐这种做法,这样会严重影响Oracle运行的性能。但物理内存在4GB4GB以上时,为使Oracle 9.2.0.xSGA超过1.7GB,则必须使用4GT技术。
MS的文档,4GT只能用于以下Windows的版本:
Ø        Windows 2000 Datacenter Server
Ø        Windows 2000 Advanced Server
Ø        Windows 2003 Datacenter Edition
32bit
Ø        Windows 2003 Enterprise Edition
32bit
4GT
支持的Oracle数据库的版本:
Ø        Oracle 8.1.6.X
Ø        Oracle 8.1.7.X
Ø        Oracle 9.2.X
注意:不支持Oracle 9.1.0.x
方法
u       
第一步:修改 boot.init的启动参数,加入 /3G /PAE切换开关。
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Windows Server 2003, Enterprise" /3G /PAE /fastdetect
PAE
Pysical Address Extensions.
u       
第二步:修改注册表,加入AWE_WINDOW_MEMORY
AWE
Address Windows Extensions
Oracle 8.1.7版本及其以下版本启动数据库时,不需要设置AWE_WINDOW_MEMORY的最小值,而在Oracle 9.2.0.x的版本中则需要强制设定AWE_WINDOW_MEMORY的最小值。这个最小值在Oracle 8.1.7中通过 DB_BLOCK_LRU_LATCHES参数设定,在Oracle9.2.0.x中则通过 _DB_BLOCK_LRU_LATCHES隐含参数设定。Oracle 9.2.0.xAWE_WINDOW_MEMORY的最小值由以下的公式计算:
MIN(AWE_WINDOW_MEMORY)=(4096 * DB_BLOCK_SIZE * _DB_BLOCK_LRU_LATCHES)/8
_DB_BLOCK_LRU_LATCHES = (Max buffer pools * SETS_PER_POOL)
Max Buffer Pools
是个常量(等于8),SETS_PER_POOL是个变量,它的大小是由是否启用VLM(即设定USE_INDIRECT_DATA_BUFFERS=TRUE参数)决定:
SETS_PER_POOL = 2* CPU_COUNT (
启用 VLM)
SETS_PER_POOL= CPU Count /2 (
不启用VLM)
例如:
CPU's = 2
DB_BLOCK_SIZE = 8192
Total RAM = 8 GB
SETS_PER_POOL = 2 * CPU_COUNT = 4
_DB_BLOCK_LRU_LATCHES = (max buffer Pools * sets_per_pool) = 8*4 = 32
MIN(AWE_WINDOW_MEMORY)=(4096*DB_BLOCK_SIZE*_DB_BLOCK_LRU_LATCHES)/8 =( 4096 * 8192 * 32) / 8 = 134217728 bytes = 128 MB
这样在Windows的注册表中的HKLMSoftwareOracleHomex下的AWE_WINDOW_MEMORY值至少是128M,否则就会提示ORA-27102out of memory)错误。
u       
第三步:在Oracle中启用AWE
修改初始化参数档,注释掉 DB_CACHE_SIZE参数,加入以下参数:
USE_INDIRECT_DATA_BUFFERS = TRUE
DB_BLOCK_BUFFERS = 360000
登入SQL*PLUS,产生SPFILE,然后执行启动数据库,此时SGA已经超过 1.7GB了。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/george188/archive/2009/10/19/4699231.aspx

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26015009/viewspace-730930/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
系统架构师,ACOUG MEMBER,Oracle ACE,Mail:yongjing.star@gmail.com Mobile:13875984558 QQ:409898894 Blog:www.jydba.net

注册时间:2011-10-12

  • 博文量
    511
  • 访问量
    6096686