【DataGuard安裝】Oracle單實例到RAC用duplicate active database做DataGuard之二

說明

本文較爲詳細的記錄了操作過程,在做完DG後,進行了2次switchover,最後以ActiveData Guard的方式打開了備庫。

 

其他文章:

下面一篇同一臺機器上使用duplicate創建DG的簡要說明

使用duplicate fromactive database創建Active Data Guard -主要過程說明

下面一篇和本文類似,方法略有不同,記錄的較爲粗略。

Oracle單實例到RAC用duplicate active database做DataGuard之一

 

1.源端:(11g單實例)

IP:                     192.168.114.176

Hostname:   dgh1

db_unique_name:        tandb

 

2.目標端:(11gRAC)

IP:                     192.168.20.241,  192.168,20.242

VIP:                  192.168.20.243,  192.168,20.244

Scan-ip:            192.168.20.245

Hostname:   racnode1,racnode2

db_unique_name:        dgdb

 

3.此次DG的創建通過duplicatetarget database for standby from active database創建DG

4.數據庫版本,兩端都是11.2.0.4

  

配置主庫

源端參數:

如果使用了MEMORY_TARGET ,必須大於752M

源端必須爲歸檔模式。

SQL>  ALTER DATABASE FORCE LOGGING;
查看主庫當前是否爲force logging:
SQL> select force_logging fromv$database;
SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG= 'DG_CONFIG=(tandb,dgdb)' scope=both;
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_1= 'LOCATION=/u02/arch1/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=tandb';
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_2= 'SERVICE=dgdb LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)db_unique_name=dgdb' scope=both;
SQL> alter system set log_archive_format= '%t_%s_%r.arc' scope=spfile;
SQL> alter system set standby_file_management=auto;

--standby_file_management=auto:主庫有表空間變動時,能夠自動同步到備庫。


重啓數據庫

靜態監聽

LISTENER =
 (DESCRIPTION_LIST =
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = dgh1.localdomain)(PORT = 1521))
     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
 
SID_LIST_LISTENER=
 (SID_LIST=
    (SID_DESC=
       (GLOBAL_DBNAME=tandb)
       (SID_NAME=tandb)
       (ORACLE_HOME=/u02/oracle/product/11.2.0/dbhome_1)
     )
   )

TNSNAMES

TANDB =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST =dgh1.localdomain)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = tandb)
    )
  )
 
dgdb =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(host = 192.168.20.243)(PORT = 1522))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (service_name = dgdb)
    )
  )

--暫時只連接到節點1

LOG

alter database add logfile thread 2 group 4('/u02/oracle/oradata/tandb/redo04.log') size 50m;
alter database add logfile thread 2 group 5('/u02/oracle/oradata/tandb/redo05.log') size 50m;
alter database add logfile thread 2 group 6('/u02/oracle/oradata/tandb/redo06.log') size 50m;
SQL> selectgroup#,thread#,bytes/1024/1024 MB ,members from V$log;
 
   GROUP#    THREAD#         MB   MEMBERS
---------- ---------- ---------- ----------
        1          1         50          1
        2          1         50          1
        3          1         50          1
        4          2         50          1
        5          2        50          1
        6          2         50          1

STANDBYLOG

alter database add standby logfile thread 1group 7 ('/u02/oracle/oradata/tandb/s_redo07.log') size 50m;
alter database add standby logfile thread 1group 8 ('/u02/oracle/oradata/tandb/s_redo08.log') size 50m;
alter database add standby logfile thread 1group 9 ('/u02/oracle/oradata/tandb/s_redo09.log') size 50m;
alter database add standby logfile thread 1group 10 ('/u02/oracle/oradata/tandb/s_redo10.log') size 50m;
alter database add standby logfile thread 2group 11 ('/u02/oracle/oradata/tandb/s_redo11.log') size 50m;
alter database add standby logfile thread 2group 12 ('/u02/oracle/oradata/tandb/s_redo12.log') size 50m;
alter database add standby logfile thread 2group 13 ('/u02/oracle/oradata/tandb/s_redo13.log') size 50m;
alter database add standby logfile thread 2group 14 ('/u02/oracle/oradata/tandb/s_redo14.log') size 50m;
SQL> selectgroup#,thread#,bytes/1024/1024 MB,status,used from V$standby_log;
 
   GROUP#    THREAD#         MB STATUS           USED
---------- ---------- ---------- --------------------
        7          1         50 UNASSIGNED          0
        8          1         50 UNASSIGNED          0
        9          1         50 UNASSIGNED          0
       10          1         50 UNASSIGNED          0
       11          2         50 UNASSIGNED          0
       12          2         50 UNASSIGNED          0
       13          2         50 UNASSIGNED          0
       14          2         50 UNASSIGNED          0

UNDOTABLESPACE

SQL> create undo tablespace undotbs2datafile '/u02/oracle/oradata/tandb/undotbs02.dbf' size 50m;
 
SQL> select SWITCHOVER_STATUS,PROTECTION_MODE,DATABASE_ROLE,open_mode from V$database;
 
SWITCHOVER_STATUS    PROTECTION_MODE      DATABASE_ROLE    OPEN_MODE
-------------------- ------------------------------------ --------------------
FAILED DESTINATION   MAXIMUM PERFORMANCE  PRIMARY         READ WRITE

目標端備庫配置

創建密碼文件

將密碼文件從源端拷貝到目標端的節點1,節點2

$ scp orapwtandb [email protected]:/u01/apps/oracle/product/11.2.0/dbhome_1/dbs/

$ scp orapwtandb [email protected]:/u01/apps/oracle/product/11.2.0/dbhome_1/dbs/

在各自節點修改名稱

$ mv orapwtandb orapwtandb1

$ mv orapwtandb orapwtandb2

 

增加監聽

Grid用戶下,listener.ora文件中新增以下內容

節點1:
LISTENER2 =
 (DESCRIPTION_LIST =
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(PORT = 1522))
     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
    )
  )
 
SID_LIST_LISTENER2=
 (SID_LIST=
    (SID_DESC=
       (GLOBAL_DBNAME=dgdb)
       (SID_NAME=tandb1)
       (ORACLE_HOME=/u01/apps/oracle/product/11.2.0/dbhome_1)
     )
   )
節點2:
LISTENER2 =
 (DESCRIPTION_LIST =
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(PORT = 1522))
     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
    )
  )
SID_LIST_LISTENER2=
 (SID_LIST=
    (SID_DESC=
       (GLOBAL_DBNAME=dgdb)
       (SID_NAME=tandb2)
       (ORACLE_HOME=/u01/apps/oracle/product/11.2.0/dbhome_1)
     )
   )

tnsnames

oracle用戶下,2個節點都新增如下內容。

TANDB =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.114.176)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = tandb)
    )
  )
 
dgdb =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(host = 192.168.20.245)(PORT = 1522))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (service_name = dgdb)
    )
  )

在節點1上創建參數文件

 

[oracle@racnode1 dbs]$ more inittandb1.ora

db_name=tandb
db_unique_name=dgdb
CONTROL_FILES='+DATA'
db_create_file_dest='+DATA'
log_archive_config='DG_CONFIG=(tandb,dgdb)'
db_file_name_convert='/u02/oracle/oradata/tandb/','+DATA/','tandb','dgdb'
log_file_name_convert='/u02/oracle/oradata/tandb/','+DATA/'
log_archive_format= %t_%s_%r.arc
log_archive_dest_1='location=+DATAvalid_for=(all_logfiles,all_roles) db_unique_name=dgdb'
log_archive_dest_2='service=tandb asyncvalid_for=(online_logfiles,primary_role) db_unique_name=tandb'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
STANDBY_FILE_MANAGEMENT=AUTO
cluster_database=true
cluster_database_instances=2
compatible=11.2.0.4.0
tandb1.instance_number=1
tandb2.instance_number=2

創建standby庫

 

節點1啓動到nomount

SQL> startup nomount;

[oracle@dgh1 ~]$ rman targetsys/oracle@tandb auxiliary sys/oracle@dgdb

RMAN> duplicate target database forstandby from active database;

 

創建共享的spfile文件

SQL> create pfile from spfile;

SQL> create spfile=' +DATA/DGDB/spfile.ora'from pfile;

 

ASMCMD> pwd

+DATA/DGDB/PARAMETERFILE

ASMCMD> ls

spfile.324.865357457

ASMCMD> mkalias spfile.324.865357457../spfiletandb.ora

 

註冊database到srvctl

 

SQL> shutdown immediate

[oracle@racnode1 ~]$ srvctl add database -ddgdb -o /u01/apps/oracle/product/11.2.0/dbhome_1/ -p +DATA/DGDB/spfiletandb.ora

[oracle@racnode1 ~]$ srvctl add instance -ddgdb -i tandb1 -n racnode1

[oracle@racnode1 ~]$ srvctl add instance -ddgdb -i tandb2 -n racnode2

用sqlplus啓動實例1,然後修改以下參數:

SQL> alter system set instance_number=1sid='tandb1' scope=spfile;
SQL> alter system set thread=1sid='tandb1' scope=spfile;
SQL>alter system setundo_tablespace='UNDOTBS1' sid='tandb1' scope=spfile;
SQL> alter system set instance_number=2sid='tandb2' scope=spfile;
SQL> alter system set thread=2sid='tandb2' scope=spfile;
SQL>alter system setundo_tablespace='UNDOTBS2' sid='tandb2' scope=spfile;

重啓數據庫

[oracle@racnode2 ~]$ srvctl stop database-d dgdb
[oracle@racnode2 ~]$ srvctl start database-d dgdb
[oracle@racnode2 ~]$ srvctl status database-d dgdb
Instance tandb1 is running on node racnode1
Instance tandb2 is running on node racnode2

啓動歸檔應用歸檔

 

SQL> alter database recover managedstandby database using current logfile disconnect from session;
 
SQL> select open_mode from V$database;
 
OPEN_MODE
--------------------
READ ONLY WITH APPLY
 
SQL> select sequence#,applied fromV$archived_log   order by sequence#;
 
SEQUENCE# APPLIED
---------- ---------
        5 YES
        6 YES
        7 YES
        8 IN-MEMORY


SWITCHOVER

第一次切換

切換間測試:切換前,主庫tandb創建一個,插入一條數據

SQL> insert into t1 values(11);
SQL> commit;
SQL> select * from t1;
      XID
----------
       11

將主庫tandb變爲備庫:

SQL> SELECT SWITCHOVER_STATUS FROMV$DATABASE;
 
SWITCHOVER_STATUS
--------------------
SESSIONS ACTIVE
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSIONSHUTDOWN;
SQL> shutdown abort
SQL> startup mount;

將備庫dgdb切換爲主庫

--節點1上操作:
SQL> SELECT SWITCHOVER_STATUS FROMV$DATABASE;
 
SWITCHOVER_STATUS
--------------------
TO PRIMARY
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
SQL> ALTER DATABASE OPEN;
--節點2也open
SQL> alter database open;
SQL> selectSWITCHOVER_STATUS,PROTECTION_MODE, DATABASE_ROLE,open_mode fromV$database;   
 
SWITCHOVER_STATUS    PROTECTION_MODE      DATABASE_ROLE    OPEN_MODE
-------------------- ------------------------------------ --------------------
SESSIONS ACTIVE      MAXIMUM PERFORMANCE  PRIMARY          READ WRITE
[grid@racnode1 ~]$ srvctl status database-d dgdb
Instance tandb1 is running on node racnode1
Instance tandb2 is running on node racnode2

在新的備庫tandb上啓用redo apply

SQL> ALTER DATABASE RECOVER MANAGEDSTANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
SQL> selectSWITCHOVER_STATUS,PROTECTION_MODE, DATABASE_ROLE,open_mode from V$database;
 
SWITCHOVER_STATUS    PROTECTION_MODE      DATABASE_ROLE    OPEN_MODE
-------------------- ------------------------------------ --------------------
NOT ALLOWED          MAXIMUM PERFORMANCE  PHYSICAL STANDBY MOUNTED

 

切換後新的主庫dgdb查詢,並插入數據

首先在節點1上插入數據:
SQL> select * from t1;
 
      XID
----------
       11
SQL> insert into t1 values(12);
SQL> commit;
 
節點2上也插入1條數據:
 
SQL> insert into t1 values(13);
SQL> commit;
SQL> select * from t1;
 
      XID
----------
       13
       12
       11

第二次切換

將主庫dgdb變爲備庫:

 

下面的操作在節點1上進行。

SQL> SELECT SWITCHOVER_STATUS FROMV$DATABASE;
 
SWITCHOVER_STATUS
--------------------
TO STANDBY
SQL> ALTER DATABASE COMMIT TO SWITCHOVERTO PHYSICAL STANDBY;
SQL>shutdown abort
SQL> startup mount;
節點2也啓至mount狀態
SQL> startup mount;

將備庫tandb切換爲主庫

SQL> conn /as sysdba
Connected.
SQL> SELECT SWITCHOVER_STATUS FROMV$DATABASE;
SWITCHOVER_STATUS
--------------------
TO PRIMARY
SQL> ALTER DATABASE COMMIT TO SWITCHOVERTO PRIMARY;
SQL> ALTER DATABASE OPEN;
SQL> selectSWITCHOVER_STATUS,PROTECTION_MODE, DATABASE_ROLE,open_mode from V$database;
 
SWITCHOVER_STATUS    PROTECTION_MODE      DATABASE_ROLE    OPEN_MODE
-------------------- ------------------------------------ --------------------
TO STANDBY           MAXIMUM PERFORMANCE  PRIMARY          READ WRITE

在備庫dgdb上啓用redo apply

先將2個節點都OPEN,做成active data guard

SQL> alter database open;
SQL> ALTER DATABASE RECOVER MANAGEDSTANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
SQL> selectSWITCHOVER_STATUS,PROTECTION_MODE, DATABASE_ROLE,open_mode from V$database;
SQL> select SWITCHOVER_STATUS,PROTECTION_MODE, DATABASE_ROLE,open_mode fromV$database;
 
SWITCHOVER_STATUS    PROTECTION_MODE      DATABASE_ROLE    OPEN_MODE
-------------------- ------------------------------------ --------------------
NOT ALLOWED          MAXIMUM PERFORMANCE  PHYSICAL STANDBY READ ONLY WITH APPLY

 

測試ACTIVE DATAGUARD

主庫以下操作:

SQL> select * from t1;
 
      XID
----------
       13
       12
       11
 
SQL> insert into t1 values(14);
Commit complete.
備庫查詢
SQL> select * from t1
      XID
----------
       13
       12
       11
       14

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