背景:对主备机的物理内存扩容一倍,内存扩容后,需要修改数据库相关的内存参数,包括数据库层面和操作系统层面。预计对备机扩容一倍内存操作完毕后,修改相关..
背景:
对主备机的物理内存扩容一倍,内存扩容后,需要修改数据库相关的内存参数,包括数据库层面和操作系统层面。预计对备机扩容一倍内存操作完毕后,修改相关内存参数,将数据库启动到备机,运行2天,若没有问题,再对之前的主机物理内存扩容一倍,将数据库切换到备机。之所以这么做,是因为扩容操作,需要关闭操作系统,一晚上搞不定,所以分两次操作,同时也可以更好的确保,主备机在内存扩容和修改相关数据库参数后,都可以正常运行。
环境介绍:
双机 操作系统:solaris 10 数据库版本:oracle 11g R1 64bit 当前主机的hostname和IP: fly-db1 192.168.20.20 当前备机的hostname和IP: fly-db2 192.168.20.21 物理内存,扩容前94G,扩容后188G1、确认数据库的内存管理方式:手动管理
SQL> show parameter memory_target NAME TYPE VALUE ------------------------------------ ----------- ------- memory_target big integer 0 SQL> show parameter sga_target NAME TYPE VALUE ------------------------------------ ----------- ------- sga_target big integer 02、查看当前spfile路径:采用共享存储
SQL>show parameter spfile 3、刚已确认数据库的参数文件采用共享存储,则数据库的所有文件(控制文件,在线日志,数据文件(数据表空间和临时表空间的数据文件),参数文件)均应该为裸设备,现需确认主备机数据库的这些文件确实为裸设备,以及权限均为:oracle:oinstall或者oracle:dba,以避免双机切换过程中,因为数据库的文件权限不正确或使用到文件系统的数据文件导致切换失败(之前遇到过这种情况,所以需要再次确认)bash-3.00$ hostname fly-db1 bash-3.00$ cat check_file.sql //在当前主机运行以下SQL,查询所有数据库文件,保存到文本oracle_131215.txt set heading off set echo off set newpage none set feedback off spool oracle_131215.txt select file_name from dba_data_files; select file_name from dba_temp_files; select member from v$logfile; select name from v$controlfile; select value from v$parameter where; spool off bash-3.00$ sqlplus /nolog SQL> conn /as sysdba Connected. SQL> @check_file.sql SQL> quit bash-3.00$ ls check_file.sql oracle_131215.txt bash-3.00$ for i in $(cat oracle_131215.txt);do ls -l $i;done //查看这些文件(有省略)是否为裸设备(即字符设备),权限是否正确 crw------- 1 oracle dba 342, 200 Dec 15 07:39 /dev/raw/raw1 crw------- 1 oracle dba 342, 201 Dec 15 02:57 /dev/raw/raw2 crw------- 1 oracle dba 342, 202 Dec 15 03:04 /dev/raw/raw3 crw------- 1 oracle dba 342, 254 Dec 15 01:22 /dev/raw/raw4 crw------- 1 oracle dba 342, 253 Dec 15 03:25 /dev/raw/raw5 bash-3.00$ for i in $(cat oracle_131215.txt);do ls -l $i | grep -v ^c;done //若文件个数太多,则刷选开头不是c打头的文件,若无输出,即均为裸设备 bash-3.00$ for i in $(cat oracle_131215.txt);do ls -l $i | grep root;done //刷选是否有root字眼的文件,文件创建时,默认为root:root bash-3.00$ scp oracle_131215.txt oracle@192.168.20.21:/home/oracle/ //在备机执行一样的操作 Password: oracle_131215.txt 100% |*********************************************************************************| 27216 00:00 bash-3.00$ ssh oracle@192.168.20.21 Password: Last login: Sun Dec 15 10:31:13 2013 from 192.168.20.20 ONLY Authorized users only! All accesses logged fly-db2% bash bash-3.00$ hostname fly-db2 bash-3.00$ for i in $(cat oracle_131215.txt);do ls -l $i;done crw------- 1 oracle dba 342, 200 Sep 15 2012 /dev/raw/raw1 crw------- 1 oracle dba 342, 201 Sep 15 2012 /dev/raw/raw2 crw------- 1 oracle dba 342, 202 Sep 15 2012 /dev/raw/raw3 crw------- 1 oracle dba 342, 254 Sep 15 2012 /dev/raw/raw4 crw------- 1 oracle dba 342, 253 Sep 15 2012 /dev/raw/raw5 bash-3.00$ for i in $(cat oracle_131215.txt);do ls -l $i | grep -v ^c;done bash-3.00$ for i in $(cat oracle_131215.txt);do ls -l $i | grep root;done4、确认需要修改的参数:
在主备机修改/etc/system文件中的以下参数为以下值,:(shmsys:shminfo_shmmax为共享内存段的最大值,一般为物理内存的一半,精确到字节) set shmsys:shminfo_shmmax=100931731456 将以下数据库参数修改为以下值: memory_max_target=110G //物理内存的60% sga_max_size=110G //物理内存的60% db_cache_size=55G //物理内存的30% shared_pool_size=10G //物理内存的5% pga_aggregate_target=18G //物理内存的10% db_files=2000 //数据库的数据文件个数限制修改为2000 processes=3000 //当前该值已经很大,不再修改具体的操作步骤如下:
1、主备机的/etc/system文件必须一致,否则将备机的shmsys:shminfo_shmmax参数修改后,重启备机操作系统生效该参数时,将失败,/etc/system文件只有在操作系统引导时,才会被读取,理论上,在数据库运行时,是可以修改/etc/system文件的shmsys:shminfo_shmmax参数的
2、修改主备机的/etc/system文件中的shmsys:shminfo_shmmax参数为物理内存(188G)的一半,精确到字节。
set shmsys:shminfo_shmmax=100931731456
3、对比主备机的/etc/system文件是否一致,无任何输出,则一致
bash-3.00#hostname fly-db1 bash-3.00# diff /etc/system /home/oracle/system_flydb2_131215.bak4、重启备机操作系统,生效该参数的设置
bash-3.00# hostname fly-db1 bash-3.00# sync bash-3.00# sync bash-3.00# sync bash-3.00# shutdown -i6 -g0 -y