11G RAC+Data Guard搭建文档

11G RAC+Data Guard搭建文档

 

 

目录

11G Data Guard搭建文档... 1

实验环境... 1

1.      操作系统... 1

2.      数据库... 2

3.      映射关系... 2

步骤1设置 force logging,启用强制日志... 2

步骤2主库设为归档模式... 3

步骤3 配置主数据库Standby Redo日志... 3

步骤4 设置主数据库初始化参数... 4

步骤5 Standby数据库创建初始化参数文件... 5

步骤6 创建相应的目录结构... 6

步骤7 配置Redo传输认证... 6

步骤8 配置主备数据库的监听... 6

步骤9 启动Standby数据库到NOMOUNT模式... 13

步骤10 从主数据库复制文件到Standby数据库... 13

步骤11 启动Redo Apply. 17

步骤12 正常开启和关闭Data Guard的流程... 17

1 检查日志传输服务... 18

2 查看Standby数据库Standby Redo日志的使用情况... 19

3 监控日志传输性能... 20

4 管理日志应用服务... 20

5 主备数据库切换... 21

1  Switchover切换... 21

 

 

 

 

 

说明:使用RMAN创建物理standby 备库只安装数据库软件,没有创建数据库

实验环境

1.       操作系统

[root@dg ~]#uname -r

2.6.32-279.el6.x86_64

 

[root@dg ~]# cat/etc/redhat-release

Red HatEnterprise Linux Server release 6.3 (Santiago)

 

2.       数据库

SQL> select *from v$version;

 

BANNER

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

Oracle Database11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

PL/SQL Release11.2.0.3.0 - Production

CORE    11.2.0.3.0      Production

TNS for Linux:Version 11.2.0.3.0 - Production

NLSRTL Version11.2.0.3.0 - Production

3.       映射关系

Host            IP           DB_NAME    DB_UNIQUE_NAME   Net Service Name(网络服务名)

主库node1  192.168.100.66     orcl         orcl           orcl1

主库node2  192.168.100.67     orcl         orcl           orcl2

备库dg     192.168.100.70     orcl         phydb         phydb

 

4.       主库

[grid@node1 ~]$crs_stat -t

Name           Type           Target    State    Host       

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

ora.CRS.dg     ora....up.type    ONLINE   ONLINE    node1      

ora.DATA.dg    ora....up.type    ONLINE   ONLINE    node1      

ora.FRA.dg     ora....up.type    ONLINE   ONLINE    node1      

ora....ER.lsnrora....er.type        ONLINE    ONLINE   node1      

ora....N1.lsnrora....er.type        ONLINE    ONLINE   node1      

ora.asm        ora.asm.type    ONLINE   ONLINE    node1      

ora.cvu        ora.cvu.type     ONLINE   ONLINE    node1      

ora.gsd        ora.gsd.type     OFFLINE  OFFLINE               

ora....networkora....rk.type       ONLINE    ONLINE   node1      

ora....SM1.asmapplication        ONLINE    ONLINE   node1      

ora....E1.lsnrapplication         ONLINE    ONLINE   node1      

ora.node1.gsd  application      OFFLINE  OFFLINE              

ora.node1.ons  application      ONLINE   ONLINE    node1      

ora.node1.vip  ora....t1.type     ONLINE   ONLINE    node1      

ora....SM2.asmapplication       ONLINE    ONLINE   node2      

ora....E2.lsnrapplication       ONLINE    ONLINE   node2      

ora.node2.gsd  application   OFFLINE   OFFLINE              

ora.node2.ons  application   ONLINE    ONLINE    node2      

ora.node2.vip  ora....t1.type   ONLINE   ONLINE    node2      

ora.oc4j       ora.oc4j.type   ONLINE   ONLINE    node1      

ora.ons        ora.ons.type   ONLINE   ONLINE    node1      

ora.orcl.db    ora....se.type    ONLINE   ONLINE    node1      

ora.scan1.vip  ora....ip.type    ONLINE   ONLINE    node1

 

SQL> col namefor a10

SQL> selectname,state from v$asm_diskgroup;

 

NAME       STATE

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

CRS        MOUNTED

DATA       MOUNTED

FRA        MOUNTED

 

5.       备库

[grid@dg ~]$crs_stat -t

Name           Type           Target    State    Host       

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

ora.CRS.dg     ora....up.type     ONLINE   ONLINE    dg         

ora.DATA.dg    ora....up.type     ONLINE   ONLINE    dg         

ora.FRA.dg     ora....up.type     ONLINE   ONLINE    dg          

ora....ER.lsnrora....er.type         ONLINE    ONLINE   dg         

ora.asm        ora.asm.type     ONLINE   ONLINE    dg         

ora.cssd       ora.cssd.type      ONLINE   ONLINE    dg         

ora.diskmon    ora....on.type     OFFLINE  OFFLINE              

ora.evmd       ora.evm.type     ONLINE   ONLINE    dg         

ora.ons        ora.ons.type      OFFLINE  OFFLINE

 

SQL> col namefor a10

SQL> selectname,state from v$asm_diskgroup;

 

NAME       STATE

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

CRS        MOUNTED

DATA       MOUNTED

FRA        MOUNTED

 

 

步骤1设置 force logging,启用强制日志

