Let’s try to migrate database to ASM diskgroup without big maintenance window.
I have database and ASM (11.2.0.4) – the database is prepared to migration:
SQL> sho parameters db_recovery_file_dest NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest string +DATA db_recovery_file_dest_size big integer 6G SQL> show parameters db_create_file_ NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_create_file_dest string +DATA SQL> sho parameters db_create_online_log_dest_1 NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_create_online_log_dest_1 string +DATA
We will use recoverable copy of database to migrate to ASM.
[oracle@krol-julian ~]$ cat asm_migrate.rman run { backup for recover of copy with tag 'asm_migr' incremental level 1 database; recover copy of database with tag 'asm_migr'; }
The first run of this script will create copy of datafile on ASM:
[oracle@krol-julian ~]$ rman target / @asm_migrate.rman Recovery Manager: Release 11.2.0.4.0 - Production on Thu May 14 13:42:42 2015 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (DBID=1407457992) RMAN> run { 2> backup for recover of copy with tag 'asm_migr' incremental level 1 database; 3> recover copy of database with tag 'asm_migr'; 4> } 5> Starting backup at 14-MAY-15 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=198 device type=DISK no parent backup or copy of datafile 3 found no parent backup or copy of datafile 1 found no parent backup or copy of datafile 2 found no parent backup or copy of datafile 5 found no parent backup or copy of datafile 7 found channel ORA_DISK_1: starting datafile copy input datafile file number=00003 name=/u01/app/oracle/oradata/ORCL/datafile/o1_mf_undo1_bo8r7j5h_.dbf output file name=+DATA/orcl/datafile/undo1.257.879687765 tag=ASM_MIGR RECID=5 STAMP=879687776 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15 channel ORA_DISK_1: starting datafile copy input datafile file number=00001 name=/u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_bo8r7j5o_.dbf output file name=+DATA/orcl/datafile/system.258.879687779 tag=ASM_MIGR RECID=6 STAMP=879687787 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15 channel ORA_DISK_1: starting datafile copy input datafile file number=00002 name=/u01/app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_bo8r7j5q_.dbf output file name=+DATA/orcl/datafile/sysaux.259.879687795 tag=ASM_MIGR RECID=7 STAMP=879687798 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07 channel ORA_DISK_1: starting datafile copy input datafile file number=00005 name=/u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_bo8r7j68_.dbf output file name=+DATA/orcl/datafile/users.260.879687801 tag=ASM_MIGR RECID=8 STAMP=879687803 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03 channel ORA_DISK_1: starting datafile copy input datafile file number=00007 name=/u01/app/oracle/oradata/ORCL/datafile/o1_mf_def_tbs_bo8r7j6b_.dbf output file name=+DATA/orcl/datafile/def_tbs.261.879687805 tag=ASM_MIGR RECID=9 STAMP=879687806 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03 channel ORA_DISK_1: starting incremental level 1 datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set including current control file in backup set including current SPFILE in backup set channel ORA_DISK_1: starting piece 1 at 14-MAY-15 channel ORA_DISK_1: finished piece 1 at 14-MAY-15 piece handle=+DATA/orcl/backupset/2015_05_14/ncsnn1_asm_migr_0.262.879687809 tag=ASM_MIGR comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01 Finished backup at 14-MAY-15 Starting recover at 14-MAY-15 using channel ORA_DISK_1 no copy of datafile 1 found to recover no copy of datafile 2 found to recover no copy of datafile 3 found to recover no copy of datafile 5 found to recover no copy of datafile 7 found to recover Finished recover at 14-MAY-15 Recovery Manager complete.
Subsequent executions of this script will recover the copy of database with fresh incremental backups
[oracle@krol-julian ~]$ rman target / @asm_migrate.rman Recovery Manager: Release 11.2.0.4.0 - Production on Thu May 14 13:48:28 2015 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (DBID=1407457992) RMAN> run { 2> backup for recover of copy with tag 'asm_migr' incremental level 1 database; 3> recover copy of database with tag 'asm_migr'; 4> } 5> Starting backup at 14-MAY-15 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=198 device type=DISK channel ORA_DISK_1: starting incremental level 1 datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=00003 name=/u01/app/oracle/oradata/ORCL/datafile/o1_mf_undo1_bo8r7j5h_.dbf input datafile file number=00001 name=/u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_bo8r7j5o_.dbf input datafile file number=00002 name=/u01/app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_bo8r7j5q_.dbf input datafile file number=00005 name=/u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_bo8r7j68_.dbf input datafile file number=00007 name=/u01/app/oracle/oradata/ORCL/datafile/o1_mf_def_tbs_bo8r7j6b_.dbf channel ORA_DISK_1: starting piece 1 at 14-MAY-15 channel ORA_DISK_1: finished piece 1 at 14-MAY-15 piece handle=+DATA/orcl/backupset/2015_05_14/nnndn1_asm_migr_0.265.879688111 tag=ASM_MIGR comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01 channel ORA_DISK_1: starting incremental level 1 datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set including current control file in backup set including current SPFILE in backup set channel ORA_DISK_1: starting piece 1 at 14-MAY-15 channel ORA_DISK_1: finished piece 1 at 14-MAY-15 piece handle=+DATA/orcl/backupset/2015_05_14/ncsnn1_asm_migr_0.266.879688111 tag=ASM_MIGR comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01 Finished backup at 14-MAY-15 Starting recover at 14-MAY-15 using channel ORA_DISK_1 channel ORA_DISK_1: starting incremental datafile backup set restore channel ORA_DISK_1: specifying datafile copies to recover recovering datafile copy file number=00001 name=+DATA/orcl/datafile/system.258.879687779 recovering datafile copy file number=00002 name=+DATA/orcl/datafile/sysaux.259.879687795 recovering datafile copy file number=00003 name=+DATA/orcl/datafile/undo1.257.879687765 recovering datafile copy file number=00005 name=+DATA/orcl/datafile/users.260.879687801 recovering datafile copy file number=00007 name=+DATA/orcl/datafile/def_tbs.261.879687805 channel ORA_DISK_1: reading from backup piece +DATA/orcl/backupset/2015_05_14/nnndn1_asm_migr_0.265.879688111 channel ORA_DISK_1: piece handle=+DATA/orcl/backupset/2015_05_14/nnndn1_asm_migr_0.265.879688111 tag=ASM_MIGR channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 Finished recover at 14-MAY-15 Recovery Manager complete.
Now it is time to start maintenance window. I will move the controlfile from filesystem to ASM, using RMAN. First let’s remove the control_files parameter from spfile:
[oracle@krol-julian dbs]$ cd $ORACLE_HOME/dbs [oracle@krol-julian dbs]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Thu May 14 13:53:37 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance. SQL> create pfile from spfile; File created. SQL> Disconnected [oracle@krol-julian dbs]$ vim initorcl.ora [oracle@krol-julian dbs]$ cat initorcl.ora | grep control_files [oracle@krol-julian dbs]$ strings spfileorcl.ora | grep control_files *.control_files='/u01/app/oracle/oradata/ORCL/controlfile/o1_mf_bo6hcyjf_.ctl'#Restore Controlfile [oracle@krol-julian dbs]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Thu May 14 13:55:24 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance. SQL> create spfile from pfile; File created. SQL> startup nomount ORACLE instance started. Total System Global Area 2137886720 bytes Fixed Size 2254952 bytes Variable Size 570427288 bytes Database Buffers 1560281088 bytes Redo Buffers 4923392 bytes SQL>
Now I will use RMAN to "restore" the controlfile from it’s original location
[oracle@krol-julian dbs]$ rman target / Recovery Manager: Release 11.2.0.4.0 - Production on Thu May 14 13:57:24 2015 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (not mounted) RMAN> restore controlfile from '/u01/app/oracle/oradata/ORCL/controlfile/o1_mf_bo6hcyjf_.ctl'; Starting restore at 14-MAY-15 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=63 device type=DISK channel ORA_DISK_1: copied control file copy output file name=+DATA/orcl/controlfile/current.267.879688653 Finished restore at 14-MAY-15 RMAN> alter database mount; database mounted released channel: ORA_DISK_1
I will run my RMAN script one last time to refresh the copy of the database
[oracle@krol-julian ~]$ rman target / @asm_migrate.rman Recovery Manager: Release 11.2.0.4.0 - Production on Thu May 14 13:59:32 2015 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (DBID=1407457992, not open) RMAN> run { 2> backup for recover of copy with tag 'asm_migr' incremental level 1 database; 3> recover copy of database with tag 'asm_migr'; 4> } 5> Starting backup at 14-MAY-15 (...)
And switch to ASM copy. After that I can open my database.
[oracle@krol-julian ~]$ rman target / Recovery Manager: Release 11.2.0.4.0 - Production on Thu May 14 14:01:19 2015 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (DBID=1407457992, not open) RMAN> switch database to copy; using target database control file instead of recovery catalog datafile 1 switched to datafile copy "+DATA/orcl/datafile/system.258.879687779" datafile 2 switched to datafile copy "+DATA/orcl/datafile/sysaux.259.879687795" datafile 3 switched to datafile copy "+DATA/orcl/datafile/undo1.257.879687765" datafile 5 switched to datafile copy "+DATA/orcl/datafile/users.260.879687801" datafile 7 switched to datafile copy "+DATA/orcl/datafile/def_tbs.261.879687805" RMAN> recover database; Starting recover at 14-MAY-15 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=63 device type=DISK starting media recovery media recovery complete, elapsed time: 00:00:01 Finished recover at 14-MAY-15 RMAN> alter database open; database opened
Now we can delete copy of database from filesystem
RMAN> delete copy of database; released channel: ORA_DISK_1 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=63 device type=DISK List of Datafile Copies ======================= Key File S Completion Time Ckp SCN Ckp Time ------- ---- - --------------- ---------- --------------- 25 1 A 14-MAY-15 1599181 14-MAY-15 Name: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_bo8r7j5o_.dbf 26 2 A 14-MAY-15 1599181 14-MAY-15 Name: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_bo8r7j5q_.dbf 27 3 A 14-MAY-15 1599181 14-MAY-15 Name: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_undo1_bo8r7j5h_.dbf 28 5 A 14-MAY-15 1599181 14-MAY-15 Name: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_bo8r7j68_.dbf 29 7 A 14-MAY-15 1599181 14-MAY-15 Name: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_def_tbs_bo8r7j6b_.dbf
Because I want to have redo logs also on ASM I have add new redo logs and remove the old ones
SQL> select member from v$logfile; MEMBER -------------------------------------------------------------------------------- /u01/app/oracle/oradata/ORCL/onlinelog/o1_mf_3_bo8r9cmn_.log /u01/app/oracle/oradata/ORCL/onlinelog/o1_mf_2_bo8r9bmh_.log /u01/app/oracle/oradata/ORCL/onlinelog/o1_mf_1_bo8r99nk_.log SQL> alter database add logfile group 11 size 128m, 2 group 12 size 128m, 3 group 13 size 128m; Database altered. SQL> alter system switch logfile; System altered. SQL> alter system checkpoint; System altered. SQL> select group#, status from v$log; GROUP# STATUS ---------- ---------------- 1 INACTIVE 2 CURRENT 3 UNUSED 11 UNUSED 12 UNUSED 13 UNUSED 6 rows selected. SQL> alter system switch logfile; System altered. SQL> alter system switch logfile; System altered. SQL> alter system checkpoint; System altered. SQL> select group#, status from v$log; GROUP# STATUS ---------- ---------------- 1 INACTIVE 2 INACTIVE 3 INACTIVE 11 CURRENT 12 UNUSED 13 UNUSED 6 rows selected. SQL> alter database drop logfile group 1, group 2, group 3; Database altered.
MAINTENANCE WINDOW ENDS.
Now is good time to register the database in grid infrastructure
[oracle@krol-julian ~]$ srvctl add database -d orcl -o /u01/app/oracle/product/11.2.0.4/dbhome_1 -p /u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/spfileorcl.ora -a data