ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 盛哥学习 Data Guard 第二篇《物理standby准备和创建》

盛哥学习 Data Guard 第二篇《物理standby准备和创建》

原创 Linux操作系统 作者:leonarding 时间:2012-05-28 21:06:22 0 删除 编辑

一、主库准备

1.开启force logging 模式

alter database force logging;

SYS@LEO> select open_mode,log_mode,force_logging,flashback_on from v$database;

OPEN_MODE  LOG_MODE     FOR FLASHBACK_ON

---------- ------------ --- ------------------------- ------------ --- ------

READ WRITE ARCHIVELOG      YES   NO

作用:不管什么操作都会生成redo日志

特点:1.在数据库mount状态和open状态都可以启动force logging模式

      2. alter database表示直接修改控制文件内容,所以一次设置长期有效

      3.临时表空间和临时回滚段动作不会生成redo日志

      4. alter database no force logging;  关闭force logging

2.创建密码文件 (如果没有就先创建密码文件)

密码文件:记录特权用户的管理员信息

注意事项:同一套Data Guard 中的所有数据库的密码文件的密码都必须一致,保证重做日志正常传输。因为Data Guard 中数据库通信都是通过监听来访问密码文件来验证管理员身份的。

orapwd  file=orapwLEO password=oracle  entries=30   创建密码文件语句

3.启动archivelog模式

shutdown  immediate                            关闭数据库

startup  mount                                  启动到mount状态

alter  database  archivelog;                       开启归档模式

select  log_mode,force  logging  from v$database;   检查修改状态

alter  database  open ;                           打开数据库

col name for a40                                 设置name字段宽为40个字符

select SEQUENCE#,name,ARCHIVED,APPLIED from v$archived_log;   检查是否生效

SEQUENCE# NAME                                 ARC APP

---------- ---------------------------------------- --- ------------------------- --- -----

         5 /home/oracle/arch/LEO/1_5_784052660.dbf  YES NO

         6 /home/oracle/arch/LEO/1_6_784052660.dbf  YES NO

         7 /home/oracle/arch/LEO/1_7_784052660.dbf  YES NO

【友情提示一下,常规归档日志存放目录设置方法,但物理standby有自己的设置方法】

注:alter system set log_archive_dest_1='location=/home/oracle/arch/LEO' scope=both; 设置归档日志存放目录

    select dest_name,destination,status,error from v$archive_dest; 查询归档目录设置信息

4.创建standby logfile

作用:备库角色时接收主库redo日志

语法: 创建standby logfile

ALTER DATABASE ADD STANDBY LOGFILE GROUP 4

('/u01/app/oracle/oradata/LEO/file1/redo4_1.rdo','/u01/app/oracle/oradata/LEO/file2/redo4_2.rdo') SIZE 100M;

ALTER DATABASE ADD STANDBY LOGFILE GROUP 5

('/u01/app/oracle/oradata/LEO/file1/redo5_1.rdo','/u01/app/oracle/oradata/LEO/file2/redo5_2.rdo') SIZE 100M;

ALTER DATABASE ADD STANDBY LOGFILE GROUP 6

('/u01/app/oracle/oradata/LEO/file1/redo6_1.rdo','/u01/app/oracle/oradata/LEO/file2/redo6_2.rdo') SIZE 100M;

ALTER DATABASE ADD STANDBY LOGFILE GROUP 7

('/u01/app/oracle/oradata/LEO/file1/redo7_1.rdo','/u01/app/oracle/oradata/LEO/file2/redo7_2.rdo') SIZE 100M;

检查:

SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;

    GROUP#    THREAD#  SEQUENCE# ARC  STATUS

---------- ---------- ---------- --- -------------- ---------- --- ----------

         4          0          0    YES  UNASSIGNED

         5          0          0   YES   UNASSIGNED

         6          0          0   YES   UNASSIGNED

         7          0          0   YES   UNASSIGNED

