1. Start
  2. Unternehmen
  3. Blog
  4. Ausfallsicherheit für EM Cloud Control Repository Datenbank mit Data Guard

Ausfallsicherheit für EM Cloud Control Repository Datenbank mit Data Guard

Nach der Installation und dem Patching vom Enterprise Manager Cloud Control sollte vor dem produktiven Einsatz ein Gedanke an die Hochverfügbarkeit gehen.

Die Frage ist: Braucht die Umgebung eine HA Lösung für den Oracle Management Server (OMS) oder die Oracle Repository Datenbank (OMR) oder für beide Komponenten?

Für die Erstellung Absicherungslösung des OMS und/oder OMR gibt es unterschiedliche Beschreibungen – meist nur für beide Komponeneten zusammen.

Aber wenn es nur um eine Absicherung der Repository Datenbank (OMR) geht, finden sich deutlich weniger Einträge. Eine Möglichkeit, die Absicherung der OMR Datenbank mit Hilfe von Data Guard Switchover durchzuführen, möchte ich in diesem Blogbeitrag vorstellen.

Als Anforderung nehmen wir eine Konfiguration von Data Guard ohne Connect Verlust für die OMR Datenbank beim Switchover der Repository Datenbank.

Die OMR Datenbank ist in unserem Fall eine CDB Datenbank 19c Release 12 (Oracle Template).

Nun zu den einzelnen Schritten:

1. Data Guard mit Broker für OMR einrichten
 

EM13REP    - Primary database - auf host01

EM13STBY  - Standby database - auf host02

 

2. Statische Listener Konfiguration einrichten und testen
 

host01 (Auszug) - Primary

 

LISTENER =
  (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = host01)(PORT = 1521)))

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC = (GLOBAL_DBNAME = EM13REP_DGMGRL)
                (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
                (SID_NAME = EM13REP))    
    (SID_DESC = (GLOBAL_DBNAME = EM13REP)
                (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
                (SID_NAME = EM13REP))
  )

 

host02  (Auszug) - Standby

 

LISTENER =
  (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = host02)(PORT = 1521)))

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC = (GLOBAL_DBNAME = EM13STBY_DGMGRL)
      (ORACLE_HOME = /u01/app/oracle/prodDEMOt/19.0.0/dbhome_1)
      (SID_NAME = EM13STBY) )    
    (SID_DESC = (GLOBAL_DBNAME = EM13STBY)
                (ORACLE_HOME = /u01/app/oracle/prodDEMOt/19.0.0/dbhome_1)
                (SID_NAME = EM13STBY) )
  )

 

3. TNSNAMES Konfiguration für  Primary und Standby

 

EM13REP =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = host01)(PORT = 1521))
    (CONNECT_DATA =  (SERVER = DEDICATED)  (SERVICE_NAME = EM13REP) )
  )

EM13STBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = host02)(PORT = 1521))
    (CONNECT_DATA =  (SERVER = DEDICATED)  (SERVICE_NAME = EM13STBY) )
  )

 

4. Broker Konfiguration

 

DGMGRL> show configuration;

Configuration - DEMO
  Protection Mode: MaxPerformance
  Members:
  EM13REP  - Primary database
    EM13STBY - Physical standby database 

Fast-Start Failover:  Disabled

Configuration Status:
SUCCESS   (status updated 47 seconds ago)

 

5. Service Konfiguration

Für das Umschalten ohne Connect Verlust wird ein Service benötigt, der beide Listener adressiert.
Dieser Service PRMY wird nun in der für die PDB - EMPDBREPOS eingerichtet und gestartet.

Nachfolgend zu sehen ist der Net Alias für neuen Service in der tnsnames.ora mit den Best Practice Parametern aus der Oracle Dokumentation.

 

PRMY =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = host01)(PORT = 1521)
      (SEND_BUF_SIZE = 10485760)(RECV_BUF_SIZE = 10485760))
      (ADDRESS = (PROTOCOL = TCP)(HOST = host02)(PORT = 1521)
      (SEND_BUF_SIZE = 10485760)(RECV_BUF_SIZE = 10485760))
    )
    (SDU = 65535)
    (CONNECT_DATA =
      (SERVICE_NAME = PRMY)
    )
  )

 

Service in der PDB definieren:

 

$ sqlplus sys/<PW_OMR>@EM13REP as sysdba

SYS@EM13REP> show pdbs

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

SYS@EM13REP> alter session set container=EMPDBREPOS;

SYS@EM13REP> exec dbms_service.create_service( -
                        SERVICE_NAME => 'PRMY', -
                 aq_ha_notifications => true, - 
                        NETWORK_NAME => 'PRMY', -
                     FAILOVER_METHOD => 'BASIC', -
                     FAILOVER_TYPE   => 'SELECT', -
                    FAILOVER_RETRIES => 180, -
                     FAILOVER_DELAY  => 1);

 

Service starten und prüfen, ob er sich auch am Listener registriert:

 

SYS@EM13REP> exec dbms_service.start_service('PRMY');

 

Damit sichergestellt wird, dass die PDB EMPDBREPOS beim Switchover immer gestartet ist, wird ein  Database Trigger zum automatischen Start  im root Container definiert.

 

SYS@EM13REP> conn sys/<PW_OMR>@EM13REP as sysdba

create or replace  trigger primary_service after startup on database
declare
 role  varchar(30);
 omode varchar(30);
begin
  select database_role into role from v$database;
  select open_mode into omode from v$pdbs where name='EMPDBREPOS';
  if role='PRIMARY' then
    if omode != 'READ WRITE' then
      execute immediate ' alter pluggable database EMPDBREPOS open';
    end if;
   end if;
end;
/

 

Der Service PRMY muss in der PDB EMPDBREPOS gestartet sein!
Dazu wird mit einem Database Trigger der Start des Services konfiguriert.
Wenn für die PDB "save state" konfiguriert ist, kann auf den Trigger verzichtet werden.

 

SYS@EM13REP> conn sys/<PW_OMR>@EM13REP as sysdba

alter session set container=EMPDBREPOS;

create or replace  trigger primary_service after startup on database
begin
  dbms_service.start_service('PRMY');
end;
/

 

 Die Konfiguration von Data Guard ist nun beendet.

6. Anpassung Cloud Control


Um Cloud Control und damit Data Guard grafisch zu nutzen, muss auf beiden Hosts ein Agent installiert sein.
Der neue Service muss als neuer Connect Descriptor zur OMR Datenbank eingetragen werden.
Dies erfolgt mit emctl in der OMS Umgebung.
Der Eintrag entspricht dem tnsnames.ora Eintrag.

 

$ emctl config oms -store_repos_details -repos_conndesc  '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=host01)(PORT=1522)	
(SEND_BUF_SIZE=10485760)(RECV_BUF_SIZE=10485760))(ADDRESS=(PROTOCOL=TCP)(HOST=host02)(PORT=1522)(SEND_BUF_SIZE=10485760)(RECV_BUF_SIZE=10485760)))(SDU=65535)(CONNECT_DATA=(SERVICE_NAME=prmy)))' -repos_user sysman -repos_pwd <passwort_von_sysman>

 

Danach erfolgt ein Durchstarten des Cloud Controls mit allen Komponenten.

 

$ emctl stop oms -all
$ emctl start oms

 

7. Switchover ohne Client Connect Verlust


Konfiguration vor dem Switchover zur Standby Seite:

Das Switchover erfolgt mit DGMGRL!

 

DGMGRL> switchover to EM13STBY;

Performing switchover NOW, please wait...
Operation requires a connection to database "EM13STBY"
Connecting ...
Connected to "EM13STBY"
Connected as SYSDBA.
New primary database "EM13STBY" is opening...
Operation requires start up of instance "EM13REP" on database "EM13REP"
Starting instance "EM13REP"...
Connected to an idle instance.
ORACLE instance started.
Connected to "EM13REP"
Database mounted.
Connected to "EM13REP"
Switchover succeeded, new primary is "em13stby"

 

Nach dem Switchover sieht die Konfiguration folgendermaßen aus:

 

DGMGRL> show configuration;

Configuration - DEMO

  Protection Mode: MaxPerformance
  Members:
  EM13STBY   - Primary database
    EM13REP   - Physical standby database 
  
Fast-Start Failover:  Disabled

Configuration Status:
SUCCESS   (status updated 38 seconds ago)

 

Und die Cloud Control Sicht?
Es erfolgte kein neuer Connect am Cloud Control. Es ist nur ein Refresh nach dem Switchover nötig.
Danach kann man das Ergebnis des Switchovers sehen und normal weiterarbeiten.

In diesem Blogeintrag wurde gezeigt, wie ein unterbrechungsfreier Client Connect zu EM Cloud Control möglich ist unter Nutzung der Data Guard Switchover Funktionalität der Repository Datenbank.

 

Kommentare

Keine Kommentare

Kommentar schreiben

* Diese Felder sind erforderlich