平台:AIX6.1,数据库版本:11.2.0.3(psu5)
在一次单机转RAC过程中,在修改原有参数文件,启动rac库时遇到了如下问题,由此问题引出了本篇的标题所要讲的问题。
1.备份原单实例库参数文件
create pfile='/data01/initegap.ora' from spfile;(在单实例数据库上执行)
pfile文件如下:
--注意:发现参数文件中有两处配置了pga和sga参数,开始以为带双下划线的参数同不带双下划线一样,所以在rac的参数文件中就
只保留了带双下划线部分,也正是这个改动,导致了后面数据库无法启动
2.根据原库参数文件修改后生成rac参数文件
--修改后的rac的参数文件如下
--所有参数值都未作修改,只是添加了rac所需的参数
egap.__db_cache_size=27648851968 egap.__java_pool_size=67108864 egap.__large_pool_size=67108864 egap.__oracle_base='/apps/oracle'#ORACLE_BASE set from environment egap.__pga_aggregate_target=10334765056 egap.__sga_target=30937186304 egap.__shared_io_pool_size=0 egap.__shared_pool_size=2952790016 egap.__streams_pool_size=0 *.audit_file_dest='/apps/oracle/admin/egap/adump' *.audit_trail='db' *.compatible='11.2.0.0.0' *.control_files='/data01/egap/control01.ctl','/data01/egap/control02.ctl' *.db_block_size=8192 *.db_domain='' *.db_file_name_convert='/data01/egapdb','/data01/egap' *.db_name='egap' *.diagnostic_dest='/apps/oracle' *.fal_client='primary' *.fal_server='standby1','standby2' *.log_archive_config='DG_CONFIG=(egap,egapdb)' *.log_archive_dest_1='location=/archlog/egap' *.log_archive_dest_2='SERVICE=standby1 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=egapdb' *.log_archive_format='egap_%t_%s_%r.arch' *.log_file_name_convert='/data01/egapdb','/data01/egap' *.open_cursors=300 *.pga_aggregate_target=10307502080 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.sga_target=30922506240 *.standby_file_management='AUTO' *.undo_tablespace='UNDOTBS1'
2.根据原库参数文件修改后生成rac参数文件
--修改后的rac的参数文件如下
--所有参数值都未作修改,只是添加了rac所需的参数
egapdb2.__db_cache_size=27648851968 egapdb1.__db_cache_size=27648851968 egapdb2.__java_pool_size=67108864 egapdb1.__java_pool_size=67108864 egapdb2.__large_pool_size=67108864 egapdb1.__large_pool_size=67108864 *.__oracle_base='/apps/oracle'#ORACLE_BASE set from environment egapdb2.__pga_aggregate_target=10334765056 egapdb1.__pga_aggregate_target=10334765056 egapdb2.__sga_target=30937186304 egapdb1.__sga_target=30937186304 egapdb2.__shared_io_pool_size=0 egapdb1.__shared_io_pool_size=0 egapdb2.__shared_pool_size=2952790016 egapdb1.__shared_pool_size=2952790016 egapdb2.__streams_pool_size=0 egapdb1.__streams_pool_size=0 *.audit_file_dest='/apps/oracle/admin/egapdb/adump' *.audit_trail='db' *.compatible='11.2.0.0.0' *.control_files='/data01/egapdb/control01.ctl','/data01/egapdb/control02.ctl' *.db_block_size=8192 *.db_domain='' *.DB_FILE_NAME_CONVERT='/data01/egap','/data01/egapdb' *.db_name='egap' *.DB_UNIQUE_NAME='egapdb' *.diagnostic_dest='/apps/oracle' egapdb1.FAL_CLIENT='standby1' egapdb2.FAL_CLIENT='standby2' *.FAL_SERVER='primary' *.cluster_database=TRUE *.cluster_database_instances=2 egapdb1.instance_name='egapdb1' egapdb2.instance_name='egapdb2' egapdb1.instance_number=1 egapdb2.instance_number=2 egapdb1.thread=1 egapdb2.thread=2 *.undo_management='AUTO' egapdb1.undo_tablespace='UNDOTBS1' egapdb2.undo_tablespace='UNDOTBS2' egapdb1.local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.96.3)(PORT=1521))))' egapdb2.local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.96.4)(PORT=1521))))' *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(egap,egapdb)' egapdb1.log_archive_dest_1='location=/archlog/egapdb1' egapdb2.log_archive_dest_1='location=/archlog/egapdb2' *.log_archive_dest_2='SERVICE=primary LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=egap' *.log_archive_format='egapdb_%t_%s_%r.arch' *.LOG_FILE_NAME_CONVERT='/data01/egap','/data01/egapdb' *.open_cursors=300 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.STANDBY_FILE_MANAGEMENT='AUTO'
3.用新的pfile启动数据库(然后进行添加redo,undo,实例等操作)
SQL> startup pfile='/data01/pfile';
ORA-00371: not enough shared pool memory, should be atleast 395251753 bytes
--用修改后的rac参数文件启动时报如下错误,修改时我对参数值进行改动,只是添加了rac所需要的一些参数,按理说是不应该会报参数值过小这类错误的,因为原来的单实例库用的就是同样的参数。
4.问题发生的原因
后来发现是因为我在修改原参数文件时,去掉了*.pga_aggregate_target=和*.sga_target=
只保留了如下参数
egapdb2.__pga_aggregate_target=10334765056
egapdb1.__pga_aggregate_target=10334765056
egapdb2.__sga_target=30937186304
egapdb1.__sga_target=30937186304
--后来在参数文件中加上*.pga_aggregate_target=和*.sga_target=参数以后能够正常启动
5.带双下划线的参数的意义
这里我们来说一下参数文件中带双下划线的参数的意义(带单下划线的参数为隐含参数),带双下划线的参数在自动内存管理中才会出现(asmm)。如果使用了spfile的话,asmm会在实例shutdown之前将当前实际的内存组件大小(oracle认为最优的,实际上可能不是最优的)保存到spfile中,你用strings命令可以在spfile文件中查看到带双下划线的参数(asmm所涉及到的参数)。这些在spfile保存的组件大小会在下次启动时被沿用,已达到将已实践得出的“最佳值”记住的目的,这样下次就不用逐渐调整了。