特点:

a.服务对象是备库

b.standby logfileonline redolog 大小应一致,管理方便

c.如果是单实例数据库那么standby logfile online redolog 组的个数多一个

  如果是rac架构那么standby logfile 组个数=rac节点数*online redolog 组个数+1

  目的:缓冲主库传过来的redo日志

d.提示如果在逻辑standbystandby logfile 接收主库的redo日志->转换sql语句重演变化-> 应用备库,同时可以独立操作写入备库online redolog,因为备库可以在open状态下接收日志

e.删除standby logfilealter database drop standby logfile group 4/5/6/7

5.备份pfile参数文件

作用:当修改参数文件失败的时候可以使用备份重新设置,这种方法趋于便捷和快速

a. 生成最新pfile

SYS@LEO> create pfile from spfile;

File created.

b.复制一个副本

cp  initLEO.ora  initLEO.ora_bak

6.设置主库初始化参数

参数说明:主库有2部分参数,第1部分是原来已经有的,第2部分是新添加的(Data Guard专有参数)

a.查看一下数据库状态

SYS@LEO> select status,instance_name from v$instance;

STATUS       INSTANCE_NAME

------------ ----------------

OPEN         LEO

b.添加新参数,有主库角色的参数 and 备库角色的参数

#primary database role initialization parameter      当为主库角色使用的参数

DB_UNIQUE_NAME=LEO                        数据库实例名,一经指定不能修改

LOG_ARCHIVE_CONFIG='DG_CONFIG=(LEO,OEL)'     罗列一个DG中所有数据库实例名

LOG_ARCHIVE_DEST_1=                        

 'LOCATION=/home/oracle/arch/LEO               本地数据库归档日志存放目录

  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)

  DB_UNIQUE_NAME=LEO'                      指定本地数据库实例

LOG_ARCHIVE_DEST_2= 

 'SERVICE=OEL LGWR ASYNC                      远程数据库接收日志模式

  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)

  DB_UNIQUE_NAME=OEL'                       指定远程数据库实例

LOG_ARCHIVE_DEST_STATE_1=ENABLE              启动传输redo日志服务

LOG_ARCHIVE_DEST_STATE_2=ENABLE              启动接收redo日志服务

REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE         可以设置为EXCLUSIVE or SHARED

                                             主备库sys密码必须相同

LOG_ARCHIVE_FORMAT=%t_%s_%r.arc             归档日志格式

注意:有三个参数没写
DB_NAME=LEO                            数据库名字原来已经有了不用在添加了
LOG_ARCHIVE_MAX_PROCESSES=30       归档日志最大进程数,最大30 默认4
CONTROL_FILES='/arch1/chicago/control1.ctl','/arch2/chicago/control2.ctl'                           控制文件所在路径

#standby database role initialization parameter          当为备库角色使用的参数

FAL_SERVER=OEL       #fetch archive log_server  获取归档日志服务端,指主库service_name

FAL_CLIENT=LEO        #fetch archive log_client  获取归档日志客户端,指备库service_name

DB_FILE_NAME_CONVERT='OEL','LEO'        主备库数据文件转换映射目录,只设置不同部分

LOG_FILE_NAME_CONVERT='OEL','LEO'       主备库日志文件转换映射目录,只设置不同部分,如果你有多个目录路径那么用逗号分隔对应多个

STANDBY_FILE_MANAGEMENT=AUTO         备库是否根据主库的动态变化而变化,例如当主库文件发生重命名、新建等动作时,备库自动做出相应修改

7.创建备库控制文件

特点:

a.在主库中创建具有备库属性的控制文件

b.创建完备库控制文件后主库不能再有structure变化,否则主备库同步不能成功

ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/home/oracle/control01.ctl';

检查:已经创建完成

drwxr-xr-x   3 oracle oinstall      4096 May 23 17:39 arch

