Oracle 19c Data Guard Physische Standby-Konfiguration Schritt für Schritt

In diesem Artikel werden wir Schritt für Schritt die physische Standby Konfiguration von Oracle 19c Data Guard mit Hilfe des Data Guard Broker besprechen. Oracle Data Guard ist ein Hochverfügbarkeitsmodell, das Ausfallzeiten und Datenverluste verhindert, indem ein redundantes System und Software verwendet werden, um einen Ausfall zu vermeiden.
Wir gehen davon aus, das Linux bereits installiert wurde. Wie Sie Linux Installieren, lesen Sie in meinem Artikel: Howto Installation von Oracle RAC 19C auf ESXi Teil 1 die Schritte sind auch für CentOS 8 identisch.
Da wir hier keine ASM Installation vornehmen genügt uns zum Testen CentOs 8.

Unsere Umgebung für diese Praxis

Unsere Umgebung für diesen Test ist eine frisch konfigurierte dbca-Datenbank mit Standardkonfiguration.

Primäre Umgebung

HOSTNAME

ora19c02.techlab.local

DB_NAME

ORAPRM

ORACLE_SID

ORAPRM

D B_UNIQUE_NAME

ORAPRM

GLOBAL DB_NAME

ORAPRM

IP

192.168.17. 4

DATENBANKVERSION

19.9.0.0

OS

Centos 8,3

Standby-Umgebung

HOSTNAME

ora19c03.techlab.local

DB_NAME

ORAPRM

ORACLE_SID

ORASTB

DB_UNIQUE_NAME

ORASTB

GLOBAL DB_NAME

ORAPRM

IP

192.168.17. 5

DATENBANKVERSION

19.9.0.0

OS

Centos 8,3

Wir verwenden die folgenden Umgebungsvariablen
Die folgenden Skripte müssen einmal auf den Systemen erzeugt werden.

Host ora19c02.techlab.local:

su – oracle
mkdir /home/oracle/scripts
touch /home/oracle/scripts/setEnv.sh
vi /home/oracle/scripts/setEnv.sh

# Oracle Settings

export TMP=/tmp

export TMPDIR=$TMP

export ORACLE_HOSTNAME=ora19c02.techlab.local

export ORACLE_UNQNAME=ORAPRM

export ORACLE_BASE=/oracle

export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1

export ORA_INVENTORY=/home/oracle/oraInventory

export ORACLE_SID=ORAPRM

export DATA_DIR=/oracle/oradata

export PATH=/usr/sbin:/usr/local/bin:$PATH

export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

export CV_ASSUME_DISTID=OEL7.8

/home/oracle/.bash_profile

vi /home/oracle/.bash_profile

# User specific environment and startup programs

. /home/oracle/scripts/setEnv.sh

/home/oracle/scripts/start_oracle_services.sh

#!/bin/bash

export ORACLE_BASE=/oracle

export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1

export PATH=$ORACLE_HOME/bin:$PATH

export ORACLE_HOSTNAME=ora19c02.techlab.local

export ORACLE_UNQNAME=ORAPRM

export ORACLE_SID=ORAPRM

export PDB_NAME=weblogic

lsnrctl start listener

echo "startup" | sqlplus / as sysdba

/home/oracle/scripts/stop_oracle_services.sh

#!/bin/bash

export ORACLE_BASE=/oracle

export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1

export PATH=$ORACLE_HOME/bin:$PATH

export ORACLE_HOSTNAME=ora19c02.techlab.local

export ORACLE_UNQNAME=ORAPRM

export ORACLE_SID=ORAPRM

export PDB_NAME=weblogic

lsnrctl stop listener

echo "shutdown immediate" | sqlplus / as sysdba

Host ora19c03.techlab.local:

su – oracle
mkdir /home/oracle/scripts
touch /home/oracle/scripts/setEnv.sh
vi /home/oracle/scripts/setEnv.sh

# Oracle Settings

export TMP=/tmp

export TMPDIR=$TMP

export ORACLE_HOSTNAME=ora19c03.techlab.local

export ORACLE_UNQNAME=ORASTB

export ORACLE_BASE=/oracle

export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1

export ORA_INVENTORY=/home/oracle/oraInventory

export ORACLE_SID=ORASTB

export DATA_DIR=/oracle/oradata

