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-044redoxx.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.standby

 

2.      主库的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/adumpaudit_file_dest配置的目录)

Ø  数据文件目录:/oradata/orcl

Ø  控制文件目录:/oradata/orcl

Ø  日志文件目录:/oradata/orcl

Ø  快速恢复区目录:/oracle/flash_recovery_area

Ø  将备库信息加到 /etc/oratab 文件(可以参考主库的内容添加)

四、      从主库复制文件

停止主库(shutdown immediate),复制下列文件:

Ø  复制主库的/oradata/orcl下的所有dbflog文件(即数据库文件、日志文件)到备库的相同目录下(/oradata/orcl

Ø  复制主库的/oracle目录下的cfgtoollogsdiagadmin目录到备库的相同目录下(不复制的话启动备库时显示找不到控制文件)

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<=2;

目的地状态应该显示为 VALID。否则会有错误提示。

 

二、       确认重做日志是否真的被应用了,在主库执行:

SQL> 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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值