rac database cloning with hot backup

Upload: rsreddych5919

Post on 05-Apr-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/31/2019 RAC Database Cloning With HOT Backup

    1/3

    RAC Database cloning with HOT Backup

    Oracle Tips by Vijaya Chander

    July 11, 2008

    Tips from the trenches by Vijaya Chander

    Most shops that are running 24/7 Oracle databases need production data, which needs to be

    periodically refreshed into development/testing/acceptance/pre-production environments for a

    variety of reasons such as to re-produce functional bugs, performance issues and to conduct

    performance testing.

    This article describes step by step approach to clone Oracle RAC databases using an RMAN hot

    backup.

    Steps to be conducted on Source DB

    Step 1: Identify number of online redo log groups available with the database using:SQL> SELECT * FROM GV$LOGFILE;

    This step is required to switch logs those many times before starting hot backup (Step 3). This

    will make sure that all the online redo logs are archived. For example, if you have 4 online redolog groups, switch logs 4 times. Online redo logs can be switched using:SQL> ALTER SYSTEM SWITCH LOGFILE;

    Step 2: Note the latest archive log file name from archive destination directory.

    Step 3: Take hot backup tablespace by tablespace, copying datafiles to desired location. Execute

    following script to get a spool file (hotbackup.sql), which in turn can be used to take hot backup.

    ############################################################################# spool hotbackup.sqlDECLARECURSOR dfilesISSELECT tablespace_name,file_nameFROM dba_data_filesORDER BY bytes DESC;BEGINDBMS_OUTPUT.ENABLE(1000000);FOR i IN dfiles LOOPDBMS_OUTPUT.PUT_LINE ('alter tablespace '|| i.tablespace_name ||' begin backup;');DBMS_OUTPUT.PUT_LINE ('!cp ' || i.file_name || '/u99/oradata/clone');DBMS_OUTPUT.PUT_LINE ('alter tablespace ' || i.tablespace_name || ' end backup;');END LOOP;END;spool off

    #############################################################################

    Note: Change hot backup location "/u99/oradata/clone" used in the script as required.

    Take hot backup by executing the spool file.SQL> @hotbackup.sql

    Step 4: Once hot backup is complete, again switch logfiles as many number of times as those

    online redo log groups (same as Step 1).

    Step 5: Again, note the latest archive log file name from archive destination directory. Move all

    archive log files created during hot backup to destination DB "db_recovery_file_dest" parameter

    location.

    Step 6: Take backup of control file to trace and move it to destination DB location. This trace

    file contents will be used to generate new control files at destination.SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

  • 7/31/2019 RAC Database Cloning With HOT Backup

    2/3

    Steps to be conducted on Destination DB

    Step 7: Edit control file by removing all the statements except "CREATE CONTROL FILE ...

    RESETLOGS" statement.

    Change "REUSE DATABASE" to "SET DATABASE" Change DBNAME (Source database name to appropriate Destination DB name) Retain entries related to online redo log groups for the first instance and remove all other

    redo log groups.

    Change Datafile/Redo log locations and copy those files from hot backup to the locationspecified in controlfile.

    After making above changes, the control file should look something like this.

    ############################################################################# CREATE CONTROLFILE SET DATABASE "PREPROD" RESETLOGS ARCHIVELOGMAXLOGFILES 192MAXLOGMEMBERS 3MAXDATAFILES 1024MAXINSTANCES 32MAXLOGHISTORY 9344LOGFILEGROUP 1 ('/u99/oradata/clone/redo1_01a.rdo','/u99/oradata/clone/redo1_01b.rdo') SIZE 400M,GROUP 2 ('/u99/oradata/clone/redo1_02a.rdo','/u99/oradata/clone/redo1_02b.rdo') SIZE 400M,GROUP 3 ('/u99/oradata/clone/redo1_03a.rdo','/u99/oradata/clone/redo1_03b.rdo') SIZE 400M,GROUP 4 ('/u99/oradata/clone/redo1_4a.rdo','/u99/oradata/clone/redo1_4b.rdo') SIZE 400MDATAFILE'/u99/oradata/clone/system01.dbf','/u99/oradata/clone/undotbs01.dbf''/u99/oradata/clone/sysaux01.dbf','/u99/oradata/clone/undotbs02.dbf','/u99/oradata/clone/undotbs03.dbf','/u99/oradata/clone/undotbs04.dbf','/u99/oradata/clone/audit_data.dbf','/u99/oradata/clone/audit_index.dbf','/u99/oradata/clone/cust_data.dbf','/u99/oradata/clone/cust_index.dbf','/u99/oradata/clone/app_data.dbf','/u99/oradata/clone/app_index.dbf','/u99/oradata/clone/app_hist_data.dbf','/u99/oradata/clone/app_hist_index.dbf','/u99/oradata/clone/blob_data32_amh.dbf','/u99/oradata/clone/blob_data32_och.dbf','/u99/oradata/clone/note_data.dbf','/u99/oradata/clone/note_index.dbf','/u99/oradata/clone/lookup_data.dbf','/u99/oradata/clone/lookup_index.dbf','/u99/oradata/clone/rule_data.dbf','/u99/oradata/clone/rule_index.dbf','/u99/oradata/clone/queue_data.dbf','/u99/oradata/clone/queue_index.dbf'CHARACTER SET WE8ISO8859P1;#############################################################################

    Step 8: Get existing pfile from destination DB by using:SQL> CREATE PFILE='/u99/pfile_dbname.ora' FROM SPFILE;

  • 7/31/2019 RAC Database Cloning With HOT Backup

    3/3

    Edit this parameter file by changing CLUSTER_DATABASE parameter to FALSE. CREATE

    CONTROLFILE command needs the database to be mounted exclusively and by setting

    CLUSTER_DATABASE=FALSE, database can be mounted exclusively.

    Step 9: Shutdown destination database (all nodes) and take a cold backup of datafiles, redo

    logfiles, controlfiles, etc., if required. Shutdown database by shutting each instance by using

    following command.SQL> SHUTDOWN IMMEDIATE;

    Otherwise, use following command from OSsrvctl stop database d Step 10: Start the database in nomount stage using pfile created in step 8 using:SQL> STARTUP NOMOUNT PFILE='/u99/pfile_dbname.ora';

    Step 11: In nomount stage, create controlfile using edited backup controlfile (from Step 7). This

    step creates control files as mentioned in pfile "control_files" parameter.

    Step 12: Now, recover database using:SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;

    Start feeding archive logs one by one using:SQL> SELECT * FROM GV$ARCHIVED_LOG

    WHERE BETWEEN FIRST_CHANGE# AND NEXT_CHANGE# AND THREAD#=Step 13: Once recovery is complete, open the database using resetlogs to start with new

    redologs.SQL> ALTER DATABASE OPEN RESETLOGS;

    More information on OPEN RESETLOGS is availableHERE.

    Now the database should be up and running and ready to use.

    Step 14: Create as many temporary tablespaces as they are in source DB with destination DB.

    Those temporary tablespace metadata entries would be present in destination DB, but temp files

    wouldnt be present under those temporary tablespaces. For example, tempfiles can be created

    using:SQL> ALTER TABLESPACE ADD TEMPFILE /u99/oradata/clone/temporary01.dbf size 20G

    Step 15: While creating control files (in Step 7), online redo log groups and members were

    created only for the first instance in the database. Online redo logs has to be created for other

    instances also. Create as many online redo log files as they are on source DB in destination DB.

    For example:SQL> ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 5 ('/u99/oradata/clone/redo2_5a.rdo','/u99/oradata/clone/redo2_5b.rdo') SIZE 400M;

    Step 16: Shutdown the instance (only one node is up as of now), edit pfile with

    cluster_database=true parameter and start the database (all nodes).

    Step 17: Shutdown the database and take a cold backup if required.

    http://www.dba-oracle.com/t_oracle_open_resetlogs_tips.htmhttp://www.dba-oracle.com/t_oracle_open_resetlogs_tips.htmhttp://www.dba-oracle.com/t_oracle_open_resetlogs_tips.htmhttp://www.dba-oracle.com/t_oracle_open_resetlogs_tips.htm