Verhuizen van database naar andere Tru64-node m.b.v. RMAN met zo weinig mogelijk downtijd en geen verlies van transacties. Een uitgewerkt voorbeeld.

Samenvatting: kopieren van RMAN, restoren db op nieuwe node, en op het ‘moment supreme’ de oude db down brengen, archive-log files kopieren en de nieuwe db recoveren met deze files zodat je geen transactie mist.

Met dank aan Maiko Overgaauw en een mij bekende heer van stand.

Voorbeeld: van ‘cluster1’ naar ‘cluster2’

Op ‘cluster1’ inloggen met oracle user

Dan . oraenv

{SID1}

sqlplus (sys of system)

Select dbid from v$database: noteer dit getal.

select inst_id, name, value from gv$parameter where lower(name) like ‘%log_archive_dest_1%’ of : ‘ Show parameter archive’

Noteer de archive destinations (archive_dest1) van BEIDE instances

Kopieer de rman backupfiles van ‘cluster1’ naar ‘cluster2’.

    • Op ‘cluster2’ willen we deze files b.v. in de directory /data2/ORABCK/{DBNAAM} hebben en omdat /data2 op de nieuwe omgeving zijn actieve cfs systeem (**) om de b node heeft, inloggen op ‘cluster2’
    • cd /data2/ORABCK
    • mkdir {DBNAAM} voor de datafiles.
    • cd {DBNAAM}
    • scp oracle@’cluster1’:/data2/ORABCK/{DBNAAM}/* .
    • Archive-log directories aanmaken: cd /data4/orarecover1
    • mkdir {DBNAAM} voor de archive-log files.
    • cd {DBNAAM}
    • mkdir {SID1}
    • mkdir {SID2}
    • scp oracle@’cluster1’:{archive destination die hierboven genoteerd is}/* .
    • cp {de files die met scp zijn overgehaald} {SID1}.
    • cp {de files die met scp zijn overgehaald} {SID2}.
    • Waarom die twee laatste punten? Tijdens het restoren wil RMAN nog wel eens node-1 files uit node-2 directory halen. Daarom aan beide kanten alle files, pure gemakzucht.

Password files aanmaken

    • Op ‘cluster2’ in een shell:
    • . oraenv
    • {SID1}
    • Orapwd file=/opt/oracle/product/9.2.0/db_1/{DBNAAM}/dbs/orapw{SID1}
    • password={password}
    • . oraenv
    • {SID2}
    • Orapwd file=/opt/oracle/product/9.2.0/db_1/{DBNAAM}/dbs/orapw{SID2}
    • password=~password~

Init.ora file

    • Op ‘cluster2’ heb ik in de directory /opt/oracle/oude_pfile de pfile(s) gekopieerd van de oude omgeving.
    • We nemen de pfile die hoort bij {DBNAAM} en kopieren die naar /data1/oracle/dbs
      • cd /data1/oracle/dbs
      • cp /opt/oracle/oude_pfile/{init.ora file} init{SID1}.ora
      • vi init{SID1}.ora
      • Noteer de paden van de controlfiles en voeg b.v. een derde controlfile toe
      • Pad1:…………………………………………
      • Pad2:…………………………………………
      • Pad3:…………………………………………
      • Pas in init{SID1}.ora verder de diverse parameters aan welke betrekking hebben op verschillende instances.
    • Log in op ‘cluster2’.
    • Maak de paden aan voor de controlfiles zoals eerder genoteerd
    • . oraenv
    • {SID1}
    • Sqlplus /nolog
    • Connect / as sysdba
    • Create spfile from pfile
    • Cd /data1/oracle/dbs
    • Mv spfile{SID1}.ora spfile{DBNAAM}.ora
    • Vi init{DBNAAM}1.ora
      • Spfile=’{ORACLE_HOME}/dbs/spfile{DBNAAM}.ora’ LET OP de quotes
    • Vi init{DBNAAM}2.ora
      • Spfile=’{ORACLE_HOME}/dbs/spfile{DBNAAM}.ora’ LET OP de quotes

spfile en init{DBNAAM}1/2 zijn nu klaar

We restoren de controlfile vanuit deze backupset:

Op ‘cluster2’ beide instances starten

    • Op ‘cluster2,node-a’ inloggen
    • . oraenv
    • {SID1}
    • Sqlplus /nolog
    • Connect / as sysdba
    • Startup nomount
    • Exit
    • Op ‘cluster2,node-b’ inloggen
    • . oraenv
    • {SID2}
    • Sqlplus /nolog
    • Connect / as sysdba
    • Startup nomount
    • Exit
  • Rman
  • Connect target /
  • Set dbid={getal hierboven genoteerd} (nodig omdat we nog geen controlfile hebben)
  • Restore controlfile from ‘{rman backupfile met cfc in de naam}’
  • Alter database mount
  • Paden van de datafiles controleren (indien niet /data1/oradata, mbv runblock (zie onderaan dit document voor voorbeeld van een runblock) renamen.
  • Indien geen runblock in de vorige stap gebruikt dan: Restore database

{DBNAAM} is vrijwel compleet, alleen de archives moeten nog over gekopieerd worden van ‘cluster1’ naar ‘cluster2’ (b.v. directory /data4/orarecover1/{DBNAAM}/{SID1} en /data4/orarecover1/{DBNAAM}/{SID2}

  • noteer de namen van deze archives
  • sqlplus /nolog
  • connect / as sysdba
  • recover until cancel using backup controlfile
  • steeds ‘doorENTERen’
  • als er gevraagd wordt om een file die we niet hebben : CANCEL
  • op de oude omgeving checken hoe groot de temp file is (ls –al….) Dit noteren: grootte………………………………..

Op het overgangsmoment:

  • Applicatie stoppen
  • op ‘cluster1’ database stoppen (srvctl stop database –d {DBNAAM})
  • op ‘cluster1’ : (op 2 takken)
    • ssh –l oracle ‘cluster1,node-a’
    • . oraenv
    • {SID1}
    • sqlplus /nolog ,
    • connect / as sysdba ,
    • startup restrict,
    • alter system archive log current,
    • shutdown immediate;
    • ssh –l oracle ‘cluster1,node-b’
    • . oraenv
    • {SID2}
    • sqlplus /nolog ,
    • connect / as sysdba ,
    • startup restrict,
    • alter system archive log current,
    • shutdown immediate;

archives naar nieuwe cluster kopieren

filenames noteren

  • Op ‘cluster2’ inloggen met sqlplus /nolog
  • Connect / as sysdba
  • Recover database until cancel using backup controlfile
  • steeds ‘doorENTERen’
  • als er gevraagd wordt om een file die we niet hebben : CANCEL
  • op beide nodes
    • sqlplus /nolog
    • connect / as sysdba
    • shutdown immediate;
  • op b node sqlplus /nolog
  • connect / as sysdba
  • startup mount;
  • alter database open resetlogs
  • file toevoegen aan temp tablespace (let op de grootte)
    • Temp tablespace bevat nog geen files, want die zijn niet gebackup’d Daarom gaan we nu een nieuwe temp tablespace aanmaken en de oude daarna droppen.
    • Create temporary tablespace temp2 tempfile ‘/data1/oradata/{DBNAAM}/temp_tijd.dbf’ size10M;
    • Alter database default temporary tablespace temp2
    • Drop tablespace temp including contents and datafiles;
    • Create temporary tablespace temp tempfile; ‘/data1/oradata/{DBNAAM}/temp01.dbf’ size {xxx}M; ~Zie hierboven voor de invulling van xxx.
    • Alter database default temporary tablespace temp
    • Drop tablespace temp2 including contents and datafiles;
  • Srvctl stop database –d {DBNAAM}
  • Srvctl start database –d {DBNAAM}
  • Srvctl status database –d {DBNAAM} (om te checken of alles draait)
  • backup inregelen op nieuwe omgeving
  • backup oude omgeving uitschakelen
  • * om het dbid te achterhalen op de oude database met sqlplus (sys/system) inloggen en select dbid from v$database
  • ** /sbin/cfsmgr levert een overzicht van welke mountpoints aan welke actieve cfs gekoppeld zijn
  • Voorbeeld runblock voor rman:

run

{

set newname for datafile ‘/data1/oracle/92050/oradata/{DBNAAM}/system01.dbf’ to ‘/data1/oradata/{DBNAAM}/system01.dbf’;

set newname for datafile ‘/data1/oracle/92050/oradata/{DBNAAM}/undotbs01.dbf’ to ‘/data1/oradata/{DBNAAM}/undotbs01.dbf’;

set newname for datafile ‘/data1/oracle/92050/oradata/{DBNAAM}/indx01.dbf’to ‘/data1/oradata/{DBNAAM}/indx01.dbf’;

etc..

restore database;

switch datafile all;

}