export PATH=/usr/sbin:/usr/local/bin:$PATH

export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

export CV_ASSUME_DISTID=OEL7.8

/home/oracle/.bash_profile

vi /home/oracle/.bash_profile

# User specific environment and startup programs

. /home/oracle/scripts/setEnv.sh

/home/oracle/scripts/start_oracle_services.sh

#!/bin/bash

export ORACLE_BASE=/oracle

export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1

export PATH=$ORACLE_HOME/bin:$PATH

export ORACLE_HOSTNAME=ora19c03.techlab.local

export ORACLE_UNQNAME=ORASTB

export ORACLE_SID=ORASTB

lsnrctl start listener

echo "startup mount;" | sqlplus / as sysdba

##echo "ALTER DATABASE OPEN READ ONLY" | sqlplus / as sysdba

echo "ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;" | sqlplus / as sysdba

/home/oracle/scripts/stop_oracle_services.sh

#!/bin/bash

export ORACLE_BASE=/oracle

export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1

export PATH=$ORACLE_HOME/bin:$PATH

export ORACLE_HOSTNAME=ora19c03.techlab.local

export ORACLE_UNQNAME=ORASTB

export ORACLE_SID=ORASTB

lsnrctl stop listener

echo "alter database recover managed standby database cancel;" | sqlplus / as sysdba

sleep 15

echo "shutdown immediate" | sqlplus / as sysdba

 

Erzeugen der Datenbank

In Diesem Artikel werden wir unsere 19c Datenbank über die silent Installationsmethode erstellen. Es steht jedem frei, dies auch über das DBCA Gui zu erledigen.

Als erstes besorgen wir uns das 19c preinstall rpm aus dem Oracle yum Repository.

cd /tmp

wget https://yum.oracle.com/repo/OracleLinux/OL8/baseos/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-2.el8.x86_64.rpm

Dieses RPM Paket wird auf dem Primären sowie dem Standby Host installiert.
 

rpm -ivh /tmp/oracle-database-preinstall-19c-1.0-2.el8.x86_64.rpm

Wir setzen nun unser Passwort für den User oracle

passwd oracle

Wir erstellen unsere Verzeichnisse welche die Oracle Software installation später beinhalten.

mkdir -p /oracle/product/19.0.0/dbhome_1
mkdir /u02

chown -R oracle:oinstall /oracle

chown -R oracle:oinstall /u02

chmod -R 775 /oracle

chmod -R 775 /u02

Unser .bash_profile aus den Skripts von oben soll einmal anziehen.

su – oracle

source .bash_profile

[oracle@ora19c02 ~]$ env | grep ORA

ORACLE_UNQNAME=ora19c02

ORACLE_SID=ora19c02

ORACLE_BASE=/oracle

ORACLE_HOME=/oracle/product/19.0.0/dbhome_1

ORA_INVENTORY=/home/oracle/oraInventory

ORACLE_HOSTNAME=ora19c02.techlab.local

Jetzt legen wir unsere Oracle Software in dem folgenden Verzeichniss ab:

scp LINUX.X64_193000_db_home.zip /u02

cd /u02

unzip LINUX.X64_193000_db_home.zip

rm LINUX.X64_193000_db_home.zip

mv * /oracle/product/19.0.0/dbhome_1

Vorher müssen wir noch für die passende Namensauflösung sorgen.

vi /etc/hosts ##Auf beiden Knoten entsprechend ergänzen.

192.168.17.4 ora19c02.techlab.local ora19c02

192.168.17.5 ora19c03.techlab.local ora19c03

Und führen nun den folgenden Code Block aus.

cd $ORACLE_HOME

./runInstaller -silent -debug -force \

oracle.install.option=INSTALL_DB_SWONLY \

ORACLE_HOSTNAME=${HOSTNAME} \

UNIX_GROUP_NAME=oinstall \

INVENTORY_LOCATION=/home/oracle/oraInventory \

SELECTED_LANGUAGES=de,de_DE \

ORACLE_HOME=${ORACLE_HOME} \

ORACLE_BASE=${ORACLE_BASE} \

oracle.install.db.InstallEdition=EE \

oracle.install.db.OSDBA_GROUP=dba \

oracle.install.db.OSOPER_GROUP=dba \

oracle.install.db.OSBACKUPDBA_GROUP=dba \

