fredag 22. april 2016

How did I migrate Oracle database from one server to another one?

How did I migrate oracle database from one server to another one?

I had many assignments about migration of Oracle databases. The last I got was to migrate databases version 11.2.0.4 from one Windows server to another Windows server. Well, I was thinking about two approaches:

1.      Involve template-migration with data files
2.      Use the good old RMAN.

If you thinking about the data location structure – good point there! To make less trouble about migration I decided to setup absolute the same data structure on the new server like on the old one. It means that the new server must to have C disc like the old one, D disc like the old one, E disc like the old one…and so on.

Although will be easier with Templates it have one very bad consequence: It locks all users and set theirs password expiredL.
I have tried with it and yes, all users’ accounts were locked after with expired password. HOWEVER, i had one solution to it:
Get their hash password, unlock user and renew password with the one from hash. Yes, it worked. You can find what I did in other post 
(Unlock/restore users/passwords after database migration)

This process is a little bit tricky and I decided to use RMAN and try option number two.

Preparation (old server):
·         Make a template of database (structure only) based on database you want to copy.
·         Write down info about NLS parameters
·         Write down DBID (SELECT DBID FROM V$DATABASE;)
·         Write down info about TEMP files:
·         select file_name from dba_temp_files;
·         Write down sizes of those files, location, name and tablespace name which files belong to.
·         Write down location where redologs files are placed (SELECT * FROM V$LOGFILE;)

Preparation (new server):
·         Install database software on the new server (same version, same location!) using template you have created before.
·         Install database with the same name as old database and pay attention on:
·         Install database with NLS parameters the same as on old server,
·         Location of FRA and DIAG folders – they have to be created manually if the installation process will not install them (same location as on the old server!).
·         Pay attention on firewall (the new server should not be visible on the production network yet)


OLD SERVER: 

Start CMD window and run:

SET ORACLE_SID=TEST    (TEST is the name of the database)
RMAN NOCATALOG
CONNECT TARGET /

Configure autobackup of controlfile and location where will be backup placed:

 RMAN>CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 'D:\TEST\BACKUP_TEST_MIG\%U';
 RMAN>CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN>CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'K:\TEST\BACKUP_TEST_MIG\%F';

Now, action:

Usually I made some control data I one test table in database which will I use against users which will complain that they lost some data (this is just not possible).
In one table of test-schema I made text like “Test migration “plus date/time”.


RMAN>shutdown immediate;
RMAN>startup mount;
RMAN>BACKUP AS BACKUPSET full database;
RMAN>alter database open; this is just to check that original database is OK again (this is not reuired to do it but I’m very careful about this) and stop database again!
RMAN>shutdown immediate;

·         Stop listener on original server
·         Copy the backup to the Server B (controlfile and backupset file)
·         Copy pfile, passwordfile, spfile from $ORACLE_HOME/database to the new server on the same location (overwrite!)

New server:
CMD
SET ORACLE_SID=TEST

·         check changes on local TNSNAME.ORA so it can accept connections

Start RMAN:
rman nocatalog
connect target /
RMAN> shutdown abort;
RMAN> startup nomount;

Restore control files

RMAN> SET DBID 1234567890; (DBID you got earlier from the old database)

RMAN> restore controlfile from 'path/backup_controlfile'

Delete redolog files

Outside of RMAN with WindowsExplorer delete all redo logs files (from location you wrote earlier) to get rid of ORA-01186 fail about file-verification.

Restore datafiles

RMAN>alter database mount;
 RMAN>CROSSCHECK ARCHIVELOG ALL;
 RMAN>CROSSCHECK BACKUP;
 RMAN>CATALOG START WITH 'full_path_to_folder_where_you _just_copied_backup' NOPROMPT;
    RMAN>restore database;
 RMAN>recover database; (this is not necessary if database is in ARCHIVELOG mode and will fail if database you are copying is in archivelog mode but can’t do nothing wrong anyway)
  
 RMAN>ALTER DATABASE OPEN RESETLOGS;
RMAN>exit

Regenerate TEMP files

Now, new database is not ready yet as we need to regenerate temp files (you wrote earlier info about this):
Suppose we had TEMP and TEMP1 temporary tablespaces with files TEMP01.DBF and TEMP02.DBF sizes 100Mb and 200Mb. Location of TEMP01.DBF was T:\TEMP\TEMP01.DBF and same location for the other one.
First must we drop both files:

CMD
SET ORCALE_SID=TEST
sqlplus “/as sysdba”
  
alter database tempfile ‘T:\TEMP\TEMP01.DBF' drop;
alter database tempfile ‘T:\TEMP\TEMP02.DBF' drop;

and add the new ones:

alter tablespace TEMP add tempfile ‘T:\TEMP\TEMP01.DBF'  SIZE 100M REUSE;
alter tablespace TEMP1 add tempfile ‘T:\TEMP\TEMP02.DBF'  SIZE 200M REUSE;

You can check for invalid objects (just in case J )
And that’s it!

I’ve used this method for seven databases I migrated lately and it worked perfect. Hope this can be helpful to someone J.

Ingen kommentarer:

Legg inn en kommentar