SQL>select name,log_mode,force_logging from gv$database;

 

NAME      LOG_MODE     FOR

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

ORCL      NOARCHIVELOG NO

ORCL      NOARCHIVELOG NO

 

SQL>alter database force logging;

 

Databasealtered.

 

SQL>select name,log_mode,force_logging from gv$database;

 

NAME      LOG_MODE     FOR

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

ORCL      NOARCHIVELOG YES

ORCL      NOARCHIVELOG YES

步骤2主库设为归档模式

                   [grid@node1~]$ srvctl status database -d orcl

Instance orcl1 is running on node node1

Instance orcl2 is running on node node2

[grid@node1 ~]$ srvctl stop database -d orcl

[grid@node1 ~]$ srvctl status database -d orcl

Instance orcl1 is not running on node node1

Instance orcl2 is not running on node node2

                  

                   [oracle@node1~]$ sqlplus / as sysdba

SQL> startup mount;

SQL> alter database archivelog;

SQL> select open_mode,log_mode from v$database;

OPEN_MODE            LOG_MODE

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

MOUNTED              ARCHIVELOG

SQL> shutdown immediate

 

[grid@node1 ~]$ srvctl start database -d orcl

 

[oracle@node1 ~]$ sqlplus / as sysdba

SQL> select name,log_mode,force_logging from gv$database;

 

NAME      LOG_MODE     FOR

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

ORCL      ARCHIVELOG   YES

ORCL      ARCHIVELOG   YES

 

SQL> archive log list;

Database logmode              Archive Mode

Automatic archival            Enabled

Archive destination           USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence      3

Next log sequence to archive    5

Current log sequence          5

                   由此可见,归档日志放置在闪回恢复区中

                  SQL> show parameter log_archive

 

NAME                                TYPE        VALUE

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

log_archive_dest_1                  string

 

SQL> show parameter recovery

 

NAME                                TYPE        VALUE

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

db_recovery_file_dest                string      +FRA

 

可以在RMAN中看一下归档路径

[oracle@node2 ~]$ rman target /

RMAN> list archivelog all;

 

List of Archived Log Copies for database with db_unique_name ORCL

=====================================================================

 

Key     Thrd Seq     S Low Time

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

1       1    10     A 07-APR-15

        Name: +FRA/orcl/archivelog/2015_04_08/thread_1_seq_10.261.876453695

 

2       2    7      A 07-APR-15

        Name:+FRA/orcl/archivelog/2015_04_08/thread_2_seq_7.262.876453695

 

 

步骤3 RAC主数据库执行RMAN全备

                   创建备份存放目录

                   [root@node1u01]# mkdir rman_backup

                   [root@node1u01]# chown oracle:oinstall rman_backup/ -R

 

                   查看需要备份的文件

[oracle@node1 ~]$ rman

RMAN> report need backup;

 

using target database control file instead of recovery catalog

RMAN retention policy will be applied to the command

RMAN retention policy is set to redundancy 1

Report of files with less than 1 redundant backups

File #bkps Name

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

1    0     +DATA/orcl/datafile/system.256.876035647

2    0     +DATA/orcl/datafile/sysaux.257.876035653

3    0     +DATA/orcl/datafile/undotbs1.258.876035653

4    0     +DATA/orcl/datafile/users.259.876035657

5    0     +DATA/orcl/datafile/example.264.876036177

6    0     +DATA/orcl/datafile/undotbs2.265.876037165

 

删除全部的归档文件(可选)

RMAN> delete archivelog all;

 

Do you really want to delete the above objects (enter YES or NO)? y

 

                   查看当前数据库的备份信息

                   RMAN>list backup;

specification does not match any backup in the repository

                   如果有备份并且想删除

                   RMAN>delete backup;

 

                   查看当前数据库的归档信息

                   RMAN>list archivelog all;

specification does not match any archived log in the repository

 

                   执行备份脚本备份数据文件和归档文件

                   RMAN>run {

2> allocate channel c1 type disk;

3> allocate channel c2 type disk;

4> allocate channel c3 type disk;

5> allocate channel c4 type disk;

6> backup database format '/u01/rman_backup/Full_%U.bak';

7> backup archivelog all format '/u01/rman_backup/ARC_%U.bak';

8> release channel c1;

9> release channel c2;

10> release channel c3;

11> release channel c4;

12> }

 

                   [oracle@node1rman_backup]$ ll

total 1237392

-rw-r----- 1 oracle asmadmin  6308352 Apr  8 05:05ARC_0dq3rdtb_1_1.bak

-rw-r----- 1 oracle asmadmin 645963776 Apr  8 05:03 Full_08q3rdd6_1_1.bak

-rw-r----- 1 oracle asmadmin 521764864 Apr  8 05:03 Full_09q3rdd7_1_1.bak

-rw-r----- 1 oracle asmadmin 74391552 Apr  8 05:01Full_0aq3rdd7_1_1.bak

-rw-r----- 1 oracle asmadmin 18546688 Apr  8 04:57Full_0bq3rdd7_1_1.bak

-rw-r----- 1 oracle asmadmin    98304 Apr  8 04:57Full_0cq3rddi_1_1.bak

[oracle@node1 rman_backup]$ du -sh

