ORACLE12.2 DataGuard的搭建和切換測試

目錄

1、 問題背景 2

2、 環境準備 2

2.1、檢查主備掛載點 2

2.1.1、主站點 2

2.1.2、容災站點 2

2.1.3、結論 3

2.2、主容站點數據文件位置 3

2.2.1、主站點 3

2.2.2、容災站點 4

2.2.3、結論 5

2.3、強制日誌模式 5

2.3.1、主站點 5

2.3.2、結論 6

2.4、主庫歸檔模式 6

2.4.1、主站點 6

2.4.2、結論 6

2.5、主容監聽 6

2.5.1、主站點 6

2.5.2、容災站點 7

2.5.3、結論 8

2.6、tns檢查 8

2.6.1、主站點 8

2.6.2、容災站點 9

2.6.3、結論 9

2.7、檢查db_unique_name 10

2.7.1、主站點 10

2.7.2、容災站點 10

2.7.3、結論 10

2.8、數據庫dg相關參數 11

2.8.1、主站點 11

2.8.2、容災站點 11

2.8.3、結論 11

3、 執行步驟 12

3.1、主庫備份 12

3.1.1、主庫全備 12

3.1.2、備份主庫歸檔 12

3.1.3、備份主庫控制文件 12

3.2、拷貝備份到備庫 12

3.3、恢復備庫控制文件 12

3.4、恢復備庫 13

3.5、啓動備庫應用日誌 13

3.6、增加standby日誌組 13

3.7、驗證 14

3.7.1、主容狀態 14

3.7.2、進程檢查 15

3.7.3、備庫檢查裂縫 16

3.7.4、日誌應用檢查 16

3.7.5、驗證備庫數據一致性 17

3.7.6、測試表 18

4、 影響 19

 

  1. 問題背景

某現場生產環境下prov庫經常發生歸檔日誌滿,導致業務中斷的情況。現場找過來後覈查,在清理歸檔的時候檢查dg環境發現該庫沒有搭建dg環境。跟現場確認,該庫需要搭建dg環境。故整理該文檔,用於prov庫的dg搭建。

  1. 環境準備

2.1、檢查主備掛載點

2.1.1、主站點

provexppool/provexp     16T   3.8T    12T    25%    /provexp

provexppool             20T    36K    16T     1%    /provexppool

provdata02pool/provdata   6.0T    64G   5.9T     2%    /provdata02

provredopool/provredo   200G    12G   188G     7%    /provredo

provdata02pool         7.3T    31K   7.3T     1%    /provdata02pool

provredopool           245G    31K   233G     1%    /provredopool

provdata01pool/provdata   6.0T   239G   5.8T     4%    /provdata01

provdata01pool         7.3T    31K   7.1T     1%    /provdata01pool

provarchpool/provarch   600G    67G   533G    12%    /provarch

provarchpool           733G    31K   667G     1%    /provarchpool

2.1.2、容災站點

provexppool/provexp     16T   902M    16T     1%    /provexp

provdata02pool         7.3T    31K   7.3T     1%    /provdata02pool

provdata01pool/provdata01   6.0T    72G   5.9T     2%    /provdata01

provarchpool/provarch   600G    31K   600G     1%    /provarch

provredopool/provredo   200G   3.0G   197G     2%    /provredo

provexppool             20T    31K    20T     1%    /provexppool

provdata01pool         7.3T    31K   7.3T     1%    /provdata01pool

provredopool           245G    31K   242G     1%    /provredopool

provarchpool           733G    31K   733G     1%    /provarchpool

provdata01pool/provdata02   6.0T    20M   6.0T     1%    /provdata02

2.1.3、結論

主站點和容災站點prov庫的掛載點完全一致。

2.2、主容站點數據文件位置

2.2.1、主站點

SQL> select file_name,TABLESPACE_NAME from dba_data_files ;

 

FILE_NAME                                TABLESPACE_NAME

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

/provdata01/prov/system01.dbf            SYSTEM

/provdata01/prov/sysaux01.dbf            SYSAUX

/provdata01/prov/undotbs01.dbf           UNDOTBS1

/provdata01/prov/users01.dbf             USERS

/provdata01/prov/oss_index00.dbf         OSS_INDEX

/provdata01/prov/oss_data00.dbf          OSS_DATA

/provdata02/prov/oss_archive00.dbf       OSS_ARCHIVE

/provdata02/prov/idx_cc00.dbf            IDX_CC

