Clone database with RMAN (Duplicate database)
                                                 Last update (2011-11-12 17:01:10)
                                                                                                                   Date added (2009-11-11 14:18:53)

Summary
RMAN can be used to duplicate, or clone, a database from a previous full online backup. The clone can be done in the same server or on a remote server. Here I will demonstrate how to do it, with Oracle9i, RMAN and on a remote server with different filesystems.

Prepare the environment on the remote server
In order to make the clone on the new remote server you must set up:
1. A new unix user with the same privileges like the production unix user

2. Copy the $ORACLE_HOME binaries from the production server to the new remote server.
    This will be your new $ORACLE_HOME for the clone. Relink to make it valid!

3. Add alias entries in tnsnames.ora for RMAN database, Production database and new Clone on the remote server.
    In the example the production database is ANDR, DUP will be the clone and RMAN is the rman database.

ANDR =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = crmcc)(PORT = 1521))
    (CONNECT_DATA =
      (SID = ANDR)))

DUP =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = rp1dev)(PORT = 1551))
    (CONNECT_DATA =
      (SID = DUP)))

RMAN =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = bserver)(PORT = 1521))
    (CONNECT_DATA =
      (SID = RMAN)))

4. Add a new listener.ora on the remote server and start the listener ($lsnrctl start DUP)

# LISTENER.ORA Network Configuration File: /ora1/androm/9.2.0/network/admin/listener.ora
# Generated by Oracle configuration tools.

DUP =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = rp1dev)(PORT = 1551)))

SID_LIST_DUP =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = DUP)
      (ORACLE_HOME = /orandr/ANDR/9.2.0)
      (SID_NAME = DUP)))

5. Create directory structured for dump_dest trace files, datafiles_new, controlfiles, 
    redologs_new on the remote server.

6. Create a new init.ora file for the process on the remote server at $ORACLE_HOME/dbs location
   Now you have to create the initDUP.ora, at $ORACLE_HOME/dbs. Follow the example:

db_name = "DUP"
instance_name = DUP
control_files = (/orandr/ANDR/controlfiles/control01.ctl, /orandr/ANDR/controlfiles/control02.ctl, 
/orandr/ANDR/controlfiles/control03.ctl)
db_file_name_convert=(/orandr/ANDR/datafiles/,/orandr/ANDR/datafiles_new/)
log_file_name_convert=(/orandr/ANDR/redologs/,/orandr/ANDR/redologs_new/)
db_block_size = 8192
compatible = 9.2.0.0.0
background_dump_dest = '/orandr/ANDR/9.2.0/admin/DUP/bdump/'
user_dump_dest = '/orandr/ANDR/9.2.0/admin/DUP/udump/'
core_dump_dest = '/orandr/ANDR/9.2.0/admin/DUP/cdump/'

control_files is where the new controlfiles will be created
db_file_name_convert are the matching pairs of production database filesystems to the clone filesystems
log_file_name_convert are the matching pairs of production redologs filesystems to the clone filesystems
After setting new $ORACLE_HOME, $ORACLE_SID, $PATH for the new clone execute on the remote server the following:
export NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI'
sqlplus "/ as sysdba"
STARTUP nomount PFILE=$ORACLE_HOME/dbs/initDUP.ora
exit sqlplus and run from the shell
rman TARGET sys/*****@ANDR CATALOG rman/****@RMAN AUXILIARY / 

Recovery Manager: Release 9.2.0.8.0 - 64bit Production

Copyright (c) 1995, 2002, Oracle Corporation.  All rights reserved.

connected to target database: ANDR (DBID=1620364522)
connected to recovery catalog database
connected to auxiliary database: DUP (not mounted)

RMAN>
from the RMAN command line execute (line by line )
RUN { 
allocate auxiliary channel ch01 TYPE 'SBT_TAPE';
allocate auxiliary channel ch02 TYPE 'SBT_TAPE';
allocate auxiliary channel ch03 TYPE 'SBT_TAPE';
send 'NB_ORA_CLIENT=crmcc';
SET UNTIL TIME '24-MAY-2011 20:00';
DUPLICATE TARGET DATABASE TO DUP;
}
*** NB_ORA_CLIENT=crmcc is the production server!

if you get errors like this
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ==========================================================
RMAN-03009: failure of allocate command on ch01 channel at 07/05/2010 15:51:45
ORA-19554: error allocating device, device type: SBT_TAPE, device name: 
ORA-27211: Failed to load Media Management Library
Additional information: 2

then execute:
ln -s /usr/openv/netbackup/bin/libobk.sl64 libobk.sl
Note: Before you run the duplicate rman script you may have to
Find which media tapes have the latest backup
so you can attach them directly to the server

The script steps executed in RMAN can be found here :
Rman output script for creating DUPLICATE database

The contents of alert log while doing the Clone can be found here:
Alert log contents while cloning with RMAN

Usually get this error after the cloning:
ORA-01552: cannot use system rollback segment for non-system tablespace
Reviews
Categories
Oracle DBA-> (145)
  Alertlog (3)
  Archivelog (5)
  Auditing (1)
  Backup - Recovery (18)
  Database files (5)
  Database options (2)
  DB links (2)
  Dependencies (1)
  Dictionary (2)
  Exp-Imp Datapump (6)
  Jobs (2)
  Mview (2)
  Networking (3)
  Objects (7)
  Parameters (2)
  Redologs (6)
  Roles - Grants (2)
  Rollback - Undo (8)
  Segments (3)
  Sequences (2)
  Sessions (14)
  SGA (14)
  Tables (10)
  Tablespaces (10)
  Temp (4)
  Toad (5)
  Transactions (1)
  Upgrade (2)
  Users (3)
Oracle APPS DBA-> (67)
Exadata (1)
Performance Tuning-> (57)
Oracle Real Cases (24)
Oracle Errors (21)
Oracle SQL tricks (32)
Oracle RAC (3)
Oracle Security (8)
Filters
Search