1.2G    .

 

                   备份控制文件

                   RMAN>backup device type disk format '/u01/rman_backup/standby_%U.ctl' currentcontrolfile for standby;

 

                   备份参数文件

                   SQL>create pfile='/u01/rman_backup/initphydb.ora' from spfile;

 

                   [oracle@node1rman_backup]$ ll

total 1336744

-rw-r----- 1 oracle asmadmin 26608128 Apr  9 02:12ARC_0kq3to4d_1_1.bak

-rw-r----- 1 oracle asmadmin 15542784 Apr  9 02:12ARC_0lq3to4d_1_1.bak

-rw-r----- 1 oracle asmadmin 567762944 Apr  9 02:11 Full_0fq3tnlu_1_1.bak

-rw-r----- 1 oracle asmadmin 646488064 Apr  9 02:11 Full_0gq3tnlu_1_1.bak

-rw-r----- 1 oracle asmadmin 75210752 Apr  9 02:08Full_0hq3tnlv_1_1.bak

-rw-r----- 1 oracle asmadmin 18546688 Apr  9 02:05Full_0iq3tnlv_1_1.bak

-rw-r----- 1 oracle asmadmin    98304 Apr  9 02:09Full_0jq3tnrv_1_1.bak

-rw-r--r-- 1 oracle asmadmin     1464 Apr  9 02:18 initphydb.ora

-rw-r----- 1 oracle asmadmin 18546688 Apr  9 02:15standby_0mq3to9p_1_1.ctl

                  

                   将备份的所有文件传递到备库上

                   [oracle@node1rman_backup]$ scp * 192.168.100.70:/u01/rman_backup/

 

node1的口令文件分别传递到备库和node2上的对应位置,保持3个数据库的口令文件完全相同

[oracle@node1 rman_backup]$

scp $ORACLE_HOME/dbs/orapworcl1192.168.100.70://$ORACLE_HOME/dbs/orapwphydb

scp $ORACLE_HOME/dbs/orapworcl1192.168.100.67://$ORACLE_HOME/dbs/orapworcl2

步骤4 修改备库初始化参数

                   [oracle@dgdbs]$ cat initphydb.ora

phydb.__db_cache_size=452984832

phydb.__java_pool_size=4194304

phydb.__large_pool_size=4194304

phydb.__oracle_base='/u01/app/oracle'#ORACLE_BASE set fromenvironment

phydb.__pga_aggregate_target=209715200

phydb.__sga_target=838860800

phydb.__shared_io_pool_size=0

phydb.__shared_pool_size=369098752

phydb.__streams_pool_size=0

*.audit_file_dest='/u01/app/oracle/admin/phydb/adump'

*.audit_trail='db'

*.cluster_database=false

*.compatible='11.2.0.0.0'

*.core_dump_dest='/u01/app/oracle/diag/rdbms/phydb/cdump'

*.control_files='+DATA/phydb/controlfile/cont.ctl'

*.db_block_size=8192

*.db_create_file_dest='+DATA'

*.db_domain=''

*.db_name='orcl'

*.db_recovery_file_dest='+FRA'

*.db_recovery_file_dest_size=4558159872

*.diagnostic_dest='/u01/app/oracle'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=phydbXDB)'

*.open_cursors=300

*.pga_aggregate_target=209715200

*.processes=200

*.remote_login_passwordfile='exclusive'

*.sessions=225

*.sga_target=838860800

*.thread=1

*.undo_tablespace='UNDOTBS1'

*.service_names='phydb'

*.db_unique_name='phydb'

*.fal_client='phydb'

*.fal_server='orcl1','orcl2'

*.log_archive_config='dg_config=(orcl,phydb)'

*.log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DESTvalid_for=(all_logfiles,all_roles) db_unique_name=phydb'

*.log_archive_dest_2='service=orcl1 lgwr syncaffirm valid_for=(online_logfiles,primary_role) db_unique_name=orcl'

*.LOG_ARCHIVE_DEST_STATE_1=ENABLE

*.LOG_ARCHIVE_DEST_STATE_2=ENABLE

*.standby_file_management='AUTO'

*.log_archive_format='ARC_%t_%S_%r.arc'

*.LOG_FILE_NAME_CONVERT='+DATA/orcl/','+DATA/phydb/'

*.db_file_name_convert='+DATA/orcl/','+DATA/phydb/'

步骤5 在备库创建相关目录

[oracle@dg dbs]$ mkdir-p /u01/app/oracle/admin/phydb/adump'

[oracle@dg dbs]$ mkdir-p /u01/app/oracle/diag/rdbms/phydb/cdump

[grid@dg ~]$ asmcmd –p

ASMCMD [+data] >mkdir phydb

 

步骤6 配置RAC主库和物理备库的tnsnames.ora

                   RAC主库的各个节点和物理备库的tnsnames.ora文件的内容是完全一样的。

[oracle@dg admin]$ vitnsnames.ora

# tnsnames.ora NetworkConfiguration File:/u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora

# Generated by Oracleconfiguration tools.

 

ORCL =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = scan-cluster.localdomain)(PORT = 1521))

      (SERVICE_NAME = orcl)

    )

  )

 

orcl1 =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.100.66)(PORT = 1521))

      (INSTANCE_NAME = orcl1)

    )

  )

 

 

