yp1234 发表于 2018-9-23 09:57:11

ORACLE大内存配置

  Oracle数据库中使用超过2G的内存 (本文实例以8G内存的服务器,分配给ORACLE的DB_BLOCK_BUFFERS为6G)
WINDOWS平台上扩展SGA
  针对32bit的Windows。Windows2000上不能利用超过4G的内存,一般是2G的内存保留给进程,2G内存保留给核心的。在Windows2000 Advanced Server上可以分配3G给进程,1G留给核心的。
  
1. 如果机器的内存在4G以下,可以使用Physical Address Extensions(PAE)或者是Address Windowing Extensions(AWE)进行扩展,如果机器内存大于4GB就只能使用AWE进行扩展了。
AWE支持以下的Windows操作系统:
  Windows 2000 Datacenter Server
  Windows 2000 Advanced Server
  Windows 2003 Datacenter Edition(32bit)
  Windows 2003 Enterprise Edition(32bit)
  AWE不支持以下的Windows操作系统:
  Windows 2000 Server(Standard)
  Windows2000 Professional
  Windows XP Home Edition
  Windows XP Professional
  Windows 2003 Standard Edition
  Windows 2003 Web Edition
AWE支持的Oracle数据库的版本:
  Oracle 8.1.6.X
  Oracle 8.1.7.X
  Oracle 9.2.X
AWE不支持Oracle9.0.1.X
  在标准版的Oracle9.2.0.1上,如果你设置了use_indirect_data_buffers=true,启动就会报错:
  ORA-439-feature not enabled:very large memory.
  这个是标准版的Oracle的9.2.0.1的一个bug(#2520796),在Oracle9.2.0.2中解决了。
2. 在操作系统上启动AWE
  AWE在操作系统上可以通过在boot.ini文件中加/PAE切换启用。
  例如:
  multi(0)disk(0)rdisk(0)partition(1)/WINNT="Microsoft Windows 2000 Advanced Server" /PAE
  也可以同时使用/PAE和/3G在同一台机器上,例如:
  multi(0)disk(0)rdisk(0)partition(1)/WINNT="Microsoft Windows 2000 Advanced Server" /3GB /PAE
  但是同时使用内存最大能够支持到16G,如果要使用16G以上的内存,则必须选择其中的一种使用了。
3. 在Oracle上启用AWE
  首先要在启动的参数文件中设置参数
  USE_INDIRECT_DATA_BUFFERS=TRUE
  u如果设置了这个参数,对于Oracle9.2.0的版本则不能再使用DB_CACHE_SIZE参数了,只能使用DB_BLOCK_BUFFERS参数。
  u扩展的内存只能增加到BUFFER CACHE中去使用,因此只能增大DB_BLOCK_BUFFERS这个参数去扩展SGA区。
4. AWE_WINDOW_MEMORY实现故障解决
  在Oracle8.1.7版本以下启动数据库的时候不用设置AWE_WINDOW_MEMORY的最小值,而在Oracle9.2.0的版本中则强制要设置
  
  AWE_WINDOW_MEMORY的最小值,这个最小值在Oracle8.1.7中通过DB_BLOCK_LRU_LATCHES参数设定,在 Oracle9.2.0中则通过
  
  _DB_BLOCK_LRU_LATCHES隐含参数设定,Oracle9.2.0的AWE_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 = 16
  DB_BLOCK_SIZE = 8192
  Total RAM = 16 GB
  SETS_PER_POOL = 2 * CPU_COUNT = 32
  _DB_BLOCK_LRU_LATCHES = (max buffer Pools * sets_per_pool) = 8*32 = 256 MIN(AWE_WINDOW_MEMORY)=
  
  (4096*DB_BLOCK_SIZE*_DB_BLOCK_LRU_LATCHES)/8 =( 4096 * 8192 * 256) / 8 = 1073741824 bytes = 1024 MB
  这样在Windows的注册表中的HKLM/Software/Oracle/Homex下的AWE_WINDOW_MEMORY值至少是1024M,否则就会提示错误:
  ORA-27102 out of memory
  OSD-00034 Message 34 not found; Product=RDBMS;facility =SOSD
  O/S Error: (OS 8) Not enough storage is available to process this command
5.实例(HP DL360 ProLiant G7 8G内存)
1)   设置注册表
  LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0 中增加字符项   "AWE_WINDOW_MEMORY"   值设为"1073741824"   (1G)
2)   backup L:\TESTDB\SPFILESOP.ORA
  Oracle的数据文件安装在L:\TESTDB并且数据库的启动参数也保存在L:\TESTDB
3)   备份现在正在使用的spfile
  在CMD命令下执行以下命令:
  Sqlplus /nolog
  Conn / as sysdba
  Create pfile=’d:/bk.ora’ from spfile;
4)   修改ORACLE的spfile值
  在数据库打开时,在sqlplus下执行以下命令:
  Alter system set use_indirect_data_buffers=true scope=spfile;
  Alter system set pre_page_sga=true scope=spfile;
  Alter system set db_block_buffers=786432 scope=spfile;
  (1G的DB_BLOCK_BUFFERS为131072(DB_BLOCK_SIZE为8K,1024K*1024/8=131072)修改完成后,SGA的大小为db_block_size* db_block_buffers=8k*786432=5242880K,5242880K/1024/1024=6G)
5)   修改完spfile之后,要把spfile中的db_cache_size参数注释掉。
  先导出spfile:
  Create pfile=’d:/modify.ora’ from spfile;
  然后用记事本打开D盘下面的MODIFY.ORA文件,找到db_cache_size并注释掉(在行首加上井号#),完成之后把修改好的pfile导回入spfile;
  在sqlplus下关闭数据库并导回spfile:
  Shutdown immediate;
  Create spfile from pfile=’d:/modify.ora’;
  Exit;
  备注:如果4)和5)方法没有成功,尝试下面的方法 

    create pfile='d:\backup\old.ora' from spfile;

    alter system set "_db_block_lru_latches"=32 scope=spfile;
  alter system reset db_cache_size scope=spfile sid='*';
  alter system reset sga_max_sizescope=spfile sid='*';
  alter system set lock_sga=false scope=spfile;
  alter system set db_block_buffers=786432 scope=spfile;
  alter system set use_indirect_data_buffers=true scope=spfile;

    create pfile='d:\backup\new.ora' from spfile;
6)   覆盖数据库自定义SPFILE(数据库默认的SPFILE位置为ORACLE_HOME\DATABASE)
  Move D:\oracle\ora92\database\SPFILESOP.ORA to L:\TESTDB and overwirte spfilesop.ora
7)   重启服务器,搞定。

页: [1]
查看完整版本: ORACLE大内存配置