Dec 28, 2014

Migrate Oracle Database from Non-ASM to ASM Using RMAN

We need to modify the spfile of the target database as follows:                                
  1. Disable block change tracking. (In case you have Block Change Tracking enabled)
  2. Modify DB_CREATE_FILE_DEST, DB_CREATE_ONLINE_LOG_DEST_n and CONTROL_FILES parameter to appropreiate ASM Disk Groups
SQL> ALTER DATABASE DISABLE BLOCK CHANGE TRACKING; --optional           
                                                                        
SQL> ALTER SYSTEM SET db_create_file_dest='+DATA' SCOPE=SPFILE;         
SQL> ALTER SYSTEM SET db_create_online_log_dest_1='+DATA' SCOPE=SPFILE; 
SQL> ALTER SYSTEM SET db_create_online_log_dest_2='+DATA' SCOPE=SPFILE; 
SQL> ALTER SYSTEM SET db_create_online_log_dest_3='+DATA' SCOPE=SPFILE;
SQL> ALTER SYSTEM SET control_files='+DATA' SCOPE=SPFILE;

                                              
Shutdown the database & startup in nomount                              
                                                                     
SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP NOMOUNT
SQL> EXIT
                        
Using rman restore controlfile original location

RMAN> RESTORE CONTROLFILE FROM '/d01/oradata/orasbt1/control01.ctrl';   
                                                                        
Mount the database

RMAN> ALTER DATABASE MOUNT;

Copy the database to desired ASM disk group

RMAN> BACKUP AS COPY DATABASE FORMAT '+DATA';

Switch all datafile to the new ASM location

RMAN> SWITCH DATABASE TO COPY;

Recover the database

RMAN> RECOVER DATABASE;

Open database                                                           

RMAN> ALTER DATABASE OPEN;
RMAN> EXIT
                                                                        
Create New temporary tablespace in ASM disk group and Drop the old ones

SQL> CREATE TEMPORARY TABLESPACE TEMP1 TEMPFILE '+DATA';
SQL> ALTER DATABASE DEAFULT TEMPORARY TABLESPACE TEMP1;
SQL> DROP TABLESPACE TEMP INCLUDING CONTENTS AND DATAFILES;

In case you want to retain old temp tablespace name, then do recreate them in ASM disk group and set it to default. This step is essential, where Applications have its own temp tablespace and would require it to function as usual.

SQL> CREATE TEMPORARY TABLESPACE TEMP TEMPFILE '+DATA';
SQL> ALTER DATABASE DEAFULT TEMPORARY TABLESPACE TEMP;
SQL> DROP TABLESPACE TEMP1 INCLUDING CONTENTS AND DATAFILES;

SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/oralog/orasbt1/orasbt1BCTF.log'; --(This is in case you want to enable this feature or was prior enabled)

Create new redo logs in ASM Diskgroup. Before dropping and recreating them, please ensure the old log members are inactive. In case they are in active status, please checkpoint before dropping them. Here we assume Group 3 is the current member;

SQL> ALTER SYSTEM CHECKPOINT;
SQL> ALTER DATABASE DROP LOGFILE GROUP 1;
SQL> ALTER DATABASE ADD LOGFILE GROUP 1 ('+REDO','+REDO','+REDO') SIZE 50M;
SQL> ALTER DATABASE DROP LOGFILE GROUP 2;
SQL> ALTER DATABASE ADD LOGFILE GROUP 2 ('+REDO','+REDO','+REDO') SIZE 50M;
SQL> ALTER SYSTEM SWITCH LOGFILE;
SQL> ALTER SYSTEM CHECKPOINT;
SQL> ALTER DATABASE DROP LOGFILE GROUP 3;
SQL> ALTER DATABASE ADD LOGFILE GROUP 3 ('+REDO','+REDO','+REDO') SIZE 50M;

Now, you should have all 3 logfile groups created on REDO ASM Disk Group

No comments:

Post a Comment