orcl2 =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.100.67)(PORT = 1521))

      (INSTANCE_NAME = orcl2)

    )

  )

 

 

phydb =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.100.70)(PORT = 1521))

      (SERVICE_NAME = phydb)

    )

  )

 

                   有一个不同的地方在于物理备库tnsnames.ora文件修改如下内容:

 

ORCL =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.71)(PORT = 1521))

      (SERVICE_NAME = orcl)

    )

                  )

 

                   验证:

[oracle@dg ~]$ tnsping orcl

 

TNS Ping Utility forLinux: Version 11.2.0.3.0 - Production on 10-APR-2015 23:15:51

 

Copyright (c) 1997,2011, Oracle.  All rights reserved.

 

Used parameter files:

 

 

Used TNSNAMES adapterto resolve the alias

Attempting to contact(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.71)(PORT= 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)))

OK (30 msec)

[oracle@dg ~]$ tnsping orcl1

 

TNS Ping Utility forLinux: Version 11.2.0.3.0 - Production on 10-APR-2015 23:16:01

 

Copyright (c) 1997,2011, Oracle.  All rights reserved.

 

Used parameter files:

 

 

Used TNSNAMES adapterto resolve the alias

Attempting to contact(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.66)(PORT= 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)(INSTANCE_NAME = orcl1)))

OK (10 msec)

[oracle@dg ~]$ tnsping orcl2

 

TNS Ping Utility forLinux: Version 11.2.0.3.0 - Production on 10-APR-2015 23:16:04

 

Copyright (c) 1997,2011, Oracle.  All rights reserved.

 

Used parameter files:

 

 

Used TNSNAMES adapterto resolve the alias

Attempting to contact(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.67)(PORT= 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)(INSTANCE_NAME = orcl2)))

OK (30 msec)

                   [oracle@dg ~]$ sqlplus / assysdba

SQL> conn sys/oracle@orcl1as sysdba

Connected.

SQL> connsys/oracle@orcl2 as sysdba

Connected.

步骤7 启动Standby数据库到NOMOUNT模式

SQL> startup nomount

                   ORACLEinstance started.

Total System Global Area 835104768 bytes

Fixed Size                 2232960 bytes

Variable Size             377490816 bytes

Database Buffers         452984832 bytes

Redo Buffers               2396160 bytes

步骤8 在备库使用RMAN恢复数据库

 

1)恢复控制文件

[oracle@dgdbs]$ rman

RMAN>

restore standby controlfile from'/u01/rman_backup/standby_0mq3to9p_1_1.ctl';

 

Startingrestore at 09-APR-15

usingtarget database control file instead of recovery catalog

allocatedchannel: ORA_DISK_1

channelORA_DISK_1: SID=24 device type=DISK

 

channelORA_DISK_1: restoring control file

channelORA_DISK_1: restore complete, elapsed time: 00:00:03

outputfile name=+DATA/phydb/controlfile/cont.ctl

Finishedrestore at 09-APR-15

 

检查:

[grid@dg~]$ asmcmd –p

ASMCMD[+data/phydb/CONTROLFILE] > ls

cont.ctl

current.256.876539383

 

2)将备库启动到mount状态

[oracle@dg dbs]$ sqlplus / as sysdba

SQL> alter database mount;

3)RMAN restore备库恢复数据文件

[oracle@dgdbs]$ rman

connectedto target database: ORCL (DBID=1403816752, not open)

RMAN>run {

2>allocate channel c1 type disk;

3>allocate channel c2 type disk;

4>allocate channel c3 type disk;

5>allocate channel c4 type disk;

6>restore database;

7>release channel c1;

8>release channel c2;

9>release channel c3;

10>release channel c4;

11>}

       4)查看恢复的文件信息

              SQL>select name from v$datafile

            2 union

            3 select name from v$controlfile

            4 union

            5 select member from v$logfile;

 

NAME

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

+DATA/phydb/controlfile/cont.ctl

+DATA/phydb/datafile/example.257.876540211

+DATA/phydb/datafile/sysaux.258.876540211

+DATA/phydb/datafile/system.260.876540211

+DATA/phydb/datafile/undotbs1.259.876540211

+DATA/phydb/datafile/undotbs2.261.876540215

+DATA/phydb/datafile/users.262.876540215

+DATA/phydb/onlinelog/group_1.261.876036033

+DATA/phydb/onlinelog/group_2.262.876036057

+DATA/phydb/onlinelog/group_3.266.876037547

+DATA/phydb/onlinelog/group_4.267.876037573

+FRA/orcl/onlinelog/group_1.257.876036043

+FRA/orcl/onlinelog/group_2.258.876036071

+FRA/orcl/onlinelog/group_3.259.876037561

+FRA/orcl/onlinelog/group_4.260.876037585

 

15 rows selected.

步骤9 创建RAC主库和物理备库的standby logfile联机redo日志文件

       RAC主库和物理备库的redo日志文件的创建是完全一样的,这里只例举物理备库上的创建过程。

1)查看数据库信息

SQL> set line 300

SQL> select dbid,nameswitchover_status,db_unique_name,database_role,open_mode,current_scn fromv$database;

 

DBID SWITCHOVE DB_UNIQUE_NAME                 DATABASE_ROLE    OPEN_MODE            CURRENT_SCN

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

