46
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Xmas] 世界中に配置した Oracle Database を Data Guard で直列に繋ぎ世界一周してみてみた

46
Last updated at Posted at 2022-12-24

今日はクリスマス、世界に愛と平和を贈ります。
Oracle Cloud Infrastructure (OCI) は 現在 50以上のリージョンがあります。
世界中に配置した Oracle Database を Data Guard (DG)で直列に繋ぎ世界一周して届けます。

■ 構成イメージ

東京リージョンは TOKYO と SHIBUYA を Loacal Data Guard として作成し、TOKYOを始点、SHIBUYAを終点となるように構成して、TOKYO → PHOENIX → ASHBURN → FRANKFURT → MUMBAI → SEOUL → OSAKA → SHIBUYA(Tokyo Region) へ世界一周するよう直列に REDO転送するように Data Guardを構成します。
構成4.jpg
Oracle Cloud Infrastructure(OCI)の Dynamic Routing Gateway(DRG)は Oracleバックボーンを使用して Global Network を構成することができます。
これにより、オンプレミス環境から1つの OCIリージョンに接続して、世界中のOCIリージョンに接続できます。
 ・リージョン間を Remote VCN Peering してみてみた

■ Data Guard 設定手順

● Data Guard設定

Data Guardの作成は次の手順で作成します。2台、4台、8台の構成も手順は変わりません。
1つ1つ心を込めて Standby Databaseを追加してData Guard Brokerで登録して制御します。

・Oracle Exadata 手順: 手動コマンドで Active Data Guard を構成してみてみた
・Oracle Database 手順: Data Guard 複数スタンバイ構成してみてみた
・Data Guard REDO転送制御手順: Data Guard Broker で複数スタンバイ・データベース構成の REDO転送を制御してみてみた

■ 直列カスケード設定

Data Guard Broker の RedoRoutes プロパティを使用して、リアルタイム・カスケードを構成することができます。
TOKYOデータベースでは、TOKYOがプライマリ・ロールである場合、同期転送モードを使用してPHOENIXデータベースにREDOを送信するように、RedoRoutesプロパティを指定する必要があります。
このルールにより、プライマリのTOKYOデータベース が PHOENIX以外のデータベースに直接REDOデータを送信することがなくなります。
PHOENIXデータベースでは、TOKYOがプライマリ・ロールの場合、PHOENIXが、TOKYOから受け取ったREDOをAHBURNに転送するように、RedoRoutesプロパティを指定し、他データベースも同様に直列転送するように設定します。
そのためには、RedoRoutesプロパティを次のように設定します。

● 直列カスケード設定

1) dgmgrl接続

[oracle@db-tokyo1 ~]$ dgmgrl sys/<Password>@$ORACLE_UNQNAME
  DGMGRL for Linux: Release 19.0.0.0.0 - Production on Sat Dec 24 10:22:42 2022
  Version 19.17.0.0.0

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

  Welcome to DGMGRL, type "help" for information.
  Connected to "CDB_TOKYO"
  Connected as SYSDBA.
DGMGRL>

オプションの[PRIORITY=n]を使用することで、複数あるRedo転送先 Databaseの優先度を設定することができます。Redo転送経路障害がある場合、次の優先度先きDatabaseへ転送することができます。障害パスのDatabaseは障害回復後に自動再同期処理されます。遠隔同期メンバーのデフォルト値は1で、非遠隔同期メンバーのデフォルト値は8です。

2) RedoRoutes確認

デフォルトは、プライマリ・データベースから全部のスタンバイ・データベースへRedo同期がされます。
現在、Tokyoから世界各地へ Redo同期がされています。
Tokyoから地球の裏まで地球を覆うように伝播されています。
花火のように
なんてロマンチック

DGMGRL> show configuration

Configuration - dg_config

  Protection Mode: MaxPerformance
  Members:
  CDB_TOKYO     - Primary database
    CDB_OSAKA     - Physical standby database
    CDB_SHIBUYA   - Physical standby database
    CDB_MUMBAI     - Physical standby database
    CDB_PHOENIX   - Physical standby database
    CDB_ASHBURN   - Physical standby database
    CDB_FRANKFURT - Physical standby database
    CDB_SEOUL     - Physical standby database

Fast-Start Failover:  Disabled

Configuration Status:
SUCCESS   (status updated 57 seconds ago)

3) 直列カスケード設定

DGMGRL> EDIT DATABASE 'CDB_TOKYO' SET PROPERTY 'RedoRoutes' = '(LOCAL : CDB_PHOENIX ASYNC)';
  Property "RedoRoutes" updated

DGMGRL> EDIT DATABASE 'CDB_PHOENIX' SET PROPERTY 'RedoRoutes' = '(CDB_TOKYO : CDB_ASHBURN ASYNC)';
  Property "RedoRoutes" updated

DGMGRL> EDIT DATABASE 'CDB_ASHBURN' SET PROPERTY 'RedoRoutes' = '(CDB_TOKYO : CDB_FRANKFURT ASYNC)';
  Property "RedoRoutes" updated

DGMGRL> EDIT DATABASE 'CDB_FRANKFURT' SET PROPERTY 'RedoRoutes' = '(CDB_TOKYO : CDB_MUMBAI ASYNC)';
  Property "RedoRoutes" updated

DGMGRL> EDIT DATABASE 'CDB_MUMBAI' SET PROPERTY 'RedoRoutes' = '(CDB_TOKYO : CDB_SEOUL ASYNC)';
  Property "RedoRoutes" updated

DGMGRL> EDIT DATABASE 'CDB_SEOUL' SET PROPERTY 'RedoRoutes' = '(CDB_TOKYO : CDB_OSAKA ASYNC)';
  Property "RedoRoutes" updated

DGMGRL> EDIT DATABASE 'CDB_OSAKA' SET PROPERTY 'RedoRoutes' = '(CDB_TOKYO : CDB_SHIBUYA ASYNC)';
  Property "RedoRoutes" updated

DGMGRL> EDIT DATABASE 'CDB_SHIBUYA' SET PROPERTY 'RedoRoutes' = '';
  Property "RedoRoutes" updated

● 直列カスケード設定DGMGRL確認

1) 直列カスケード構成確認

SHOW CONFIGURATIONコマンドを使用して、CDB_TOKYO から CDB_SHIBUYAまでネストして直列に REDOを伝搬することを確認

DGMGRL> show configuration

Configuration - dg_config

  Protection Mode: MaxPerformance
  Members:
  CDB_TOKYO     - Primary database
    CDB_PHOENIX   - Physical standby database (receiving current redo)
      CDB_ASHBURN   - Physical standby database (receiving current redo)
        CDB_FRANKFURT - Physical standby database (receiving current redo)
          CDB_MUMBAI     - Physical standby database (receiving current redo)
            CDB_SEOUL     - Physical standby database (receiving current redo)
              CDB_OSAKA     - Physical standby database (receiving current redo)
                CDB_SHIBUYA   - Physical standby database

Fast-Start Failover:  Disabled

Configuration Status:
SUCCESS   (status updated 58 seconds ago)

2) Database RedoRoutes設定確認

各Databaseの RedoRoutes パラメータが設定されていることを確認

・ TOKYO 確認
DGMGRL> show database verbose CDB_TOKYO

