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 |
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 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 |
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 |
Kopieren der Passwort Datei
cd $ORACLE_HOME/dbs ##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. |
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 $ sqlplus / as sysdba SQL> startup nomount pfile=/oracle/product/19.0.0/dbhome_1/dbs/initORASTB.ora; quit |
Aktion auf Standby-Server
Erstellen Sie das folgende rman-Skript:
mkdir -p /home/oracle/scripts/ora_scripts 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 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 / |
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.