突破oracle for win2K的2G内存限制
文字大小:【大】【中】【小】
众所周知,在32位的操作系统如win2K上,操作系统能管理的内存为4GB(power(2,32) =4G) ,oracle使用的总内存有2G限制。目前大多数信息系统都能为数据库服务器配上4G物理内存甚至更多,但无论你为系统配置多大的物理内存,正常情况下都不能使oracle使用超过2G的内存(包含SGA、PGA等),从而造成系统资源浪费。那么,有没有什么办法能使运行在windows系统上的oracle使用超过2G的内存呢?windows 提供了一种叫4GT(4G Tuning)的技术,使得oracle使用超过2G(不超过3G)的内存成为可能。而为了让应用程序使用更大的内存,还有一种PSE36的技术,可以让oracle使用超过3G的内存。这里,只对我们使用4GT特性让oracle使用超过2G的内存进行讨论。
一 使用4GT特性的基本要求:
尽管可以在不超过2G物理内存的系统上使用4GT特性,但oracle并不推荐这种做法,因为这将会严重降低系统性能。以我的经验来讲,如果系统未安装4G物理内存,最好也不要使用这种方法来让oracle使用更多的内存。此外,在需要你的oracle使用超过2G的内存时,数据库服务器最好不要再运行其他的服务,以减小系统的压力,让oracle工作得更好。
另外,据MS的文档,4GT只能用于 Advanced Server , Datacenter版本上,Server 版以及 Professional 版不能使用4GT特性(实际上是不是也没有必要?)
二 为什么4GT能让应用程序使用超过2G的内存
在正常情况下,windows系统对内存的分配是这样的:在内存地址0x00000000 到 0x7FFFFFFF之间的空间,交给应用程序使用,操作系统内核及其支持则使用内存地址 0x80000000 到 0xFFFFFFFF之间的空间。在使用4GT之后,操作系统将内核及其支持程序使用的内存地址空间压缩到 0xC0000000 到 0xFFFFFFFF之间,从而为应用程序“让”出来1G的空间。但是,仅仅“让”出来了这1G的空间还是不够的,还需要指定哪一个应用程序来使用这“多出来的”1G空间,以及如何分配份额等。后面将结合具体的参数设置来讨论。为便于讨论,我们将正常情况下应用程序可以使用的2G内存(即地址在 0x00000000 到 0x7FFFFFFF 之间的内存)称作普通内存,而将windows “让”出来的1G内存(地址在 0x80000000 到 0xBFFFFFFF之间)称作间接内存。
三 oracle使用超过2G内存,不超过3G内存的具体设置步骤:
1 首先应卸载实例,关闭oracle服务。
2 打开操作系统3G开关:
修改boot.ini文件,在启动windows项中添加 /3G 参数。修改过后的boot.ini文件应该类似以下内容:
[boot loader]
timeout=8
default=multi(0)disk(0)rdisk(0)partition(1)
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)="Microsoft Windows 2000 Advanced Server" /3G /fastdetect
注意在启动win2K AdvServer的一栏里,多了一个 /3G 参数。这个参数的作用,就是让windows启动时,将自己的内核及支持程序装载到内存地址 0xC0000000 到 0xFFFFFFFF 之间,给应用程序留出3G的空间来。
3 修改oralce 的 init.ora 文件
1) 确定oracle的缓冲区及共享池大小,假设作如下定义:
db_block_size = 4096
db_block_buffers = 262144 # 缓冲区大小为1G
share_pool_size = 314572800 # 使用300M共享池
2) 添加下列各项内容:
use_indirect_data_buffers = true
# 告诉oracle可以使用间接内存(即可以使用windows让出来的1G内存作为数据缓冲区)
pre_page_sga = true
# 把oracle SGA锁定到内存中,不产生页面交换文件(8i的参数可能是lock_sga = true)
# 对于一个有4G物理内存的系统来讲,可能这一个参数并不是必须的
4 修改注册表,定义oracle的DBbuffer使用常规内存大小
在注册表 _Local_Machine中添加一个二进制值,名称为AWE_WINDOW_MEMORY ,值的单位为字节,大小为你需要让oracle使用普通内存作为缓存的大小(不是windows让出来的1G,而是内存地址在0x00000000 到 0x7FFFFFFF 之间的内存大小)。假如设为209715200,即200M大小,那么oracle的数据缓冲区将占用200M的普通内存,其余部分(1G - 200M = 824M)则使用间接内存。
5 重新启动操作系统,启动数据库。OK,你现在的 oracle 可以使用2G + 824M内存了。
四 几个补充讨论
1 windows系统“让”出来的1G间接内存,只能用于数据缓冲区
在4GT特性测试中发现,间接内存只能用于数据缓冲区,而不能用于共享池,也不能分配给用户作为PGA。或许有其他的参数可以定义,但我查到的文献中没有任何一篇讲间接内存可以用于哪些地方,而在我们的测试中发现按上面的修改后,间接内存只能用于数据缓冲区。此结论只作为一个经验,不是定论,请各位大侠补充修正。
2 注册表中 AWE_WINDOW_MEMORY 参数大小的定义
这个参数定义缓冲池使用普通内存的大小,不能太小。在数据块大小为4K,缓冲池为1G(即使用262144个块作缓冲池)大小的情况下,此参数定义为100M时,oracle不能启动,定义为200M时正常启动。根据我阅读文献后对这个情况的理解,数据缓冲区的每一个块的块头信息都将存放于普通内存中,不能存放于间接内存中。如果此参数定义过小,导致缓冲区块头信息都不能存放,则可导致数据库启动失败。那么,是不是同样大小的缓冲区,数据库块越大,则这个参数就可以定义得越小,因而可以占用更少的普通内存呢?有待验证。
在具体的应用中,如何定义此参数,应综合考虑最大并发连接数(专用服务器模式下)、用户重用的堆栈大小、排序区、共享池、大池等内存参数的设置情况,尽可能的将数据缓冲区放到间接内存中,充分利用系统的资源。
3 间接内存的性能
据oracle的文献讲,间接内存的性能(我想主要是指速度和效率吧?)不如直接内存,绝不推荐在未安装有4G物理内存的系统上使用4GT特性。我不知道如何比较间接内存与直接内存的速度和效率,因而未作测试,姑且信之。
一点小结,期望能对大家有所启发。还请各位大侠补充指正。
以上内容的测试环境:
IBM X360 +4G内存 + RAID 5阵列
Windows 2000 Advaced Server SP3 + oracle 8.1.6 专用服务器模式
32bit或者64bit的平台上跑32bit的oracle的时候,SGA总是受到限制,导致大内存的机器不能完全发挥作用,最近就专门找了一些关于调整最大SGA区的文档,看了看,感觉收获蛮大的,总结了一下几个平台的,但是不全,欢迎大家探讨补全。
我先把我总结的几个平台贴出来大家讨论讨论。
在REDHAT ADVANCED SERVER2.1上扩展SGA(1.7G以上)
一. 目标:
1. 在一个4G以上的内存的机器上将SGA从1.7G增至2.7G
2. 兼容8.1.7,9.0.1,9.2.0版本的数据库
3. 整个SGA都能够被提高
二. 限制:
1. 只允许在本地启动和关闭数据库
2. 如果为PGA保存的虚拟内存太少就会导致ORA-4030的错误
三. 基本步骤:
1. 查看启动oracle用户的shel的进程号PID
ps -ef或者echo $$
2. 以root用户单独开一个进程,执行:
echo 268435456 > /proc/$PID/mapped_base
这个要对server上所有产生oracle进程的shell
3. 修改shmmax的值。用root用户执行
echo 3000000000 > /proc/sys/shmmax
4. 重新分配SGA
shutdown immediate所有的oracle实例
cd $ORACLE_HOME/lib
cp –a libserver9.a libserver9.a.org(备份liberver9.a文件)
cd $ORACLE_HOME/bin
cp –a oracle oracle.org(备份oracle文件)
cd $ORACLE_HOME/rdbms/lib
genksms –s 0x15000000 > ksms.s
make –f ins_rdbms.mk ksms.o(编译新的sga地址)
make –f ins_rdbms.mk ioracle(重新链接)
这样改过以后就可以支持到2.65G的sga,从而可以提高db_cache_size或者db_block_buffers去提高数据库的缓冲区了。
True64 Unix上使SGA大于2G
1. 检查是否有足够的内存能够分配给SGA
userf –r 300 |grep –i mem
2. 配置核心
vm:
vm-maxvas=实际物理内存
vm-mapentries=400
ubc-minpercent=1
ubc-maxpercent=2
ipc:
shm-max=物理内存或者大于SGA
shm-mni=128
shm-seg=32
proc:
max-per-proc-data-size=物理内存
per-proc-data-size=物理内存
max-per-proc-address-space=物理内存
per-proc-address-space=物理内存
不要修改/etc/sysconfigtab文件中的参数位置。
/sbin/sysconfig –q vm
/sbin/sysconfig –q ipc
/sbin/sysconfig –q proc
3. 设置环境
对于C Shell,修改.login文件
limit datasize unlimited
limit stacksize unlimited
limit memoryuse unlimited
limit addressspace unlimited
对于Korn或者Bourn Shell,修改.login文件
ulimit –d unlimited
ulimit –s unlimited
ulimit –m unlimited
ulimit –v unlimited
4. 重新分配SGA
设置init文件中参数vlm_sga_base_address参数
例如:超过了3G,设置vlm_sga_base_address=0x400000000
5. SWAP区的设置
建议设置成2-3倍的物理内存
继续总结中。。。
32BIT的solaris(sparc)如何调整SGA
针对32bit的从8.0.X到9.0.X的数据库
一. 了解怎样重新分配SGA
在sun的系统上,sga区要大于256M。
sgabeg = 0xe0000000 | 256Mb SGA
sgabeg = 0xd0000000 | 512Mb SGA
sgabeg = 0xc0000000 | 768Mb SGA
sgabeg = 0xb0000000 | 1Gb SGA
sgabeg = 0xa0000000 | 1.25Gb SGA
sgabeg = 0x90000000 | 1.5Gb SGA
sgabeg = 0x80000000 | 1.75Gb SGA
sgabeg = 0x77000000 | just less than 2Gb SGA
sgabeg = 0x70000000 | 2Gb SGA
sgabeg = 0x60000000 | 2.25Gb SGA
sgabeg = 0x50000000 | 2.5Gb SGA
sgabeg = 0x40000000 | 2.75Gb SGA
sgabeg = 0x30000000 | 3Gb SGA
sgabeg = 0x20000000 | 3.25Gb SGA
sgabeg = 0x10000000 | 3.5Gb SGA
sgabeg = 0x01000000 | 16Mb less than 3.75Gb SGA
二. 对于9.0.X的版本
1. 关闭当前的所有数据库
2. cd $ORACLE_HOME/lib
cp liberver9.a libserver9.a.orig(备份这个文件)
3.cd $ORACLE_HOME/rdbms/lib
生成ksms.s文件
$ORACLE_HOME/bin/genksms –b new_location >ksms.s
例如:$ORACLE_HOME/bin/genksms –b 0x60000000 >ksms.s(增至2.25Gb)
4.生成ksms.o文件
make –f ins_rdbms.mk ksms.o
5.归档ksms.o文件至libserver9.a文件
ar -r $ORACLE_HOME/lib/libserver9.a ksms.o
6.重新链接
make –f ins_rdbms.mk ioracle
三. 对于8.1.X的版本
1.关闭当前的所有数据库
2.cd $ORACLE_HOME/lib
cp liberver8.a libserver8.a.orig(备份这个文件)
3.cd $ORACLE_HOME/rdbms/lib
生成ksms.s文件
$ORACLE_HOME/bin/genksms –b new_location >ksms.s
例如:$ORACLE_HOME/bin/genksms –b 0x60000000 >ksms.s(增至2.25Gb)
4.生成ksms.o文件
make –f ins_rdbms.mk ksms.o
5.归档ksms.o文件至libserver9.a文件
ar -r $ORACLE_HOME/lib/libserver9.a ksms.o
6.重新链接
make –f ins_rdbms.mk ioracle
7.如果使用的是sun4u老版本的solaris结构,则在第3步中将new_location的值减少一个0。
例如:0x80000000改成0x8000000
四. 对于8.0.X的版本
1. 关闭当前的所有数据库
2. cd $ORACLE_HOME/rdbms/lib
3. 修改ksms.s文件
$ORACLE_HOME/bin/genksms –b new_location >ksms.s
4. 备份ins_rdbms.mk文件
cp ins_rdbms.mk ins_rdbms.mk.ksms
5. 修改ins_rdbms.mk文件
将ksms.s $(RDBMSLIB)ksms.s:
$(GENKSMS) > ksms.s
改为ksms.s $(RDBMSLIB)ksms.s:
$(GENKSMS) > ksms.s.default_sgabeg
6. 生成ksms.o对象
make –f ins_rdbms.mk ksms.o
7. 重新连接
make –f ins_rdbms.mk ioracle
8.如果使用的是sun4u老版本的solaris结构,则在第3步中将new_location的值减少一个0。
例如:0x80000000改成0x8000000
32BIT的solaris(sparc)如何调整SGA (补充)
五.对于7.3.2.X版本
1.关闭当前的所有数据库
2.cd $ORACLE_HOME/rdbms/lib
3.修改ksms.s文件
将sgabeg=0xe0000000改成sgabeg=0x80000000
4.备份env_rdbms.mk文件
cp env.rdbms.mk env_rdbms.mk.ksms
5.修改env_rdbms.mk文件
修改 $(ORACLE_HOME)/bin/genksms > $(KSMSS)
为 $(ORACLE_HOME)/bin/genksms > $(KSMSS).sga
6.生成ksms.o对象
make –f ins_rdbms.mk ksms.o
7.重新链接
make –f ins_rdbms.mk ioracle
8.如果使用的是sun4u老版本的solaris结构,则在第3步中将new_location的值减少一个0。
例如:0x80000000改成0x8000000
六.对于7.3.3或7.3.4版本
1.关闭当前的所有数据库
2.cd $ORACLE_HOME/rdbms/lib
3.修改ksms.s文件
将sgabeg=0xe0000000改成sgabeg=0x80000000
4.备份env_rdbms.mk文件
cp env.rdbms.mk env_rdbms.mk.ksms
5.修改env_rdbms.mk文件
修改 $(ORACLE_HOME)/bin/genksms > $(KSMSS)
为 $(ORACLE_HOME)/bin/genksms > $(KSMSS).sga
6.生成ksms.o对象
make –f ins_rdbms.mk ksms.o
7.修改ins_rdbms.mk文件
将 –rm –f ksms.s ksms.o
改为 –rm –f ksms.o
8.重新链接
make –f ins_rdbms.mk ioracle
9.如果使用的是sun4u老版本的solaris结构,则在第3步中将new_location的值减少一个0。
例如:0x80000000改成0x8000000
七.对于7.2.3或者更低的版本
1.关闭当前的所有数据库
2.cd $ORACLE_HOME/rdbms/lib
3.修改ksms.s文件
将sgabeg=0xe0000000改成sgabeg=0x80000000
4.编辑oracle.mk文件,注释掉以下两行:
ksms.s: $(ORACLE_HOME)/bin/genksms
$(ORACLE_HOME)/bin/genksms > ksms.s
5.重新链接
make –f oracle.mk ioracle
6.生成ksms.o对象
make –f oracle.mk ksms.o
7.如果使用的是sun4u老版本的solaris结构,则在第3步中将new_location的值减少一个0。
例如:0x80000000改成0x8000000
HP-UNIX上的大SGA支持
一. HP上的最大SGA的大小
HP-UX 9::0.75GB
HP-UX10.0&oracle版本低于7.3.X: 1GB
HP-UX10.X以上&oracle7.3.X以上:1.75GB
HP-UX11.0(64bits)&oracle64bits:Millions of Tera
HP-UX11.0(64bits)&memory windows&32bit8.0.5以上
32位的oracle在32位或者64位的HP-UX11.0上最大的SGA大约是1.7GB,对于system-wide共享内存段的最大值也是限制在1.75GB,除非使用memory windows在oracle8.0.5以上的版本。
例如:32bit的oracle在32bit的HP-UX11.0上,oracle的一个实例使用了1.25GB的共享内存,那么剩下的实例能使用的共享内存就只有1.75GB-1.25GB=0.5GB了。
memory windows是32位或者64位的HP-UX11.0上的,它允许独立的进程去使用更多的物理内存。每个oracle的实例运行属于自己的“window”,有1G的共享内存的保留,加上0.75GB的对于系统上其他所有进程的共享。
例如:机器上有五个oracle的实例,则可以有5*1GB+0.75GB=5.75GB的共享内存使用。
二. Memory windows一般适用的情况:
1.64bit的HP-UX并且内存大于2GB
2.多个32bit的实例且总共的SGA>1.75GB
三.系统的需求:
HP-UX11.0 32bit或者64bit
Oracle8.0.5with pactch for bug785609
Oracle8.0.6或者8.1.5
HP-UX patches PHKL_17091和PHCO_16795
四.具体步骤:
1.首先必须要安装memory windows并且启用它。
2.Memory windows的数量可以通过调整HP-UX的核心参数max_mem_window来修改。
3.启用后,会存在有/etc/services.window文件,这个文件映射oracle实例的ID至window keys,映射服务名到端口号。
4.修改/etc/serveices.window文件,对于每一个实例,在文件的第一列上写上ORACLE_SID,第二列写上windows key。
例如有两个实例orcl1,orcl2,/etc/services.window文件内容可能如下:
orcl1 3
orcl2 4
5.Window key不能设置为0,因为0是系统保留给“global windows”的,如果设置为0,则memory window就不起作用了。
IBM AIX4.3.3上重新分配SGA
AIX4.3.3 (32bit):
8i企业版8.1.6.0.0(32bit) SGA=>2.5GB
8i企业版8.1.7.0.0(32bit) SGA=>2.5GB
AIX4.3.3(64bit):
8i企业版8.1.6.0.0(64bit) SGA=>2.0GB (bug1284437)
8i企业版8.1.7.0.0(32bit) SGA=>2.5G
8i企业版8.1.7.0.0(64bit) SGA=>4GB以上
对于oracle7.3.3或者以前的版本,如果设置了过大的SGA,则会出现以下的错误:
ORA-07736
ORA-600:[1186]
ORA-08241
如果你需要2.5GB的SGA在oracle7上并且不是OPS,执行以下:
cd $ORACLE_HOME/lib
genksms –s 0x30000000 >ksms.imp
cd $ORACLE_HOME/rdbms/lib
重新链接oracle
make –f ins_rdbms.mk ioracle
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
如果设置了这个参数,对于Oracle9.2.0的版本则不能再使用DB_CACHE_SIZE参数了,只能使用DB_BLOCK_BUFFERS参数。
扩展的内存只能增加到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
SOLARIS: How to Relocate the SGA 大于2G(转)
应该是metalink上面的文档,Note:1028623.6
PURPOSE:
This note describes how to relocate the SGA on the Solaris operating
system (SPARC) in a 32-bit environment. This note only applies to 32bit
architecture. SGA can be > 4GB in 64bit.
SCOPE & APPLICATION:
This applies to 32-bit database versions 7.x through 9.x on the
Solaris operating system (SPARC).
The Solutions described below are:
A. For RDBMS version 9.x - How to Change your Attach Address
B. For RDBMS version 8.1.x - How to Change your Attach Address
C. For RDBMS version 8.0.x - How to Change Your Attach Address
D. For RDBMS version 7.3.2.x - How to Change Your Attach Address
E. For RDBMS versions 7.3.3 or 7.3.4 - How to Change Your Attach Address
F. For RDBMS version 7.2.3 or older - How to Change Your Attach Address
If you experience difficulties during the attempt to change the attach
address, simply restore the file backed up as part of the procedure, and
use it to relink. You will then revert to your original attach address.
SUN SOLARIS: How to Relocate the SGA:
=====================================
You need to configure the SGA to a value greater than 256 Mbytes on your
Sun system. You are referring to the following sgabeg parameter chart:
sgabeg = 0xe0000000 | 256Mb SGA
sgabeg = 0xd0000000 | 512Mb SGA
sgabeg = 0xc0000000 | 768Mb SGA
sgabeg = 0xb0000000 | 1Gb SGA
sgabeg = 0xa0000000 | 1.25Gb SGA
sgabeg = 0x90000000 | 1.5Gb SGA
sgabeg = 0x80000000 | 1.75Gb SGA
sgabeg = 0x77000000 | just less than 2Gb SGA
sgabeg = 0x70000000 | 2Gb SGA
sgabeg = 0x60000000 | 2.25Gb SGA
sgabeg = 0x50000000 | 2.5Gb SGA
sgabeg = 0x40000000 | 2.75Gb SGA
sgabeg = 0x30000000 | 3Gb SGA
sgabeg = 0x20000000 | 3.25Gb SGA
sgabeg = 0x10000000 | 3.5Gb SGA
sgabeg = 0x01000000 | 16Mb less than 3.75Gb SGA
A. For RDBMS version 9.x - How to Change your Attach Address:
===============================================================
For RDBMS version 9.x, change your attach address by doing the following
steps to relocate the SGA:
1. Shutdown any databases using the current "ORACLE_HOME".
2. Change your location to the "/lib" directory
% cd $ORACLE_HOME/lib
3. Make a backup copy of 'libserver9.a'.
% cp libserver9.a libserver9.a.orig
4. Change your location to the "rdbms/lib" directory
% cd $ORACLE_HOME/rdbms/lib
5. Generate the "ksms.s" file
% $ORACLE_HOME/bin/genksms -b > ksms.s
For example, changing the attached address starting at
0x80000000 to 0x60000000 would be:
% $ORACLE_HOME/bin/genksms -b 0x60000000 >ksms.s
6. Regenerate the 'ksms.o' object:
% make -f ins_rdbms.mk ksms.o
7. Archive 'ksms.o' into 'libserver9.a'
%ar r $ORACLE_HOME/lib/libserver9.a ksms.o
8. Relink
% make -f ins_rdbms.mk ioracle
B. For RDBMS version 8.1.x - How to Change Your Attach Address:
===============================================================
For RDBMS version 8.1.X , change your attach address by doing the following
steps to relocate the SGA:
1. Shutdown any databases using the current "ORACLE_HOME".
2. Change your location to the "/lib" directory
% cd $ORACLE_HOME/lib
3. Make a backup copy of 'libserver8.a'.
% cp libserver8.a libserver8.a.orig
4. Change your location to the "rdbms/lib" directory
% cd $ORACLE_HOME/rdbms/lib
5. Generate the "ksms.s" file
% $ORACLE_HOME/bin/genksms -b > ksms.s
For example, changing the attached address starting at
0x80000000 to 0x60000000 would be:
% $ORACLE_HOME/bin/genksms -b 0x60000000 >ksms.s
6. Regenerate the 'ksms.o' object:
% make -f ins_rdbms.mk ksms.o
7. Archive 'ksms.o' into 'libserver8.a'
%ar r $ORACLE_HOME/lib/libserver8.a ksms.o
8. Relink
% make -f ins_rdbms.mk ioracle
Explanation:
============
Changing the 'sgabeg' in 'ksms.o' will allow you to increase SGA size and
allocate the memory in a contiguous segment.
NOTE: If the above process does not resolve the problem, you may be
using an older version of the Sun Solaris architecture (Sun4c).
If this is the case, repeat all the steps shown above and change
the value for Step 5 to be the same as the old value less one
zero.
For example:
Old Value for Step 5: 0x80000000
New Value for Step 5: 0x8000000
C. For RDBMS version 8.0.x - How to Change Your Attach Address:
===============================================================
For RDBMS version 8.0.x, change your attach address by doing the following
steps to relocate the SGA:
1. Shutdown the database.
2. Change your location to the "rdbms/lib" directory
% cd $ORACLE_HOME/rdbms/lib
3. Modify the "ksms.s" file
% $ORACLE_HOME/bin/genksms -b >ksms.s
For example, changing the attached address starting at
0x80000000 to 0x60000000 would be:
% $ORACLE_HOME/bin/genksms -b 0x60000000 >ksms.s
4. Make a backup copy of the "ins_rdbms.mk" file
% cp ins_rdbms.mk ins_rdbms.mk.ksms
5. Modify the "ins_rdbms.mk" file
Change: ksms.s $(RDBMSLIB)ksms.s:
$(GENKSMS) > ksms.s
To: ksms.s $(RDBMSLIB)ksms.s:
$(GENKSMS) > ksms.s.default_sgabeg
6. Regenerate the 'ksms.o' object:
% make -f ins_rdbms.mk ksms.o
7. Relink
% make -f ins_rdbms.mk ioracle
NOTE: If the above process does not resolve the problem, you may be
using an older version of the Sun Solaris architecture (Sun4c).
If this is the case, repeat all the steps shown above and change
the value for Step 3 to be the same as the old value less one
zero.
For example:
Old Value for Step 3: 0x80000000
New Value for Step 3: 0x8000000
NOTE: If the above process does not resolve the problem, you may have to apply
the fix for [BUG:695468], fixed in 8.0.4.4.
D. For RDBMS version 7.3.2.x - How to Change Your Attach Address:
=================================================================
For RDBMS version 7.3.2.x, change your attach address by doing the following
steps to relocate the SGA:
1. Shutdown the database.
2. Change your location to the "rdbms/lib" directory
% cd $ORACLE_HOME/rdbms/lib
3. Modify the "ksms.s" file
Change this line:
sgabeg = 0xe0000000
To the new value:
sgabeg = 0x80000000
NOTE: This example moves the attached address from
"0xe0000000" to "0x80000000".
4. Make a backup copy of the "env_rdbms.mk" file
% cp env_rdbms.mk env_rdbms.mk.ksms
5. Modify the "env_rdbms.mk" file
Change: $(ORACLE_HOME)/bin/genksms > $(KSMSS)
To: $(ORACLE_HOME)/bin/genksms > $(KSMSS).sga
6. Regenerate the 'ksms.o' object:
% make -f ins_rdbms.mk ksms.o
7. Relink
% make -f ins_rdbms.mk ioracle
NOTE: If the above process does not resolve the problem, you may be
using an older version of the Sun Solaris architecture (Sun4c) .
If this is the case, repeat all the steps shown above and change
the value for Step 3 to be the same as the old value less one
zero.
For example:
Old Value for Step 3: 0x80000000
New Value for Step 3: 0x8000000
E. For RDBMS versions 7.3.3 or 7.3.4 - How to Change Your Attach Address:
=========================================================================
For RDBMS version 7.3.3 or newer, change your attach address by doing
the following steps to relocate the SGA:
1. Shutdown the database.
2. Change your location to the "rdbms/lib" directory
% cd $ORACLE_HOME/rdbms/lib
3. Modify the "ksms.s" file
% $ORACLE_HOME/bin/genksms -b >ksms.s
For example, changing the attached address starting at
0x80000000 to 0x60000000 would be:
% $ORACLE_HOME/bin/genksms -b 0x60000000 >ksms.s
4. Make a backup copy of the "env_rdbms.mk" file
% cp env_rdbms.mk env_rdbms.mk.ksms
5. Modify the "env_rdbms.mk" file
Change: $(ORACLE_HOME)/bin/genksms > $(KSMSS)
To: $(ORACLE_HOME)/bin/genksms > $(KSMSS).sga
6. Make a backup copy of the "ins_rdbms.mk" file
% cp ins_rdbms.mk ins_rdbms.mk.ksms
7. Regenerate the 'ksms.o' object:
% make -f ins_rdbms.mk ksms.o
8. Modify the "ins_rdbms.mk" file
Change: -rm -f ksms.s ksms.o
To: -rm -f ksms.o
9. Relink
% make -f ins_rdbms.mk ioracle
NOTE: If the above process does not resolve the problem, you may be using an older version of the Sun Solaris architecture (Sun4c). If this is the case, repeat all the steps shown above and change the value for Step 3 to be the same as the old value less one zero.
For example:
Old Value for Step 3: 0x80000000
New Value for Step 3: 0x8000000
F. For RDBMS version 7.2.3 or older - How to Change Your Attach Address:
========================================================================
For RDBMS version 7.2.3 or older, change the attach address by doing
the following steps to relocate the SGA:
1. Shutdown the database.
2. Change location to the "rdbms/lib" directory
% cd $ORACLE_HOME/rdbms/lib
3. Modify the "ksms.s" file
Change this line:
sgabeg = 0xe0000000
To the new value:
sgabeg = 0x80000000
NOTE: This example moves the attached address from
"0xe0000000" to "0x80000000".
4. Edit the "oracle.mk" file by commenting out the following line:
FROM: ksms.s: $(ORACLE_HOME)/bin/genksms
$(ORACLE_HOME)/bin/genksms > ksms.s
TO: #ksms.s: $(ORACLE_HOME)/bin/genksms
# $(ORACLE_HOME)/bin/genksms > ksms.s
5. Relink
% make -f oracle.mk ioracle
6. Regenerate the 'ksms.o' object:
% make -f oracle.mk ksms.o
NOTE: If the above process does not resolve the problem, you may be
using an older version of the Solaris architecture (Sun4c).
If this is the case, repeat all the steps shown above and change
the value for Step 3 to be the same as the old value less one
zero.
For example:
Old Value for Step 3: 0x80000000
New Value for Step 3: 0x80000
Search Words:
ORA-27123 ORA-07307 ORA-7307 ORA-07308 ORA-7308 ORA-07310 ORA-7310 increase shared memory SPARC ksms attach address
ORACLE 10G在LINUX上使用VLM
由于VLM已经在RHAS 3的核心中,所以,只要按照以下几个步骤,就可以使用VLM
1、创建一个文件
/dev/shm
2、修改/etc/fstab
none /dev/shm tmpfs defaults,size=8g 0 0
3、修改db_cache_size或者db_block_buffers
4、修改一下init参数
use_indirect_data_buffers=true