Database - CDB_TOKYO

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

  Properties:
    DGConnectIdentifier             = 'cdb_tokyo'
    ObserverConnectIdentifier       = ''
    FastStartFailoverTarget         = ''
    PreferredObserverHosts          = ''
    LogShipping                     = 'ON'
    RedoRoutes                      = '(LOCAL : CDB_PHOENIX ASYNC)'
    LogXptMode                      = 'ASYNC'
    DelayMins                       = '0'
    Binding                         = 'optional'
    MaxFailure                      = '0'
    ReopenSecs                      = '300'
    NetTimeout                      = '30'
    RedoCompression                 = 'DISABLE'
    PreferredApplyInstance          = ''
    ApplyInstanceTimeout            = '0'
    ApplyLagThreshold               = '30'
    TransportLagThreshold           = '30'
    TransportDisconnectedThreshold  = '30'
    ApplyParallel                   = 'AUTO'
    ApplyInstances                  = '0'
    StandbyFileManagement           = ''
    ArchiveLagTarget                = '0'
    LogArchiveMaxProcesses          = '0'
    LogArchiveMinSucceedDest        = '0'
    DataGuardSyncLatency            = '0'
    LogArchiveTrace                 = '0'
    LogArchiveFormat                = ''
    DbFileNameConvert               = ''
    LogFileNameConvert              = ''
    ArchiveLocation                 = ''
    AlternateLocation               = ''
    StandbyArchiveLocation          = ''
    StandbyAlternateLocation        = ''
    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    LogXptStatus                    = '(monitor)'
    SendQEntries                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
    HostName(*)
    StaticConnectIdentifier(*)
    TopWaitEvents(*)
    SidName(*)
    (*) - Please check specific instance for the property value

  Log file locations(*):
    (*) - Check specific instance for log file locations.

Database Status:
SUCCESS
・ PHOENIX 確認
DGMGRL> show database verbose CDB_PHOENIX

Database - CDB_PHOENIX

  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: 7.00 KByte/s
  Active Apply Rate:  1.07 MByte/s
  Maximum Apply Rate: 3.74 MByte/s
  Real Time Query:    ON
  Instance(s):
    CDB1
    CDB2 (apply instance)

  Properties:
    DGConnectIdentifier             = 'cdb_phoenix'
    ObserverConnectIdentifier       = ''
    FastStartFailoverTarget         = ''
    PreferredObserverHosts          = ''
    LogShipping                     = 'ON'
    RedoRoutes                      = '(CDB_TOKYO : CDB_ASHBURN ASYNC)'
    LogXptMode                      = 'ASYNC'
    DelayMins                       = '0'
    Binding                         = 'optional'
    MaxFailure                      = '0'
    ReopenSecs                      = '300'
    NetTimeout                      = '30'
    RedoCompression                 = 'DISABLE'
    PreferredApplyInstance          = ''
    ApplyInstanceTimeout            = '0'
    ApplyLagThreshold               = '30'
    TransportLagThreshold           = '30'
    TransportDisconnectedThreshold  = '30'
    ApplyParallel                   = 'AUTO'
    ApplyInstances                  = '0'
    StandbyFileManagement           = ''
    ArchiveLagTarget                = '0'
    LogArchiveMaxProcesses          = '0'
    LogArchiveMinSucceedDest        = '0'
    DataGuardSyncLatency            = '0'
    LogArchiveTrace                 = '0'
    LogArchiveFormat                = ''
    DbFileNameConvert               = ''
    LogFileNameConvert              = ''
    ArchiveLocation                 = ''
    AlternateLocation               = ''
    StandbyArchiveLocation          = ''
    StandbyAlternateLocation        = ''
    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    LogXptStatus                    = '(monitor)'
    SendQEntries                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
    HostName(*)
    StaticConnectIdentifier(*)
    TopWaitEvents(*)
    SidName(*)
    (*) - Please check specific instance for the property value

  Log file locations(*):
    (*) - Check specific instance for log file locations.

Database Status:
SUCCESS
・ ASHBURN 確認
DGMGRL> show database verbose CDB_ASHBURN

Database - CDB_ASHBURN

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 0 seconds ago)
  Apply Lag:          0 seconds (computed 1 second ago)
  Average Apply Rate: 7.00 KByte/s
  Active Apply Rate:  1.08 MByte/s
  Maximum Apply Rate: 3.86 MByte/s
  Real Time Query:    ON
  Instance(s):
    CDB1
    CDB2 (apply instance)

  Properties:
    DGConnectIdentifier             = 'cdb_ashburn'
    ObserverConnectIdentifier       = ''
    FastStartFailoverTarget         = ''
    PreferredObserverHosts          = ''
    LogShipping                     = 'ON'
    RedoRoutes                      = '(CDB_TOKYO : CDB_FRANKFURT ASYNC)'
    LogXptMode                      = 'ASYNC'
    DelayMins                       = '0'
    Binding                         = 'optional'
    MaxFailure                      = '0'
    ReopenSecs                      = '300'
    NetTimeout                      = '30'
    RedoCompression                 = 'DISABLE'
    PreferredApplyInstance          = ''
    ApplyInstanceTimeout            = '0'
    ApplyLagThreshold               = '30'
    TransportLagThreshold           = '30'
    TransportDisconnectedThreshold  = '30'
    ApplyParallel                   = 'AUTO'
    ApplyInstances                  = '0'
    StandbyFileManagement           = ''
    ArchiveLagTarget                = '0'
    LogArchiveMaxProcesses          = '0'
    LogArchiveMinSucceedDest        = '0'
    DataGuardSyncLatency            = '0'
    LogArchiveTrace                 = '0'
    LogArchiveFormat                = ''
    DbFileNameConvert               = ''
    LogFileNameConvert              = ''
    ArchiveLocation                 = ''
    AlternateLocation               = ''
    StandbyArchiveLocation          = ''
    StandbyAlternateLocation        = ''
    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    LogXptStatus                    = '(monitor)'
    SendQEntries                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
    HostName(*)
    StaticConnectIdentifier(*)
    TopWaitEvents(*)
    SidName(*)
    (*) - Please check specific instance for the property value

  Log file locations(*):
    (*) - Check specific instance for log file locations.

Database Status:
SUCCESS
・ FRANKFURT 確認
DGMGRL> show database verbose CDB_FRANKFURT

Database - CDB_FRANKFURT

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 0 seconds ago)
  Apply Lag:          0 seconds (computed 1 second ago)
  Average Apply Rate: 7.00 KByte/s
  Active Apply Rate:  1.06 MByte/s
  Maximum Apply Rate: 3.92 MByte/s
  Real Time Query:    ON
  Instance(s):
    CDB1 (apply instance)
    CDB2

  Properties:
    DGConnectIdentifier             = 'cdb_frankfurt'
    ObserverConnectIdentifier       = ''
    FastStartFailoverTarget         = ''
    PreferredObserverHosts          = ''
    LogShipping                     = 'ON'
    RedoRoutes                      = '(CDB_TOKYO : CDB_MUMBAI ASYNC)'
    LogXptMode                      = 'ASYNC'
    DelayMins                       = '0'
    Binding                         = 'optional'
    MaxFailure                      = '0'
    ReopenSecs                      = '300'
    NetTimeout                      = '30'
    RedoCompression                 = 'DISABLE'
    PreferredApplyInstance          = ''
    ApplyInstanceTimeout            = '0'
    ApplyLagThreshold               = '30'
    TransportLagThreshold           = '30'
    TransportDisconnectedThreshold  = '30'
    ApplyParallel                   = 'AUTO'
    ApplyInstances                  = '0'
    StandbyFileManagement           = ''
    ArchiveLagTarget                = '0'
    LogArchiveMaxProcesses          = '0'
    LogArchiveMinSucceedDest        = '0'
    DataGuardSyncLatency            = '0'
    LogArchiveTrace                 = '0'
    LogArchiveFormat                = ''
    DbFileNameConvert               = ''
    LogFileNameConvert              = ''
    ArchiveLocation                 = ''
    AlternateLocation               = ''
    StandbyArchiveLocation          = ''
    StandbyAlternateLocation        = ''
    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    LogXptStatus                    = '(monitor)'
    SendQEntries                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
    HostName(*)
    StaticConnectIdentifier(*)
    TopWaitEvents(*)
    SidName(*)
    (*) - Please check specific instance for the property value

  Log file locations(*):
    (*) - Check specific instance for log file locations.