/provdata01/prov/tab_cc00.dbf            TAB_CC

 

9 rows selected.

 

SQL>

 

SQL> select file_name,TABLESPACE_NAME from dba_temp_files ;

 

FILE_NAME                                TABLESPACE_NAME

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

/provdata01/prov/temp01.dbf              TEMP

 

SQL>

 

SQL> select member from v$logfile;

 

MEMBER

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

/provredo/prov/redo1_1.dbf

/provredo/prov/redo1_2.dbf

/provredo/prov/redo2_1.dbf

/provredo/prov/redo2_2.dbf

/provredo/prov/redo3_1.dbf

/provredo/prov/reod3_2.dbf

/provredo/prov/redo4_1.dbf

/provredo/prov/redo4_2.dbf

/provredo/prov/redo5_1.dbf

/provredo/prov/redo5_2.dbf

/provredo/prov/redo6_1.dbf

 

MEMBER

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

/provredo/prov/redo6_2.dbf

/provredo/prov/redo7_1.dbf

/provredo/prov/redo7_2.dbf

/provredo/prov/redo8_1.dbf

/provredo/prov/redo8_2.dbf

 

16 rows selected.

 

SQL>

2.2.2、容災站點

SQL> col file_name format a40

SQL> select file_name,TABLESPACE_NAME from dba_data_files ;

 

FILE_NAME                                TABLESPACE_NAME

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

/provdata01/prov/system01.dbf            SYSTEM

/provdata01/prov/sysaux01.dbf            SYSAUX

/provdata01/prov/undotbs01.dbf           UNDOTBS1

/provdata01/prov/users01.dbf             USERS

 

SQL>

SQL> select file_name,TABLESPACE_NAME from dba_temp_files ;

 

FILE_NAME                                TABLESPACE_NAME

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

/provdata01/prov/temp01.dbf              TEMP

 

SQL>

SQL> select member from v$logfile;

 

MEMBER

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

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------/provredo/prov/redo1_1.dbf

/provredo/prov/redo1_2.dbf

/provredo/prov/redo2_1.dbf

/provredo/prov/redo2_2.dbf

/provredo/prov/redo3_1.dbf

/provredo/prov/redo3_2.dbf

 

6 rows selected.

 

SQL>

2.2.3、結論

主站點和容災站點數據文件位置基本一致。

2.3、強制日誌模式

2.3.1、主站點

檢查主站點強制日誌模式

SQL> select force_logging from v$database;

 

FOR

---

NO

 

SQL>

看到主站點prov庫沒有開啓強制日誌模式,需要開啓。

2.3.2、結論

需要開啓強制日誌模式。

alter database force logging;

2.4、主庫歸檔模式

2.4.1、主站點

SQL> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /provarch/prov

Oldest online log sequence     2301

Next log sequence to archive   2308

Current log sequence           2308

SQL>

2.4.2、結論

主庫歸檔滿足。

2.5、主容監聽

2.5.1、主站點

ossdb02:[/oracle$]lsnrctl status LISTENER_prov

 

LSNRCTL for Solaris: Version 11.2.0.4.0 - Production on 17-MAR-2020 04:49:04

 

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

 

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=1xx.xxx.xxx.xxx)(PORT=1522)))

STATUS of the LISTENER

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

Alias                     LISTENER_prov

Version                   TNSLSNR for Solaris: Version 11.2.0.4.0 - Production

Start Date                15-SEP-2017 11:30:42

Uptime                    416 days 14 hr. 50 min. 29 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /oracle/product/112/network/admin/listener.ora

Listener Log File         /oracle/product/112/log/diag/tnslsnr/ossdb02/listener_prov/alert/log.xml

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=1xx.xxx.xxx.xxx)(PORT=1522)))

Services Summary...

Service "prov" has 1 instance(s).

  Instance "prov", status UNKNOWN, has 1 handler(s) for this service...

The command completed successfully

ossdb02:[/oracle$]

2.5.2、容災站點

dr-ossdb01:[/oracle/product/112/network/admin$]lsnrctl status LISTENER_prov

 

LSNRCTL for Solaris: Version 11.2.0.4.0 - Production on 17-MAR-2020 04:48:17

 

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

 

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=1xx.xxx.xxx.xxx)(PORT=1522)))

STATUS of the LISTENER

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

Alias                     LISTENER_prov

Version                   TNSLSNR for Solaris: Version 11.2.0.4.0 - Production

Start Date                09-JAN-2020 18:38:04

Uptime                    67 days 10 hr. 10 min. 12 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /oracle/product/112/network/admin/listener.ora

Listener Log File         /oracle/product/112/log/diag/tnslsnr/dr-ossdb01/listener_prov/alert/log.xml

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=1xx.xxx.xxx.xxx)(PORT=1522)))

Services Summary...

Service "prov" has 1 instance(s).

  Instance "prov", status UNKNOWN, has 1 handler(s) for this service...

The command completed successfully

2.5.3、結論

主容監聽正常。

2.6、tns檢查

2.6.1、主站點

[/oracle$]tnsping dr_prov

 

TNS Ping Utility for Solaris: Version 11.2.0.4.0 - Production on 17-MAR-2020 04:52:15

 

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

 

Used parameter files:

 

 

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 1xx.xxx.xxx.xxx)(PORT = 1522))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = prov)

))OK (30 msec)

[/oracle$]tnsping pr_prov

 

TNS Ping Utility for Solaris: Version 11.2.0.4.0 - Production on 17-MAR-2020 04:52:23

 

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

 

Used parameter files:

 

 

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 1xx.xxx.xxx.xxx)(PORT = 1522))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = prov)

))OK (10 msec)

2.6.2、容災站點

[/oracle/product/112/network/admin$]tnsping PR_PROV

 

TNS Ping Utility for Solaris: Version 11.2.0.4.0 - Production on 17-MAR-2020 04:51:42

 

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

 

Used parameter files:

 

 

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 1xx.xxx.xxx.xxx)(PORT = 1522))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = prov

)))OK (40 msec)

[/oracle/product/112/network/admin$]tnsping DR_PROV

 

TNS Ping Utility for Solaris: Version 11.2.0.4.0 - Production on 17-MAR-2020 04:51:54

 

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

 

Used parameter files:

 

 

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 1xx.xxx.xxx.xxx)(PORT = 1522))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = prov

)))OK (10 msec)

2.6.3、結論

主容站點tns配置正常。

 

2.7、檢查db_unique_name

2.7.1、主站點

SQL> show parameter name

 

NAME                                 TYPE        VALUE

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

cell_offloadgroup_name               string

db_file_name_convert                 string

db_name                              string      prov

db_unique_name                       string      prov

global_names                         boolean     FALSE

instance_name                        string      prov

lock_name_space                      string

log_file_name_convert                string

processor_group_name                 string

service_names                        string      prov

SQL>

 

2.7.2、容災站點

SQL> show parameter name

 

NAME                                 TYPE        VALUE

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

cell_offloadgroup_name               string

db_file_name_convert                 string

db_name                              string      prov

db_unique_name                       string      prov

global_names                         boolean     FALSE

instance_name                        string      prov

lock_name_space                      string

log_file_name_convert                string

processor_group_name                 string

service_names                        string      prov

SQL>

2.7.3、結論

需要更改db_unique_name。

主站點:

alter system set db_unique_name=pr_prov scope=spfile ;

容災站點:

alter system set db_unique_name=dr_prov scope=spfile ;

該更改需要重啓數據庫生效。

2.8、數據庫dg相關參數

2.8.1、主站點

alter system set fal_client='pr_prov' scope=both;

alter system set fal_server ='dr_prov' scope=both;

alter system set log_archive_config='DG_CONFIG=(pr_prov,dr_prov)' ;

alter system set log_archive_dest_1='LOCATION=/provarch/prov valid_for=(all_logfiles,all_roles) db_unique_name=pr_prov' scope=both;

alter system set log_archive_dest_2='SERVICE=dr_prov LGWR ASYNC valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=dr_prov' scope=both;

alter system set standby_file_management='AUTO' scope=both;

2.8.2、容災站點

alter system set fal_client='dr_prov' scope=both;

alter system set fal_server ='pr_prov' scope=both;

alter system set log_archive_config='DG_CONFIG=(dr_prov,pr_prov)' ;

alter system set log_archive_dest_1='LOCATION=/provarch/prov valid_for=(all_logfiles,all_roles) db_unique_name=dr_prov' scope=both;

alter system set log_archive_dest_2='SERVICE=pr_prov LGWR ASYNC valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=pr_prov' scope=both;

alter system set standby_file_management='AUTO' scope=both;

 

2.8.3、結論

以上參數可以直接改,無需重啓數據庫即可生效。

 

  1. 執行步驟

3.1、主庫備份

3.1.1、主庫全備

export ORACLE_SID=prov

rman target /

run {

allocate channel t1 type disk;

allocate channel t2 type disk;

backup full filesperset 6 format '/provexp/rmanprovfull/db_%d_%U' database;

sql 'alter system switch logfile';

release channel t1;

release channel t2;

}

3.1.2、備份主庫歸檔

RMAN>backup archivelog all format '/provexp/rmanprovfull/arch_%T_%s_%p.bak';

3.1.3、備份主庫控制文件

RMAN>backup device type disk format '/provexp/rmanprovfull/ctl_%U' current controlfile for standby;

3.2、拷貝備份到備庫

su - oracle

$scp /provexp/rmanprovfull/* 1xx.xxx.xxx.xxx:/provexp/rmanprovfull/

3.3、恢復備庫控制文件

重啓備庫至nomount狀態:

export ORACLE_SID=prov

sqlplus / as sysdba

sql>shutdown immediate;

sql>startup nomount;

Sql>quit

$rman target /

rman>restore controlfile from '/provexp/rmanprovfull/ctl_xxx';

啓動備庫到physical standby狀態

Sql>alter database mount standby database;

 

3.4、恢復備庫

export ORACLE_SID=prov

rman target /

Rman> run{

allocate channel t1 type disk;

allocate channel t2 type disk;

restore database;

release channel t1;

release channel t2;

}

 

3.5、啓動備庫應用日誌

Sql>alter database recover managed standby database disconnect from session;

3.6、增加standby日誌組

最好主庫備庫都加,大小和個數跟現有redo日誌大小和個數一致。

SQL> select group#,SEQUENCE#,BYTES,MEMBERS,status from v$log ;

 

    GROUP#  SEQUENCE#      BYTES    MEMBERS STATUS

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

         1         40   52428800          2 INACTIVE

         2         41   52428800          2 CURRENT

         3         39   52428800          2 INACTIVE

 

SQL>

SQL> select member from v$logfile;

 

MEMBER

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

/oradata/prov/redo01_01.log

/oradata/prov/redo01_02.log

/oradata/prov/redo02_01.log

/oradata/prov/redo02_02.log

/oradata/prov/redo03_01.log

/oradata/prov/redo03_02.log

 

6 rows selected.

 

 

SQL> alter database add standby logfile group 4('/oradata/prov/stdredo04_01.log','/oradata/prov/stdredo04_02.log') size 512m;

 

Database altered.

 

SQL> alter database add standby logfile group 5('/oradata/prov/stdredo05_01.log','/oradata/prov/stdredo05_02.log') size 512m;

 

Database altered.

 

SQL> alter database add standby logfile group 6('/oradata/prov/stdredo06_01.log','/oradata/prov/stdredo06_02.log') size 512m;

 

Database altered.

 

3.7、驗證

3.7.1、主容狀態

數據庫角色

主:

 

SQL> select database_role from v$database;

 

DATABASE_ROLE

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

PRIMARY

 

SQL>

容災站點:

SQL> select database_role from v$database;

 

DATABASE_ROLE

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

PHYSICAL STANDBY

 

SQL>

3.7.2、進程檢查

主:

SQL> select process,block#,blocks ,status ,sequence# from v$managed_standby;

 

PROCESS       BLOCK#     BLOCKS STATUS        SEQUENCE#

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

ARCH           55296       1572 CLOSING              38

ARCH           22528       1866 CLOSING              39

ARCH               0          0 CONNECTED             0

ARCH           53248       1871 CLOSING              37

LNS             6768          1 WRITING              40

 

SQL>

ARCH進程: 用於主庫上覆制redo log,從而生成歸檔日誌,當前狀態爲CLOSING表示該進程目前正在複製。

LNS進程: 用於在主庫上將主庫的歸檔日誌同步到備庫上,將歸檔日誌投遞給備庫上的RFS進程。

容災站點:

SQL> select process,block#,blocks ,status ,sequence# from v$managed_standby;

 

PROCESS       BLOCK#     BLOCKS STATUS        SEQUENCE#

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

ARCH               0          0 CONNECTED             0

ARCH               0          0 CONNECTED             0

ARCH               0          0 CONNECTED             0

ARCH               0          0 CONNECTED             0

RFS                0          0 IDLE                  0

RFS             6833          1 IDLE                 40

RFS                0          0 IDLE                  0

MRP0               0          0 WAIT_FOR_LOG         40

RFS                0          0 IDLE                  0

 

9 rows selected.

 

SQL>

FRS進程:用於備庫接收從主庫LNS進程或ARCH進程投遞過來的歸檔日誌。 ARCH 用於複製從主庫上同步過來的歸檔日誌。

MRP0用於應用歸檔日誌。  

 

3.7.3、備庫檢查裂縫

SQL> select * from v$archive_gap;

 

no rows selected

 

SQL>

如果DG環境日誌同步正常,則不會查到任何記錄,如果查出結果,則說明目前的DG環境歸檔日誌有裂縫,需要檢查相關日誌是否存在後應用

3.7.4、日誌應用檢查

 備庫查看當前日誌應用:

 

SQL> select name,SEQUENCE#,APPLIED from v$archived_log order by sequence#;

 

NAME                                                SEQUENCE# APPLIED

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

/oradata/provarch/1_34_1034939605.dbf                      34 YES

/oradata/provarch/1_35_1034939605.dbf                      35 YES

/oradata/provarch/1_36_1034939605.dbf                      36 YES

/oradata/provarch/1_37_1034939605.dbf                      37 YES

/oradata/provarch/1_38_1034939605.dbf                      38 YES

/oradata/provarch/1_39_1034939605.dbf                      39 YES

 

6 rows selected.

 

SQL>

應用到39號日誌了。

主庫:

SQL> alter system switch logfile ;

 

System altered.

 

SQL>

備庫:

SQL> select name,SEQUENCE#,APPLIED from v$archived_log order by sequence#;

 

NAME                                                SEQUENCE# APPLIED

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

/oradata/provarch/1_34_1034939605.dbf                      34 YES

/oradata/provarch/1_35_1034939605.dbf                      35 YES

/oradata/provarch/1_36_1034939605.dbf                      36 YES

/oradata/provarch/1_37_1034939605.dbf                      37 YES

/oradata/provarch/1_38_1034939605.dbf                      38 YES

/oradata/provarch/1_39_1034939605.dbf                      39 YES

/oradata/provarch/1_40_1034939605.dbf                      40 YES

 

7 rows selected.

 

SQL>

看到備庫日誌應用到40號了,說明日誌應用正常。

3.7.5、驗證備庫數據一致性

備庫正常狀態下都是mount狀態,並且同步應用日誌,此時無法查詢數據。如果需要查詢數據,可以先將備庫臨時修改爲read-only,待查詢完成之後再修改爲mount狀態。備庫在readonly的狀態下,如果要啓動日誌應用進程,則必須要有standby日誌,否則會報錯。這也就是需要3.6章節的原因。

修改爲read-only需要執行兩步:

取消備庫日誌應用

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

 

Database altered.

SQL> alter database open read only;    

 

Database altered.

 

SQL> select database_role, open_mode from v$database;

 

DATABASE_ROLE    OPEN_MODE

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

PHYSICAL STANDBY READ ONLY

啓動日誌應用進程

SQL> recover managed standby database using current logfile disconnect from session;

ORA-38500: USING CURRENT LOGFILE option not available without standby redo logs

這個表示要有standby日誌,在備庫是readonly的狀態下即可做3.6節的內容。

3.7.6、測試表

主:

SQL> select * from tmp_list_001 ;

 

        ID NAME

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

         1 wufan

         2 haha

 

SQL>

 

SQL> insert into tmp_list_001 values(3,'iwhalecloud');

 

1 row created.

 

SQL> commit ;

 

Commit complete.

 

SQL>

SQL> alter system switch logfile ;

 

System altered.

 

SQL>

容災站點:

SQL>  select * from tmp_list_001 ;

 

        ID NAME

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

         1 wufan

         2 haha

         3 iwhalecloud

 

SQL>

3.7.7、此時雙庫的狀態

主:

SQL> select database_role,OPEN_MODE from v$database ;

 

DATABASE_ROLE    OPEN_MODE

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

PRIMARY          READ WRITE

容:

SQL> select database_role,OPEN_MODE from v$database ;

 

DATABASE_ROLE    OPEN_MODE

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

PHYSICAL STANDBY READ ONLY WITH APPLY

  1. 影響

在修改db_unique_name的時候主庫需要停機使修改生效,以便配置後續的dg。停機時間在幾分鐘至10幾分鐘內。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章