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;
}
Leave A Comment