Database Status:
SUCCESS
・ MUMBAI 確認
DGMGRL> show database verbose CDB_MUMBAI

Database - CDB_MUMBAI

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 0 seconds ago)
  Apply Lag:          0 seconds (computed 0 seconds ago)
  Average Apply Rate: 7.00 KByte/s
  Active Apply Rate:  1.05 MByte/s
  Maximum Apply Rate: 3.59 MByte/s
  Real Time Query:    ON
  Instance(s):
    CDB1 (apply instance)
    CDB2

  Properties:
    DGConnectIdentifier             = 'cdb_mumbai'
    ObserverConnectIdentifier       = ''
    FastStartFailoverTarget         = ''
    PreferredObserverHosts          = ''
    LogShipping                     = 'ON'
    RedoRoutes                      = '(CDB_TOKYO : CDB_SEOUL ASYNC)'
    LogXptMode                      = 'ASYNC'
    DelayMins                       = '0'
    Binding                         = 'optional'
    MaxFailure                      = '0'
    ReopenSecs                      = '300'
    NetTimeout                      = '30'
    RedoCompression                 = 'DISABLE'
    PreferredApplyInstance          = ''
    ApplyInstanceTimeout            = '0'
    ApplyLagThreshold               = '30'
    TransportLagThreshold           = '30'
    TransportDisconnectedThreshold  = '30'
    ApplyParallel                   = 'AUTO'
    ApplyInstances                  = '0'
    StandbyFileManagement           = ''
    ArchiveLagTarget                = '0'
    LogArchiveMaxProcesses          = '0'
    LogArchiveMinSucceedDest        = '0'
    DataGuardSyncLatency            = '0'
    LogArchiveTrace                 = '0'
    LogArchiveFormat                = ''
    DbFileNameConvert               = ''
    LogFileNameConvert              = ''
    ArchiveLocation                 = ''
    AlternateLocation               = ''
    StandbyArchiveLocation          = ''
    StandbyAlternateLocation        = ''
    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    LogXptStatus                    = '(monitor)'
    SendQEntries                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
    HostName(*)
    StaticConnectIdentifier(*)
    TopWaitEvents(*)
    SidName(*)
    (*) - Please check specific instance for the property value

  Log file locations(*):
    (*) - Check specific instance for log file locations.

Database Status:
SUCCESS
・ SEOUL 確認
DGMGRL> show database verbose CDB_SEOUL

Database - CDB_SEOUL

  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: 7.00 KByte/s
  Active Apply Rate:  1.07 MByte/s
  Maximum Apply Rate: 4.00 MByte/s
  Real Time Query:    ON
  Instance(s):
    CDB1 (apply instance)
    CDB2

  Properties:
    DGConnectIdentifier             = 'cdb_seoul'
    ObserverConnectIdentifier       = ''
    FastStartFailoverTarget         = ''
    PreferredObserverHosts          = ''
    LogShipping                     = 'ON'
    RedoRoutes                      = '(CDB_TOKYO : CDB_OSAKA ASYNC)'
    LogXptMode                      = 'ASYNC'
    DelayMins                       = '0'
    Binding                         = 'optional'
    MaxFailure                      = '0'
    ReopenSecs                      = '300'
    NetTimeout                      = '30'
    RedoCompression                 = 'DISABLE'
    PreferredApplyInstance          = ''
    ApplyInstanceTimeout            = '0'
    ApplyLagThreshold               = '30'
    TransportLagThreshold           = '30'
    TransportDisconnectedThreshold  = '30'
    ApplyParallel                   = 'AUTO'
    ApplyInstances                  = '0'
    StandbyFileManagement           = ''
    ArchiveLagTarget                = '0'
    LogArchiveMaxProcesses          = '0'
    LogArchiveMinSucceedDest        = '0'
    DataGuardSyncLatency            = '0'
    LogArchiveTrace                 = '0'
    LogArchiveFormat                = ''
    DbFileNameConvert               = ''
    LogFileNameConvert              = ''
    ArchiveLocation                 = ''
    AlternateLocation               = ''
    StandbyArchiveLocation          = ''
    StandbyAlternateLocation        = ''
    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    LogXptStatus                    = '(monitor)'
    SendQEntries                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
    HostName(*)
    StaticConnectIdentifier(*)
    TopWaitEvents(*)
    SidName(*)
    (*) - Please check specific instance for the property value

  Log file locations(*):
    (*) - Check specific instance for log file locations.

Database Status:
SUCCESS
・ OSAKA 確認
DGMGRL> show database verbose CDB_OSAKA

Database - CDB_OSAKA

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 0 seconds ago)
  Apply Lag:          0 seconds (computed 1 second ago)
  Average Apply Rate: 7.00 KByte/s
  Active Apply Rate:  1.04 MByte/s
  Maximum Apply Rate: 16.91 MByte/s
  Real Time Query:    ON
  Instance(s):
    CDB1 (apply instance)
    CDB2

  Properties:
    DGConnectIdentifier             = 'cdb_osaka'
    ObserverConnectIdentifier       = ''
    FastStartFailoverTarget         = ''
    PreferredObserverHosts          = ''
    LogShipping                     = 'ON'
    RedoRoutes                      = '(CDB_TOKYO : CDB_SHIBUYA ASYNC)'
    LogXptMode                      = 'ASYNC'
    DelayMins                       = '0'
    Binding                         = 'optional'
    MaxFailure                      = '0'
    ReopenSecs                      = '300'
    NetTimeout                      = '30'
    RedoCompression                 = 'DISABLE'
    PreferredApplyInstance          = ''
    ApplyInstanceTimeout            = '0'
    ApplyLagThreshold               = '30'
    TransportLagThreshold           = '30'
    TransportDisconnectedThreshold  = '30'
    ApplyParallel                   = 'AUTO'
    ApplyInstances                  = '0'
    StandbyFileManagement           = ''
    ArchiveLagTarget                = '0'
    LogArchiveMaxProcesses          = '0'
    LogArchiveMinSucceedDest        = '0'
    DataGuardSyncLatency            = '0'
    LogArchiveTrace                 = '0'
    LogArchiveFormat                = ''
    DbFileNameConvert               = ''
    LogFileNameConvert              = ''
    ArchiveLocation                 = ''
    AlternateLocation               = ''
    StandbyArchiveLocation          = ''
    StandbyAlternateLocation        = ''
    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    LogXptStatus                    = '(monitor)'
    SendQEntries                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
    HostName(*)
    StaticConnectIdentifier(*)
    TopWaitEvents(*)
    SidName(*)
    (*) - Please check specific instance for the property value

  Log file locations(*):
    (*) - Check specific instance for log file locations.

