Oracle Data Guard mit der Datenbank-CLI verwenden
In diesem Artikel wird erläutert, wie Sie Data Guard mit der Datenbank-CLI in Oracle Cloud Infrastructure mit Fast-Start Failover (FSFO) einrichten. In den Themen in diesem Artikel wird beschrieben, wie Sie die Primär- und die Standbydatenbank vorbereiten. Danach wird erläutert, wie Sie Data Guard konfigurieren, um Redo-Daten aus der Primärdatenbank zu übertragen und auf die Standbydatenbank anzuwenden.
Oracle empfiehlt, die Konsole anstelle der Datenbank-CLI zu verwenden, um Data Guard in Oracle Cloud Infrastructure einzurichten und damit zu arbeiten.
Hinweis:
In diesem Artikel werden Grundkenntnisse von Data Guard und FSFO vorausgesetzt. Weitere Informationen dazu finden Sie unter Oracle Data Guard auf einem DB-System verwenden.
Voraussetzungen
Um die Verfahren in diesem Thema auszuführen, benötigen Sie die folgenden Informationen zur Primär- und Standbydatenbank.
- db_name (oder oracle_sid)
- db_unique_name
- Oracle Home-Verzeichnis (oder Datenbank-Home)
Datenbankinformationen ermitteln
Nachdem Sie das Primär- und das Standby-DB-System gestartet und Datenbanken erstellt haben (wie weiter unten in diesem Thema beschrieben), können Sie die CLI auf diesen Systemen verwenden, um die benötigten Datenbankinformationen zu ermitteln.
- Stellen Sie eine SSH-Verbindung zum DB-System her.
ssh -i <private_key_path> opc@<db_system_ip_address>
- Melden Sie sich als
opc
an, und wechseln Sie dann mitsudo
zum Benutzerroot
. Verwenden Siesudo su -
mit einem Bindestrich, um das Profil des Root-Benutzers aufzurufen. Dadurch wird derPATH
auf das dbcli-Verzeichnis gesetzt (/opt/oracle/dcs/bin
).sudo su -
- Um db_name (oder oracle_sid) und db_uniqueName zu ermitteln, führen Sie den Befehl
dbcli list-databases -j
aus.
Ausgabe:dbcli list-databases -j
[ { "id" : "80ad855a-5145-4f8f-a08f-406c5e4684ff", "name" : "dbtst", "dbName" : "dbtst", "databaseUniqueName" : "dbtst_phx1cs", "dbVersion" : "12.1.0.2", "dbHomeId" : "2efe7af7-0b70-4e9b-ba8b-71f11c6fe287", "instanceOnly" : false, . . .
- Um das Oracle Home-Verzeichnis (oder Datenbank-Home) zu ermitteln, führen Sie den Befehl
dbcli list-dbhomes
aus. Wenn mehrere Datenbank-Homes auf dem DB-System vorhanden sind, verwenden Sie das Home, das der "dbHomeId" in der oben dargestellten Ausgabe des Befehlsdbcli list-databases -j
entspricht.
Ausgabe:dbcli list-dbhomes
ID Name DB Version Home Location Status ---------------------------------------- -------------------- ---------------------------------------- --------------------------------------------- ---------- 2efe7af7-0b70-4e9b-ba8b-71f11c6fe287 OraDB12102_home1 12.1.0.2.160719 (23739960, 23144544) /u01/app/oracle/product/12.1.0.2/dbhome_1 Configured 33ae99fe-5413-4392-88da-997f3cd24c0f OraDB11204_home1 11.2.0.4.160719 (23054319, 23054359) /u01/app/oracle/product/11.2.0.4/dbhome_1 Configured
Primär-DB-System erstellen
Wenn noch kein Primär-DB-System vorhanden ist, erstellen Sie ein DB-System wie unter DB-Systeme erstellen - Überblick beschrieben. Das DB-System enthält eine anfängliche Datenbank. Mit den Datenbankbefehlen, die im DB-System verfügbar sind, können Sie weitere Datenbanken erstellen.
Standby-DB-System erstellen
Hinweis:
Die Standbydatenbank muss denselben db_name wie die Primärdatenbank, aber einen anderen db_unique_name haben. Wenn Sie denselben Datenbanknamen für die Standby- und die Primärdatenbank verwenden, müssen Sie die Datenbank mit dem Befehl dbcli delete-database
aus dem Standby-DB-System löschen, bevor Sie den unten beschriebenen Befehl dbcli create-database
ausführen können. Das Löschen und Erstellen der Datenbank dauert einige Minuten. Die dbcli
-Befehle müssen vom Root-Benutzer ausgeführt werden.
- Erstellen Sie ein Standby-DB-System, wie unter DB-Systeme erstellen - Überblick beschrieben. Warten Sie, bis das Provisioning des DB-Systems abgeschlossen und das System verfügbar ist.
Sie können das Standby-DB-System zu Verfügbarkeits- und Disaster-Recovery-Zwecken in einer anderen Availability-Domain als der des Primär-DB-Systems erstellen. (Das wird dringend empfohlen.) Sie können das Standby-DB-System im Cloud-Netzwerk des Primär-DB-Systems erstellen, sodass sich beide Systeme in einem einzigen, routbaren Netzwerk befinden.
- Stellen Sie eine SSH-Verbindung zum DB-System her.
ssh -i <private_key_path> opc@<db_system_ip_address>
- Melden Sie sich als
opc
an, und wechseln Sie dann mitsudo
zum Benutzerroot
. Verwenden Siesudo su -
mit einem Bindestrich, um das Profil des Root-Benutzers aufzurufen. Dadurch wird derPATH
auf das dbcli-Verzeichnis gesetzt (/opt/oracle/dcs/bin
).sudo su -
- Das DB-System enthält eine anfängliche Datenbank. Sie müssen jedoch mit dem Befehl
dbcli create-database
und dem Parameter--instanceonly
eine Standbydatenbank erstellen. Dieser Parameter erstellt nur die Datenbankspeicherstruktur und startet die Datenbank im Nomount-Modus (es werden keine anderen Datenbankdateien erstellt).Wenn Sie
--instanceonly
verwenden, sind die Parameter--dbname
und--adminpassword
erforderlich. Diese müssen mit dem DB-Namen bzw. dem Admin-Kennwort der Primärdatenbank übereinstimmen, um Verwechslungen zu vermeiden.Der folgende Beispielbefehl fordert zur Eingabe des Admin-Kennworts auf und erstellt dann eine Speicherstruktur für eine Datenbank namens dbname.
dbcli create-database --dbname <same as primary dbname>;--databaseUniqueName <different from primary uniquename>;--instanceonly --adminpassword
Wenn Sie integrierbare Datenbanken verwenden, geben Sie auch den Parameter
--cdb
an.Die vollständige Befehlssyntax finden Sie unter Datenbankbefehle.
- Warten Sie einige Minuten, bis der Befehl
dbcli create-database
die Standbydatenbank erstellt hat.Mit dem Befehl
dbcli list-jobs
können Sie prüfen, ob der Erstellungsjob erfolgreich ausgeführt wurde. Danach prüfen Sie mit dem Befehldbcli list-databases
, ob die Datenbank konfiguriert wurde.
Primär-DB-System vorbereiten
Um das Primär-DB-System vorzubereiten, müssen Sie statische Listener konfigurieren, tnsnames.ora aktualisieren und einige Datenbankeinstellungen und Parameter konfigurieren.
Statische Listener konfigurieren
Erstellen Sie statische Listener zur Verwendung durch RMAN und Data Guard Broker.
- Greifen Sie mit SSH auf das Primär-DB-System zu, melden Sie sich als Benutzer
opc
oderroot
an, und wechseln Sie mitsudo
zum BS-Benutzer "grid".sudo su - grid
- Bearbeiten Sie die Datei
/u01/app/<version>/grid/network/admin/listener.ora
, und fügen Sie ihr den folgenden Inhalt hinzu. Der hier angezeigte erste statische Listener ist optional. Der zweite statische ListenerDGMGRL
ist bei Datenbanken der Version 12.1 oder höher optional, jedoch für Datenbanken der Version 11.2 erforderlich.SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <primary_db_unique_name>.<primary_db_domain>) (SID_NAME = <primary_oracle_sid>) (ORACLE_HOME=<oracle_home_directory>) (ENVS="TNS_ADMIN=<oracle_home_directory>/network/admin") ) (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <primary_db_unique_name>_DGMGRL.<primary_db_domain>) (SID_NAME = <primary_oracle_sid>) (ORACLE_HOME=<oracle_home_directory>) (ENVS="TNS_ADMIN=<oracle_home_directory>/network/admin") ) )
- Speichern Sie die Änderungen, und starten Sie den Listener dann neu.
srvctl stop listener srvctl start listener
Net Service-Namen zu tnsnames.ora hinzufügen
Bearbeiten Sie als Benutzer "oracle" die Datei $ORACLE_HOME/network/admin/tnsnames.ora
, und fügen Sie ihr den Net Service-Namen der Standbydatenbank hinzu.
<standby db_unique_name> =
(DESCRIPTION =
(SDU=65535)
(ADDRESS = (PROTOCOL = TCP)(HOST = <standby_server>.<domain>) (PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <standby db_unique_name>.<standby db_domain>)
)
)
Im obigen Beispiel wird davon ausgegangen, dass die Namensauflösung funktioniert und <standby_server>.<domain>
auf der Primärdatenbank auflösbar ist. Sie können auch die private IP-Adresse des Standbyservers verwenden, wenn die IP-Adressen innerhalb eines einzigen Cloud-Netzwerks (VCN) geroutet werden können.
Parameter der Primärdatenbank konfigurieren
Tipp:
Wenn der Primär- und der Standbyhost unterschiedliche Verzeichnisstrukturen haben, müssen Sie möglicherweise zusätzliche Parameter festlegen, die hier nicht beschrieben werden, wie z.B. den Parameter log_file_name_convert
. In der RMAN-Dokumentation finden Sie weitere Informationen zum Erstellen von Standbys für Hosts mit unterschiedlichen Verzeichnisstrukturen.
- Aktivieren Sie als Benutzer "oracle" die automatische Standbydateiverwaltung.
alter system set standby_file_management=AUTO;
- Identifizieren Sie die Namen und Speicherorte der Brokerkonfigurationsdateien. Welche Befehle dazu verwendet werden, hängt vom Typ des Datenbankspeichers ab. Wenn Sie den Datenbankspeichertyp nicht kennen, verwenden Sie die Datenbankbefehle im DB-System.
Verwenden Sie für den ACFS-Datenbankspeicher die folgenden Befehle, um die Brokerkonfigurationsdateien festzulegen.
alter system set dg_broker_config_file1='/u02/app/oracle/oradata/<Primary db_unique_name>/dbs/dr1<Primary db_unique_name>.dat'; alter system set dg_broker_config_file2='/u02/app/oracle/oradata/<Primary db_unique_name>/dbs/dr2<Primary db_unique_name>.dat';
Verwenden Sie für den ASM-Datenbankspeicher die folgenden Befehle, um die Brokerkonfigurationsdateien festzulegen.
alter system set dg_broker_config_file1='+DATA/<Primary db_unique_name>/dr1<db_unique_name>.dat'; alter system set dg_broker_config_file2='+DATA/<Primary db_unique_name>/dr2<db_unique_name>.dat';
- Aktivieren Sie den Broker-DMON-Prozess für die Datenbank.
alter system set dg_broker_start=true;
- Erzwingen Sie das Datenbanklogging für alle Datenbanktransaktionen.
alter database force logging ;
- Fügen Sie Standby-Redo-Logs (SRLs) basierend auf den Online-Redo-Logs (ORLs) hinzu. Bei einem neu gestarteten DB-System gibt es drei ORLs mit der Größe 1073741824. Erstellen Sie also vier SRLs mit der gleichen Größe.
Mit der folgenden Abfrage können Sie die Anzahl und Größe (in Byte) der ORLs bestimmen.
Ausgabe:select group#, bytes from v$log;
GROUP# BYTES ---------- ---------- 1 1073741824 2 1073741824 3 1073741824
Alle ORLs müssen dieselbe Größe haben.
Die SRLs müssen dieselbe Größe wie die ORLs haben. Es muss jedoch mindestens eine SRL mehr als ORLs vorhanden sein. Im obigen Beispiel gibt es drei ORLs. Also sind vier SRLs erforderlich. Geben Sie also die aktuelle Redo-Loganzahl plus 1 an, und verwenden Sie dieselbe Größe wie die der Redo-Logs.
alter database add standby logfile thread 1 size <size>;
Es darf nur ein Element in der SRL-Gruppe vorhanden sein (standardmäßig wird ein DB-System mit nur einem Mitglied pro SRL-Gruppe erstellt). Dazu können Sie die Datei nach der folgenden Syntax benennen.
alter database add standby logfile thread 1 group 4 (<logfile name with full path>) size 1073741824, group 5(<logfile name with full path>) size 1073741824 ...
Bei ASM-/OMF-Konfigurationen verwendet der obige Befehl die Datenträgergruppe anstelle von <logfile name with full path>.
alter database add standby logfile thread 1 group 4 (+RECO) size 1073741824, group 5(+RECO) size 1073741824 ...
Tipp:
Die Größe der ORLs und SRLs muss so bemessen sein, dass Logwechsel nicht häufiger als alle 10 Minuten vorkommen. Dazu benötigen Sie Kenntnisse der Anwendung. Möglicherweise muss der Wert nach dem Deployment angepasst werden. Weitere Informationen finden Sie unter Standby-Redo-Logs verwenden und Größe richtig konfigurieren.
- Prüfen Sie, ob Sie die richtige Anzahl von SRLs erstellt haben.
select group#, bytes from v$standby_log;
- Stellen Sie sicher, dass sich die Datenbank im ARCHIVELOG-Modus befindet.
archive log list
- Aktivieren Sie das Datenbank-FLASHBACK. Der empfohlene Mindestwert für db_flashback_retention_target beträgt 120 Minuten.
alter database flashback on ; alter system set db_flashback_retention_target=120;
- Führen Sie einen Redo-Log-Wechsel aus, um die Archivierung zu aktivieren, wenn die Datenbank neu erstellt wurde. (Mindestens ein Log muss archiviert werden, bevor die RMAN-Duplizierung ausgeführt wird.)
alter system switch logfile;
Standbydatenbank vorbereiten
Bevor Sie die Standbydatenbank vorbereiten, stellen Sie sicher, dass das Datenbank-Home auf der Standbydatenbank dieselbe Version wie auf der Primärdatenbank hat. (Wenn die Primär- und die Standbydatenbank beide mit derselben Datenbankversion neu erstellt werden, sind die Datenbank-Homes identisch.) Erstellen Sie andernfalls ein Datenbank-Home mit derselben Version. Mit den Dbhome-Befehlen können Sie die Versionen prüfen und gegebenenfalls ein neues Datenbank-Home erstellen.
Um das Standby-DB-System vorzubereiten, müssen Sie statische Listener konfigurieren, tnsnames.ora aktualisieren, ein TDE-Wallet konfigurieren, eine temporäre Kennwortdatei erstellen, die Konnektivität prüfen, RMAN DUPLICATE ausführen, FLASHBACK aktivieren und dann den Datenbankservice erstellen.
Statische Listener konfigurieren
Erstellen Sie statische Listener zur Verwendung durch RMAN und Data Guard Broker.
- Greifen Sie mit SSH auf das Standby-DB-System zu, melden Sie sich als Benutzer
opc
oderroot
an, und wechseln Sie mitsudo
zum BS-Benutzer "grid".sudo su - grid
- Fügen Sie der Datei
/u01/app/<db_version>/grid/network/admin/listener.ora.
den folgenden Inhalt hinzu.Der unten gezeigte erste statische Listener ist für RMAN DUPLICATE erforderlich. Der zweite statische Listener DGMGRL ist bei den Datenbankversionen 12.2.0.1 und 12.1.0.2 optional, jedoch für die Datenbankversion 11.2.0.4 erforderlich.
SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <standby db_unique_name>.<standby db_domain>) (SID_NAME = <standby oracle_sid>) (ORACLE_HOME=<oracle home directory>) (ENVS="TNS_ADMIN=<oracle home directory>/network/admin") ) (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <standby db_unique_name>_DGMGRL.<standby db_domain>) (SID_NAME = <standby oracle_sid>) (ORACLE_HOME=<oracle home directory>) (ENVS="TNS_ADMIN=<oracle home directory>/network/admin") ) )
- Starten Sie den Listener neu.
srvctl stop listener srvctl start listener
- Prüfen Sie, ob die statischen Listener verfügbar sind. Die folgende Beispielausgabe gilt für die Datenbankversion 12.1.0.2. Beachten Sie, dass die Meldungen zu
...status UNKNOWN
zu diesem Zeitpunkt zu erwarten sind.
Ausgabe:lsnrctl status
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 29-SEP-2016 21:09:25 Copyright (c) 1991, 2014, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 12.1.0.2.0 - Production Start Date 29-SEP-2016 21:09:19 Uptime 0 days 0 hr. 0 min. 5 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/12.1.0.2/grid/network/admin/listener.ora Listener Log File /u01/app/grid/diag/tnslsnr/dg2/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.0.1.24)(PORT=1521))) Services Summary... Service "dg2_phx2hx.oratst.org" has 1 instance(s). Instance "dg2", status UNKNOWN, has 1 handler(s) for this service... Service "dg2_phx2hx_DGMGRL.oratst.org" has 1 instance(s). Instance "dg2", status UNKNOWN, has 1 handler(s) for this service... The command completed successfully
Net Service-Namen zu tnsnames.ora hinzufügen
Fügen Sie als Benutzer "oracle" den Net Service-Namen der Standbydatenbank zur Datei $ORACLE_HOME/network/admin/tnsnames.ora
hinzu. $ORACLE_HOME ist das Datenbank-Home, in dem die Standbydatenbank ausgeführt wird.
<Primary db_unique_name> =
(DESCRIPTION =
(SDU=65535)
(ADDRESS = (PROTOCOL = TCP)(HOST = <primary_server>.<domain>) (PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <primary db_unique_name).<primary db_domain>)
)
)
<Standby db_unique_name> =
(DESCRIPTION =
(SDU=65535)
(ADDRESS = (PROTOCOL = TCP)(HOST = <standby_server>.<domain>) (PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <standby db_unique_name>.<db_domain>)
)
)
TDE-Wallets in das Standbysystem kopieren
scp -i <private key> primary_server:/opt/oracle/dcs/commonstore/wallets/tde/<primary db_unique_name>/* standby_server:/opt/oracle/dcs/commonstore/wallets/tde/<standby db_unique_name>
Standbysystemkonfiguration einrichten
Erstellen Sie als Benutzer "oracle" das folgende Verzeichnis für die Datenbankversion 11.2.0.4. Dieser Schritt ist bei Versionen 12.2.0.1 und 12.1.0.2 optional.
mkdir -pv /u03/app/oracle/redo/<standby db_unique_name uppercase>/controlfile
Auditdateiziel erstellen
Erstellen Sie als Benutzer "oracle" das folgende Verzeichnis als Auditdateiziel.
mkdir -p /u01/app/oracle/admin/<db_name>/adump
Andernfalls wird der später verwendete RMAN-Duplizierungsbefehl nicht erfolgreich ausgeführt.
Temporäre Kennwortdatei erstellen
Erstellen Sie als Benutzer "oracle" eine temporäre Kennwortdatei.
orapwd file=$ORACLE_HOME/dbs/orapw<standby oracle_sid> password=<admin password for primary> entries=5
Das Kennwort muss mit dem Admin-Kennwort der Primärdatenbank identisch sein. Andernfalls verläuft der folgende RMAN
-Duplizierungsschritt nicht erfolgreich mit: RMAN-05614: Kennwörter für Ziel- und Auxiliary-Verbindungen müssen identisch sein, wenn aktives Duplikat verwendet wird.
Prüfen, ob die Standbydatenbank verfügbar ist
- Legen Sie als Benutzer "oracle" die Umgebungsvariablen fest.
. oraenv
- Ersetzen Sie
$ORACLE_HOME/dbs/init<standby sid_name>.ora
durch den folgenden Inhalt:db_name=<Primary db_name> db_unique_name=<standby db_unique_name> db_domain=<standby db_domain>
- Entfernen Sie die SPFILE aus der Standbydatenbank.
/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile$ORACLE_SID.ora
Die Datenbank muss im Nomount-Modus gestartet werden, ohne dass eine SPFILE angegeben ist. Die ursprüngliche Initialisierungsdatei enthält jedoch einen SPFILE-Parameter, der verhindert, dass der
RMAN
-Duplizierungsschritt funktioniert. - Legen Sie die Umgebungsvariable
ORACLE_UNQNAME
so fest, dass sie aufDB_UNIQUE_NAME
verweist.export ORACLE_UNQNAME =db_unique_name
Hinweis:
Wenn Sie diesen Schritt nicht ausführen, wird das Wallet nicht geöffnet, und der BefehlRMAN DUPLICATE
im folgenden Schritt wird nicht erfolgreich ausgeführt. - Der zuvor ausgeführte Befehl
dbcli create-database --instanceonly
öffnet die Standbydatenbank als Primärdatenbank im Schreibzugriffsmodus. Daher muss die Datenbank heruntergefahren werden, bevor der unten beschriebene Nomount-Schritt ausgeführt wird.sqlplus / as sysdba shutdown immediate
- Starten Sie die Datenbank im Nomount-Modus.
startup nomount
Datenbankverbindung überprüfen
Prüfen Sie die Verbindung zwischen der Primär- und der Standbydatenbank.
- Stellen Sie sicher, dass der Listener-Port 1521 in den Sicherheitslisten geöffnet ist, die für das Primär- und das Standby-DB-System verwendet werden. Weitere Informationen finden Sie unter Sicherheitsliste für das DB-System aktualisieren.
- Stellen Sie von der Primärdatenbank aus eine Verbindung zur Standbydatenbank her.
sqlplus sys/<password>@<standby net service name> as sysdba
- Stellen Sie von der Standbydatenbank aus eine Verbindung zur Primärdatenbank her.
sqlplus sys/<password>@<primary net service name> as sysdba
RMAN-DUPLICATE-Befehl ausführen
Führen Sie als Benutzer "oracle" auf dem Standby-DB-System den RMAN-DUPLICATE-Befehl aus.
Wenn die Primärdatenbank groß ist, können Sie zusätzliche Kanäle zuweisen, um die Performance zu verbessern. Bei einer neu installierten Datenbank wird die Datenbankduplizierung mit einem Kanal in der Regel in wenigen Minuten ausgeführt.
Stellen Sie sicher, dass vom RMAN-DUPLICATE-Befehl keine Fehler generiert wurden. Wenn Fehler auftreten, starten Sie die Datenbank mit der Datei init.ora
(nicht SPFILE) neu, falls diese im Rahmen von RMAN DUPLICATE unter $ORACLE_HOME/dbs
generiert wird.
Verwenden Sie in den folgenden Beispielen Kleinbuchstaben für <Standby db_unique_name>, sofern nichts anderes angegeben ist.
Führen Sie für das ACFS-Speicherlayout die folgenden Befehle aus.
rman target sys/<password>@<primary alias> auxiliary sys/<password>@<standby alias> log=rman.out
run { allocate channel prim1 type disk;
allocate auxiliary channel sby type disk;
duplicate target database for standby from active database
dorecover
spfile
parameter_value_convert '/<Primary db_unique_name>/','/<Standby db_unique_name>/','/<Primary db_unique_name uppercase>/','/<Standby db_unique_name uppercase >/'
set db_unique_name='<Standby db_unique_name>'
set db_create_file_dest='/u02/app/oracle/oradata/<Standby db_unique_name>'
set dg_broker_config_file1='/u02/app/oracle/oradata/<Standby db_unique_name>/dbs/dr1<Standby db_unique_name>.dat'
set dg_broker_config_file2='/u02/app/oracle/oradata/<Standby db_unique_name>/dbs/dr2<Standby db_unique_name>.dat'
set dispatchers ='(PROTOCOL=TCP) (SERVICE=<Standby db_unique_name>XDB)'
set instance_name='<Standby db_unique_name>'
;
}
Führen Sie für das ASM-Speicherlayout die folgenden Befehle aus.
rman target sys/<password>@<primary alias> auxiliary sys/<password>@<standby alias> log=rman.out
run {
allocate channel prim1 type disk;
allocate auxiliary channel sby type disk;
duplicate target database for standby from active database
dorecover
spfile
parameter_value_convert '/<Primary db_unique_name>/','/<Standby db_unique_name>/','/<Primary db_unique_name uppercase>/','/<Standby db_unique_name uppercase>/'
set db_unique_name='<Standby db_unique_name>'
set dg_broker_config_file1='+DATA/<Standby db_unique_name>/dr1<Standby db_unique_name>.dat'
set dg_broker_config_file2='+DATA/<Standby db_unique_name>/dr2<Standby db_unique_name>.dat'
set dispatchers ='(PROTOCOL=TCP) (SERVICE=<Standby db_unique_name>XDB)'
set instance_name='<Standby db_unique_name>'
;
}
Datenbank-FLASHBACK aktivieren
- Als Best Practice für Data Guard wird empfohlen, dass Sie Flashback aktivieren und
db_flashback_retention_target
in der Primär- und der Standbydatenbank auf mindestens 120 Minuten setzen.alter database flashback on; alter system set db_flashback_retention_target=120;
- Prüfen Sie, ob die Standbydatenbank richtig erstellt wurde.
select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE,SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;
Datenbankservice erstellen
Oracle empfiehlt, mit "srvctl" einen Datenbankservice für die Standbydatenbank zu erstellen.
Für ACFS-Speicherlayout:
- Erstellen Sie ein gemeinsames Verzeichnis, und kopieren Sie die SPFILE dorthin.
mkdir -pv /u02/app/oracle/oradata/<Standby db_unique_name>/dbs cp $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora /u02/app/oracle/oradata/<Standby db_unique_name>/dbs
- Stoppen und entfernen Sie den vorhandenen Datenbankservice.
srvctl stop database -d <standby db_unique_name> srvctl remove database -d <standby db_unique_name>
- Erstellen Sie den Datenbankservice.
srvctl add database -d <standby db_unique_name> -n <standby db_name> -o $ORACLE_HOME -c SINGLE -p '/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile<standby db_name>.ora' -x <standby hostname> -s "READ ONLY" -r PHYSICAL_STANDBY -i <db_name> srvctl setenv database -d <standby db_unique_name> -t "ORACLE_UNQNAME=<standby db_unique_name>" srvctl config database -d <standby db_unique_name>
- Starten Sie den Datenbankservice.
srvctl start database -d <standby db_unique_name>
- Bereinigen Sie die Dateien aus
$ORACLE_HOME/dbs
.rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora
- Erstellen Sie die Datei
$ORACLE_HOME/dbs/init<standby oracle_sid>.ora
, um den neuen Speicherort der SPFILE zu referenzieren.SPFILE='/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile<standby db_name>.ora'
- Stoppen Sie die Standbydatenbank, und starten Sie sie dann mit
srvctl
.srvctl stop database -d <standby db_unique_name> srvctl start database -d <standby db_unique_name>
Für ASM-Speicherlayout:
- Generieren Sie die SPFILE gegebenenfalls unter +DATA.
create pfile='init<standby oracle_sid>.ora' from spfile ; create spfile='+DATA' from pfile='init<standby oracle_sid>.ora' ;
- Stoppen und entfernen Sie den vorhandenen Datenbankservice.
srvctl stop database -d <standby db_unique_name> srvctl remove database -d <standby db_unique_name>
- Erstellen Sie den Datenbankservice.
srvctl add database -d <standby db_unique_name> -n <standby db_name> -o $ORACLE_HOME -c SINGLE -p '+DATA/<standby db_unique_name>/PARAMETERFILE/spfile.xxx.xxxxxx' -x <standby hostname> -s "READ ONLY" -r PHYSICAL_STANDBY -i <db_name> srvctl setenv database -d <standby db_unique_name> -t "ORACLE_UNQNAME=<standby db_unique_name>" srvctl config database -d <standby db_unique_name>
- Starten Sie den Datenbankservice.
srvctl start database -d <standby db_unique_name>
- Bereinigen Sie die Dateien aus
$ORACLE_HOME/dbs
.rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora
- Erstellen Sie die Datei
$ORACLE_HOME/dbs/init<standby oracle_sid>.ora
, um den neuen Speicherort der SPFILE zu referenzieren.SPFILE='+DATA/<standby db_unique_name>/PARAMETERFILE/spfile.xxx.xxxxxx'
- Stoppen Sie die Datenbank, und starten Sie die Standbydatenbank mit "srvctl".
srvctl start database -d <standby db_unique_name>
Data Guard konfigurieren
Führen Sie die folgenden Schritte aus, um die Konfiguration von Data Guard abzuschließen und Redo-Transport von der Primärdatenbank sowie Redo Apply in der Standbydatenbank zu aktivieren.
- Führen Sie das Befehlszeilenutility
dgmgrl
entweder aus dem Primär- oder dem Standby-DB-System aus, und stellen Sie mit Sys-Zugangsdaten eine Verbindung zur Primärdatenbank her.connect sys/<sys password>@<primary tns alias>
- Erstellen Sie die Data Guard-Konfiguration, und identifizieren Sie die Primär- und die Standbydatenbank im Befehlszeilenutility
dgmgrl
.create configuration mystby as primary database is <primary db_unique_name> connect identifier is <primary tns alias>; add database <standby db_unique_name> as connect identifier is <standby tns alias> maintained as physical;
- Aktivieren Sie die Data Guard-Konfiguration mit dem Befehlszeilenutility
dgmgrl
.enable configuration;
- Prüfen Sie, ob das Data Guard-Setup korrekt vorgenommen wurde. Führen Sie die folgende SQL-Anweisung im SQL-Prompt in der Primär- und in der Standbydatenbank aus.
select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database;
- Prüfen Sie, ob die Data Guard-Prozesse in der Standbydatenbank initiiert wurden.
select PROCESS,PID,DELAY_MINS from V$MANAGED_STANDBY;
- Prüfen Sie die Parameterkonfiguration in der Primär- und der Standbydatenbank.
show parameter log_archive_dest_ show parameter log_archive_config show parameter fal_server show parameter log_archive_format
- Prüfen Sie mit dem Befehlszeilenutility
dgmgrl
, ob die Data Guard-Konfiguration funktioniert. Stellen Sie insbesondere sicher, dass Redo Shipping und Redo Apply aktiv sind und dass die Standbydatenbank gegenüber der Primärdatenbank nicht zu stark verzögert ist.show configuration verbose show database verbose <standby db_unique_name> show database verbose <primary db_unique_name>
Alle Abweichungen, Fehler oder Warnungen müssen behoben werden. Sie können auch eine Transaktion in der Primärdatenbank ausführen und prüfen, ob sie in der Standbydatenbank sichtbar ist.
- Prüfen Sie, ob die Data Guard-Konfiguration wie erwartet funktioniert, indem Sie Switchover und Failover in beide Richtungen durchführen. Führen Sie nach jedem Vorgang
show configuration
aus, und stellen Sie sicher, dass keine Fehler oder Warnungen im Befehlszeilenutilitydgmgrl
vorhanden sind.Achtung:
Dieser Schritt ist optional und kann nach Belieben ausgeführt werden. Wenn die Konfiguration aus irgendeinem Grund nicht gültig ist, sind Switchover und/oder Failover nicht erfolgreich, und es kann schwierig oder unmöglich sein, die Primärdatenbank zu starten. Möglicherweise ist ein Recovery der Primärdatenbank erforderlich, was sich auf die Verfügbarkeit auswirkt.
switchover to <standby db_unique_name> switchover to <primary db_unique_name> #connect to standby before failover: connect sys/<sys password>@<standby db_unique_name> failover to <standby db_unique_name> reinstate database <primary db_unique_name> #connect to primary before failover: connect sys/<sys password>@<primary db_unique_name> failover to <primary db_unique_name> reinstate database <standby db_unique_name>
Observer konfigurieren (optional)
Die Best Practice für High Availability und Dauerhaftigkeit besteht in der Ausführung von Primär- und Standbydatenbank sowie Observer in separaten Availability-Domains. Der Observer bestimmt, ob ein Failover auf eine bestimmte Zielstandbydatenbank vorgenommen werden soll. Der als Observer verwendete Server erfordert die Oracle Client Administrator-Software, die Oracle SQL NET und Broker einschließt. Führen Sie die folgenden Befehle im Befehlszeilenutility dgmgrl
aus.
- Konfigurieren Sie TNS-Aliasnamen für die Primär- und die Standbydatenbank wie oben beschrieben, und prüfen Sie die Verbindung zu beiden Datenbanken.
- Ändern Sie den Schutzmodus in "maxavailability" oder "maxperformance" ("maxprotection" wird für FSFO nicht unterstützt).
So aktivieren Sie "maxavailability":
edit database <standby db_unique_name> set property 'logXptMode'='SYNC'; edit database <primary db_unique_name> set property 'logXptMode'='SYNC'; edit configuration set protection mode as maxavailability;
So aktivieren Sie "maxperformance":
edit configuration set protection mode as maxperformance; edit database <standby db_unique_name> set property 'logXptMode'='ASYNC'; edit database <primary db_unique_name> set property 'logXptMode'='ASYNC';
Bei "maxperformance" begrenzt die Eigenschaft
FastStartFailoverLaglimit
den maximal zulässigen Datenverlust standardmäßig auf 30 Sekunden. - Die folgenden Eigenschaften müssen ebenfalls berücksichtigt werden. Führen Sie
show configuration verbose
aus, um die aktuellen Werte anzuzeigen.- FastStartFailoverPmyShutdown
- FastStartFailoverThreshold
- FastStartFailoverTarget
- FastStartFailoverAutoReinstate
(Die Ausführung von
show configuration
führt zum folgenden Fehler, bis der Observer gestartet wird:Warnung: ORA-16819: Observer für Fast-Start Failover nicht gestartet
.) - Fast-Start Failover von Broker aus aktivieren:
Enable fast_start failover
- Prüfen Sie den Fast-Start Failover und die zugehörigen Einstellungen.
show fast_start failover
- Starten Sie den Observer aus dem Broker (er wird im Vordergrund ausgeführt, kann auch im Hintergrund ausgeführt werden).
start observer
- Stellen Sie sicher, dass der Fast-Start Failover aktiviert ist und keine Fehler oder Warnungen vorliegen.
show configuration verbose
- Testen Sie den Failover immer in beiden Richtungen, um sicherzustellen, dass alles wie erwartet funktioniert. Prüfen Sie, ob FSFO richtig ausgeführt wird, indem Sie die Primärdatenbank mit SHUTDOWN ABORT abbrechen.
Der Observer sollte den Failover zur Standbydatenbank starten. Wenn der Schutzmodus auf "maxprotection" gesetzt ist, kann es zu Datenverlust kommen, basierend auf dem FastStartFailoverLaglimit-Wert.