oracle.install.db.OSDGDBA_GROUP=dba \

oracle.install.db.OSKMDBA_GROUP=dba \

oracle.install.db.OSRACDBA_GROUP=dba \

SECURITY_UPDATES_VIA_MYORACLESUPPORT=false \

DECLINE_SECURITY_UPDATES=true \

oracle.installer.autoupdates.option=SKIP_UPDATES

Anmerkung: Die root Skripte unbedingt ausführen.

Führen Sie als Root-Benutzer folgende Skripts aus:

1. /home/oracle/oraInventory/orainstRoot.sh

2. /oracle/product/19.0.0/dbhome_1/root.sh

Für die Erstelleung unserer Datenbank wollen wir das folgende Skript anlegen
 

mkdir -p /home/oracle/scripts/ora_scripts

vi /home/oracle/scripts/ora_scripts/silent_dbcacrea.sh
chmod +x /home/oracle/scripts/ora_scripts/silent_dbcacrea.sh

Inhalt von silent_dbcacrea.sh

#for silent database creation

dbca -silent -createDatabase \

-templateName General_Purpose.dbc \

-gdbName ${ORACLE_SID} \

-sid ${ORACLE_SID} \

-createAsContainerDatabase true \

-numberOfPDBs 1 \

-pdbName pdb1 \

-useLocalUndoForPDBs true \

-pdbAdminPassword "ora-adm" \

-sysPassword "ora-adm" \

-systemPassword "ora-adm" \

-emConfiguration NONE \

-datafileDestination {ORACLE_BASE}/oradata/{DB_UNIQUE_NAME} \

-storageType FS \

-characterSet AL32UTF8 \

-totalMemory 2048 \

-recoveryAreaDestination {ORACLE_BASE}/oralog/fast_recovery_area/{DB_UNIQUE_NAME} \

-recoveryAreaSize 10809 \

-sampleSchema true

 

Das Skript einmal ausführen, und abwarten.

/home/oracle/scripts/ora_scripts/silent_dbcacrea.sh

Nach der Konfiguration von Os-Level-Einstellungen müssen wir jetzt Datenbank-Level-Parameter konfigurieren, um den Oracle 19c-Datenschutz zu konfigurieren.

Starten der 19c Data Guard-Konfiguration

Aktion auf dem primären Server

1. Stellen Sie sicher, dass die primäre Datenbank im Archivprotokollmodus ausgeführt wird. Überprüfen Sie den Archivierungsmodus mit den folgenden Abfragen.

$sqlplus / as sysdba

SQL> archive log list

ODER

SQL> select log_mode from v$database;

Wenn Ihre Datenbank nicht im Archivprotokollmodus ausgeführt wird, ändern Sie sie im Archivprotokollmodus mit den folgenden Schritten.

SQL> shu immediate

SQL> startup mount

SQL> alter database archivelog;

SQL> alter database open;

2. Aktivieren Sie das force logging.

Wir wählen hier force_logging, damit auch die jungs welche mit /nolog sich an der DB Anmelden, dieses SQL in die Standby geschrieben werden kann.

SQL> select force_logging from v$database;

FORCE_LOGGING

——————

NO

Wie kann man das force logging in Oracle aktivieren?
 

SQL> ALTER DATABASE FORCE LOGGING;

3. Ändern Sie unter den dynamischen Parametern

SQL> alter system set log_archive_config='dg_config=(ORAPRM,ORASTB)';

SQL> alter system set log_archive_dest_2='';

SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;

Im obigen Schritt definiert der Parameter log_archive_config den primären DB-Namen und den Standby-DB-Namen. Und der log_archive_dest_2 Parameter definiert den Standby Dienstnamen.

4. Stellen Sie den Parameter REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE ein und Sie können Archivformate festlegen, dies ist optional.

SQL> ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;

SQL> ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SCOPE=SPFILE;

Erstellen Sie eine 4. Redo Protokollgruppe auf dem primären.

ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 4 ('/oracle/oradata/ORAPRM/redo04.log') SIZE 200m;

Die Anzahl der Standby Protokolle sollte immer n+1 sein (in userem Fall also 5).

5. Erstellen Sie auch eine STANDBY-Redo Protokolldatei auf PRIMARY mit der folgenden Abfrage. Es sollte immer Platz in der Nummerierung für die standard Redo Log Gruppe gelassen werden. Aus diesem Grund fangen wird bei den standby Redo log Dateien erst bei 11 an zu nummerieren.

Query welche Redo log Gruppen gibt es bereits:

SQL> select GROUP#, THREAD#, bytes/1024/1024, MEMBERS, STATUS from v$log;

SQL> select member from v$logfile;

Jetzt können wir die standby log Dateien anlegen.

mkdir -p /oracle/oradata/stdb

SQL> alter database add standby logfile thread 1 group 11 ('/oracle/oradata/stdb/standby_redo01.log') size 200m;

SQL> alter database add standby logfile thread 1 group 12 ('/oracle/oradata/stdb/standby_redo02.log') size 200m;

SQL> alter database add standby logfile thread 1 group 13 ('/oracle/oradata/stdb/standby_redo03.log') size 200m;

SQL> alter database add standby logfile thread 1 group 14 ('/oracle/oradata/stdb/standby_redo04.log') size 200m;

SQL> alter database add standby logfile thread 1 group 15 ('/oracle/oradata/stdb/standby_redo05.log') size 200m;

Flashback auf der Primärdatenbank aktivieren:

Die Flashback-Datenbank wird dringend empfohlen, da Sie im Falle eines Failovers die Primärdatenbank nicht von Grund auf neu erstellen müssen.

SQL> alter system set db_recovery_file_dest_size=45g;

SQL> alter database flashback on;

SQL> select flashback_on from v$database;

Wenn die Flashback-Parameter nicht richtig eingestellt sind, verwenden Sie die folgenden Befehle.

SQL> show parameter recovery;

SQL> alter system set db_recovery_file_dest='/oracle/fast_recovery_area';

SQL> alter system set db_recovery_file_dest_size=45g;

SQL> alter database flashback on;

Starten Sie nun Ihre primäre Datenbank neu, nachdem wir Listener und TNS-Dateien auf beiden Seiten (Primär- und Standby) erstellen müssen.

Die Datei Listener.ora sieht im Primären Host so so aus.
Sie enthält einen statischen Datenbankeintrag für unsere ORACLE SID, der für den Fall benötigt wird, dass die Datenbank über ihren Service nicht mehr erreicht werden kann (was beim Duplizieren einer Datenbank mit rman realistisch ist).

Host ora19c02 Datei listener.ora:

# listener.ora Network Configuration File: /u01/app/oracle/product/12.2.0.1/network/admin/listener.ora

# Generated by Oracle configuration tools.

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = ORAPRM_DGMGRL)

(ORACLE_HOME = /oracle/product/19.0.0/dbhome_1)

(SID_NAME = ORAPRM)

)

(SID_DESC =

(GLOBAL_DBNAME = ORAPRM)

(ORACLE_HOME = /oracle/product/19.0.0/dbhome_1)

(SID_NAME = ORAPRM)

)

)

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = ora19c02.techlab.local)(PORT = 1521))

)

(DESCRIPTION =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

)

)

ADR_BASE_LISTENER = /oracle

Host ora19c03 Datei listener.ora:

# listener.ora Network Configuration File: /u01/app/oracle/product/12.2.0.1/network/admin/listener.ora

# Generated by Oracle configuration tools.

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = ORASTB_DGMGRL)

(ORACLE_HOME = /oracle/product/19.0.0/dbhome_1)

(SID_NAME = ORASTB)

)

(SID_DESC =

(GLOBAL_DBNAME = ORASTB)

(ORACLE_HOME = /oracle/product/19.0.0/dbhome_1)

(SID_NAME = ORASTB)

)

)

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = ora19c03.techlab.local)(PORT = 1521))

)

(DESCRIPTION =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

)

)

ADR_BASE_LISTENER = /oracle

 

Ihre tnsname.ora Datei sieht wie diese Datei unten auf beiden Seiten aus. Sie können es aus der Produktion kopieren oder im Standby Host neu erstellen. Der Service 19C02_RW kommt erst später in unserem Artikel zur Geltung.

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12.2.0.1/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

ORASTB =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = ora19c03.techlab.local)(PORT = 1521))

)

(CONNECT_DATA =

(SID = ORASTB)

)

)

ORAPRM =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = ora19c02.techlab.local)(PORT = 1521))

)