Database Status:
SUCCESS
・ SHIBUYA 確認
DGMGRL> show database verbose CDB_SHIBUYA

Database - CDB_SHIBUYA

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      5 seconds (computed 0 seconds ago)
  Apply Lag:          6 seconds (computed 0 seconds ago)
  Average Apply Rate: 7.00 KByte/s
  Active Apply Rate:  1.07 MByte/s
  Maximum Apply Rate: 3.26 MByte/s
  Real Time Query:    ON
  Instance(s):
    CDB1
    CDB2 (apply instance)

  Properties:
    DGConnectIdentifier             = 'cdb_shibuya'
    ObserverConnectIdentifier       = ''
    FastStartFailoverTarget         = ''
    PreferredObserverHosts          = ''
    LogShipping                     = 'ON'
    RedoRoutes                      = '(LOCAL : CDB_OSAKA ASYNC)'
    LogXptMode                      = 'ASYNC'
    DelayMins                       = '0'
    Binding                         = 'optional'
    MaxFailure                      = '0'
    ReopenSecs                      = '300'
    NetTimeout                      = '30'
    RedoCompression                 = 'DISABLE'
    PreferredApplyInstance          = ''
    ApplyInstanceTimeout            = '0'
    ApplyLagThreshold               = '30'
    TransportLagThreshold           = '30'
    TransportDisconnectedThreshold  = '30'
    ApplyParallel                   = 'AUTO'
    ApplyInstances                  = '0'
    StandbyFileManagement           = ''
    ArchiveLagTarget                = '0'
    LogArchiveMaxProcesses          = '0'
    LogArchiveMinSucceedDest        = '0'
    DataGuardSyncLatency            = '0'
    LogArchiveTrace                 = '0'
    LogArchiveFormat                = ''
    DbFileNameConvert               = ''
    LogFileNameConvert              = ''
    ArchiveLocation                 = ''
    AlternateLocation               = ''
    StandbyArchiveLocation          = ''
    StandbyAlternateLocation        = ''
    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    LogXptStatus                    = '(monitor)'
    SendQEntries                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
    HostName(*)
    StaticConnectIdentifier(*)
    TopWaitEvents(*)
    SidName(*)
    (*) - Please check specific instance for the property value

  Log file locations(*):
    (*) - Check specific instance for log file locations.

Database Status:
SUCCESS

● LOG_ARCHIVE パラメーター確認

Data Brokerによって、各データベースのLOG ARCHIVEに関するパラメータが設定されます。

1) LOG_ARCHIVE確認スクリプト作成

log_archive.txtスクリプト
>
[oracle@db-tokyo1 ~]$ cat log_archive.txt
#!/bin/bash

echo '### TOKYO ###'
sqlplus -s sys/<Password>@CDB_TOKYO as sysdba <<EOF
  set lin 250
  col NAME format a25
  col VALUE format a200
  select INST_ID, NAME, VALUE from gv\$parameter where NAME='log_archive_config' or NAME='log_archive_dest_2' order by NAME,INST_ID;
  exit
EOF

echo '### PHOENIX ###'
sqlplus -s sys/<Password>@CDB_PHOENIX as sysdba <<EOF
  set lin 250
  col NAME format a25
  col VALUE format a200
  select INST_ID, NAME, VALUE from gv\$parameter where NAME='log_archive_config' or NAME='log_archive_dest_2' order by NAME,INST_ID;
  exit
EOF

echo '### ASHBURN ###'
sqlplus -s sys/<Password>@CDB_ASHBURN as sysdba <<EOF
  set lin 250
  col NAME format a25
  col VALUE format a200
  select INST_ID, NAME, VALUE from gv\$parameter where NAME='log_archive_config' or NAME='log_archive_dest_2' order by NAME,INST_ID;
  exit
EOF

echo '### FRANKFURT ###'
sqlplus -s sys/<Password>@CDB_FRANKFURT as sysdba <<EOF
  set lin 250
  col NAME format a25
  col VALUE format a200
  select INST_ID, NAME, VALUE from gv\$parameter where NAME='log_archive_config' or NAME='log_archive_dest_2' order by NAME,INST_ID;
  exit
EOF

echo '### MUMBAI ###'
sqlplus -s sys/<Password>@CDB_MUMBAI as sysdba <<EOF
  set lin 250
  col NAME format a25
  col VALUE format a200
  select INST_ID, NAME, VALUE from gv\$parameter where NAME='log_archive_config' or NAME='log_archive_dest_2' order by NAME,INST_ID;
  exit
EOF

echo '### SEOUL ###'
sqlplus -s sys/<Password>@CDB_SEOUL as sysdba <<EOF
  set lin 250
  col NAME format a25
  col VALUE format a200
  select INST_ID, NAME, VALUE from gv\$parameter where NAME='log_archive_config' or NAME='log_archive_dest_2' order by NAME,INST_ID;
  exit
EOF

echo '### OSAKA ###'
sqlplus -s sys/<Password>@CDB_OSAKA as sysdba <<EOF
  set lin 250
  col NAME format a25
  col VALUE format a200
  select INST_ID, NAME, VALUE from gv\$parameter where NAME='log_archive_config' or NAME='log_archive_dest_2' order by NAME,INST_ID;
  exit
EOF

echo '### SHIBUYA ###'
sqlplus -s sys/<Password>@CDB_SHIBUYA as sysdba <<EOF
  set lin 250
  col NAME format a25
  col VALUE format a200
  select INST_ID, NAME, VALUE from gv\$parameter where NAME='log_archive_config' or NAME='log_archive_dest_2' order by NAME,INST_ID;
  exit
EOF

exit

2) LOG_ARCHIVE確認スクリプト実行と確認

[oracle@db-tokyo1 ~]$ bash log_archive.txt
### TOKYO ###

   INST_ID NAME 		     VALUE
---------- ------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
	 1 log_archive_config	     dg_config=(CDB_TOKYO,CDB_OSAKA,CDB_SHIBUYA,CDB_MUMBAI,CDB_PHOENIX,CDB_ASHBURN,CDB_FRANKFURT,CDB_SEOUL)
	 2 log_archive_config	     dg_config=(CDB_TOKYO,CDB_OSAKA,CDB_SHIBUYA,CDB_MUMBAI,CDB_PHOENIX,CDB_ASHBURN,CDB_FRANKFURT,CDB_SEOUL)
	 1 log_archive_dest_2	     service="cdb_phoenix", ASYNC NOAFFIRM delay=0 optional compression=disable max_failure=0 reopen=300 db_unique_name="CDB_PHOENIX" net_timeout=30, valid_for=(online_logfile,all_roles)
	 2 log_archive_dest_2	     service="cdb_phoenix", ASYNC NOAFFIRM delay=0 optional compression=disable max_failure=0 reopen=300 db_unique_name="CDB_PHOENIX" net_timeout=30, valid_for=(online_logfile,all_roles)

### PHOENIX ###

   INST_ID NAME 		     VALUE