1403816752 ORCL     phydb                         PHYSICAL STANDBY MOUNTED              1639928

 

2)  执行下面的SQL语句查询当前数据库的联机Redo日志:

 

SQL> select THREAD#,BYTES/1024/1024"SIZE(MB)",MEMBERS from V$LOG;

 

  THREAD#   SIZE(MB)    MEMBERS

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

        1         50          2

        1         50          2

        2         50          2

        2         50          2

THREAD#表示数据库节点编号,当前数据库有两个节点,每个节点有2个日志组

SIZE(MB)表示日志的大小,当前每个日志的大小为50MB

MEMBERS表示日志组的成员数,当前每个日志组有两个成员

 

SQL> selectGROUP#,THREAD#,SEQUENCE#,BYTES/1024/1024 from v$log;

 

GROUP#    THREAD#  SEQUENCE# BYTES/1024/1024

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

1         1         15              50

2         1         16              50

3          2         13              50

4         2         12              50

 

SQL> select * from v$standby_log;

 

no rows selected

 

       3)创建standby logfile联机redo日志文件

 

SQL> alter database add standby logfile thread 1group 5 size 50m,group 6 size 50m,group 7 size 50m;

             

SQL>alter database add standby logfile thread 2 group 8 size 50m,group 9 size50m,group 10 size 50m;

 

SQL> select GROUP#,DBID,THREAD#,SEQUENCE#,BYTESfrom v$standby_log;

 

GROUP# DBID            THREAD#  SEQUENCE#     BYTES

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

5 UNASSIGNED                 1         0   52428800

6 UNASSIGNED                 1          0  52428800

7 UNASSIGNED                 1          0  52428800

8 UNASSIGNED                 2          0  52428800

9 UNASSIGNED                 2          0  52428800

10 UNASSIGNED                2         0   52428800

 

6 rows selected

步骤10 配置RAC主库的初始化参数

修改初始化参数文件有两种方法,一种是使用SQL语句直接修改,一种是使用spfile生成pfile文件,然后修改pfile文件之后再生成spfile

 

1)   使用SQL语句修改

再修改之前确保RAC的各个节点都是用spfile启动的,使用以下SQL语句查看:

SQL> show parameter spfile;

 

SQL> alter system set log_archive_dest_2='service=phydblgwr sync affirm valid_for=(online_logfiles,primary_role) db_unique_name=phydb'sid=’*’;

 

SQL> alter system set log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DESTvalid_for=(all_logfiles,all_roles) db_unique_name=orcl' sid=’*’;

 

SQL> alter system setlog_archive_config='dg_config=(orcl,phydb)' sid=’*’;

 

SQL> alter system set DB_UNIQUE_NAME='orcl'sid=’*’;

 

SQL> alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLEsid=’*’;

 

SQL> alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLEsid=’*’;

 

SQL> alter system set standby_file_management='AUTO'sid=’*’;

 

SQL> alter system set fal_server='phydb'sid=’*’;

 

SQL> alter system set fal_ client ='orcl1'sid=’orcl1’;

 

SQL> alter system set fal_server='orcl2'sid=’orcl2’;

 

以下两个参数修改后需要重启数据库才能生效

SQL> alter system set DB_FILE_NAME_CONVERT='+DATA/phydb/','+DATA/orcl/'sid=’*’ scope=spfile;

 

SQL> alter system set LOG_FILE_NAME_CONVERT='+DATA/phydb/','+DATA/orcl/'sid=’*’ scope=spfile;

 

 

2)修改pfile文件生成spfile

 

[oracle@node1 rman_backup]$ catinitphydb.ora

orcl1.__db_cache_size=452984832

orcl2.__db_cache_size=511705088

orcl1.__java_pool_size=4194304

orcl2.__java_pool_size=4194304

orcl1.__large_pool_size=4194304

orcl2.__large_pool_size=4194304

orcl2.__oracle_base='/u01/app/oracle'#ORACLE_BASEset from environment

orcl1.__oracle_base='/u01/app/oracle'#ORACLE_BASEset from environment

orcl1.__pga_aggregate_target=209715200

orcl2.__pga_aggregate_target=209715200

orcl1.__sga_target=838860800

orcl2.__sga_target=838860800

orcl1.__shared_io_pool_size=0

orcl2.__shared_io_pool_size=0

orcl1.__shared_pool_size=369098752

orcl2.__shared_pool_size=310378496

orcl1.__streams_pool_size=0

orcl2.__streams_pool_size=0

*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'

*.audit_trail='db'

*.cluster_database=true

*.compatible='11.2.0.0.0'

*.control_files='+DATA/orcl/controlfile/current.260.876036017','+FRA/orcl/controlfile/current.256.876036017'

*.db_block_size=8192

*.db_create_file_dest='+DATA'

*.db_domain=''

*.db_name='orcl'

*.db_recovery_file_dest='+FRA'

*.db_recovery_file_dest_size=4558159872

*.diagnostic_dest='/u01/app/oracle'

*.dispatchers='(PROTOCOL=TCP)(SERVICE=orclXDB)'

orcl1.instance_number=1

orcl2.instance_number=2

*.open_cursors=300

*.pga_aggregate_target=209715200

*.processes=200

*.remote_listener='scan-cluster.localdomain:1521'

