oracle 11g dataguard配置

您所在的位置:网站首页 dataguard配置 oracle 11g dataguard配置

oracle 11g dataguard配置

2023-03-27 11:08| 来源: 网络整理| 查看: 265

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.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/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