---------- ------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
	 1 log_archive_config	     dg_config=(CDB_PHOENIX,CDB_TOKYO,CDB_SHIBUYA,CDB_OSAKA,CDB_MUMBAI,CDB_ASHBURN,CDB_FRANKFURT,CDB_SEOUL)
	 2 log_archive_config	     dg_config=(CDB_PHOENIX,CDB_TOKYO,CDB_SHIBUYA,CDB_OSAKA,CDB_MUMBAI,CDB_ASHBURN,CDB_FRANKFURT,CDB_SEOUL)
	 1 log_archive_dest_2	     service="cdb_ashburn", ASYNC NOAFFIRM delay=0 optional compression=disable max_failure=0 reopen=300 db_unique_name="CDB_ASHBURN" net_timeout=30, valid_for=(standby_logfile,all_roles)
	 2 log_archive_dest_2	     service="cdb_ashburn", ASYNC NOAFFIRM delay=0 optional compression=disable max_failure=0 reopen=300 db_unique_name="CDB_ASHBURN" net_timeout=30, valid_for=(standby_logfile,all_roles)

### ASHBURN ###

   INST_ID NAME 		     VALUE
---------- ------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
	 1 log_archive_config	     dg_config=(CDB_ASHBURN,CDB_TOKYO,CDB_SHIBUYA,CDB_OSAKA,CDB_MUMBAI,CDB_PHOENIX,CDB_FRANKFURT,CDB_SEOUL)
	 2 log_archive_config	     dg_config=(CDB_ASHBURN,CDB_TOKYO,CDB_SHIBUYA,CDB_OSAKA,CDB_MUMBAI,CDB_PHOENIX,CDB_FRANKFURT,CDB_SEOUL)
	 1 log_archive_dest_2	     service="cdb_frankfurt", ASYNC NOAFFIRM delay=0 optional compression=disable max_failure=0 reopen=300 db_unique_name="CDB_FRANKFURT" net_timeout=30, valid_for=(standby_logfile,all_roles)
	 2 log_archive_dest_2	     service="cdb_frankfurt", ASYNC NOAFFIRM delay=0 optional compression=disable max_failure=0 reopen=300 db_unique_name="CDB_FRANKFURT" net_timeout=30, valid_for=(standby_logfile,all_roles)

### FRANKFURT ###

   INST_ID NAME 		     VALUE
---------- ------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
	 1 log_archive_config	     dg_config=(CDB_FRANKFURT,CDB_TOKYO,CDB_SHIBUYA,CDB_OSAKA,CDB_MUMBAI,CDB_PHOENIX,CDB_ASHBURN,CDB_SEOUL)
	 2 log_archive_config	     dg_config=(CDB_FRANKFURT,CDB_TOKYO,CDB_SHIBUYA,CDB_OSAKA,CDB_MUMBAI,CDB_PHOENIX,CDB_ASHBURN,CDB_SEOUL)
	 1 log_archive_dest_2	     service="cdb_mumbai", ASYNC NOAFFIRM delay=0 optional compression=disable max_failure=0 reopen=300 db_unique_name="CDB_MUMBAI" net_timeout=30, valid_for=(standby_logfile,all_roles)
	 2 log_archive_dest_2	     service="cdb_mumbai", ASYNC NOAFFIRM delay=0 optional compression=disable max_failure=0 reopen=300 db_unique_name="CDB_MUMBAI" net_timeout=30, valid_for=(standby_logfile,all_roles)

### MUMBAI ###

   INST_ID NAME 		     VALUE
---------- ------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
	 1 log_archive_config	     dg_config=(CDB_MUMBAI,CDB_OSAKA,CDB_SHIBUYA,CDB_TOKYO,CDB_PHOENIX,CDB_ASHBURN,CDB_FRANKFURT,CDB_SEOUL)
	 2 log_archive_config	     dg_config=(CDB_MUMBAI,CDB_OSAKA,CDB_SHIBUYA,CDB_TOKYO,CDB_PHOENIX,CDB_ASHBURN,CDB_FRANKFURT,CDB_SEOUL)
	 1 log_archive_dest_2	     service="cdb_seoul", ASYNC NOAFFIRM delay=0 optional compression=disable max_failure=0 reopen=300 db_unique_name="CDB_SEOUL" net_timeout=30, valid_for=(standby_logfile,all_roles)
	 2 log_archive_dest_2	     service="cdb_seoul", ASYNC NOAFFIRM delay=0 optional compression=disable max_failure=0 reopen=300 db_unique_name="CDB_SEOUL" net_timeout=30, valid_for=(standby_logfile,all_roles)

### SEOUL ###

   INST_ID NAME 		     VALUE
---------- ------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
	 1 log_archive_config	     dg_config=(CDB_SEOUL,CDB_TOKYO,CDB_SHIBUYA,CDB_OSAKA,CDB_MUMBAI,CDB_PHOENIX,CDB_ASHBURN,CDB_FRANKFURT)
	 2 log_archive_config	     dg_config=(CDB_SEOUL,CDB_TOKYO,CDB_SHIBUYA,CDB_OSAKA,CDB_MUMBAI,CDB_PHOENIX,CDB_ASHBURN,CDB_FRANKFURT)
	 1 log_archive_dest_2	     service="cdb_osaka", ASYNC NOAFFIRM delay=0 optional compression=disable max_failure=0 reopen=300 db_unique_name="CDB_OSAKA" net_timeout=30, valid_for=(standby_logfile,all_roles)
	 2 log_archive_dest_2	     service="cdb_osaka", ASYNC NOAFFIRM delay=0 optional compression=disable max_failure=0 reopen=300 db_unique_name="CDB_OSAKA" net_timeout=30, valid_for=(standby_logfile,all_roles)

### OSAKA ###

   INST_ID NAME 		     VALUE
---------- ------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
	 1 log_archive_config	     dg_config=(CDB_OSAKA,CDB_TOKYO,CDB_SHIBUYA,CDB_MUMBAI,CDB_PHOENIX,CDB_ASHBURN,CDB_FRANKFURT,CDB_SEOUL)
	 2 log_archive_config	     dg_config=(CDB_OSAKA,CDB_TOKYO,CDB_SHIBUYA,CDB_MUMBAI,CDB_PHOENIX,CDB_ASHBURN,CDB_FRANKFURT,CDB_SEOUL)
	 1 log_archive_dest_2	     service="cdb_shibuya", ASYNC NOAFFIRM delay=0 optional compression=disable max_failure=0 reopen=300 db_unique_name="CDB_SHIBUYA" net_timeout=30, valid_for=(standby_logfile,all_roles)
	 2 log_archive_dest_2	     service="cdb_shibuya", ASYNC NOAFFIRM delay=0 optional compression=disable max_failure=0 reopen=300 db_unique_name="CDB_SHIBUYA" net_timeout=30, valid_for=(standby_logfile,all_roles)

### SHIBUYA ###

   INST_ID NAME 		     VALUE
---------- ------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
	 1 log_archive_config	     dg_config=(CDB_SHIBUYA,CDB_OSAKA,CDB_TOKYO,CDB_MUMBAI,CDB_PHOENIX,CDB_ASHBURN,CDB_FRANKFURT,CDB_SEOUL)
	 2 log_archive_config	     dg_config=(CDB_SHIBUYA,CDB_OSAKA,CDB_TOKYO,CDB_MUMBAI,CDB_PHOENIX,CDB_ASHBURN,CDB_FRANKFURT,CDB_SEOUL)
	 1 log_archive_dest_2
	 2 log_archive_dest_2

■ DB起動確認

次のようなスクリプトを作成して全Database起動と同期状態を確認します。

● Data Guard状態確認スクリプト作成

dg_statusスクリプト
[oracle@db-tokyo1 ~]$ cat dg_status.txt
#!/bin/bash