drwxrwxrwx  25 oracle oinstall      4096 Jun  3  2010 B19306_01

-rwx------   1 oracle oinstall 465489785 May 17  2011 B19306_01.zip

drwxr-xr-x   3 oracle oinstall      4096 May 23 15:49 backup

-rw-r-----   1 oracle oinstall   7061504 May 26 05:31 control01.ctl

drwxr-xr-x   2 oracle oinstall      4096 May 17  2011 Desktop

drwxr-xr-x   2 oracle oinstall      4096 May 23 15:49 flash

drwxr-xr-x   2 oracle oinstall      4096 May 23 15:49 scripts

drwxr-xr-x   2 oracle oinstall      4096 May 23 15:49 temp

-rw-r--r--   1 oracle oinstall      2641 May 24 07:00 test.sql

8.创建备库参数文件

a.用参数文件副本复制出一份备库参数文件

cp initLEO.ora_bak initOEL.ora

b. 添加备库参数文件新内容

#standby database set parameter

DB_UNIQUE_NAME=OEL                             数据库实例名

LOG_ARCHIVE_CONFIG='DG_CONFIG=(LEO,OEL)'          罗列一个DG中所有数据库实例名

DB_FILE_NAME_CONVERT='LEO','OEL'       主备库数据文件转换映射目录,只设置不同部分

LOG_FILE_NAME_CONVERT='LEO','OEL'      主备库日志文件转换映射目录,只设置不同部分,如果你有多个目录路径那么用逗号分隔对应多个

LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc    归档日志格式

LOG_ARCHIVE_DEST_1=

 'LOCATION=/home/oracle/arch/OEL          备库接收主库归档日志存放目录

  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)

  DB_UNIQUE_NAME=OEL'

LOG_ARCHIVE_DEST_2=                     当变成主库后传输给备库LEO日志模式

 'SERVICE=LEO LGWR ASYNC                

  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)

  DB_UNIQUE_NAME=LEO'

LOG_ARCHIVE_DEST_STATE_1=ENABLE         启动接收redo日志服务

LOG_ARCHIVE_DEST_STATE_2=ENABLE         启动传输redo日志服务

REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE     主备库sys密码必须相同

STANDBY_FILE_MANAGEMENT=AUTO          备库是否根据主库的动态变化而变化,例如当主库文件发生重命名、新建等动作时,备库自动做出相应修改

FAL_SERVER=LEO                            获取归档日志服务端,指主库service_name

FAL_CLIENT=OEL                            获取归档日志客户端,指备库service_name

9.添加OELtnsnames.ora连接串

在主库的/u01/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora 文件中添加

指向备库的连接串

OEL=

 (DESCRIPTION=

   (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.61.102)(PORT=1521))

   (CONNECT_DATA=

     (SERVER=dedicated)

     (SERVICE_NAME=OEL)

   )

 )

10.创建备库所需目录

mkdir -p $ORACLE_BASE/admin/OEL/adump

mkdir -p $ORACLE_BASE/admin/OEL/bdump

mkdir -p $ORACLE_BASE/admin/OEL/cdump

mkdir -p $ORACLE_BASE/admin/OEL/udump

mkdir -p arch/OEL

11.创建备库5要素,这5要素要在备库上存在

a.密码文件     /u01/app/oracle/product/10.2.0/db_1/dbs

orapwd  file=orapwOEL  password=oracle  entries=30

b.参数文件     现在复制到备库

scp initOEL.ora 192.168.61.102:/u01/app/oracle/product/10.2.0/db_1/dbs/

c.数据文件     现在复制到备库,复制之前要先shutdown数据库

tar -zcvf LEO.tar.gz LEO

scp LEO.tar.gz 192.168.61.102:/u01/app/oracle/oradata/

在备库/u01/app/oracle/oradata/目录下解压缩

tar -zxvf LEO.tar.gz

mv  LEO  OEL   重命名