*.remote_login_passwordfile='exclusive'

*.sessions=225

*.sga_target=838860800

orcl2.thread=2

orcl1.thread=1

orcl1.undo_tablespace='UNDOTBS1'

orcl2.undo_tablespace='UNDOTBS2'

 

*.DB_UNIQUE_NAME='orcl'

*.log_archive_config='dg_config=(orcl,phydb)'

*.log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DESTvalid_for=(all_logfiles,all_roles) db_unique_name=orcl'

*.log_archive_dest_2='service=phydb lgwrsync affirm valid_for=(online_logfiles,primary_role) db_unique_name=phydb'

*.LOG_ARCHIVE_DEST_STATE_1=ENABLE

*.LOG_ARCHIVE_DEST_STATE_2=ENABLE

*.standby_file_management='AUTO'

*.fal_server='phydb'

*.DB_FILE_NAME_CONVERT='+DATA/phydb/','+DATA/orcl/'

*.LOG_FILE_NAME_CONVERT='+DATA/phydb/','+DATA/orcl/'

orcl1.fal_client='orcl1'

orcl2.fal_client='orcl2'

 

 

[grid@node1 ~]$ srvctl stop database -dorcl

[oracle@node1 ~]$ sqlplus / as sysdba

SQL> createspfile='+DATA/orcl/spfileorcl.ora' from pfile='/u01/rman_backup/initphydb.ora';

[grid@node1 ~]$ srvctl start database -dorcl

 

3)验证配置后的信息

 

SQL> show parameter log_archive

NAME                                 TYPE        VALUE

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

log_archive_config                   string      dg_config=(orcl,phydb)

log_archive_dest_1                   string      location=USE_DB_RECOVERY_FILE_

                                             DEST valid_for=(all_logfiles,a

                                             ll_roles) db_unique_name=orcl

log_archive_dest_2                   string      service=phydb lgwr sync affirm

                                            valid_for=(online_logfiles,pr

                                            imary_role) db_unique_name=phydb

log_archive_dest_state_1             string      ENABLE

log_archive_dest_state_2             string      ENABLE

 

SQL> show parameter standby

NAME                                 TYPE        VALUE

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

standby_file_management              string      AUTO

步骤11 查看归档传递信息

         1)在主库执行以下SQL语句查看归档信息

                   SQL>select GROUP#,THREAD#,SEQUENCE#,STATUS from v$log;

 

             GROUP#    THREAD# SEQUENCE# STATUS

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

        1          1         21 CURRENT

        2          1         20 INACTIVE

        3          2         19 CURRENT

        4          2         18 INACTIVE

 

         2)在备库执行以下命令查看

                   RMAN>list archivelog all;

 

List of Archived Log Copies for database with db_unique_name PHYDB

=====================================================================

 

Key     Thrd Seq     S Low Time

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

6       1    19     A 09-APR-15

       Name: +FRA/phydb/archivelog/2015_04_09/thread_1_seq_19.267.876548057

 

11      1    20      A 09-APR-15

       Name: +FRA/phydb/archivelog/2015_04_09/thread_1_seq_20.272.876548869

 

7       2    17     A 09-APR-15

       Name: +FRA/phydb/archivelog/2015_04_09/thread_2_seq_17.268.876548753

 

10      2    18      A 09-APR-15

       Name: +FRA/phydb/archivelog/2015_04_09/thread_2_seq_18.271.876548769

 

         3)在主库做日志切换后再查看

SQL> alter system switch logfile;

步骤11 备库应用归档日志,与主库进行同步

1)  查看归档日志是否同步

                   SQL>col name for a40

SQL> select sequence#,name,applied from v$archived_log;

                   SEQUENCE#NAME                    APPLIED

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

                   19+FRA/phydb/archivelog/2015_04_09/thread_1_seq_19.267.876548057  NO

       20 +FRA/phydb/archivelog/2015_04_09/thread_1_seq_20.272.876548869  NO

        17+FRA/phydb/archivelog/2015_04_09/thread_2_seq_17.268.876548753  NO

       18 +FRA/phydb/archivelog/2015_04_09/thread_2_seq_18.271.876548769  NO

         

         2)备库应用归档日志

SQL> alterdatabase recover managed standby database using current logfile disconnect fromsession;

 

步骤12 open备库

         1)查看备库信息

SQL> selectdb_unique_name,switchover_status,database_role,open_mode from v$database;

 

DB_UNIQUE_NAME SWITCHOVER_STATUS   DATABASE_ROLE      OPEN_MODE

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

phydb      NOT ALLOWED          PHYSICAL STANDBY   MOUNTED

 

         2)取消归档日志的应用

SQL> alter database recover managed standby database cancel;

 

         3)打开备库

SQL> alter database open;

 

SQL> selectdb_unique_name,switchover_status,database_role,open_mode from v$database;

 

DB_UNIQUE_NAME SWITCHOVER_STATUS   DATABASE_ROLE      OPEN_MODE

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

phydb      NOT ALLOWED          PHYSICAL STANDBY   READ ONLY

 

SQL> alterdatabase recover managed standby database using current logfile disconnect fromsession;

 

SQL> selectdb_unique_name,switchover_status,database_role,open_mode from v$database;

 

