Hier ein paar Notizen zum erstellen einer Standby-Datenbank mittels RMAN.
Immer
wieder ärgere ich mich darüber, dass es im Internet keine vollständig
beschriebene Anleitung gibt, wie man eine Standby-DB voll automatisch
mit RMAN erstellt. Also habe ich mich dazu entschlossen eine weitere
unvollständige Version hinzuzufügen. Vielleicht hilft es dem einen oder
anderen... also, viel Erfolg!
Primary DB
- Primary muss im Archivelog-Modus Laufen.
- Force Loggin muss eingeschaltet sein.
- Flashback muss an sein.
SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP MOUNT; SQL> ALTER DATABASE ARCHIVELOG; SQL> ALTER DATABASE FLASHBACK ON; SQL> ALTER DATABASE FORCE LOGGING; SQL> ALTER DATABASE OPEN;
Standby-Logfiles anlegen: Laut Oracle-Dokumentation sollen so viele Standby Log Gruppen angelegt werden wie Anzahl Redo Log Gruppen + 1. Im Fall eines RACs, sind es die Anzahl der Online Redo Logdateien + 1 multipliziert mit der Anzahl der RAC-Knoten.
Der Befehl zum Anlegen lautet wie folgt:
alter database add standby logfile group 4 size 50M; alter database add standby logfile group 5 size 50M; alter database add standby logfile group 6 size 50M; alter database add standby logfile group 7 size 50M;
SQL-Net vorbereiten
In die SID-List des Primary und Standby Listeners die jeweilige Datenbank eintragen (+ _DGMGRL Eintrag). Anschließend die TNS-Names Einträge erstellen. Das Format des GLOBAL_NAME muss wie folgt sein: <db_unique_name>_DGMGRL[.db_domain]listener.ora auf Primary
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = primhost)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = mars_DGMGRL) (ORACLE_HOME = c:\oracle\product\db112) (SID_NAME = mars) ) )
listener.ora auf Standby
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = stbyhost)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = mars_dg_DGMGRL) (ORACLE_HOME = c:\oracle\product\db112) (SID_NAME = mars) ) )
tnsnames.ora auf beiden Servern
DG_mars = (DESCRIPTION = (ADDRESS = (PROTOCOL=TCP)(HOST=primhost)(PORT=1521)) (CONNECT_DATA = (SERVICE_NAME = mars_DGMGRL) ) ) DG_mars_dg = (DESCRIPTION = (ADDRESS = (PROTOCOL=TCP)(HOST=stbyhost)(PORT=1521)) (CONNECT_DATA = (SERVICE_NAME = mars_dg_DGMGRL) ) )
Passwordfile
Das Passwordfile muss von der Primary Datenbank auf die Standby Datenbank kopiert werden. Neu erzeugen hilft nichts.SPFILE erstellen
*.audit_file_dest='/opt/oracle/admin/dummy/adump' *.db_create_file_dest='/opt/oracle/oradata' *.db_name='mars' *.db_recovery_file_dest='/opt/oracle/fast_recovery_area' *.db_recovery_file_dest_size=17179869184 *.db_unique_name='mars_dg' *.diagnostic_dest='/opt/oracle' *.memory_target=536870912 *.undo_tablespace='UNDOTBS1'!!!Es dürfen keine Dataguard-Spezifischen Parameter gesetzt sein. Wenn OMF verwendet wird, ist auch der Parameter "controlfiles" überflüssig. Alle nötigen Parameter werden von RMAN und später vom Broker gesetzt. Also am besten copy-paste übernehmen und namen anpassen.
Datenbank Clonen
C:\Users\Administrator.DC_MARS>set ORACLE_SID=mars (der folgende Befehl nur unter Windows) C:\Users\Administrator.DC_MARS>oradim -new -sid mars Instanz erstellt. C:\Users\Administrator.DC_MARS>sqlplus / as sysdba SQL*Plus: Release 11.2.0.2.0 Production on Fr Mai 4 12:28:51 2012 Copyright (c) 1982, 2010, Oracle. All rights reserved. Bei einer nicht hochgefahrenen Instanz angemeldet. SQL> create spfile from pfile; Datei erstellt. SQL> startup nomount ORACLE-Instanz hochgefahren. Total System Global Area 4,8103E+10 bytes Fixed Size 2264200 bytes Variable Size 2,2414E+10 bytes Database Buffers 2,5636E+10 bytes Redo Buffers 50454528 bytes SQL>Und jetzt das eigentlich Clonen...
C:\Users\Administrator.DC_MARS>rman Recovery Manager: Release 11.2.0.2.0 - Production on Fr Mai 4 12:32:39 2012 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. RMAN> connect target sys/<pw>@DG_mars Mit Ziel-Datenbank verbunden: MARS (DBID=3147292014) RMAN> connect auxiliary sys/<pw>@DG_mars_dg Bei Hilfsdatenbank angemeldet: MARS (nicht mit MOUNT angeschlossen) RMAN> RMAN> RMAN> run { allocate channel d1 device type disk; allocate channel d2 device type disk; allocate channel d3 device type disk; allocate auxiliary channel aux1 device type disk; allocate auxiliary channel aux2 device type disk; allocate auxiliary channel aux3 device type disk; duplicate target database for standby from active database; } Kontrolldatei der Zieldatenbank wird anstelle des Recovery-Katalogs verwendet Zugewiesener Kanal: d1 Kanal d1: SID=1267 Device-Typ=DISK Zugewiesener Kanal: d2 Kanal d2: SID=1373 Device-Typ=DISK Zugewiesener Kanal: d3 Kanal d3: SID=1468 Device-Typ=DISK Zugewiesener Kanal: aux1 Kanal aux1: SID=673 Device-Typ=DISK Zugewiesener Kanal: aux2 Kanal aux2: SID=770 Device-Typ=DISK Zugewiesener Kanal: aux3 Kanal aux3: SID=866 Device-Typ=DISK Starten Duplicate Db um 04.05.12 Inhalt von Speicher-Skript: { backup as copy reuse targetfile 'c:\oracle\product\db112\DATABASE\PWDmars.ORA' auxiliary format 'c:\Oracle\product\db112\DATABASE\PWDmars.ORA' ; } Speicher-Skript wird ausgef³hrt Starten backup um 04.05.12 Beendet backup um 04.05.12 Inhalt von Speicher-Skript: { sql clone "alter system set control_files = ''L:\ORADATA\MARS\CONTROLFILE\O1_MF_7T7FK57Q_.CTL'', ''F:\ORAFLASH\MARS\CONTROLFILE\O1_MF_7T7FK57Q_.CTL'' comment=''Set by RMAN'' scope=spfile"; backup as copy current controlfile for standby auxiliary format 'L:\ORADATA\MARS\CONTROLFILE\O1_MF_7T7FK586_.CTL'; restore clone controlfile to 'F:\ORAFLASH\MARS\CONTROLFILE\O1_MF_7T7FK586_.CTL' from 'L:\ORADATA\MARS\CONTROLFILE\O1_MF_7T7FK586_.CTL'; sql clone "alter system set control_files = ''L:\ORADATA\MARS\CONTROLFILE\O1_MF_7T7FK586_.CTL'', ''F:\ORAFLASH\MARS\CONTROLFILE\O1_MF_7T7FK586_.CTL'' comment=''Set by RMAN'' scope=spfile"; shutdown clone immediate; startup clone nomount; } Speicher-Skript wird ausgef³hrt SQL-Anweisung: alter system set control_files = ''L:\ORADATA\MARS\CONTROLFILE\O1_MF_7T7FK57Q_.CTL'', ''F:\ORAFLASH\MARS\CONTROLFILE\O1_MF_7T7FK57Q_.CTL'' comment= ''Set by RMAN'' scope=spfile Starten backup um 04.05.12 Kanal d1: Datendatei-Kopie wird gestartet Standby-Kontrolldatei wird kopiert Ausgabedateiname=C:\ORACLE\PRODUCT\DB112\DATABASE\SNCFMARS.ORA Tag=TAG20120504T125741 RECID=111 STAMP=782398662 Kanal d1: Datendatei-Kopie abgeschlossen, abgelaufene Zeit: 00:00:02 Beendet backup um 04.05.12 Starten restore um 04.05.12 Kanal aux2: ³bersprungen, AUTOBACKUP schon gefunden Kanal aux3: ³bersprungen, AUTOBACKUP schon gefunden Kanal aux1: Kontrolldateikopie wurde kopiert Beendet restore um 04.05.12 SQL-Anweisung: alter system set control_files = ''L:\ORADATA\MARS\CONTROLFILE\O1_MF_7T7FK586_.CTL'', ''F:\ORAFLASH\MARS\CONTROLFILE\O1_MF_7T7FK586_.CTL'' comment= ''Set by RMAN'' scope=spfile Oracle-Instanz heruntergefahren Mit Hilfsdatenbank verbunden (nicht gestartet) Oracle-Instanz gestartet Gesamte System Global Area 48102666240 Byte Fixed Size 2264200 Byte Variable Size 22414361464 Byte Database Buffers 25635586048 Byte Redo Buffers 50454528 Byte Zugewiesener Kanal: aux1 Kanal aux1: SID=578 Device-Typ=DISK Zugewiesener Kanal: aux2 Kanal aux2: SID=673 Device-Typ=DISK Zugewiesener Kanal: aux3 Kanal aux3: SID=770 Device-Typ=DISK Inhalt von Speicher-Skript: { sql clone 'alter database mount standby database'; } Speicher-Skript wird ausgef³hrt SQL-Anweisung: alter database mount standby database Inhalt von Speicher-Skript: { set newname for clone tempfile 2 to new; switch clone tempfile all; set newname for clone datafile 1 to new; set newname for clone datafile 2 to new; set newname for clone datafile 3 to new; set newname for clone datafile 4 to new; set newname for clone datafile 5 to new; set newname for clone datafile 6 to new; backup as copy reuse datafile 1 auxiliary format new datafile 2 auxiliary format new datafile 3 auxiliary format new datafile 4 auxiliary format new datafile 5 auxiliary format new datafile 6 auxiliary format new ; sql 'alter system archive log current'; } Speicher-Skript wird ausgef³hrt Befehl wird ausgef³hrt: SET NEWNAME Temporõre Datei 2 in Kontrolldatei in L:\ORADATA\MARS\DATAFILE\O1_MF_TEMP_%U_.TMP umbenannt Befehl wird ausgef³hrt: SET NEWNAME Befehl wird ausgef³hrt: SET NEWNAME Befehl wird ausgef³hrt: SET NEWNAME Befehl wird ausgef³hrt: SET NEWNAME Befehl wird ausgef³hrt: SET NEWNAME Befehl wird ausgef³hrt: SET NEWNAME Starten backup um 04.05.12 Kanal d1: Datendatei-Kopie wird gestartet Dateinummer der Eingabedatendatei=00004 Name=E:\ORADATA\MARS_DG\DATAFILE\O1_MF_DATA1_DATA_D-MARS_I-3147292014_TS-DATA1_FNO-4_1EMOBHPS_.DBF Kanal d2: Datendatei-Kopie wird gestartet Dateinummer der Eingabedatendatei=00006 Name=E:\ORADATA\MARS_DG\DATAFILE\O1_MF_DATA1_77P38MKR_.DBF Kanal d3: Datendatei-Kopie wird gestartet Dateinummer der Eingabedatendatei=00001 Name=E:\ORADATA\MARS_DG\DATAFILE\O1_MF_SYSTEM_DATA_D-MARS_I-3147292014_TS-SYSTEM_FNO-1_1GMOBHPT_.DBF Ausgabedateiname=L:\ORADATA\MARS\DATAFILE\O1_MF_SYSTEM_DATA_D-MARS_I-3147292014_TS-SYSTEM_FNO-1_D7NA4T7J_.DBF Tag=TAG20120504T125827 Kanal d3: Datendatei-Kopie abgeschlossen, abgelaufene Zeit: 00:02:36 Kanal d3: Datendatei-Kopie wird gestartet Dateinummer der Eingabedatendatei=00003 Name=E:\ORADATA\MARS_DG\DATAFILE\O1_MF_UNDOTBS1_DATA_D-MARS_I-3147292014_TS-UNDOTBS1_FNO-3_1HMOBHPT_.DBF Ausgabedateiname=L:\ORADATA\MARS\DATAFILE\O1_MF_UNDOTBS1_DATA_D-MARS_I-3147292014_TS-UNDOTBS1_FNO-3_D8NA4TCF_.DBF Tag=TAG20120504T125827 Kanal d3: Datendatei-Kopie abgeschlossen, abgelaufene Zeit: 00:00:36 Kanal d3: Datendatei-Kopie wird gestartet Dateinummer der Eingabedatendatei=00002 Name=E:\ORADATA\MARS_DG\DATAFILE\O1_MF_SYSAUX_DATA_D-MARS_I-3147292014_TS-SYSAUX_FNO-2_1IMOBHPT_.DBF Ausgabedateiname=L:\ORADATA\MARS\DATAFILE\O1_MF_SYSAUX_DATA_D-MARS_I-3147292014_TS-SYSAUX_FNO-2_D9NA4TDJ_.DBF Tag=TAG20120504T125827 Kanal d3: Datendatei-Kopie abgeschlossen, abgelaufene Zeit: 00:00:25 Kanal d3: Datendatei-Kopie wird gestartet Dateinummer der Eingabedatendatei=00005 Name=E:\ORADATA\MARS_DG\DATAFILE\O1_MF_INDEX1_DATA_D-MARS_I-3147292014_TS-INDEX1_FNO-5_1JMOBHPT_.DBF Ausgabedateiname=L:\ORADATA\MARS\DATAFILE\O1_MF_INDEX1_DATA_D-MARS_I-3147292014_TS-INDEX1_FNO-5_DANA4TEC_.DBF Tag=TAG20120504T125827 Kanal d3: Datendatei-Kopie abgeschlossen, abgelaufene Zeit: 00:00:07 Ausgabedateiname=L:\ORADATA\MARS\DATAFILE\O1_MF_DATA1_DATA_D-MARS_I-3147292014_TS-DATA1_FNO-6_D6NA4T7J_.DBF Tag=TAG20120504T125827 Kanal d2: Datendatei-Kopie abgeschlossen, abgelaufene Zeit: 00:09:13 Ausgabedateiname=L:\ORADATA\MARS\DATAFILE\O1_MF_DATA1_DATA_D-MARS_I-3147292014_TS-DATA1_FNO-4_D5NA4T7J_.DBF Tag=TAG20120504T125827 Kanal d1: Datendatei-Kopie abgeschlossen, abgelaufene Zeit: 00:10:33 Beendet backup um 04.05.12 SQL-Anweisung: alter system archive log current Inhalt von Speicher-Skript: { switch clone datafile all; } Speicher-Skript wird ausgef³hrt Datendatei 1 gegen Datendateikopie ausgetauscht Eingabe-Datendateikopie RECID=111 STAMP=782399342 Dateiname=L:\ORADATA\MARS\DATAFILE\O1_MF_SYSTEM_DATA_D-MARS_I-3147292014_TS-SYSTEM_FNO-1_D7NA4T7J_.DBF Datendatei 2 gegen Datendateikopie ausgetauscht Eingabe-Datendateikopie RECID=112 STAMP=782399342 Dateiname=L:\ORADATA\MARS\DATAFILE\O1_MF_SYSAUX_DATA_D-MARS_I-3147292014_TS-SYSAUX_FNO-2_D9NA4TDJ_.DBF Datendatei 3 gegen Datendateikopie ausgetauscht Eingabe-Datendateikopie RECID=113 STAMP=782399342 Dateiname=L:\ORADATA\MARS\DATAFILE\O1_MF_UNDOTBS1_DATA_D-MARS_I-3147292014_TS-UNDOTBS1_FNO-3_D8NA4TCF_.DBF Datendatei 4 gegen Datendateikopie ausgetauscht Eingabe-Datendateikopie RECID=114 STAMP=782399342 Dateiname=L:\ORADATA\MARS\DATAFILE\O1_MF_DATA1_DATA_D-MARS_I-3147292014_TS-DATA1_FNO-4_D5NA4T7J_.DBF Datendatei 5 gegen Datendateikopie ausgetauscht Eingabe-Datendateikopie RECID=115 STAMP=782399342 Dateiname=L:\ORADATA\MARS\DATAFILE\O1_MF_INDEX1_DATA_D-MARS_I-3147292014_TS-INDEX1_FNO-5_DANA4TEC_.DBF Datendatei 6 gegen Datendateikopie ausgetauscht Eingabe-Datendateikopie RECID=116 STAMP=782399343 Dateiname=L:\ORADATA\MARS\DATAFILE\O1_MF_DATA1_DATA_D-MARS_I-3147292014_TS-DATA1_FNO-6_D6NA4T7J_.DBF Beendet Duplicate Db um 04.05.12 Freigegebener Kanal: d1 Freigegebener Kanal: d2 Freigegebener Kanal: d3 Freigegebener Kanal: aux1 Freigegebener Kanal: aux2 Freigegebener Kanal: aux3 RMAN>
Broker Konfigurieren
Broker Starten
SQL> alter system set dg_broker_start=true;
Konfiguration erstellen
Primary Datenbank hinzufügen
DGMGRL> CONNECT sys/<pw>@DG_mars DGMGRL> create configuration mars_dataguard as primary database is mars connect identifier is DG_mars;
Standby Datenbank hinzufügen
DGMGRL> add database mars_dg as connect identifier is DG_mars_dg maintained as physical;
Konfiguration anschalten
DGMGRL> enable configuration;
Standby File Management auf AUTO setzen
DGMGRL> edit database mars set property 'StandbyFileManagement'='AUTO'; DGMGRL> edit database mars_dg set property 'StandbyFileManagement'='AUTO';
Protection Mode anpassen
Konfigurationen vornehmen:DGMGRL> edit database mars_dg set property 'logxptmode'='sync'; DGMGRL> edit database mars set property 'logxptmode'='sync';
DGMGRL> edit configuration set protection mode as maxavailability;
That's IT -- beim nächsten Mal mehr...