d.控制文件     现在复制到备库,覆盖原来的老control文件

scp /home/oracle/control01.ctl 192.168.61.102:/u01/app/oracle/oradata/OEL/file1/control01.ctl

scp /home/oracle/control01.ctl 192.168.61.102:/u01/app/oracle/oradata/OEL/file2/control02.ctl

scp /home/oracle/control01.ctl 192.168.61.102:/u01/app/oracle/oradata/OEL/file3/control03.ctl

e.监听         现在复制到备库

scp  tnsnames.ora 192.168.61.102:/u01/app/oracle/product/10.2.0/db_1/network/admin/

scp  listener.ora 192.168.61.102:/u01/app/oracle/product/10.2.0/db_1/network/admin/

修改listener.ora内容

      (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.61.102)(PORT=1521))  IP设置成本地

12.启动备库OEL

注意:

1.startup mount 是可以接收主库redo日志,但不能对外提供服务(常用)

2.startup open read only 不可以接收主库redo日志,但能对外提供服务(常用)

3.startup open   不可以接收主库redo日志,失去数据保护功能,开打闪回,闪回到初始状态,DG自动同步,不需要重建备库(不常用)

4.设置备库sqlplus提示符样子

vim  /u01/app/oracle/product/10.2.0/db_1/sqlplus/admin/glogin.sql          在最后添加一行

set sqlprompt "_user'@'_connect_identifier> "

现在我们启动备库到mount状态

13.启动备库监听

lsnrctl start listener

LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 28-MAY-2012 19:13:09

Copyright (c) 1991, 2005, Oracle.  All rights reserved.

Starting /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 10.2.0.1.0 - Production

System parameter file is /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora

Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.61.102)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.61.102)(PORT=1521)))

STATUS of the LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 10.2.0.1.0 - Production

Start Date                 28-MAY-2012 19:13:09

Uptime                    0 days 0 hr. 0 min. 1 sec

Trace Level                off

Security                   ON: Local OS Authentication

SNMP                     OFF

Listener Parameter File   /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora

Listener Log File         /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.61.102)(PORT=1521)))

The listener supports no services

The command completed successfully

启动到mount状态

startup mount

启动redo日志应用恢复备库

alter database recover managed standby database disconnect from session parallel 2;

disconnect from session把这个session提交到后台运行,相当于no hup 后台恢复备库

如果没有这个关键词:这个session一直处理redo日志应用,不会显示Database altered.结果,不会返回到命令操作符界面,如果还想作其他操作,需要重新打开一个session

parallel 2:启动2MRP进程恢复备库

14.启动主库LEO

生成spfile

create spfile from pfile;

启动open状态

startup

注意查看 tail  -f  alert_LEO.log  告警日志,看看是否给备库发送redo日志

备库

RFS进程接收主库传过来的redo日志保存在standby log file

物理standby通过redo应用

逻辑standby通过sql应用

启动 real time 模式(实时应用)

alter database recover managed standby database using current logfile disconnect from session

using current logfile:直接获取standby log file内容应用

不加 using current logfile:直接获取归档日志内容应用,默认不加

RFS[2]: Archived Log: '/home/oracle/arch/OEL/log1_5_784052660.arc'

RFS[2]: Archived Log: '/home/oracle/arch/OEL/log1_6_784052660.arc'

RFS[2]: Archived Log: '/home/oracle/arch/OEL/log1_7_784052660.arc'

15.测试备库归档能力

ALTER SYSTEM SWITCH LOGFILE;

主库和备库2边的日志都同步了才行

16.检查归档日志

检查归档日志是否在2边都同步应用了

SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME  FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

主库

SEQUENCE# FIRST_TIM NEXT_TIME

---------- --------- ---------

         5 23-MAY-12 23-MAY-12

         5 23-MAY-12 23-MAY-12

         6 23-MAY-12 23-MAY-12

         6 23-MAY-12 23-MAY-12

         7 23-MAY-12 23-MAY-12

         7 23-MAY-12 23-MAY-12

         8 23-MAY-12 28-MAY-12

         8 23-MAY-12 28-MAY-12

         9 28-MAY-12 28-MAY-12

         9 28-MAY-12 28-MAY-12

        10 28-MAY-12 28-MAY-12

 

 SEQUENCE# FIRST_TIM NEXT_TIME

---------- --------- ---------

        10 28-MAY-12 28-MAY-12

备库

SEQUENCE# FIRST_TIM NEXT_TIME

---------- --------- ---------

         5 23-MAY-12 23-MAY-12

         6 23-MAY-12 23-MAY-12

         7 23-MAY-12 23-MAY-12

         8 23-MAY-12 28-MAY-12

         9 28-MAY-12 28-MAY-12

        10 28-MAY-12 28-MAY-12

好这时我们可以看出归档日志在2边同步了

ALTER SYSTEM SWITCH LOGFILE; 在归档一次,检查新redo日志是否在备库同步

主库

SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME  FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

SEQUENCE# FIRST_TIM NEXT_TIME

---------- --------- ------------------ ---------

10 28-MAY-12 28-MAY-12

        10 28-MAY-12 28-MAY-12

        11 28-MAY-12 28-MAY-12

        11 28-MAY-12 28-MAY-12

备库

SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME  FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

SEQUENCE# FIRST_TIM NEXT_TIME

---------- --------- ----------------- ---------

        10 28-MAY-12 28-MAY-12

        11 28-MAY-12 28-MAY-12

好这时我们可以看出新redo日志已经在2边同步了

检查新归档是否在备库应用了

SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

 SEQUENCE# APP

---------- ---

         5 NO

         6 NO

         7 NO

         8 YES

         9 YES

        10 YES

        11 YES

好这时我们可以看出新归档已经在备库应用了

17.启动备库read only状态

Read only状态:数据库只读状态,这时备库不能应用日志,但可以接收日志。

取消备库日志应用

Alter database recover managed standby database cancel;

Background Media Recovery process shutdown (OEL)       后台介质恢复进程关闭

Standby Recovery Canceled (OEL)                       备库恢复取消

启动到alter database open read only;

SYS@OEL> alter database open read only;

Database altered.

SYS@OEL> select database_role,switchover_status,open_mode from v$database;

DATABASE_ROLE    SWITCHOVER_STATUS    OPEN_MODE

---------------- -------------------- ----------

PHYSICAL STANDBY   NOT ALLOWED         READ ONLY   只读状态

主库状态

elect database_role,switchover_status,open_mode from v$database;

DATABASE_ROLE    SWITCHOVER_STATUS    OPEN_MODE

---------------- -------------------- ----------

PRIMARY          TO STANDBY            READ WRITE

 

小结:创建physical standby database 首先要做好5要素准备,现在启动备库在启动主库,因为主库启动后会刺探一次备库如果此时备库没有启动那么就要等好长时间在循环刺探,注意备库mount状态时候能应用日志,open read only 状态不能应用日志只能接收日志,实时注意2边日志要同步应用,一般物理备库在是在mount状态下,只有需要备库提供一些服务支持的时候会设置成open read only状态

 

 

Leonarding

2012.5.28

于天津&summer

Bloghttp://space.itpub.net/26686207

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26686207/viewspace-731329/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
刘盛,网名leonarding,the first ACEA in china, Oracle OCM10g&11g RHCE, ACOUG Core Member Blogger, DATAGURU Oracle数据库版主, ITPUB HADOOP版版主, DB2中国专家组成员, 专注于&Oracle&Hadoop&Nosql&SAS, 提倡“分享技术~成就梦想”, 新浪微博:@itpub_leonarding QQ:40354446

注册时间:2012-02-10

  • 博文量
    246
  • 访问量
    3227122