DB_UNIQUE_NAME SWITCHOVER_STATUS   DATABASE_ROLE      OPEN_MODE

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

phydb      NOT ALLOWED          PHYSICAL STANDBY   READ ONLY WITH APPLY

1 检查日志传输服务

         下面通过主库V$ARCHIVED_LOG视图检查日志传输服务。

1)  执行以下SQL语句查询实例名称对应的线程号:

SQL> select THREAD#,INSTANCE_NAME FROM GV$INSTANCE;

 

THREAD# INSTANCE_NAME

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

 1  orcl1

     2   orcl2

                   THREAD#表示RAC的第n个实例。

2)  执行以下SQL语句查询每个实例所有目的地生成的日志的最大序列号:

SQL> SELECT THREAD#,DEST_ID,MAX(SEQUENCE#) FROMV$ARCHIVED_LOG GROUP BY THREAD#,DEST_ID ORDER BY THREAD#;

 

THREAD#  DEST_ID   MAX(SEQUENCE#)

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

1          1             42

1          2             42

2          1             36

2          2             36

DEST_ID等于1对应初始化参数配置中的LOG_ARCHIVE_DEST_1,表示本地归档目的地;等于2对应初始化参数中的LOG_ARCHIVE_DEST_2,表示远程Standby数据库目的地。

从上面的查询结果可以看出,目前所有日志都成功归档到目的地。执行下面的命令手动切换日志三次:

SQL> alter system archive log current;

 

System altered.

 

SQL> /

 

System altered.

 

SQL> r

  1* alter system archive logcurrent

 

System altered.

 

再次执行上面的查询:

SQL> SELECT THREAD#,DEST_ID,MAX(SEQUENCE#) FROM V$ARCHIVED_LOGGROUP BY THREAD#,DEST_ID ORDER BY THREAD#;

 

THREAD#    DEST_IDMAX(SEQUENCE#)

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

1          1             45

1          2             45

2          1             39

2          2             39

 

从上面的结果可以看出,日志都成功归档到目的地,证明日志传输服务工作正常。

        

2 查看Standby数据库Standby Redo日志的使用情况

 

         Standby数据库执行下面的SQL语句查询StandbyRedo日志的使用情况:

        

SQL> SELECTTHREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;

 

  THREAD#  SEQUENCE# ARC STATUS

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

        1          0 NO  UNASSIGNED

        1         43 YES ACTIVE

        1          0 NO  UNASSIGNED

        2         37 YES ACTIVE

        2          0 NO  UNASSIGNED

        2          0 YES UNASSIGNED

         在主数据库执行以下SQL语句查询日志序列号:

 

         SQL>SELECT THREAD#,SEQUENCE#,STATUS FROM V$LOG;

 

  THREAD#  SEQUENCE# STATUS

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

        1         42 INACTIVE

        1         43 CURRENT

        2         36 INACTIVE

        2         37 CURRENT

 

         从上面的结果可以看出,主数据库的CURRENT联机Redo日志与Standby数据库的ACTIVE状态的Standby Redo日志序列号相同,证明Redo传输服务启用了实时传输。

 

3 监控日志传输性能

1)  Redo源数据库执行以下SQL语句查询显示目的地2的响应时间,目的地ID号为2对应的源数据库的初始化参数为LOG_ARCHIVE_DEST_2

SQL>SELECT FREQUENCY,DURATION FROM V$REDO_DEST_RESP_HISTOGRAM WHERE DEST_ID=2 ANDFREQUENCY > 1;

 

 FREQUENCY  DURATION

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

      1924          1

                    10                       2

                    1                          3

从上面的结果可以看出,响应时间为1秒的命中率为1924次,最大的响应时间是3秒,且只有一次。

        

2)  Redo源数据库执行以下SQL语句查询显示目的地2的最慢响应时间:

SQL> SELECT MAX(DURATION) FROMV$REDO_DEST_RESP_HISTOGRAM WHERE DEST_ID=2 AND FREQUENCY > 1;

 

MAX(DURATION)

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

3

        

3)在Redo源数据库执行以下SQL语句查询显示目的地2的最快响应时间:

                   SQL>SELECT MIN(DURATION) FROM V$REDO_DEST_RESP_HISTOGRAM WHERE DEST_ID=2 ANDFREQUENCY > 1;

 

MIN(DURATION)

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

           1

4 管理日志应用服务

1)  启动Redo Apple

执行下面的SQL语句在前台启动Redo Apple

SQL> alter database recover managed standby database;

 

执行以下SQL语句在后台启动RedoApple

SQL> alter database recover managed standbydatabase disconnect from session;

 

执行以下SQL语句在前台启动Redo 实时应用:

SQL> alter database recover managed standbydatabase using current logfile;

 

执行以下SQL语句在后台启动Redo 实时应用:

SQL> alter database recovermanaged standby database using current logfile disconnect from session;

        

2)  停止Redo Apple

执行以下的SQL语句停止Redo Apple

SQL> ALTERDATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

 

5 主备数据库切换

         DataGuard的切换有两种:Switchover(正常切换)和Failover(异常切换)

 

1  Switchover切换

         1)主数据库执行操作

 

步骤1 确保主库修改了相关参数fal_clientfal_serverstandby_file_managementDB_FILE_NAME_CONVERTLOG_FILE_NAME_CONVERT

 