echo '### CDB_TOKYO ###'
sqlplus -s sys/<Password>@CDB_TOKYO as sysdba <<EOF
  set lin 200
  select INST_ID, DB_UNIQUE_NAME, database_role, open_mode, CURRENT_SCN from gv\$database;
  col NAME format a30
  select INST_ID, NAME, OPEN_MODE, CREATE_SCN from gv\$pdbs order by NAME,INST_ID;
  exit
EOF

echo '### CDB_PHOENIX ###'
sqlplus -s sys/<Password>@CDB_PHOENIX as sysdba <<EOF
  set lin 200
  select INST_ID, DB_UNIQUE_NAME, database_role, open_mode, CURRENT_SCN from gv\$database;
  col NAME format a30
  select INST_ID, NAME, OPEN_MODE, CREATE_SCN from gv\$pdbs order by NAME,INST_ID;
  exit
EOF

echo '### CDB_ASHBURN ###'
sqlplus -s sys/<Password>@CDB_ASHBURN as sysdba <<EOF
  set lin 200
  select INST_ID, DB_UNIQUE_NAME, database_role, open_mode, CURRENT_SCN from gv\$database;
  col NAME format a30
  select INST_ID, NAME, OPEN_MODE, CREATE_SCN from gv\$pdbs order by NAME,INST_ID;
  exit
EOF

echo '### CDB_FRANKFURT ###'
sqlplus -s sys/<Password>@CDB_FRANKFURT as sysdba <<EOF
  set lin 200
  select INST_ID, DB_UNIQUE_NAME, database_role, open_mode, CURRENT_SCN from gv\$database;
  col NAME format a30
  select INST_ID, NAME, OPEN_MODE, CREATE_SCN from gv\$pdbs order by NAME,INST_ID;
  exit
EOF

echo '### CDB_MUMBAI ###'
sqlplus -s sys/<Password>@CDB_MUMBAI as sysdba <<EOF
  set lin 200
  select INST_ID, DB_UNIQUE_NAME, database_role, open_mode, CURRENT_SCN from gv\$database;
  col NAME format a30
  select INST_ID, NAME, OPEN_MODE, CREATE_SCN from gv\$pdbs order by NAME,INST_ID;
  exit
EOF

echo '### CDB_SEOUL ###'
sqlplus -s sys/<Password>@CDB_SEOUL as sysdba <<EOF
  set lin 200
  select INST_ID, DB_UNIQUE_NAME, database_role, open_mode, CURRENT_SCN from gv\$database;
  col NAME format a30
  select INST_ID, NAME, OPEN_MODE, CREATE_SCN from gv\$pdbs order by NAME,INST_ID;
  exit
EOF

echo '### CDB_OSAKA ###'
sqlplus -s sys/<Password>@CDB_OSAKA as sysdba <<EOF
  set lin 200
  select INST_ID, DB_UNIQUE_NAME, database_role, open_mode, CURRENT_SCN from gv\$database;
  col NAME format a30
  select INST_ID, NAME, OPEN_MODE, CREATE_SCN from gv\$pdbs order by NAME,INST_ID;
  exit
EOF

echo '### CDB_SHIBUYA ###'
sqlplus -s sys/<Password>@CDB_SHIBUYA as sysdba <<EOF
  set lin 200
  select INST_ID, DB_UNIQUE_NAME, database_role, open_mode, CURRENT_SCN from gv\$database;
  col NAME format a30
  select INST_ID, NAME, OPEN_MODE, CREATE_SCN from gv\$pdbs order by NAME,INST_ID;
  exit
EOF

exit

● Data Guard状態確認スクリプト実行と確認

[oracle@db-tokyo1 ~]$ bash dg_status.txt
### CDB_TOKYO ###

   INST_ID DB_UNIQUE_NAME		  DATABASE_ROLE    OPEN_MODE		CURRENT_SCN
---------- ------------------------------ ---------------- -------------------- -----------
	 2 CDB_TOKYO			  PRIMARY	   READ WRITE		   44586345
	 1 CDB_TOKYO			  PRIMARY	   READ WRITE		   44586345


   INST_ID NAME 			  OPEN_MODE  CREATE_SCN
---------- ------------------------------ ---------- ----------
	 1 PDB				  READ WRITE   18888851
	 2 PDB				  READ WRITE   18888851
	 1 PDB$SEED			  READ ONLY	2479478
	 2 PDB$SEED			  READ ONLY	2479478

### CDB_PHOENIX ###

   INST_ID DB_UNIQUE_NAME		  DATABASE_ROLE    OPEN_MODE		CURRENT_SCN
---------- ------------------------------ ---------------- -------------------- -----------
	 1 CDB_PHOENIX			  PHYSICAL STANDBY READ ONLY WITH APPLY    44586346
	 2 CDB_PHOENIX			  PHYSICAL STANDBY READ ONLY WITH APPLY    44586346


   INST_ID NAME 			  OPEN_MODE  CREATE_SCN
---------- ------------------------------ ---------- ----------
	 1 PDB				  READ ONLY    18888851
	 2 PDB				  READ ONLY    18888851
	 1 PDB$SEED			  READ ONLY	2479478
	 2 PDB$SEED			  READ ONLY	2479478

### CDB_ASHBURN ###

   INST_ID DB_UNIQUE_NAME		  DATABASE_ROLE    OPEN_MODE		CURRENT_SCN
---------- ------------------------------ ---------------- -------------------- -----------
	 2 CDB_ASHBURN			  PHYSICAL STANDBY READ ONLY WITH APPLY    44586348
	 1 CDB_ASHBURN			  PHYSICAL STANDBY READ ONLY WITH APPLY    44586348


   INST_ID NAME 			  OPEN_MODE  CREATE_SCN
---------- ------------------------------ ---------- ----------
	 1 PDB				  READ ONLY    18888851
	 2 PDB				  READ ONLY    18888851
	 1 PDB$SEED			  READ ONLY	2479478
	 2 PDB$SEED			  READ ONLY	2479478

### CDB_FRANKFURT ###

   INST_ID DB_UNIQUE_NAME		  DATABASE_ROLE    OPEN_MODE		CURRENT_SCN
---------- ------------------------------ ---------------- -------------------- -----------
	 1 CDB_FRANKFURT		  PHYSICAL STANDBY READ ONLY WITH APPLY    44586356
	 2 CDB_FRANKFURT		  PHYSICAL STANDBY READ ONLY WITH APPLY    44586356


   INST_ID NAME 			  OPEN_MODE  CREATE_SCN
---------- ------------------------------ ---------- ----------
	 1 PDB				  READ ONLY    18888851
	 2 PDB				  READ ONLY    18888851
	 1 PDB$SEED			  READ ONLY	2479478
	 2 PDB$SEED			  READ ONLY	2479478

### CDB_MUMBAI ###

   INST_ID DB_UNIQUE_NAME		  DATABASE_ROLE    OPEN_MODE		CURRENT_SCN
---------- ------------------------------ ---------------- -------------------- -----------
	 2 CDB_MUMBAI			  PHYSICAL STANDBY READ ONLY WITH APPLY    44586356
	 1 CDB_MUMBAI			  PHYSICAL STANDBY READ ONLY WITH APPLY    44586356


   INST_ID NAME 			  OPEN_MODE  CREATE_SCN
---------- ------------------------------ ---------- ----------
	 1 PDB				  READ ONLY    18888851
	 2 PDB				  READ ONLY    18888851
	 1 PDB$SEED			  READ ONLY	2479478
	 2 PDB$SEED			  READ ONLY	2479478

