oracle 11g dataguard配置 |
您所在的位置:网站首页 › dataguard配置 › oracle 11g dataguard配置 |
1.1 环境准备 已有IP地址:10.78.246.10,已经运行了一个数据库为orcl,作为主库,主库环境介绍: Ø Oracle软件安装在/oracle Ø 数据文件在/oradata Ø 数据库版本11.2.0.1.0 Ø 内存64G 计划在IP地址为10.78.246.32上创建一个备库ostandby(本来我打算叫orcl_standby的,后来运行的时候说只允许数据库名不超过8个字符的名字),并且备库已经安装了oracle 相同版本的企业版,未建库,只安装了oracle软件 Ø 主机名:oracle.standby Ø 数据库版本11.2.0.1.0 Ø 内存4G 1.2 主库环境准备在10.78.246.10上执行步骤: conn / as sysdba; (先切换为归档日志模式alter database archivelog;,因为这个库已经是了,跳过此步骤) 然后执行: alter database force logging; 确保当主库添加或删除数据文件时,这些文件也会在备库添加或删除 alter system set standby_file_management = 'AUTO'; 建立备用日志文件(Standby Log Files)。备库使用备用日志文件来保存从主库接收到的重做日志。主库上也建立备用日志文件有两个原因,一是主库可能转换成备库,备库需要备用日志,二是如果主库建了备用日志,备库会自动建。备用日志应该跟在线日志一样大,组数应该至少跟在线日志一样多或者更多(原来主库上已经有redo01-04共4个redoxx.log) alter database add standby logfile group 11 ('/oradata/orcl/stand11.log') size 512m; alter database add standby logfile group 12 ('/oradata/orcl/stand12.log') size 512m; alter database add standby logfile group 13 ('/oradata/orcl/stand13.log') size 512m; alter database add standby logfile group 14 ('/oradata/orcl/stand14.log') size 512m; 我们一般配置密码文件做验证,因此下面的参数应该返回EXECUSIVE(默认就是它,为了保险,检查一下,如果不是就设置一下) show parameter remote_login_passwordfile; alter system set remote_login_passwordfile=exclusive scope=spfile;(上面返回EXECUSIVE则不需要执行) 检查db_unique_name (show paramter db_unique_name;),如果没设置则要设置好 检查flash_back设置,本库之前已经配置好了,不再检查; 1.3 配置SQL*NET在创建备库前,要确认两台服务器的数据库之间能通信。需要执行下面的配置: 1. 主库的listener.ora不需要变动,复制到备库的相同目录下($ORACLE_HOME/network/admin),把HOST=xx的内容修改为: HOST = oracle.standby2. 主库的tnsname.ora需要变更为: OSTANDBY = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.78.246.32)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = ostandby) ) ) ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.78.246.10)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) 3. 把tnsname.ora复制到备库的相同目录下,修改后内容: OSTANDBY = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.78.246.32)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = ostandby) ) ) ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =10.78.246.10)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) 4. 启动主库和备库的监听 用oracle用户执行:lsnrctl start 1.4 主库的redo log配置在10.78.246.10上执行步骤: 让主库知道 Data Guard 配置里的另外一个库的名字: alter system set log_archive_config = 'dg_config=(orcl,ostandby)'; 配置主库的归档位置 alter system set log_archive_dest_1 = 'location=use_db_recovery_file_dest valid_for=(all_logfiles, all_roles) db_unique_name=orcl'; 如果该库是主库,则使用服务名 ostandby传输在线日志,目标库名叫 ostandby alter system set log_archive_dest_2 = 'service=ostandby async valid_for=(online_logfile,primary_role) db_unique_name=ostandby'; 这个参数指定当日志传输出现问题时,备库到哪里去找缺少的归档日志。它用在备库接收的到的重做日志间有缺口的时候。这种情况会发生在日志传输出现中断时,比如你需要对备库进行维护操作。在备库维护期间,没有redo日志传输过来,这时缺口就出现了。设置了这个参数,备库就会主动去寻找那些缺少的归档日志,并要求主库进行传输。 alter system set fal_server = 'ostandby'; 1.5 备库的环境准备一、 从主库复制文件 Ø 将主库的密码文件($ORACLE_HOME/dbs/orapworcl)复制到备库的相同位置,并改名($ORACLE_HOME/dbs/orapwostandby) Ø 将主库的控制文件(/oradata/orcl/control01.ctl)复制到备库的相同位置 Ø 从主库生成pfile(在主库上执行SQL> create pfile from spfile;), 复制$ORACLE_HOME/dbs/initorcl.ora到备库相同目录下,并重命名为initostandby.ora 二、 修改备库的启动初始化文件(initostandby.ora): 下面内容中,加粗部分才需要根据备库的情况修改,不加粗的不需要: orcl.__db_cache_size=5637144576 orcl.__java_pool_size=1879048192 orcl.__large_pool_size=268435456 orcl.__oracle_base='/oracle'#ORACLE_BASE set from environment orcl.__pga_aggregate_target=11005853696 orcl.__sga_target=16106127360 orcl.__shared_io_pool_size=0 orcl.__shared_pool_size=7516192768 orcl.__streams_pool_size=536870912 *.audit_file_dest='/oracle/admin/ostandby/adump' ##修改为新库的地址,并用建立该目录 *.audit_trail='db' *.compatible='11.2.0.0.0' *.control_file_record_keep_time=7 *.control_files='/oradata/orcl/control01.ctl' ##建立该目录,复制控制文件到这里(前面已做) *.db_block_size=8192 *.db_domain='' *.db_name='orcl' ##这个一定不要修改为ostandby,否则无法使用复制过来的控制文件 *.db_recovery_file_dest='/oracle/flash_recovery_area' ##建立该目录 *.db_recovery_file_dest_size=87956652032 *.diagnostic_dest='/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)' *.fal_server='orcl' *.log_archive_config='dg_config=(orcl,ostandby)' *.log_archive_dest_1='location=use_db_recovery_file_dest valid_for=(all_logfiles, all_roles) db_unique_name=ostandby' *.log_archive_dest_2='service=orcl async valid_for=(online_logfile,primary_role) db_unique_name=orcl' *.log_archive_format='%t_%s_%r.dbf' *.memory_target=1689649152 ##这个是内存数,需要除以16,因为内存是主库的1/16 *.open_cursors=300 *.processes=600 *.remote_login_passwordfile='EXCLUSIVE' *.sessions=665 *.standby_file_management='auto' *.undo_tablespace='UNDOTBS1' db_unique_name=ostandby 三、 建立备库的文件目录: 根据上一节的说明,建立相应的目录结构,检查一遍: Ø $ORACLE_BASE/admin/$ORACLE_SID Ø $ORACLE_BASE/admin/$ORACLE_SID/adump(audit_file_dest配置的目录) Ø 数据文件目录:/oradata/orcl Ø 控制文件目录:/oradata/orcl Ø 日志文件目录:/oradata/orcl Ø 快速恢复区目录:/oracle/flash_recovery_area Ø 将备库信息加到 /etc/oratab 文件(可以参考主库的内容添加) 四、 从主库复制文件 停止主库(shutdown immediate),复制下列文件: Ø 复制主库的/oradata/orcl下的所有dbf及log文件(即数据库文件、日志文件)到备库的相同目录下(/oradata/orcl) Ø 复制主库的/oracle目录下的cfgtoollogs、diag、admin目录到备库的相同目录下(不复制的话启动备库时显示找不到控制文件) 1.6 启动备库在备库上执行: SQL> startup nomount pfile=initostandby.ora SQL> create spfile from pfile; SQL> shutdown SQL> startup nomount SQL> show parameter spfile 修改备库为备用库模式 SQL> alter database mount standby database; 开启备用库应用重做 SQL> alter database recover managed standby database disconnect from session; 下面的为命令参考,非必要时,不需执行 关闭应用重做 SQL>alter database recover managed standby database cancel; 配置实时应用重做 SQL>alter database recover managed standby database using current logfile; 1.7 主备库情况检查确认一、 确认主备库里的归档目的地配置都是有效的,在主库和备库分别执行: SQL> select DEST_ID, STATUS, DESTINATION, ERROR from V$ARCHIVE_DEST where DEST_ID select SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG where name='ostandby' order by FIRST_TIME;如果归档和日志应用均正常,APPLIED 和 ARCHIVED 列都应该是 YES。 如果你发现日志没有被应用,那可能是重做日志有了缺口,这种情况下备库无法进行日志应用。但如果你的 FAL_SERVER 参数设置正确,这应该不会有问题。你可以在主库上检查是否有重做日志缺口: SQL> select STATUS, GAP_STATUS from V$ARCHIVE_DEST_STATUS where DEST_ID = 2;如果一切正常,应该返回 VALID 和 NO GAP。 V$DATAGUARD_STATUS 视图对查找错误和了解发生了什么非常有用。可以在主备库上执行以下查询查看数据库状态: SQL> select * from V$DATAGUARD_STATUS order by TIMESTAMP;三、 直接查询备库,看新数据是否存在 以上步骤已经足够。下面的是你不放心,非要看看的话才做的: 取消日志应用 SQL> alter database recover managed standby database cancel; 将备库打开为只读状态 SQL> ALTER DATABASE OPEN READ ONLY; 这时你可以查询变化了的数据是否同步过来。 看完之后记得修改数据库状态及启用日志应用。 1.8 参考资料主要参考:http://kyle.xlau.org/posts/oracle-data-guard-part1.html 其他参考: http://docs.oracle.com/cd/E11882_01/server.112/e25608/create_ps.htm#i63561 http://tianzt.blog.51cto.com/459544/251239 http://www.cnblogs.com/dba001/archive/2012/02/22/2361983.html |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |