Dienstag, 22. Mai 2012

Standby-Datenbank mit RMAN voll automatisch erstellen

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';
Protection Mode wechseln:
DGMGRL> edit configuration set protection mode as maxavailability;
That's IT -- beim nächsten Mal mehr...

Keine Kommentare:

Kommentar veröffentlichen