步骤2 确保主库创建了standby logfile联机redo日志文件

 

步骤3执行以下SQL语句确定主数据库是否满足转换条件:

SQL>

Selectname,protection_mode,database_role,force_logging,open_mode,switchover_statusfrom gv$database;

 

NAME PROTECTION_MODE DATABASE_ROLE  FOR OPEN_MODE  SWITCHOVER_STATUS

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

ORCL      MAXIMUM   PERFORMANCE PRIMARY    YES READ WRITE   TO STANDBY

ORCL      MAXIMUM   PERFORMANCE PRIMARY    YES READ WRITE   TO STANDBY

 

显示TO STANDBY表示满足转换条件,如果显示SESSIONACTIVE表示还有活动的会话,需要关闭活动的会话再检查。

 

步骤4 停止RAC的其他节点,只保留一个节点

         SQL> show parameter instance_name

 

NAME                                TYPE        VALUE

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

instance_name                       string      orcl2

 

         SQL> shutdown immediate;

 

步骤5RAC主数据库节点1上执行以下SQL语句开始进行切换操作:

SQL> alter database commit to switchover to physical standby with session shutdown;

 

如果步骤1执行的结果显示SESSIONACTIVE,在切换的时候可以指定with session shutdown 子句强制关闭活动的会话。

 

SQL>

Selectname,protection_mode,database_role,force_logging,open_mode,switchover_statusfrom gv$database;

 

NAMEPROTECTION_MODE  DATABASE_ROLE  FOR OPEN_MODS WITCHOVER_STATUS

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

ORCL MAXIMUMPERFORMANCE  PHYSICALSTANDBY YES READ WRITE RECOVERY NEEDED

 

步骤6执行以下SQL语句确认Standby数据库是否满足切换条件:

SQL> selectswitchover_status from v$database;

 

SWITCHOVER_STATUS

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

TO PRIMARY

如果显示TO PRIMARY表示能将该Standby数据库转换为主数据库。

 

步骤7执行以下SQL语句切换Standby数据库为主数据库,并open

SQL> alterdatabase commit to switchover to primary;

 

SQL> alterdatabase open;

 

步骤8启动切换后的RAC备库日志应用模式

RAC备库执行以下SQL语句关闭RAC备库实例,启动RAC备库到日志应用模式:

[oracle@node1dbs]$ sqlplus / as sysdba

SQL> shutdownimmediate

 

[grid@node1 ~]$srvctl status database -d orcl

Instance orcl1is not running on node node1

Instance orcl2is not running on node node2

[grid@node1 ~]$srvctl start database -d orcl -o mount;

 

SQL> alterdatabase recover managed standby database using current logfile disconnect fromsession;

 

也可以打开数据库

 

SQL> alterdatabase recover managed standby database cancel;

[oracle@node1~]$ sqlplus / as sysdba

SQL> alterdatabase open;

 

[oracle@node2~]$ sqlplus / as sysdba

SQL> alter databaseopen;

SQL> alterdatabase recover managed standby database using current logfile disconnect fromsession;

 

上面的命令将数据库以只读的方式打开,并在后台启动日志实时应用。

 

步骤9执行以下SQL语句查看数据库转换后的角色:

SQL> selectdatabase_role from v$database;

 

DATABASE_ROLE

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

PHYSICAL STANDBY

 

以上输出表示主数据库已经转换成物理Standby数据库。

 

6 正常启动、关闭DG的流程

关闭

1)  执行如下SQL语句停止Standby数据库Redo日志的应用:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

2)  关闭主数据库

3)  关闭Standby数据库

开启

1)  启动Standby数据库

2)  启动主数据库

3)  开启Standby数据库的Redo日志应用

SQL> alter database recover managed standby database using currentlogfile disconnect from session;

 

安装时遇到的一个小问题

在备库RMAN还原控制文件时报以下错误

 

RMAN> restore standby controlfile from'/u01/rman_backup/standby_0eq3re6d_1_1.ctl';

 

Starting restore at 08-APR-15

using target database control file instead ofrecovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=22 device type=DISK

 

channel ORA_DISK_1: restoring control file

RMAN-00571:===========================================================

RMAN-00569: =============== ERROR MESSAGE STACKFOLLOWS ===============

RMAN-00571:===========================================================

RMAN-03002: failure of restore command at04/08/2015 07:14:16

RMAN-10038: database session for channelORA_DISK_1 terminated unexpectedly

 

再次执行

 

RMAN> restore standby controlfile from'/u01/rman_backup/standby_0eq3re6d_1_1.ctl';

 

Starting restore at 08-APR-15

using channel ORA_DISK_1

RMAN-00571:===========================================================

RMAN-00569: =============== ERROR MESSAGESTACK FOLLOWS ===============

RMAN-00571:===========================================================

RMAN-03002: failure of restore command at04/08/2015 07:47:14

RMAN-00600: internal error, arguments[10019] [krmxcr] [] [] []

RMAN-00600: internal error, arguments [10019][krmxcr] [] [] []

 

解决的方法是:

oracle用户添加到asmadmin组后恢复控制文件成功,原因可能是我的ASM磁盘属于asmadmin组,oracle不能对磁盘进行写入操作。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值