### CDB_SEOUL ###

   INST_ID DB_UNIQUE_NAME		  DATABASE_ROLE    OPEN_MODE		CURRENT_SCN
---------- ------------------------------ ---------------- -------------------- -----------
	 2 CDB_SEOUL			  PHYSICAL STANDBY READ ONLY WITH APPLY    44586356
	 1 CDB_SEOUL			  PHYSICAL STANDBY READ ONLY WITH APPLY    44586356


   INST_ID NAME 			  OPEN_MODE  CREATE_SCN
---------- ------------------------------ ---------- ----------
	 1 PDB				  READ ONLY    18888851
	 2 PDB				  READ ONLY    18888851
	 1 PDB$SEED			  READ ONLY	2479478
	 2 PDB$SEED			  READ ONLY	2479478

### CDB_OSAKA ###

   INST_ID DB_UNIQUE_NAME		  DATABASE_ROLE    OPEN_MODE		CURRENT_SCN
---------- ------------------------------ ---------------- -------------------- -----------
	 2 CDB_OSAKA			  PHYSICAL STANDBY READ ONLY WITH APPLY    44586356
	 1 CDB_OSAKA			  PHYSICAL STANDBY READ ONLY WITH APPLY    44586356


   INST_ID NAME 			  OPEN_MODE  CREATE_SCN
---------- ------------------------------ ---------- ----------
	 1 PDB				  READ ONLY    18888851
	 2 PDB				  READ ONLY    18888851
	 1 PDB$SEED			  READ ONLY	2479478
	 2 PDB$SEED			  READ ONLY	2479478

### CDB_SHIBUYA ###

   INST_ID DB_UNIQUE_NAME		  DATABASE_ROLE    OPEN_MODE		CURRENT_SCN
---------- ------------------------------ ---------------- -------------------- -----------
	 2 CDB_SHIBUYA			  PHYSICAL STANDBY READ ONLY WITH APPLY    44586358
	 1 CDB_SHIBUYA			  PHYSICAL STANDBY READ ONLY WITH APPLY    44586358


   INST_ID NAME 			  OPEN_MODE  CREATE_SCN
---------- ------------------------------ ---------- ----------
	 1 PDB				  READ ONLY    18888851
	 2 PDB				  READ ONLY    18888851
	 1 PDB$SEED			  READ ONLY	2479478
	 2 PDB$SEED			  READ ONLY	2479478

■ 世界へ愛と平和を贈る

1) Tokyo Database接続

[oracle@db-tokyo1 ~]$ export NLS_LANG=Japanese_Japan.AL32UTF8
[oracle@db-tokyo1 ~]$ sqlplus SantaClaus/<Password>@TOKYO

  SQL*Plus: Release 19.0.0.0.0 - Production on 日 12月 25 00:000:00 2022
  Version 19.17.0.0.0

  Copyright (c) 1982, 2022, Oracle.  All rights reserved.


  Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production
  Version 19.17.0.0.0
  に接続されました。

SANTACLAUS@TOKYO SQL>

2) 世界TABLE作成

SANTACLAUS@TOKYO SQL> 
CREATE TABLE "世界"
  (
  val VARCHAR2(30),
  time TIMESTAMP WITH LOCAL TIME ZONE
  ) 
;

表が作成されました。

3) 愛と平和をINSERT

SANTACLAUS@TOKYO SQL> insert into "世界" (val, time) values ('平和', sysdate);

  1行が作成されました。

SANTACLAUS@TOKYO SQL> insert into "世界" (val, time) values ('愛', sysdate);

  1行が作成されました。

SANTACLAUS@TOKYO SQL> commit;

  コミットが完了しました。

4) 確認

SANTACLAUS@TOKYO SQL> SELECT * FROM "世界";

  VAL			       TIME
  -------------------- ------------------------------
  平和                  22-12-25 00:00:01.000000
  愛                   22-12-25 00:00:02.000000

● データ伝搬確認スクリプト作成

全リージョンの Databaseへ伝搬されていることを確認

world.txt スクリプト

[oracle@db-tokyo1 ~]$ cat world.txt
#!/bin/bash

echo '### TOKYO ###'
sqlplus -s SantaClaus/<Password>@TOKYO <<EOF
  ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH:MI:SS TZH:TZM';
  set lin 200
  col "Tokyo Time" format a30
  col val format a10
  SELECT val ,CAST(time AT TIME ZONE 'Asia/Tokyo' AS TIMESTAMP WITH TIME ZONE) AS "Tokyo Time" FROM "世界";
  exit
EOF

echo '### PHOENIX ###'
sqlplus -s SantaClaus/<Password>@PHOENIX <<EOF
  ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH:MI:SS TZH:TZM';
  set lin 200
  col "Phoenix Time" format a30
  col val format a10
  SELECT val ,CAST(time AT TIME ZONE 'America/Phoenix' AS TIMESTAMP WITH TIME ZONE) AS "Phoenix Time" FROM "世界";
  exit
EOF

echo '### ASHBURN ###'
sqlplus -s SantaClaus/<Password>@ASHBURN <<EOF
  ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH:MI:SS TZH:TZM';
  set lin 200
  col "US Central Time" format a30
  col val format a10
  SELECT val ,CAST(time AT TIME ZONE 'America/Chicago' AS TIMESTAMP WITH TIME ZONE) AS "US Central Time" FROM "世界";
  exit
EOF

echo '### FRANKFURT ###'
sqlplus -s SantaClaus/<Password>@FRANKFURT <<EOF
  ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH:MI:SS TZH:TZM';
  set lin 200
  col "Germany Time" format a30
  col val format a10
  SELECT val ,CAST(time AT TIME ZONE 'Europe/Berlin' AS TIMESTAMP WITH TIME ZONE) AS "Germany Time" FROM "世界";
  exit
EOF

echo '### MUMBAI ###'
sqlplus -s SantaClaus/<Password>@MUMBAI <<EOF
  ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH:MI:SS TZH:TZM';
  set lin 200
  col "India Time" format a30
  col val format a10
  SELECT val ,CAST(time AT TIME ZONE 'Asia/Calcutta' AS TIMESTAMP WITH TIME ZONE) AS "India Time" FROM "世界";
  exit
EOF

echo '### SEOUL ###'
sqlplus -s SantaClaus/<Password>@SEOUL <<EOF
  ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH:MI:SS TZH:TZM';
  set lin 200
  col "Seoul Time" format a30
  col val format a10
  SELECT val ,CAST(time AT TIME ZONE 'Asia/Seoul' AS TIMESTAMP WITH TIME ZONE) AS "Seoul Time" FROM "世界";
  exit
EOF

echo '### OSAKA ###'
sqlplus -s SantaClaus/<Password>@OSAKA <<EOF
  ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH:MI:SS TZH:TZM';
  set lin 200
  col "Osaka Time" format a30
  col val format a10
  SELECT val ,CAST(time AT TIME ZONE 'Asia/Tokyo' AS TIMESTAMP WITH TIME ZONE) AS "Osaka Time" FROM "世界";
  exit
EOF

echo '### SHIBUYA ###'
sqlplus -s SantaClaus/<Password>@SHIBUYA <<EOF
  ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH:MI:SS TZH:TZM';
  set lin 200
  col "Tokyo Time" format a30
  col val format a10
  SELECT val ,CAST(time AT TIME ZONE 'Asia/Tokyo' AS TIMESTAMP WITH TIME ZONE) AS "Tokyo Time" FROM "世界";
  exit