(CONNECT_DATA =

(SID = ORAPRM)

)

)

19C02_RW =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = ora19c02.techlab.local)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = ora19c03.techlab.local)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = 19C02_RW)

(FAILOVER_MODE =

(TYPE = SELECT)

(METHOD = BASIC)

(RETRIES = 30)

(DELAY = 10)

)

)

)

Starten Sie den Listener und überprüfen Sie TNS-Ping mit beiden Diensten (PR& DR) auf beidenSeiten.

$lsnrctl start

$tnsping ORAPRM

$tnsping ORASTB

6. Erstellen Sie pfile aus spfile bei der Produktion und verschieben Sie es in unser Standby-System.

SQL> create pfile='/oracle/product/19.0.0/dbhome_1/dbs/initstandby.ora' from spfile;

$ cd /oracle/product/19.0.0/dbhome_1/dbs/

##copy the pfile to standy host
$ scp initstandby.ora ora19c03:/oracle/product/19.0.0/dbhome_1/dbs/

Kopieren der Passwort Datei

cd $ORACLE_HOME/dbs
cp orapwORAPRM orapwORASTB

##copy the orapwd file to standby host

$ scp orapwORASTB ora19c03:/oracle/product/19.0.0/dbhome_1/dbs/

Unsere Parameter Datei initstandby.ora hat nun den folgenden Inhalt:
 

ORAPRM.__data_transfer_cache_size=0

ORAPRM.__db_cache_size=1090519040

ORAPRM.__inmemory_ext_roarea=0

ORAPRM.__inmemory_ext_rwarea=0

ORAPRM.__java_pool_size=0

ORAPRM.__large_pool_size=16777216

ORAPRM.__oracle_base='/oracle'#ORACLE_BASE set from environment

ORAPRM.__pga_aggregate_target=536870912

ORAPRM.__sga_target=1610612736

ORAPRM.__shared_io_pool_size=83886080

ORAPRM.__shared_pool_size=402653184

ORAPRM.__streams_pool_size=0

ORAPRM.__unified_pga_pool_size=0

*.audit_file_dest='/oracle/admin/ORAPRM/adump'

*.audit_trail='db'

*.compatible='19.0.0'

*.control_files='/oracle/oradata/ORAPRM/control01.ctl','/oracle/oralog/fast_recovery_area/ORAPRM/control02.ctl'

*.db_block_size=8192

*.db_name='ORAPRM'

*.db_recovery_file_dest='/oracle/oralog/fast_recovery_area'

*.db_recovery_file_dest_size=48318382080

*.diagnostic_dest='/oracle'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=ORAPRMXDB)'

*.enable_pluggable_database=true

*.log_archive_config='dg_config=(ORAPRM,ORASTB)'

*.log_archive_dest_2=''

*.log_archive_format='%t_%s_%r.arc'

*.nls_language='GERMAN'

*.nls_territory='GERMANY'

*.open_cursors=300

*.pga_aggregate_target=512m

*.processes=300

*.remote_login_passwordfile='EXCLUSIVE'

*.sga_target=1536m

*.standby_file_management='AUTO'

*.undo_tablespace='UNDOTBS1'

Auf dem Standby Host bearbeiten Sie den db_unique_name Parameter der initstandby.ora Datei.

$ vi initstandby.ora

Ändern Sie ORAPRM nach ORASTB.
*.db_unique_name='ORASTB'

Erstellen Sie die folgenden Verzeichnisse auf dem Standby-Ziel:
Die Verzeichniss Struktur kann bei ihnen anders sein.

#!/bin/sh

OLD_UMASK=`umask`

umask 0027

mkdir -p /oracle

mkdir -p /oracle/admin/ORAPRM/adump

mkdir -p /oracle/admin/ORAPRM/dpdump

mkdir -p /oracle/admin/ORAPRM/pfile

mkdir -p /oracle/audit

mkdir -p /oracle/oralog/fast_recovery_area

mkdir -p /oracle/cfgtoollogs/dbca/ORAPRM

mkdir -p /oracle/oradata/ORAPRM/pdb1

mkdir -p /oracle/oradata/ORAPRM/pdbseed

mkdir -p /oracle/product/19.0.0/dbhome_1/dbs

Wenn alles in Ordnung ist, starten Sie die Replikation mit RMAN Duplicate, das einen vollständigen Klon der Produktion macht. In meinem Fall läuft alles gut, also werde ich den Klonprozess für Standby starten.

Cd $ORACLE_HOME/dbs
cp initstandby.ora initORASTB.ora

$ sqlplus / as sysdba

SQL> startup nomount pfile=/oracle/product/19.0.0/dbhome_1/dbs/initORASTB.ora;
create spfile from pfile;

quit

Aktion auf Standby-Server

Erstellen Sie das folgende rman-Skript:

mkdir -p /home/oracle/scripts/ora_scripts
touch /home/oracle/scripts/ora_scripts/rman_duplicate_db.rman
vi /home/oracle/scripts/ora_scripts/rman_duplicate_db.rman

set echo on

run

{

allocate channel tgt1 device type disk ;

allocate channel tgt2 device type disk ;

allocate auxiliary channel aux1 device type disk ;

duplicate target database for standby from active database nofilenamecheck;

}

7. Verbinden Sie sich mit dem Host oder öffnen Sie ein neues Terminal und führen Sie den folgenden Befehl aus.

$ rman target sys/ora-adm@ORAPRM auxiliary sys/ora-adm@ORASTB

RMAN> @/home/oracle/scripts/ora_scripts/rman_duplicate_db.rman

Finished Duplicate Db at 22-MAR-21

released channel: tgt1

released channel: tgt2

released channel: aux1

RMAN> **end-of-file**

RMAN> quit

quit

8.Aktivieren des Dataguard Brokers

Zu diesem Zeitpunkt verfügen wir über eine Primärdatenbank und eine Standby-Datenbank. Daher müssen wir jetzt den Data Guard Broker verwenden, um sie zu verwalten. Stellen Sie eine Verbindung zu beiden Datenbanken (primär und Standby) her und geben Sie den folgenden Befehl ein.
 

ALTER SYSTEM SET dg_broker_start=true;

ALTER SYSTEM SET dg_broker_start=true scope=spfile;

Auf dem Primären Server geben Sie die folgenden Komandos ein, und registrieren den Primären Server mit dem broker.
 

$ dgmgrl sys/ora-adm@ORAPRM

DGMGRL for Linux: Release 19.0.0.0.0 – Production on Tue Feb 26 22:39:33 2018

Version 19.2.0.0.0

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

Welcome to DGMGRL, type "help" for information.

Connected as SYSDBA.

DGMGRL> CREATE CONFIGURATION my_ORAPRM_config AS PRIMARY DATABASE IS ORAPRM CONNECT IDENTIFIER IS ORAPRM;

Configuration "my_ORAPRM_config" created with primary database "ORAPRM"

DGMGRL>

Nun wollen wir die Standby Datenbank hinzufügen.
 

DGMGRL> ADD DATABASE ORASTB AS CONNECT IDENTIFIER IS ORASTB MAINTAINED AS PHYSICAL;

Database "ORAPRM" added

DGMGRL>

 

Zum Abschluss aktivieren wir unsere Konfiguration.

DGMGRL> ENABLE CONFIGURATION;

Enabled.

DGMGRL>

 

Die folgenden Befehle zeigen, wie Sie die Konfiguration und den Status der Datenbanken vom Broker aus überprüfen.
 

[oracle@ORAPRM ~]$ dgmgrl sys/ora-adm@ORAPRM

DGMGRL for Linux: Release 19.0.0.0.0 – Production on Fri Mar 12 18:21:55 2021

Version 19.9.0.0.0

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

Welcome to DGMGRL, type "help" for information.

Connected to "ORAPRM"

Connected as SYSDBA.

DGMGRL> show configuration

Configuration – my_ORAPRM_config

Protection Mode: MaxPerformance

Members:

ORAPRM – Primary database

ORASTB – Physical standby database

Fast-Start Failover: Disabled

Configuration Status:

SUCCESS (status updated 46 seconds ago)

DGMGRL>

DGMGRL> show database ORAPRM

Database – ORAPRM

Role: PRIMARY

Intended State: TRANSPORT-ON

Instance(s):

ORAPRM

Database Status:

SUCCESS

DGMGRL> show database ORASTB

Database – ORASTB

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

Real Time Query: OFF

Instance(s):

ORAPRM

Database Status:

SUCCESS

DGMGRL>

 

9. Sobald die obigen Konfigurations Schritte abgeschlossen sind, können Sie den Dataguard Recover Prozess auf dem Standby Server starten.

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

Wie überprüft man den ausgeführten Dispositionsprozess oder nicht?

Mit der folgenden Abfrage können Sie ganz einfach überprüfen, ob der Dispositionsprozess ausgeführt wird oder nicht.

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

Überprüfen Sie die Datenbankrolle, den geöffneten Modus und den Datenbanknamen mithilfe der folgenden Abfrage.

SQL> select name,database_role,open_mode from v$database;

Wie kann ich überprüfen, welches Archiv derzeit angewendet wird?

Die folgende Abfrage zeigt Ihnen die Details zu allen angewendeten Archiven im Standby-Zustand an.

SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

oder

select PROCESS,CLIENT_PROCESS,THREAD#,SEQUENCE#,BLOCK# from v$managed_standby where process = 'MRP0' or client_process='LGWR';

Wie ist der aktuelle Dataguard Status?

Diese Queries lassen sich auf beiden DBs ausführen

set lines 999;
select * from v$dataguard_status order by timestamp;

select dest_id, status, destination, error from v$archive_dest where dest_id<=2;

Auf dem Primary

select sequence#, first_time, next_time, applied, archived from v$archived_log where name = 'orastb' order by first_time;

select STATUS, GAP_STATUS from V$ARCHIVE_DEST_STATUS where DEST_ID = 2;

archive log list;

Auf dem Standby

select process, status, sequence# from v$managed_standby;

select sequence#, applied, first_time, next_time, name filename from v$archived_log order by sequence#;

Konfigurieren der Archive Log Lösch Policy.

Auf dem Primary hier starten wir auch das rman Backup Script

rman target /

CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY BACKED UP 1 TIMES TO DISK;

Auf dem Standby hier machen wir keine rman backups

rman target /
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;

Flashback auf der Standby Datenbank aktivieren:

Für ein eventuell späteres Recover Szenario muss nun auch in der Standby Datenbank das Flashback aktiviert werden.

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

SQL> alter system set db_recovery_file_dest_size=45g;

SQL> alter database flashback on;

SQL> select flashback_on from v$database;

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

Jetzt noch einmal den oracle Dienst manuell herunterfahren.

[oracle@ora19c03 ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 – Production on Wed Mar 10 19:02:25 2021

Version 19.9.0.0.0

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

Connected to:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production

Version 19.9.0.0.0

SQL> shutdown immediate;

ORA-01109: database not open

Database dismounted.

ORACLE instance shut down.

SQL>

Konfigurieren Sie den Standbyserver:

Setzen Sie einen Eintrag für die Standby-SID in die Datei /etc/oratab.

ORAPRM:/oracle/product/19.0.0/dbhome_1:N

Endlich eine Unit Datei für den automatischen Start unserer Datenbanken erstellen

Erstellen Sie diese Datei auf Primary und in Standby:

touch /usr/lib/systemd/system/dbora.service

vi /usr/lib/systemd/system/dbora.service

[Unit]

Description=The Oracle Database Service

After=syslog.target network.target

[Service]

LimitMEMLOCK=infinity

LimitNOFILE=65535

RemainAfterExit=yes

User=oracle

Group=oinstall

Restart=no

ExecStart=/home/oracle/scripts/start_oracle_services.sh

ExecStop=/home/oracle/scripts/stop_oracle_services.sh

[Install]

WantedBy=multi-user.target

systemctl daemon-reload
systemctl enable dbora
systemctl start dbora

Check ob die Startsequenz auch zu uns passt:

[oracle@ora19c03 ~]$ systemd-analyze critical-chain dbora.service

The time after the unit is active or started is printed after the "@" character.

The time the unit takes to start is printed after the "+" character.

dbora.service @13.949s

└─network.target @13.792s

└─systemd-resolved.service @17.151s +1.454s

└─systemd-journald.socket

└─system.slice

└─-.slice

[oracle@ora19c03 ~]$

Jetzt haben Sie die Oracle 19c Physical Standby Data Guard-Konfiguration erfolgreich durchgeführt.

Dieser Beitrag wurde unter ORACLE veröffentlicht. Setze ein Lesezeichen auf den Permalink.