首页 > 数据库 > Oracle > racle 10G 如何使用超过1.7G的内存
Oracle
(2009-10-21 18:20:17)
标签: | |
如果你的ORACLE版本是32位的,如果不做一些配置你是无论如何使用不到
前两天公司里一个软件系统,需要配置这样的环境,对于我这样的ORACLE所谓的高手,有点不知所措,甚至要硬着头皮去搞定它,这可是到新公司接到的第一件活。必须搞定,否则ORACLE DBA就图有虚名了。于是马上上网搜一下,文章果然,但是大都雷同,而且针对的是ORACLE9I的。我在实验的时候,也把客户的环境搞杂了,实在惭愧呀。不过经过一天多的折腾,也算是搞出来了。
软件环境:
Oracle
OS:Windows 2003 Server SP2 32bit
硬件环境:内存:
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_MACHINESOFTWAREORACLEKEY_OraDb
添加一个字符串值项:AWE_WINDOW_MEMORY,这个值是你准备分配给数据库用的最大内存数(以BYTE为单位),例如你想分配
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的大小是
*.SHARED_POOL_SIZE=419430400 #是以byte为单位的
*.log_buffer=73400320 #是以byte为单位的
*.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);
oracle中
由于工作需要,单位的服务器进行升级,使用至强CPU,内存为8GB,系统为windows2003,数据库为oracle8i所以一直在查找如何在32位系统中使oracle使用超过
1、由于32位系统内存寻址只能到
2、在操作系统中启用PAE(Physical Address Extensions)功能,这样oracle便可以通过windows的AWE(Address Windowing Extensions)API使用多余
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_MACHINESOFTWAREORACLEHOME0为二进制类型,单位为bytes。(2)如果不存在表示使用默认值1GB。(3)该值太大或太小都有可能导致数据库无法启动。这里解释一下:尽管我们现在拥有超过4GB的内存,但是这些多余的内存并不是oracle可以随便使用的,这些内存只能用于数据库块缓存(即db_buffer),而像share Pool,log 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_cou
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26015009/viewspace-1059906/ ,如需转载,请注明出处,否则将追究法律责任。