EOF

exit

● データ伝搬確認スクリプト実行と結果

・ TOKYO

[oracle@db-tokyo1 ~]$ bash world.txt

	### TOKYO ###

	VAL	       Tokyo
	---------- ------------------------------
	平和       2022-12-25 09:00:01 +09:00
	愛         2022-12-25 09:00:02 +09:00

・PHOENIX

	### PHOENIX ###

	VAL	       Phoenix Time
	---------- ------------------------------
	平和       2022-12-24 05:00:01 -07:00
	愛         2022-12-24 05:00:02 -07:00

・ASHBURN

	### ASHBURN ###

	VAL	       US Central Time
	---------- ------------------------------
	平和       2022-12-24 06:00:01 -06:00
	愛         2022-12-24 06:00:02 -06:00

・FRANKFURT

	### FRANKFURT ###

	VAL	       Germany Time
	---------- ------------------------------
	平和       2022-12-25 01:00:01 +01:00
	愛         2022-12-25 01:00:02 +01:00

・MUMBAI

	### MUMBAI ###

	VAL	       India Time
	---------- ------------------------------
	平和       2022-12-25 05:00:01 +05:30
	愛         2022-12-25 05:00:02 +05:30

・SEOUL

	### SEOUL ###

	VAL	       Seoul Time
	---------- ------------------------------
	平和       2022-12-25 09:00:01 +09:00
	愛         2022-12-25 09:00:02 +09:00

・OSAKA

	### OSAKA ###

	VAL	       Osaka Time
	---------- ------------------------------
	平和       2022-12-25 09:00:01 +09:00
	愛         2022-12-25 09:00:02 +09:00

・SHIBUYA

	### SHIBUYA ###

	VAL	       Tokyo Time
	---------- ------------------------------
	平和       2022-12-25 09:00:01 +09:00
	愛         2022-12-25 09:00:02 +09:00

トランザクションが発行されるたびに世界を周って伝搬される
なんてロマンチック
素敵⭐️

Xmas

世界が平和でありますように
世界が愛であふれますように
Happy Xmas!

 ・ データの同時実行性と整合性
 ・ データ整合性
 ・ トランザクション
 ・ REDOルーティング・ルール

■ 参考

 ・ Active Data Guard
 ・ Oracle (Active) Data Guard 19c リアルタイム・データ保護と可用性
 ・ Oracle Active Data Guardでのリアルタイム問い合わせとDMLオフロード
 ・ Active Data Guardスタンバイ・データベースでのDML操作の実行
 ・ ADG_REDIRECT_DML
 ・ Enabling DML Redirection
 ・ NLS_LANGについて: Setting Up a Globalization Support Environment
 ・ グローバリゼーション・コード
 ・ データの同時実行性と整合性
 ・ データ整合性
 ・ トランザクション
 ・ REDOルーティング・ルール

● Oracle Databaseの データの同時実行性と整合性

シングル・ユーザーのデータベースでは、他のユーザーが同時に同じデータを変更することがないため、ユーザーは何も心配せずにデータを変更できます。ただし、マルチユーザー・データベースでは、複数のトランザクション内の文によって、同じデータが同時に更新される可能性があります。同時に実行される複数のトランザクションでは、意味のある一貫した結果を出すことが必要です。

マルチユーザー・データベースには次の機能が備わっている必要があります。

    ・ 複数のユーザーが同時にデータにアクセスできることの保証(データ同時実行性)
    ・ ユーザー自身のトランザクションや他のユーザーのトランザクションによる参照可能な変更を含め、各ユーザーにデータの一貫したビューが表示されることの保証(データ整合性)

トランザクションが同時に実行されるときの一貫したトランザクション動作を表すために、データベース調査者は、シリアライズ可能性と呼ばれるトランザクション分離モデルを定義しています。シリアライズ可能トランザクションは、他のユーザーがデータベースのデータを変更していないように認識される環境内で動作します。

一般に、この程度までのトランザクションの分離が望ましいとされますが、シリアライズ可能モードで数多くのアプリケーションを実行すると、アプリケーションのスループットがかなり低下する可能性があります。同時に実行される各トランザクションの完全な分離とは、あるトランザクションが問合せを実行している表に対して、他のトランザクションが挿入を実行できない状態を指します。つまり、現実には、トランザクションの完全な分離とパフォーマンスとの間の妥協点を考慮する必要があります。

Oracle Databaseでは、マルチバージョン一貫性モデルや様々なタイプのロックおよびトランザクションを使用することによって、データ整合性を維持します。これにより、データベースが複数の同時ユーザーに対してデータのビューを提示する場合、それぞれ特定の時点において一貫性があるビューになります。異なるバージョンのデータ・ブロックが同時に存在する場合があるため、トランザクションでは問合せに要求された時点でコミットされているデータのバージョンが読み取られ、ある特定の時点において一貫性のある結果が戻されます。

  • マルチバージョン読取り一貫性
    Oracle Databaseでは、マルチバージョン機能によって、データの複数のバージョンを同時にマテリアライズできます。Oracle Databaseでは、マルチバージョン読取り一貫性を維持します。
  • ロックのメカニズム
    一般に、マルチユーザー・データベースでは、なんらかのデータ・ロックを使用してデータの同時実行性、一貫性、および整合性の問題を解決しています。
  • ANSI/ISOトランザクション分離レベル
    ANSIとISO/IECの両方で採用されているSQL規格では、トランザクション分離レベルが4つ定義されています。これらのレベルは、トランザクション処理のスループットに与える影響の度合いが異なります。

Oracle Data Guard Brokerのプロパティ

REDOルーティング・ルール
例: グループ内の優先度でRedo転送ができない場合、次の優先度のDatabaseへ転送することができます。
ブローカ構成内に次の3つのメンバーが存在すると仮定します。

PRI (プライマリ・データベース)
SB1 (スタンバイ・データベース)
FS1 (遠隔同期インスタンス)

プライマリ・データベースPRIが、スタンバイ・データベースSB1で使用するREDOログを生成します。遠隔同期インスタンスFS1が存在するため、スタンバイ・データベースへのREDO転送パスには2つの可能性が考えられます。

(パス1) PRI —> FS1 —> SB1
(パス2) PRI —> SB1

(パス1)の方が(パス2)よりも望ましいと仮定します。この場合は、次のようにRedoRoutesプロパティを使用して表現できます。

PRI —RedoRoutes = (local : ( FS1 PRIORITY=1, SB1 PRIORITY=2 ) )
FS1 —RedoRoutes = ( PRI : SB1 )

PRIのRedoRoutesプロパティで指定したように、プライマリ(PRI)には2つの宛先(PRIORITY=1のFS1とPRIORITY=2のSB1)が設定されています。優先度の数字が小さいほど優先度が高くなるため、プライマリPRIは、まずFS1にREDOログを送信しようとします。

FS1が使用できる場合、プライマリはPRIORITY=1が設定されているFS1に送信します。FS1が使用できない場合、プライマリはPRIORITY=2が設定されているSB1に送信します。FS1が再度アクティブになると、PRIORITY 1はPRIORITY 2よりも優先度が高いので、プライマリはまたFS1に送信するようになります。
これを利用することで直列カスケード転送での転送エラー障害を回避することができます。

■ おまけ

おまけ_[Xmas] 世界中に配置した Oracle Database を Data Guard で直列に繋ぎ世界一周してみてみた.png

46
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?