Migrate Non-ASM to ASM

Creating ASM Instance

1. Check CSS must be running before any ASM Instance
Check CSS Running or Not?
cd $ORACLE_HOME/bin
crsctl check css
2. If its not running, you should configure CSS process by running $ORACLE_HOME/bin/localconfig script:
login as a root
$ORACLE_HOME/bin/localconfig add
Sample Output:

/etc/oracle does not exist. Creating it now.
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
Configuration for local CSS has been initialized

Adding to inittab
Startup will be queued to init within 90 seconds.
Checking the status of new Oracle init process...
Expecting the CRS daemons to be up within 600 seconds.

CSS is active on these nodes.
DEV1
CSS is active on all nodes.
Oracle CSS service is installed and running under init(1M)

# Default asm_diskstring values for supported platforms:
# Solaris (32/64 bit) /dev/rdsk/*
# Windows NT/XP \\.\orcldisk*
# Linux (32/64 bit) /dev/raw/*
# HPUX /dev/rdsk/*
# HPUX(Tru 64) /dev/rdisk/*
# AIX /dev/rhdisk/*

ASM_DISKSTRING=/dev/raw
INSTANCE_TYPE='ASM'
LARGE_POOL_SIZE=40M
REMOTE_LOGIN_PASSWORDFILE='EXCLUSIVE'
USER_DUMP_DEST=$ORACLE_HOME/admin/+ASM/udump
BACKGROUND_DUMP_DEST=$ORACLE_HOME/admin/+ASM/bdump
CORE_DUMP_DEST=$ORACLE_HOME/admin/+ASM/cdump


3. Create the init+ASM.ora file in $ORACLE_HOME/dbs

# Default asm_diskstring values for supported platforms:
# Solaris (32/64 bit) /dev/rdsk/*
# Windows NT/XP \\.\orcldisk*
# Linux (32/64 bit) /dev/raw/*
# HPUX /dev/rdsk/*
# HPUX(Tru 64) /dev/rdisk/*
# AIX /dev/rhdisk/*

ASM_DISKSTRING=/dev/raw
INSTANCE_TYPE='ASM'
LARGE_POOL_SIZE=40M
REMOTE_LOGIN_PASSWORDFILE='EXCLUSIVE'
USER_DUMP_DEST=$ORACLE_HOME/admin/+ASM/udump
BACKGROUND_DUMP_DEST=$ORACLE_HOME/admin/+ASM/bdump
CORE_DUMP_DEST=$ORACLE_HOME/admin/+ASM/cdump


4. Creating ADMIN directories


set ASM instance ORACLE_HOME


mkdir -p $ORACLE_HOME/admin/+ASM/bdump
mkdir -p $ORACLE_HOME/admin/+ASM/cdump
mkdir -p $ORACLE_HOME/admin/+ASM/hdump
mkdir -p $ORACLE_HOME/admin/+ASM/pfile
mkdir -p $ORACLE_HOME/admin/+ASM/udump

mkdir $ORACLE_HOME/dbs


5. Starting the ASM Instance

Starting ASM Instance

# su - oracle
$ ORACLE_SID=+ASM; export ORACLE_SID
$ sqlplus "/ as sysdba"
SQL> startup


6. Create SPFILE from PFILE


create spfile='+ASM' from pfile;


7. For Unix platform, put an entry in the oratab file for the ASM intance

ORATAB

+ASM::Y

You may get the following error on first start:

ORA-15110: no diskgroups mounted
This error can be safely ignored, when creating a new diskgroup, the diskgroup name will be
added automatically to the asm_diskgroups parameter and you will not get this error again.


Create ASM Disk group


SQL> shutdown
ASM instance shutdown
SQL> startup
ASM instance started
SQL> alter system set asm_diskstring = '/dev/raw/raw1', '/dev/raw/raw2', '/dev/raw/raw3', '/dev/raw/raw4';
System altered.

SQL> alter system set asm_diskgroups = 'DATA';
System altered.

To get started, create 2 disk groups - one for data and one for recovery files. Here is an example:

CREATE DISKGROUP data EXTERNAL REDUNDANCY DISK '/dev/d1', '/dev/d2', '/dev/d3', ....;
CREATE DISKGROUP recover EXTERNAL REDUNDANCY DISK '/dev/d10', '/dev/d11', '/dev/d12', ....;

Here is an example how you can enable automatic file management with such a setup:

ALTER SYSTEM SET db_create_file_dest = '+DATA' SCOPE=SPFILE;
ALTER SYSTEM SET db_recovery_file_dest = '+RECOVER' SCOPE=SPFILE;



Steps To Migrate/Move a Database From Non-ASM to ASM

1. Edit the pfile/spfile of DB to point the new control_file location on ASM
if your disk group name is '+DATA'
control_files='+DATA//control01.ctl'

2. Startup the database in nomount state
SQL> Startup nomount

3. From RMAN session, copy the control file from old location to new location
Restore the controlfile from old location to new location:

RMAN> CONNECT TARGET
RMAN> RESTORE CONTROLFILE FROM '/u01/TST/control01.ctl';
Here /u01/TST/control01.ctl is the old location of control file.

4. From SQL session, mount the database

SQL> ALTER DATABASE MOUNT;

5. Using RMAN, copy the datafile from NON-ASM to ASM

Copy the controlfile from Non-ASM to ASM:
RMAN>BACKUP AS COPY DATABASE FORMAT '+DATA';

run {
allocate channel dev1 type disk;
allocate channel dev2 type disk;
BACKUP AS COPY INCREMENTAL LEVEL 0 DATABASE
FORMAT '+DISK' TAG 'ORA_ASM_MIGRATION;
}

Using RMAN, rename the datafile , using the following command
Rename the datafile using the following command:

RMAN> SWITCH DATABASE TO COPY
Switch tempfile and open database.

6. Switch tempfile and open database:

RMAN> run {
set newname for tempfile 1 to '+DATA';
set newname for tempfile 2 to '+DATA';
...
switch tempfile all;
}

RMAN> ALTER DATABASE OPEN;


7. Do the following maintenance

SQL> SELECT a.group#, b.member, a.status FROM v$log a, v$logfile b WHERE a.group#=b.group#;
SQL> ALTER DATABASE ADD LOGFILE MEMBER '+ASM_Disk_group' TO GROUP 1;
SQL> ALTER DATABASE ADD LOGFILE MEMBER '+ASM_Disk_group' TO GROUP 2;
SQL> ALTER DATABASE DROP LOGFILE MEMBER '';
SQL> ALTER SYSTEM SWITCH LOGFILE;
SQL> ALTER DATABASE DROP LOGFILE MEMBER '';
SQL> ALTER SYSTEM SWITCH LOGFILE;

No comments: