oracle 12.2.0.1 使用 active dataguard broker 之一

os: centos 7.4
database:12.2.0.1 + dbf

手动配置dataguard比较繁琐,发生故障切换是需要人工介入。broker就是简化而诞生的。

oradb-node1 192.168.56.101 master

安装好了12.2.0.1 的软件,并创建了数据库
dataguard 所有节点的 db_name 是相同的,通过db_unique_name来区分彼此。

主库name相关

db_name:            orcl
db_unique_name:     orclp
net service name:   tns_orclp

修改 db_unique_name

SQL> alter system set db_unique_name='orclp' scope=spfile;

System altered.

修改 net service name

$ vi listener.ora 
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = /u01/app/oracle/product/12.2.0/db_1)
      (SID_NAME = rac01)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = orclp_DGMGRL)
      (ORACLE_HOME = /u01/app/oracle/product/12.2.0/db_1)
      (SID_NAME = rac01)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = oradb-node1)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
$ vi tnsnames.ora
tns_orclp =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oradb-node1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

tns_orcls1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oradb-node2)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )  

主库启用 force logging

SQL> alter database force logging;

Database altered.

主库启用 archivelog

SQL> archive log list;
Database log mode          No Archive Mode
Automatic archival         Disabled
Archive destination        /u01/app/oracle/product/12.2.0/db_1/dbs/arch
Oldest online log sequence     1
Current log sequence           2

SQL> alter system set log_archive_dest_1='location=/u01/app/oracle/archivelog' scope=spfile;
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;

执行 open pdb,确保处于 read write

SQL> show pdbs;

    CON_ID CON_NAME           OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
     2 PDB$SEED              READ ONLY  NO
     3 RAC01PDB           MOUNTED
SQL> alter pluggable database RAC01PDB open;

Pluggable database altered.

SQL> show pdbs;

    CON_ID CON_NAME           OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
     2 PDB$SEED              READ ONLY  NO
     3 RAC01PDB           READ WRITE NO

主库创建 standby redo logfile

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME      NEXT_CHANGE# NEXT_TIME           CON_ID
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------------- ------------ ------------------- ----------
     1      1          4  209715200    512      1 NO  CURRENT            1572343 2018-07-07 14:47:20   1.8447E+19                  0
     2      1          2  209715200    512      1 YES INACTIVE           1429048 2018-07-07 11:45:32      1472300 2018-07-07 14:44:53      0
     3      1          3  209715200    512      1 YES INACTIVE           1472300 2018-07-07 14:44:53      1572343 2018-07-07 14:47:20      0

SQL> col MEMBER format a40;
SQL> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER                                   IS_ CON_ID
---------- ------- ------- ---------------------------------------- --- ----------
     3     ONLINE  /u01/app/oracle/oradata/orcl/redo03.log          NO       0
     2     ONLINE  /u01/app/oracle/oradata/orcl/redo02.log          NO       0
     1     ONLINE  /u01/app/oracle/oradata/orcl/redo01.log          NO       0

最少添加n+1个standby redo logfile,完全可以比n+1多,如下面

alter database add standby logfile '/u01/app/oracle/oradata/standby_redo01.log' size 200M;
alter database add standby logfile '/u01/app/oracle/oradata/standby_redo02.log' size 200M;
alter database add standby logfile '/u01/app/oracle/oradata/standby_redo03.log' size 200M;
alter database add standby logfile '/u01/app/oracle/oradata/standby_redo04.log' size 200M;
alter database add standby logfile '/u01/app/oracle/oradata/standby_redo05.log' size 200M;

主库修改dataguard broker 参数

SQL> startup nomount;
ORACLE instance started.

Total System Global Area 1879048192 bytes
Fixed Size          8794072 bytes
Variable Size         553648168 bytes
Database Buffers     1308622848 bytes
Redo Buffers            7983104 bytes

SQL> show parameter dg_broker_config_file

NAME                     TYPE    VALUE
------------------------------------ ----------- ------------------------------
dg_broker_config_file1           string  /u01/app/oracle/product/12.2.0
                         /db_1/dbs/dr1orclp.dat
dg_broker_config_file2           string  /u01/app/oracle/product/12.2.0
                         /db_1/dbs/dr2orclp.dat

SQL> alter system set dg_broker_start=true;

System altered.

主库的一些参数

*.db_name='orcl'
*.db_unique_name='orclp'
*.log_archive_dest_1='location=/u01/app/oracle/archivelog valid_for=(all_logfiles,all_roles) db_unique_name=orclp'
*.log_archive_dest_state_1=enable
*.standby_file_management='auto'
*.db_file_name_convert='/u01/app/oracle/','/u01/app/oracle/'
*.log_file_name_convert='/u01/app/oracle/','/u01/app/oracle/'
*.remote_login_passwordfile='EXCLUSIVE'
*.dg_broker_start=true

oradb-node2 192.168.56.102 physical standby

安装好了12.2.0.1 的软件,不创建数据库,用duplicate命令从master拉过来

备库name相关

db_name:            orcl
db_unique_name:     orcls1
net service name:   tns_orcls1

修改 net service name

$ vi listener.ora 
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = /u01/app/oracle/product/12.2.0/db_1)
      (SID_NAME = rac01)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = orclp_DGMGRL)
      (ORACLE_HOME = /u01/app/oracle/product/12.2.0/db_1)
      (SID_NAME = rac01)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = oradb-node2)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
$ vi tnsnames.ora
tns_orclp =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oradb-node1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

tns_orcls1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oradb-node2)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )  

上面的 listener.ora、tnsnames.ora 需要和master 保持一致。

备库目录相关

参考主库创建必要的目录

mkdir -p $ORACLE_BASE/admin/orcl/adump
mkdir -p $ORACLE_BASE/archivelog
mkdir -p $ORACLE_BASE/audit
mkdir -p $ORACLE_BASE/oradata/orcl
mkdir -p $ORACLE_BASE/oradata/pdbseed
mkdir -p $ORACLE_BASE/oradata/rac01pdb

备库拷贝master 的password file

$scp ./orapwrac01 oracle@192.168.56.102:/u01/app/oracle/product/12.2.0/db_1/dbs

备库修改dataguard broker 参数

SQL> startup nomount;
ORACLE instance started.

Total System Global Area 1879048192 bytes
Fixed Size          8794072 bytes
Variable Size         553648168 bytes
Database Buffers     1308622848 bytes
Redo Buffers            7983104 bytes

SQL> show parameter dg_broker_config_file

NAME                     TYPE    VALUE
------------------------------------ ----------- ------------------------------
dg_broker_config_file1           string  /u01/app/oracle/product/12.2.0
                         /db_1/dbs/dr1orclp.dat
dg_broker_config_file2           string  /u01/app/oracle/product/12.2.0
                         /db_1/dbs/dr2orclp.dat

SQL> alter system set dg_broker_start=true;

System altered.

备库的一些参数

*.db_name='orcl'
*.db_unique_name='orcls1'
*.log_archive_dest_1='location=/u01/app/oracle/archivelog valid_for=(all_logfiles,all_roles) db_unique_name=orcls1'
*.log_archive_dest_state_1=enable
*.standby_file_management='auto'
*.db_file_name_convert='/u01/app/oracle/','/u01/app/oracle/'
*.log_file_name_convert='/u01/app/oracle/','/u01/app/oracle/'
*.remote_login_passwordfile='EXCLUSIVE'
*.dg_broker_start=true

参照上一篇博文配置到duplicate database完成(force logging,且不应用real-time apply),然后就可以配置 dg broker了。

dataguard broker 设置

在主库、备库或者另外一台独立的机器都可以设置。
本次操作是在备库上。

创建

$ which dgmgrl
/u01/app/oracle/product/12.2.0/db_1/bin/dgmgrl
$ dgmgrl
DGMGRL for Linux: Release 12.2.0.1.0 - Production on Sat Jul 7 18:44:38 2018

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
DGMGRL> 
DGMGRL> connect sys/oracleoracle@tns_orclp     
Connected to "orclp"
Connected as SYSDBA.

DGMGRL> help create;

Creates a broker configuration

Syntax:

  CREATE CONFIGURATION <configuration name> [AS] 
    PRIMARY DATABASE IS <database name>
    CONNECT IDENTIFIER IS <connect identifier>;

DGMGRL> create configuration dgconf as primary database is orclp connect identifier is tns_orclp;
Configuration "dgconf" created with primary database "orclp"
DGMGRL>       

增加备库

DGMGRL> help add

Adds a member to the broker configuration

Syntax:

  ADD { RECOVERY_APPLIANCE | DATABASE | FAR_SYNC } <object name>
    [AS CONNECT IDENTIFIER IS <connect identifier>];

DGMGRL>
DGMGRL> add database orcls1 as connect identifier is tns_orcls1;
Database "orcls1" added
DGMGRL> enable configuration
Enabled.

查看

master 节点的参数修改

log_archive_dest_2           string  service="tns_orcls1", ASYNC NO
                         AFFIRM delay=0 optional compre
                         ssion=disable max_failure=0 ma
                         x_connections=1 reopen=300 db_
                         unique_name="orcls1" net_timeo
                         ut=30, valid_for=(online_logfi
                         le,all_roles)

show configuration

DGMGRL> show configuration;

Configuration - dgconf

  Protection Mode: MaxPerformance
  Members:
  orclp  - Primary database
    orcls1 - Physical standby database 

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS   (status updated 29 seconds ago)

DGMGRL> show configuration verbose;

Configuration - dgconf

  Protection Mode: MaxPerformance
  Members:
  orclp  - Primary database
    orcls1 - Physical standby database 

  Properties:
    FastStartFailoverThreshold      = '30'
    OperationTimeout                = '30'
    TraceLevel                      = 'USER'
    FastStartFailoverLagLimit       = '30'
    CommunicationTimeout            = '180'
    ObserverReconnect               = '0'
    FastStartFailoverAutoReinstate  = 'TRUE'
    FastStartFailoverPmyShutdown    = 'TRUE'
    BystandersFollowRoleChange      = 'ALL'
    ObserverOverride                = 'FALSE'
    ExternalDestination1            = ''
    ExternalDestination2            = ''
    PrimaryLostWriteAction          = 'CONTINUE'
    ConfigurationWideServiceName    = 'orcl_CFG'

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS

show database verbose

DGMGRL> show database verbose orclp;

Database - orclp

  Role:               PRIMARY
  Intended State:     TRANSPORT-ON
  Instance(s):
    rac01

  Properties:
    DGConnectIdentifier             = 'tns_orclp'
    ObserverConnectIdentifier       = ''
    LogXptMode                      = 'ASYNC'
    RedoRoutes                      = ''
    DelayMins                       = '0'
    Binding                         = 'optional'
    MaxFailure                      = '0'
    MaxConnections                  = '1'
    ReopenSecs                      = '300'
    NetTimeout                      = '30'
    RedoCompression                 = 'DISABLE'
    LogShipping                     = 'ON'
    PreferredApplyInstance          = ''
    ApplyInstanceTimeout            = '0'
    ApplyLagThreshold               = '30'
    TransportLagThreshold           = '30'
    TransportDisconnectedThreshold  = '30'
    ApplyParallel                   = 'AUTO'
    ApplyInstances                  = '0'
    StandbyFileManagement           = 'auto'
    ArchiveLagTarget                = '0'
    LogArchiveMaxProcesses          = '4'
    LogArchiveMinSucceedDest        = '1'
    DataGuardSyncLatency            = '0'
    DbFileNameConvert               = '/u01/app/oracle/, /u01/app/oracle/'
    LogFileNameConvert              = '/u01/app/oracle/, /u01/app/oracle/'
    FastStartFailoverTarget         = ''
    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    SendQEntries                    = '(monitor)'
    LogXptStatus                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
    PreferredObserverHosts          = ''
    StaticConnectIdentifier         = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oradb-node1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orclp_DGMGRL)(INSTANCE_NAME=rac01)(SERVER=DEDICATED)))'
    StandbyArchiveLocation          = '/u01/app/oracle/archivelog'
    AlternateLocation               = ''
    LogArchiveTrace                 = '0'
    LogArchiveFormat                = '%t_%s_%r.dbf'
    TopWaitEvents                   = '(monitor)'

  Log file locations:
    Alert log               : /u01/app/oracle/diag/rdbms/orclp/rac01/trace/alert_rac01.log
    Data Guard Broker log   : /u01/app/oracle/diag/rdbms/orclp/rac01/trace/drcrac01.log

Database Status:
SUCCESS
DGMGRL> show database verbose orcls1;

Database - orcls1

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 1 second ago)
  Apply Lag:          0 seconds (computed 1 second ago)
  Average Apply Rate: 0 Byte/s
  Active Apply Rate:  0 Byte/s
  Maximum Apply Rate: 0 Byte/s
  Real Time Query:    OFF
  Instance(s):
    rac01

  Properties:
    DGConnectIdentifier             = 'tns_orcls1'
    ObserverConnectIdentifier       = ''
    LogXptMode                      = 'ASYNC'
    RedoRoutes                      = ''
    DelayMins                       = '0'
    Binding                         = 'optional'
    MaxFailure                      = '0'
    MaxConnections                  = '1'
    ReopenSecs                      = '300'
    NetTimeout                      = '30'
    RedoCompression                 = 'DISABLE'
    LogShipping                     = 'ON'
    PreferredApplyInstance          = ''
    ApplyInstanceTimeout            = '0'
    ApplyLagThreshold               = '30'
    TransportLagThreshold           = '30'
    TransportDisconnectedThreshold  = '30'
    ApplyParallel                   = 'AUTO'
    ApplyInstances                  = '0'
    StandbyFileManagement           = 'AUTO'
    ArchiveLagTarget                = '0'
    LogArchiveMaxProcesses          = '4'
    LogArchiveMinSucceedDest        = '1'
    DataGuardSyncLatency            = '0'
    DbFileNameConvert               = '/u01/app/oracle/, /u01/app/oracle/'
    LogFileNameConvert              = '/u01/app/oracle/, /u01/app/oracle/'
    FastStartFailoverTarget         = ''
    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    SendQEntries                    = '(monitor)'
    LogXptStatus                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
    PreferredObserverHosts          = ''
    StaticConnectIdentifier         = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oradb-node2)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcls1_DGMGRL)(INSTANCE_NAME=rac01)(SERVER=DEDICATED)))'
    StandbyArchiveLocation          = '/u01/app/oracle/archivelog'
    AlternateLocation               = ''
    LogArchiveTrace                 = '0'
    LogArchiveFormat                = '%t_%s_%r.dbf'
    TopWaitEvents                   = '(monitor)'

  Log file locations:
    Alert log               : /u01/app/oracle/diag/rdbms/orcls1/rac01/trace/alert_rac01.log
    Data Guard Broker log   : /u01/app/oracle/diag/rdbms/orcls1/rac01/trace/drcrac01.log

Database Status:
SUCCESS

参考:
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/high-availability.html

猜你喜欢

转载自blog.csdn.net/ctypyb2002/article/details/80958923