Migrando Banco de Dados Oracle Single para ASM non-RAC

Este artigo tem como objetivo mostrar como migrar o Banco de Dados Oracle “Single” para “ASM” porém não para RAC.
Vamos utilizar a versão 10.2.0.5 do Banco de Dados Oracle para realizar a migração.

Para iniciarmos devemos estender os discos colocados que será os discos do ASM (Automatic Storage Management).


Vamos listar os discos disponíveis no servidor de Banco de Dados.
OBS: Todos os procedimentos a seguir são realizado com o usuário “root”.

[root@serveroracle ~]# ls -l /dev/sd*
brw-r----- 1 root disk 8,   0 Feb 21 19:37 /dev/sda
brw-r----- 1 root disk 8,   1 Feb 21 19:39 /dev/sda1
brw-r----- 1 root disk 8,   2 Feb 21 19:39 /dev/sda2
brw-r----- 1 root disk 8,   3 Feb 21 19:39 /dev/sda3
brw-r----- 1 root disk 8,   4 Feb 21 19:37 /dev/sda4
brw-r----- 1 root disk 8,   5 Feb 21 19:39 /dev/sda5
brw-r----- 1 root disk 8,   6 Feb 21 19:39 /dev/sda6
brw-r----- 1 root disk 8,   7 Feb 21 19:37 /dev/sda7
brw-r----- 1 root disk 8,   8 Feb 21 19:39 /dev/sda8
brw-r----- 1 root disk 8,  16 Feb 21 19:37 /dev/sdb
brw-r----- 1 root disk 8,  32 Feb 21 19:37 /dev/sdc
brw-r----- 1 root disk 8,  48 Feb 21 19:37 /dev/sdd
brw-r----- 1 root disk 8,  64 Feb 21 19:37 /dev/sde
brw-r----- 1 root disk 8,  80 Feb 21 19:37 /dev/sdf
brw-r----- 1 root disk 8,  96 Feb 21 19:37 /dev/sdg
brw-r----- 1 root disk 8, 112 Feb 21 19:37 /dev/sdh
brw-r----- 1 root disk 8, 128 Feb 21 19:37 /dev/sdi
[root@serveroracle ~]#

Vamos utilizar os discos para o ASM o “sdb”,”sdc”,”sdd”,”sde”,”sdf”,”sdg”,”sdh” e “sdi”.
Vamos formatar os discos e criar as partições no mesmo.

[root@serveroracle ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-522, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-522, default 522):
Using default value 522

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@serveroracle ~]# fdisk /dev/sdc
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-522, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-522, default 522):
Using default value 522

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@serveroracle ~]# fdisk /dev/sdd
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-261, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-261, default 261):
Using default value 261

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@serveroracle ~]# fdisk /dev/sde
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-261, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-261, default 261):
Using default value 261

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@serveroracle ~]# fdisk /dev/sdf
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-65, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-65, default 65):
Using default value 65

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@serveroracle ~]# fdisk /dev/sdg
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-65, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-65, default 65):
Using default value 65

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@serveroracle ~]# fdisk /dev/sdh
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-65, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-65, default 65):
Using default value 65

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@serveroracle ~]# fdisk /dev/sdi
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-65, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-65, default 65):
Using default value 65

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@serveroracle ~]#

Vamos verificar os discos após a criação das partições dos mesmos.

[root@serveroracle ~]# ls -l /dev/sd*
brw-r----- 1 root disk 8,   0 Feb 21 19:37 /dev/sda
brw-r----- 1 root disk 8,   1 Feb 21 19:39 /dev/sda1
brw-r----- 1 root disk 8,   2 Feb 21 19:39 /dev/sda2
brw-r----- 1 root disk 8,   3 Feb 21 19:39 /dev/sda3
brw-r----- 1 root disk 8,   4 Feb 21 19:37 /dev/sda4
brw-r----- 1 root disk 8,   5 Feb 21 19:39 /dev/sda5
brw-r----- 1 root disk 8,   6 Feb 21 19:39 /dev/sda6
brw-r----- 1 root disk 8,   7 Feb 21 19:37 /dev/sda7
brw-r----- 1 root disk 8,   8 Feb 21 19:39 /dev/sda8
brw-r----- 1 root disk 8,  16 Feb 21 19:42 /dev/sdb
brw-r----- 1 root disk 8,  17 Feb 21 19:42 /dev/sdb1
brw-r----- 1 root disk 8,  32 Feb 21 19:42 /dev/sdc
brw-r----- 1 root disk 8,  33 Feb 21 19:43 /dev/sdc1
brw-r----- 1 root disk 8,  48 Feb 21 19:43 /dev/sdd
brw-r----- 1 root disk 8,  49 Feb 21 19:43 /dev/sdd1
brw-r----- 1 root disk 8,  64 Feb 21 19:43 /dev/sde
brw-r----- 1 root disk 8,  65 Feb 21 19:43 /dev/sde1
brw-r----- 1 root disk 8,  80 Feb 21 19:43 /dev/sdf
brw-r----- 1 root disk 8,  81 Feb 21 19:43 /dev/sdf1
brw-r----- 1 root disk 8,  96 Feb 21 19:43 /dev/sdg
brw-r----- 1 root disk 8,  97 Feb 21 19:43 /dev/sdg1
brw-r----- 1 root disk 8, 112 Feb 21 19:44 /dev/sdh
brw-r----- 1 root disk 8, 113 Feb 21 19:44 /dev/sdh1
brw-r----- 1 root disk 8, 128 Feb 21 19:44 /dev/sdi
brw-r----- 1 root disk 8, 129 Feb 21 19:44 /dev/sdi1
[root@serveroracle ~]#

Vamos agora configurar as “RAWs” (rawdevices) para os discos récem-particionados para configuração/ instalação do ASM.
Vamos utilizar a configuração atráves do “UDEV”. Sobre udev acesse Informações “udev”.
Vamos acessar o diretório e visualizar o arquivo para a configuração das raws.

[root@serveroracle ~]# cd /etc/udev/rules.d/
[root@serveroracle rules.d]# ls -ltr 60-raw.rules
-rw-r--r-- 1 root root 593 Feb 21 16:48 60-raw.rules
[root@serveroracle rules.d]#

No arquivo 60-raw.rules iremos configurar as raws para os discos listados no começo do artigo.
Vamos acrescentar no arquivo as seguintes linhas.

ACTION=="add", KERNEL=="/dev/sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", KERNEL=="/dev/sdc1", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", KERNEL=="/dev/sdd1", RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add", KERNEL=="/dev/sde1", RUN+="/bin/raw /dev/raw/raw4 %N"
ACTION=="add", KERNEL=="/dev/sdf1", RUN+="/bin/raw /dev/raw/raw5 %N"
ACTION=="add", KERNEL=="/dev/sdg1", RUN+="/bin/raw /dev/raw/raw6 %N"
ACTION=="add", KERNEL=="/dev/sdh1", RUN+="/bin/raw /dev/raw/raw7 %N"
ACTION=="add", KERNEL=="/dev/sdi1", RUN+="/bin/raw /dev/raw/raw8 %N"

Segue o mesmo abaixo.

[root@serveroracle rules.d]# vi 60-raw.rules
[root@serveroracle rules.d]# cat 60-raw.rules
# Enter raw device bindings here.
#
# An example would be:
#   ACTION=="add", KERNEL=="sda", RUN+="/bin/raw /dev/raw/raw1 %N"
# to bind /dev/raw/raw1 to /dev/sda, or
#   ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="1", RUN+="/bin/raw /dev/raw/raw2 %M %m"
# to bind /dev/raw/raw2 to the device with major 8, minor 1.

ACTION=="add", KERNEL=="/dev/sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", KERNEL=="/dev/sdc1", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", KERNEL=="/dev/sdd1", RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add", KERNEL=="/dev/sde1", RUN+="/bin/raw /dev/raw/raw4 %N"
ACTION=="add", KERNEL=="/dev/sdf1", RUN+="/bin/raw /dev/raw/raw5 %N"
ACTION=="add", KERNEL=="/dev/sdg1", RUN+="/bin/raw /dev/raw/raw6 %N"
ACTION=="add", KERNEL=="/dev/sdh1", RUN+="/bin/raw /dev/raw/raw7 %N"
ACTION=="add", KERNEL=="/dev/sdi1", RUN+="/bin/raw /dev/raw/raw8 %N"
[root@serveroracle rules.d]#

Explicação:
ACTION==”add” (Adiciona o Dispositivo no Script).
KERNEL==”/dev/sdb1″ (Dispositivo a ser adicionado).
RUN+=”/bin/raw /dev/raw/raw1 %N (Aonde será executado).
ACTION==”add”, KERNEL==”/dev/sdb1″, RUN+=”/bin/raw /dev/raw/raw1 %N” (Chama udev que quando é detectado o drive é adicionado, executa o script especificado).

Vamos iniciar as raws nos seus específicos dispositivos.

[root@serveroracle rules.d]# /bin/raw /dev/raw/raw1 /dev/sdb1
/dev/raw/raw1:  bound to major 8, minor 17
[root@serveroracle rules.d]# /bin/raw /dev/raw/raw2 /dev/sdc1
/dev/raw/raw2:  bound to major 8, minor 33
[root@serveroracle rules.d]# /bin/raw /dev/raw/raw3 /dev/sdd1
/dev/raw/raw3:  bound to major 8, minor 49
[root@serveroracle rules.d]# /bin/raw /dev/raw/raw4 /dev/sde1
/dev/raw/raw4:  bound to major 8, minor 65
[root@serveroracle rules.d]# /bin/raw /dev/raw/raw5 /dev/sdf1
/dev/raw/raw5:  bound to major 8, minor 81
[root@serveroracle rules.d]# /bin/raw /dev/raw/raw6 /dev/sdg1
/dev/raw/raw6:  bound to major 8, minor 97
[root@serveroracle rules.d]# /bin/raw /dev/raw/raw7 /dev/sdh1
/dev/raw/raw7:  bound to major 8, minor 113
[root@serveroracle rules.d]# /bin/raw /dev/raw/raw8 /dev/sdi1
/dev/raw/raw8:  bound to major 8, minor 129
[root@serveroracle rules.d]#

Vamos configurar o arquivo rawdevices do sistema para o reconhecimentos dos dispositivos.
No arquivo “rawdevices” adicione as seguintes linhas.

/dev/raw/raw1 /dev/sdb1
/dev/raw/raw2 /dev/sdc1
/dev/raw/raw3 /dev/sdd1
/dev/raw/raw4 /dev/sde1
/dev/raw/raw5 /dev/sdf1
/dev/raw/raw6 /dev/sdg1
/dev/raw/raw7 /dev/sdh1
/dev/raw/raw8 /dev/sdi1

Vamos configurar o arquivo “rawdevices”.

[root@serveroracle rules.d]# vi /etc/sysconfig/rawdevices
[root@serveroracle rules.d]# cat /etc/sysconfig/rawdevices
# raw device bindings
# format:  <rawdev> <major> <minor>
#          <rawdev> <blockdev>
# example: /dev/raw/raw1 /dev/sda1
#          /dev/raw/raw2 8 5

/dev/raw/raw1 /dev/sdb1
/dev/raw/raw2 /dev/sdc1
/dev/raw/raw3 /dev/sdd1
/dev/raw/raw4 /dev/sde1
/dev/raw/raw5 /dev/sdf1
/dev/raw/raw6 /dev/sdg1
/dev/raw/raw7 /dev/sdh1
/dev/raw/raw8 /dev/sdi1
[root@serveroracle rules.d]#

Vamos reiniciar o serviço do rawdevices.

[root@serveroracle rules.d]# /sbin/service rawdevices restart
Assigning devices:
           /dev/raw/raw1  -->   /dev/sdb1
/dev/raw/raw1:  bound to major 8, minor 17
           /dev/raw/raw2  -->   /dev/sdc1
/dev/raw/raw2:  bound to major 8, minor 33
           /dev/raw/raw3  -->   /dev/sdd1
/dev/raw/raw3:  bound to major 8, minor 49
           /dev/raw/raw4  -->   /dev/sde1
/dev/raw/raw4:  bound to major 8, minor 65
           /dev/raw/raw5  -->   /dev/sdf1
/dev/raw/raw5:  bound to major 8, minor 81
           /dev/raw/raw6  -->   /dev/sdg1
/dev/raw/raw6:  bound to major 8, minor 97
           /dev/raw/raw7  -->   /dev/sdh1
/dev/raw/raw7:  bound to major 8, minor 113
           /dev/raw/raw8  -->   /dev/sdi1
/dev/raw/raw8:  bound to major 8, minor 129
done
[root@serveroracle rules.d]#

Após a reinicialização do serviço “rawdevices”, vamos privilegiar o usuário “oracle” do grupo “dba” nas rawdevices de 1 a 8 conforme abaixo.

[root@serveroracle rules.d]# chown -R oracle.dba /dev/raw/raw[1-8]
[root@serveroracle rules.d]# chmod 660 /dev/raw/raw[1-8]
[root@serveroracle rules.d]# ls -ltr /dev/raw/raw*
crw------- 1 oracle dba 162, 1 Feb 21 19:48 /dev/raw/raw1
crw------- 1 oracle dba 162, 2 Feb 21 19:48 /dev/raw/raw2
crw------- 1 oracle dba 162, 3 Feb 21 19:48 /dev/raw/raw3
crw------- 1 oracle dba 162, 4 Feb 21 19:48 /dev/raw/raw4
crw------- 1 oracle dba 162, 5 Feb 21 19:48 /dev/raw/raw5
crw------- 1 oracle dba 162, 6 Feb 21 19:48 /dev/raw/raw6
crw------- 1 oracle dba 162, 7 Feb 21 19:48 /dev/raw/raw7
crw------- 1 oracle dba 162, 8 Feb 21 19:48 /dev/raw/raw8
[root@serveroracle rules.d]#

Agora precisamos privilegiar o usuário “oracle” para os dispositivos, para que na próxima reinicialização do Sistema Operacional o usuário “oracle” seja possível subir a instância “ASM”.

Exite duas maneiras:

1 – Podemos conforme abaixo no arquivo “rc.local” garantir privilégios nos dispositivos butos (RAW) para o usuário “oracle” do grupo “dba”;
2 – Criar o arquivo “99-raw-perms.rules” dentro do diretório “/etc/udev/rules.d/” e garantir privilégios nos dispositivos butos (RAW) para o usuário “oracle” do grupo “dba”;.

Vou mostrar das duas formas.

No arquivo “rc.local”.

chown -R oracle.dba /dev/raw/raw[1-8]
chmod 660 /dev/raw/raw[1-8]

Vamos acrescentar no arquivo as linhas acima.

[root@serveroracle scripts]# cd /etc/
[root@serveroracle etc]# cat rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
[root@serveroracle etc]# vi rc.local
[root@serveroracle etc]# cat rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
chown -R oracle.dba /dev/raw/raw[1-8]
chmod 660 /dev/raw/raw[1-8]
[root@serveroracle etc]#

No arquivo “99-raw-perms.rules”.

KERNEL=="raw[1-8]", MODE="0660", GROUP="dba", OWNER="oracle"

Vamos acrescentar no arquivo as linhas acima.

[root@serveroracle rules.d]# vi 99-raw-perms.rules
[root@serveroracle rules.d]# cat 99-raw-perms.rules
KERNEL=="raw[1-8]", MODE="0660", GROUP="dba", OWNER="oracle"
[root@serveroracle rules.d]#

Pronto, preparamos os dispositivos e vamos criar a instância ASM.
Com o usuário “oracle” vamos verificar o ambiente de banco de dados.

[root@serveroracle ~]# su - oracle
[oracle@serveroracle ~]$ ps -ef | grep pmon
oracle    4227     1  0 19:51 ?        00:00:00 ora_pmon_dbprod
oracle    4308  4185  0 19:52 pts/2    00:00:00 grep pmon
[oracle@serveroracle ~]$

Conforme informações acima, o nosso Banco de Dados Oracle “dbprod” está executando. Vamos conferir algumas informações no mesmo para realizarmos a migração do ambiente SINGLE para ASM.
Verificando o Listener.

[oracle@serveroracle ~]$ lsnrctl status

LSNRCTL for Linux: Version 10.2.0.5.0 - Production on 21-FEB-2012 19:52:42

Copyright (c) 1991, 2010, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.104)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 10.2.0.5.0 - Production
Start Date                21-FEB-2012 19:51:15
Uptime                    0 days 0 hr. 1 min. 27 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /oraprd01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Listener Log File         /oraprd01/app/oracle/product/10.2.0/db_1/network/log/listener.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.104)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "dbprod" has 2 instance(s).
  Instance "dbprod", status UNKNOWN, has 1 handler(s) for this service...
  Instance "dbprod", status READY, has 1 handler(s) for this service...
Service "dbprodXDB" has 1 instance(s).
  Instance "dbprod", status READY, has 1 handler(s) for this service...
Service "dbprod_XPT" has 1 instance(s).
  Instance "dbprod", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@serveroracle ~]$

Vamos criar a instância ASM. (Veja as Imagens na Galeria para a Criação da Instância ASM).
Com o DBCA vamos criar a instância ASM e após a criação vamos visualizar se as instâncias estão executando.

[oracle@serveroracle ~]$ dbca

Num outro terminal vamos executar com o usuário “root” durante a criação da instância “+ASM” o comando abaixo para criar o OCR.

[root@serveroracle ~]# /oraprd01/app/oracle/product/10.2.0/db_1/bin/localconfig add
/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 30 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.
        serveroracle
CSS is active on all nodes.
Oracle CSS service is installed and running under init(1M)
[root@serveroracle ~]#

Após criação da instância “+ASM” vamos visualizar os processos para verificar se os mesmos executando.

[oracle@serveroracle ~]$ ps -ef | grep pmon
oracle    4227     1  0 19:51 ?        00:00:00 ora_pmon_dbprod
oracle    4387     1  0 19:57 ?        00:00:00 asm_pmon_+ASM
oracle    4490  4185  0 20:06 pts/2    00:00:00 grep pmon
[oracle@serveroracle ~]$

Após criado a Instância ASM, podemos perceber que as duas instâncias “dbprod” e “+ASM” estão executando no servidor de Banco de Dados Oracle.
Vamos verificar o status do Enterprise Manager.

[oracle@serveroracle ~]$ emctl status dbconsole
TZ set to Brazil/East
Oracle Enterprise Manager 10g Database Control Release 10.2.0.5.0
Copyright (c) 1996, 2010 Oracle Corporation.  All rights reserved.
https://serveroracle.localdomain:5500/em/console/aboutApplication
Oracle Enterprise Manager 10g is running.
------------------------------------------------------------------
Logs are generated in directory /oraprd01/app/oracle/product/10.2.0/db_1/serveroracle.localdomain_dbprod/sysman/log
[oracle@serveroracle ~]$ echo $ORACLE_SID
dbprod
[oracle@serveroracle ~]$

Como podemos perceber o EM (Enterprise Manager) está executando.
Vamos conectar no Banco de Dados “dbprod” e verificar informações para a migração.
OBS: Todas as informações vistas abaixo são importantes para a migração do ambiente.

[oracle@serveroracle ~]$ sqlplus sys/******* as sysdba

SQL*Plus: Release 10.2.0.5.0 - Production on Tue Feb 21 20:21:55 2012

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Release 10.2.0.5.0 - Production

SQL> select instance_name, status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
dbprod           OPEN

SQL> show parameter control_files

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      /oraprd02/oradata/dbprod/contr
                                                 ol01.ctl, /oraprd02/oradata/db
                                                 prod/control02.ctl, /oraprd02/
                                                 oradata/dbprod/control03.ctl
SQL> col member for a45
SQL> select member from v$logfile;

MEMBER
---------------------------------------------
/oraprd02/oradata/dbprod/redo003.log
/oraprd02/oradata/dbprod/redo002.log
/oraprd02/oradata/dbprod/redo001.log

SQL> col name for a45
SQL> select name from v$datafile;

NAME
---------------------------------------------
/oraprd02/oradata/dbprod/system01.dbf
/oraprd02/oradata/dbprod/undotbs01.dbf
/oraprd02/oradata/dbprod/sysaux01.dbf
/oraprd02/oradata/dbprod/users01.dbf
/oraprd02/oradata/dbprod/users02.dbf
/oraprd01/oradata/dbprod/users03.dbf
/oraprd02/oradata/dbprod/master.dbf

7 rows selected.

SQL> show parameter db_create_file_dest                  string

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest                  string
SQL> select log_mode from v$database;

LOG_MODE
------------
ARCHIVELOG

SQL> show parameter log_archive_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest                     string      /orabackup/dbprod/oraarchive
.
.
log_archive_dest_state_9             string      enable
SQL>

Obtivemos as informações dos arquivos para a migração do ambiente single para o ASM.
Obtivemos informações de:
– controlfiles;
– logfiles;
– datafiles;
– archivelogs;

Vamos iniciar a configuração do Banco de Dados para a Migração.

SQL> alter system set control_files='+DGDADOS' scope=spfile;

System altered.

SQL> alter system set db_create_file_dest='+DGDADOS' scope=spfile;

System altered.

SQL> !

Ajustando o parâmetro “db_create_file_dest” especifica a localização default dos arquivos gerenciados pelo Oracle.
Mais informações acesse DB_CREATE_FILE_DEST.
Com o RMAN vamos iniciar a migração para ASM.
Vamos realizar o backup do controlfile corrente.

[oracle@serveroracle ~]$ rman target sys/*******

Recovery Manager: Release 10.2.0.5.0 - Production on Tue Feb 21 20:36:54 2012

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

connected to target database: DBPROD (DBID=862715809)

RMAN> backup current controlfile format '/oraprd01/app/oracle/control.ctl';

Starting backup at 21-FEB-12
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=133 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current control file in backupset
channel ORA_DISK_1: starting piece 1 at 21-FEB-12
channel ORA_DISK_1: finished piece 1 at 21-FEB-12
piece handle=/oraprd01/app/oracle/control.ctl tag=TAG20120221T203833 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02
Finished backup at 21-FEB-12

Starting Control File and SPFILE Autobackup at 21-FEB-12
piece handle=/orabackup/dbprod/fisico/c-862715809-20120221-13 comment=NONE
Finished Control File and SPFILE Autobackup at 21-FEB-12

RMAN> exit


Recovery Manager complete.
[oracle@serveroracle ~]$ exit
exit

Vamos desligar o nosso Banco de Dados e iniciá-lo em estado “nomount”.

SQL> shutdown abort
ORACLE instance shut down.
SQL> startup nomount
ORACLE instance started.

Total System Global Area 1073741824 bytes
Fixed Size                  1277824 bytes
Variable Size             541065344 bytes
Database Buffers          524288000 bytes
Redo Buffers                7110656 bytes
SQL> !

Com o RMAN vamos restaurar o backup do corrente controlfile para dentro do Disco de Grupo “+DGDADOS” conforme abaixo.

[oracle@serveroracle ~]$ rman target sys/*********

Recovery Manager: Release 10.2.0.5.0 - Production on Tue Feb 21 20:43:22 2012

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

connected to target database: dbprod (not mounted)

RMAN> restore controlfile from '/oraprd01/app/oracle/control.ctl';

Starting restore at 21-FEB-12
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=155 devtype=DISK

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:16
output filename=+DGDADOS/dbprod/controlfile/current.256.776451519
Finished restore at 21-FEB-12

RMAN>

Podemos perceber acima que o controlfile foi restaurado para o disco de grupo “+DGDADOS”.
Nome do arquivo gerado “+DGDADOS/dbprod/controlfile/current.256.776451519”.

Vamos montar o Banco de Dados.

RMAN> alter database mount;

database mounted
released channel: ORA_DISK_1

RMAN>

Após o Banco de Dados montado, vamos realizar o Backup do mesmo com formato para o Grupo de Disco “+DGDADOS”.

RMAN> backup as copy database format '+DGDADOS';

Starting backup at 21-FEB-12
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=155 devtype=DISK
channel ORA_DISK_1: starting datafile copy
input datafile fno=00002 name=/oraprd02/oradata/dbprod/undotbs01.dbf
output filename=+DGDADOS/dbprod/datafile/undotbs1.257.775861731 tag=TAG20120221T210848 recid=28 stamp=775861817
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:35
channel ORA_DISK_1: starting datafile copy
input datafile fno=00001 name=/oraprd02/oradata/dbprod/system01.dbf
output filename=+DGDADOS/dbprod/datafile/system.258.775861825 tag=TAG20120221T210848 recid=29 stamp=775861872
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:55
channel ORA_DISK_1: starting datafile copy
input datafile fno=00003 name=/oraprd02/oradata/dbprod/sysaux01.dbf
output filename=+DGDADOS/dbprod/datafile/sysaux.259.775861881 tag=TAG20120221T210848 recid=30 stamp=775861909
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:35
channel ORA_DISK_1: starting datafile copy
input datafile fno=00005 name=/oraprd02/oradata/dbprod/users02.dbf
output filename=+DGDADOS/dbprod/datafile/users.260.775861915 tag=TAG20120221T210848 recid=31 stamp=775861936
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:25
channel ORA_DISK_1: starting datafile copy
input datafile fno=00009 name=/oraprd02/oradata/dbprod/master.dbf
output filename=+DGDADOS/dbprod/datafile/master.261.775861941 tag=TAG20120221T210848 recid=32 stamp=775861958
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:25
channel ORA_DISK_1: starting datafile copy
input datafile fno=00004 name=/oraprd02/oradata/dbprod/users01.dbf
output filename=+DGDADOS/dbprod/datafile/users.262.775861967 tag=TAG20120221T210848 recid=33 stamp=775861979
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile copy
input datafile fno=00006 name=/oraprd01/oradata/dbprod/users03.dbf
output filename=+DGDADOS/dbprod/datafile/users.263.775861983 tag=TAG20120221T210848 recid=34 stamp=775861994
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
Finished backup at 21-FEB-12

RMAN-06497: WARNING: control file is not current, control file autobackup skipped

O erro acima é de apenas aviso.
Após a finalização do Backup vamos verificar os arquivos (datafiles e tempfiles) do Banco de Dados.

RMAN> report schema;

RMAN-06139: WARNING: control file is not current for REPORT SCHEMA
Report of database schema

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    442      SYSTEM               ***     /oraprd02/oradata/dbprod/system01.dbf
2    759      UNDOTBS1             ***     /oraprd02/oradata/dbprod/undotbs01.dbf
3    255      SYSAUX               ***     /oraprd02/oradata/dbprod/sysaux01.dbf
4    104      USERS                ***     /oraprd02/oradata/dbprod/users01.dbf
5    202      USERS                ***     /oraprd02/oradata/dbprod/users02.dbf
6    102      USERS                ***     /oraprd01/oradata/dbprod/users03.dbf
9    160      MASTER               ***     /oraprd02/oradata/dbprod/master.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    2048     TEMP                 2048        /oraprd02/oradata/dbprod/temp06.dbf
2    3072     TEMP                 3072        /oraprd02/oradata/dbprod/temp05.dbf

RMAN>

Conforme acima os arquivos do Banco de Dados ainda estão aparecendo no seus caminhos antigos, isso ocorre pois a copia do catálogo do RMAN não foi atualizado no controlfile ainda.
Com o comando “SWITCH” vamos atualizar o mesmo e verificar novamente os arquivos.

RMAN> switch database to copy;

datafile 1 switched to datafile copy "+DGDADOS/dbprod/datafile/system.258.775861825"
datafile 2 switched to datafile copy "+DGDADOS/dbprod/datafile/undotbs1.257.775861731"
datafile 3 switched to datafile copy "+DGDADOS/dbprod/datafile/sysaux.259.775861881"
datafile 4 switched to datafile copy "+DGDADOS/dbprod/datafile/users.262.775861967"
datafile 5 switched to datafile copy "+DGDADOS/dbprod/datafile/users.260.775861915"
datafile 6 switched to datafile copy "+DGDADOS/dbprod/datafile/users.263.775861983"
datafile 9 switched to datafile copy "+DGDADOS/dbprod/datafile/master.261.775861941"

RMAN> report schema;

RMAN-06139: WARNING: control file is not current for REPORT SCHEMA
Report of database schema

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    442      SYSTEM               ***     +DGDADOS/dbprod/datafile/system.258.775861825
2    759      UNDOTBS1             ***     +DGDADOS/dbprod/datafile/undotbs1.257.775861731
3    255      SYSAUX               ***     +DGDADOS/dbprod/datafile/sysaux.259.775861881
4    104      USERS                ***     +DGDADOS/dbprod/datafile/users.262.775861967
5    202      USERS                ***     +DGDADOS/dbprod/datafile/users.260.775861915
6    102      USERS                ***     +DGDADOS/dbprod/datafile/users.263.775861983
9    160      MASTER               ***     +DGDADOS/dbprod/datafile/master.261.775861941

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    2048     TEMP                 2048        /oraprd02/oradata/dbprod/temp06.dbf
2    3072     TEMP                 3072        /oraprd02/oradata/dbprod/temp05.dbf

RMAN>

Vamos abrir o Banco de Dados com a opção “resetlogs”.
Porque abrir o Banco de Dados com a opção de RESETLOGS?
Porque como houve restauração e recuperação completa do Banco de Dados através do um backup do “controlfile’, isso gera uma nova incarnação do Banco de Dados.

RMAN> alter database open resetlogs;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 02/21/2012 21:16:08
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '+DGDADOS/dbprod/datafile/system.258.775861825'

RMAN>

O erro acima ocorre, pois o datafile da tablespace “SYSTEM” está inconsistente.
Vamos recuperar o Banco de Dados Oracle e abrir novamente com a opção “resetlogs”.

RMAN> recover database;

Starting recover at 21-FEB-12
using channel ORA_DISK_1

starting media recovery

archive log thread 1 sequence 214 is already on disk as file /oraprd02/oradata/dbprod/redo001.log
archive log filename=/oraprd02/oradata/dbprod/redo001.log thread=1 sequence=214
media recovery complete, elapsed time: 00:00:09
Finished recover at 21-FEB-12

RMAN> alter database open resetlogs;

database opened

RMAN> exit


Recovery Manager complete.
[oracle@serveroracle ~]$

Após o Banco de Dados aberto, vamos verificar os arquivos do mesmo após a migração dos arquivos de dados e continuar o processo de migração de outros arquivos.

[oracle@serveroracle ~]$ echo $ORACLE_SID
dbprod
[oracle@serveroracle ~]$ sqlplus sys/******* as sysdba

SQL*Plus: Release 10.2.0.5.0 - Production on Tue Feb 21 21:19:29 2012

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Release 10.2.0.5.0 - Production

SQL> select instance_name, status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
dbprod           OPEN

SQL> col name for a50
SQL> select name from v$datafile;

NAME
--------------------------------------------------
+DGDADOS/dbprod/datafile/system.258.775861825
+DGDADOS/dbprod/datafile/undotbs1.257.775861731
+DGDADOS/dbprod/datafile/sysaux.259.775861881
+DGDADOS/dbprod/datafile/users.262.775861967
+DGDADOS/dbprod/datafile/users.260.775861915
+DGDADOS/dbprod/datafile/users.263.775861983
+DGDADOS/dbprod/datafile/master.261.775861941

7 rows selected.

SQL> show parameter control_files

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      +DGDADOS/dbprod/controlfile/cu
                                                 rrent.256.776451519
SQL> select name from v$tempfile;

NAME
--------------------------------------------------
/oraprd02/oradata/dbprod/temp06.dbf
/oraprd02/oradata/dbprod/temp05.dbf

SQL>

Conforme acima, migramos para o ASM os arquivos de dados e os controlfiles. Visualizando os TempFiles ainda encontra-se no filesystem.
Vamos remover os arquivos temporários e criar os mesmo no Disco de Grupo “+DGDADOS”.

SQL> alter database tempfile '/oraprd02/oradata/dbprod/temp06.dbf' drop including datafiles;

Database altered.

SQL> alter database tempfile '/oraprd02/oradata/dbprod/temp05.dbf' drop including datafiles;

Database altered.

SQL> alter tablespace temp add tempfile '+DGDADOS' size 128M autoextend on next 64M maxsize 3072M;

Tablespace altered.

SQL> select name from v$tempfile;

NAME
--------------------------------------------------
+DGDADOS/dbprod/tempfile/temp.264.775862855

SQL>

Vamos migrar os redo log files para o Disco de Grupo destinado aos mesmos “+DGREDOA” e “+DGREDOB”.

SQL> set lines 155
col MEMBER for a50
select l.GROUP#, l.THREAD#, l.SEQUENCE#, l.ARCHIVED, l.STATUS, (l.BYTES/1024/1024) BYTES_MB, lf.MEMBER
from v$log l join v$logfile lf
on(l.GROUP#=lf.GROUP#)
where l.THREAD# = 1
order by 1
;SQL> SQL>   2    3    4    5    6

    GROUP#    THREAD#  SEQUENCE# ARC STATUS             BYTES_MB MEMBER
---------- ---------- ---------- --- ---------------- ---------- --------------------------------------------------
         1          1          1 NO  CURRENT                  80 /oraprd02/oradata/dbprod/redo001.log
         2          1          0 YES UNUSED                   80 /oraprd02/oradata/dbprod/redo002.log
         3          1          0 YES UNUSED                   80 /oraprd02/oradata/dbprod/redo003.log

SQL> alter database drop logfile group 2;

Database altered.

SQL> ALTER DATABASE
  ADD LOGFILE GROUP 2 ('+DGREDOA','+DGREDOB')
      SIZE 100M;  2    3

Database altered.

SQL>  alter database drop logfile group 3;

Database altered.

SQL> ALTER DATABASE
  ADD LOGFILE GROUP 3 ('+DGREDOA','+DGREDOB')
      SIZE 100M;  2    3

Database altered.

SQL>

Como o membro “/oraprd02/oradata/dbprod/redo001.log” do “grupo 1” está sendo acessado correntemente, portanto devemos trocar de grupo para removermos este grupo e criar o mesmo nos Discos de Grupo “+DGREDOA” e “+DGREDOB”.

SQL> alter system switch logfile;

System altered.

SQL> alter system checkpoint;

System altered.

SQL> select l.GROUP#, l.THREAD#, l.SEQUENCE#, l.ARCHIVED, l.STATUS, (l.BYTES/1024/1024) BYTES_MB, lf.MEMBER
from v$log l join v$logfile lf
on(l.GROUP#=lf.GROUP#)
where l.THREAD# = 1
order by 1
;  2    3    4    5    6

    GROUP#    THREAD#  SEQUENCE# ARC STATUS             BYTES_MB MEMBER
---------- ---------- ---------- --- ---------------- ---------- --------------------------------------------------
         1          1          1 YES INACTIVE                 80 /oraprd02/oradata/dbprod/redo001.log
         2          1          2 NO  CURRENT                 100 +DGREDOB/dbprod/onlinelog/group_2.256.776451595
         2          1          2 NO  CURRENT                 100 +DGREDOA/dbprod/onlinelog/group_2.256.776451583
         3          1          0 YES UNUSED                  100 +DGREDOB/dbprod/onlinelog/group_3.257.776450393
         3          1          0 YES UNUSED                  100 +DGREDOA/dbprod/onlinelog/group_3.257.776450383		 

SQL> alter database drop logfile group 1;

Database altered.

SQL> ALTER DATABASE
  ADD LOGFILE GROUP 1 ('+DGREDOA','+DGREDOB')
      SIZE 100M;  2    3

Database altered.

SQL>  select l.GROUP#, l.THREAD#, l.SEQUENCE#, l.ARCHIVED, l.STATUS, (l.BYTES/1024/1024) BYTES_MB, lf.MEMBER
from v$log l join v$logfile lf
on(l.GROUP#=lf.GROUP#)
where l.THREAD# = 1
order by 1
;  2    3    4    5    6
 
    GROUP#    THREAD#  SEQUENCE# ARC STATUS             BYTES_MB MEMBER
---------- ---------- ---------- --- ---------------- ---------- --------------------------------------------------
         1          1          0 YES UNUSED                  100 +DGREDOA/dbprod/onlinelog/group_1.258.776450197
         1          1          0 YES UNUSED                  100 +DGREDOB/dbprod/onlinelog/group_1.258.776450205
         2          1          2 NO  CURRENT                 100 +DGREDOB/dbprod/onlinelog/group_2.256.776451595
         2          1          2 NO  CURRENT                 100 +DGREDOA/dbprod/onlinelog/group_2.256.776451583
         3          1          0 YES UNUSED                  100 +DGREDOB/dbprod/onlinelog/group_3.257.776450393
         3          1          0 YES UNUSED                  100 +DGREDOA/dbprod/onlinelog/group_3.257.776450383
		 

6 rows selected.

SQL>

Vamos verificar o SPFILE e criar o mesmo dentro do Disco de Grupo “+DGDADOS” e desligar o banco de dados.

SQL> sho parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /oraprd01/app/oracle/product/1
                                                 0.2.0/db_1/dbs/spfiledbprod.or
                                                 a
SQL> create pfile='$ORACLE_BASE/init.ora' from spfile;

File created.

SQL>  create spfile='+DGDADOS' from pfile='$ORACLE_BASE/init.ora';

File created.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> !

Vamos remover o SPFILE do filesystem e no arquivo “initdbprod.ora” vamos adicionar o novo caminho do SPFILE do “+DGDADOS”.

[oracle@serveroracle ~]$ cd /oraprd01/app/oracle/product/10.2.0/db_1/dbs/
[oracle@serveroracle dbs]$ cp -p spfiledbprod.ora spfiledbprod.ora.bkp
[oracle@serveroracle dbs]$ rm spfiledbprod.ora

Vamos verificar no ASM o caminho do SPFILE para colocar no arquivo “initdbprod.ora”.

[oracle@serveroracle dbs]$ export ORACLE_SID=+ASM
[oracle@serveroracle dbs]$ asmcmd
ASMCMD> cd +DGDADOS/DBPROD/PARAMETERFILE
ASMCMD> pwd
+DGDADOS/DBPROD/PARAMETERFILE
ASMCMD> ls -ltr
Type           Redund  Striped  Time             Sys  Name
PARAMETERFILE  MIRROR  COARSE   FEB 28 17:00:00  Y    spfile.265.776453043
ASMCMD> exit
[oracle@serveroracle dbs]$ vi initdbprod.ora
[oracle@serveroracle dbs]$ cat initdbprod.ora
spfile='+DGDADOS/DBPROD/PARAMETERFILE/spfile.265.776453043'
[oracle@serveroracle dbs]$ exit
exit

Vamos iniciar o Banco de Dados com o SPFILE e verificar o mesmo.

SQL> startup
ORACLE instance started.

Total System Global Area 1073741824 bytes
Fixed Size                  1277824 bytes
Variable Size             541065344 bytes
Database Buffers          524288000 bytes
Redo Buffers                7110656 bytes
Database mounted.
Database opened.
SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      +DGDADOS/dbprod/parameterfile/
                                                 spfile.265.776453043
SQL> !

Após ter migrado a maioria dos arquivos, vamos migrar o Enterprise Manager para o ASM. Vamos remover o mesmo e criar novamente o “dbconsole”.
OBS: Veja nas imagenas da galeria o EM após criado com o ASM.

[oracle@serveroracle ~]$ emctl status dbconsole
TZ set to Brazil/East
Oracle Enterprise Manager 10g Database Control Release 10.2.0.5.0
Copyright (c) 1996, 2010 Oracle Corporation.  All rights reserved.
https://serveroracle.localdomain:5500/em/console/aboutApplication
Oracle Enterprise Manager 10g is running.
------------------------------------------------------------------
Logs are generated in directory /oraprd01/app/oracle/product/10.2.0/db_1/serveroracle.localdomain_dbprod/sysman/log
[oracle@serveroracle ~]$ emca -deconfig dbcontrol db -repos drop

STARTED EMCA at Feb 21, 2012 10:24:27 PM
EM Configuration Assistant, Version 10.2.0.5.0 Production
Copyright (c) 2003, 2009, Oracle.  All rights reserved.

Enter the following information:
Database SID: dbprod
Listener port number: 1521
Password for SYS user:
Password for SYSMAN user:

----------------------------------------------------------------------
WARNING : While repository is dropped the database will be put in quiesce mode.
----------------------------------------------------------------------

Do you wish to continue? [yes(Y)/no(N)]: Y
Feb 21, 2012 10:24:40 PM oracle.sysman.emcp.EMConfig perform
INFO: This operation is being logged at /oraprd01/app/oracle/product/10.2.0/db_1/cfgtoollogs/emca/dbprod/emca_2012-02-21_10-24-27-PM.log.
Feb 21, 2012 10:24:43 PM oracle.sysman.emcp.util.DBControlUtil stopOMS
INFO: Stopping Database Control (this may take a while) ...
Feb 21, 2012 10:25:12 PM oracle.sysman.emcp.EMReposConfig invoke
INFO: Dropping the EM repository (this may take a while) ...
Feb 21, 2012 10:25:13 PM oracle.sysman.emcp.EMReposConfig dropRepository
INFO: Dropping the EM repository (this may take a while) ...
Feb 21, 2012 10:27:55 PM oracle.sysman.emcp.EMReposConfig invoke
INFO: Repository successfully dropped
Enterprise Manager configuration completed successfully
FINISHED EMCA at Feb 21, 2012 10:27:56 PM
[oracle@serveroracle ~]$ emca -config dbcontrol db -repos create

STARTED EMCA at Feb 21, 2012 10:29:22 PM
EM Configuration Assistant, Version 10.2.0.5.0 Production
Copyright (c) 2003, 2009, Oracle.  All rights reserved.

Enter the following information:
Database SID: dbprod
Listener port number: 1521
Password for SYS user:
Password for DBSNMP user:
Password for SYSMAN user:
Email address for notifications (optional):
Outgoing Mail (SMTP) server for notifications (optional):
ASM ORACLE_HOME [ /oraprd01/app/oracle/product/10.2.0/db_1 ]:
ASM SID [ +ASM ]:
ASM port [ 1521 ]:
ASM user role [ SYSDBA ]:
ASM username [ SYS ]:
ASM user password:
-----------------------------------------------------------------

You have specified the following settings

Database ORACLE_HOME ................ /oraprd01/app/oracle/product/10.2.0/db_1

Local hostname ................ serveroracle.localdomain
Listener port number ................ 1521
Database SID ................ dbprod
Email address for notifications ...............
Outgoing Mail (SMTP) server for notifications ...............
ASM ORACLE_HOME ................ /oraprd01/app/oracle/product/10.2.0/db_1
ASM SID ................ +ASM
ASM port ................ 1521
ASM user role ................ SYSDBA
ASM username ................ SYS

-----------------------------------------------------------------
Do you wish to continue? [yes(Y)/no(N)]: Y
Feb 21, 2012 10:31:42 PM oracle.sysman.emcp.EMConfig perform
INFO: This operation is being logged at /oraprd01/app/oracle/product/10.2.0/db_1/cfgtoollogs/emca/dbprod/emca_2012-02-21_10-29-22-PM.log.
Feb 21, 2012 10:31:50 PM oracle.sysman.emcp.EMReposConfig createRepository
INFO: Creating the EM repository (this may take a while) ...
Feb 21, 2012 10:36:24 PM oracle.sysman.emcp.EMReposConfig invoke
INFO: Repository successfully created
Feb 21, 2012 10:36:55 PM oracle.sysman.emcp.util.DBControlUtil secureDBConsole
INFO: Securing Database Control (this may take a while) ...
Feb 21, 2012 10:38:33 PM oracle.sysman.emcp.util.DBControlUtil secureDBConsole
INFO: Database Control secured successfully.
Feb 21, 2012 10:38:33 PM oracle.sysman.emcp.util.DBControlUtil startOMS
INFO: Starting Database Control (this may take a while) ...
Feb 21, 2012 10:40:40 PM oracle.sysman.emcp.EMDBPostConfig performConfiguration
INFO: Database Control started successfully
Feb 21, 2012 10:40:41 PM oracle.sysman.emcp.EMDBPostConfig performConfiguration
INFO: >>>>>>>>>>> The Database Control URL is https://serveroracle.localdomain:5500/em <<<<<<<<<<<
Enterprise Manager configuration completed successfully
FINISHED EMCA at Feb 21, 2012 10:40:41 PM
[oracle@serveroracle ~]$

Vamos agora gerar os archivelogs para dentro do Disco de Grupo “+DGARCH”.
Vamos criar o diretório no ASM para o arquivamento dos archivelogs alterar o destino do archivelog no parâmetro e reiniciar o Banco de Dados.

[oracle@serveroracle ~]$ export ORACLE_SID=+ASM
[oracle@serveroracle ~]$ asmcmd
ASMCMD> ls -l
State    Type    Rebal  Unbal  Name
MOUNTED  NORMAL  N      N      DGARCH/
MOUNTED  NORMAL  N      N      DGDADOS/
MOUNTED  NORMAL  N      N      DGREDOA/
MOUNTED  NORMAL  N      N      DGREDOB/
ASMCMD> mkdir DGARCH/DBPROD/
ASMCMD> mkdir DGARCH/DBPROD/ARCHIVEDLOG
ASMCMD> exit
[oracle@serveroracle ~]$ exit
exit

SQL>  create pfile='$ORACLE_BASE/init.ora' from spfile;

File created.

SQL> show parameter log_archive_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest                     string      /orabackup/dbprod/oraarchive
log_archive_dest_1                   string
.
.
log_archive_dest_state_9             string      enable
SQL> alter system set log_archive_dest='' scope=spfile;

System altered.

SQL> alter system set log_archive_dest_1='LOCATION=+DGARCH/DBPROD/ARCHIVEDLOG' scope=spfile;

System altered.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 1073741824 bytes
Fixed Size                  1277824 bytes
Variable Size             541065344 bytes
Database Buffers          524288000 bytes
Redo Buffers                7110656 bytes
Database mounted.
Database opened.
SQL> !

Após tudo migrado, vamos realizar um backup full do Banco de Dados.

[oracle@serveroracle ~]$ rman target sys/*****************

Recovery Manager: Release 10.2.0.5.0 - Production on Tue Feb 21 23:44:56 2012

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

connected to target database: DBPROD (DBID=862715809)

RMAN> run {
allocate channel c1 device type disk maxpiecesize 1024M;
backup as backupset
2>      format='/orabackup/dbprod/fisico/full_%d_%t_%p_%D_%M_%Y_%t'
3> 4> 5>        tag='BKP_FULL'
                (database);
6> 7> backup as backupset
8>      format='/orabackup/dbprod/fisico/ctlf_%d_%t_%p_%D_%M_%Y_%t'
9>      tag='BKP_CONTROLFILE'
                (current controlfile);
sql 'alter system switch logfile';
10> 11> 12> backup as backupset
13>     format='/orabackup/dbprod/fisico/arch_%d_%t_%p_%D_%M_%Y_%t'
14>     tag='BKP_ARCHIVELOG'
15>             (archivelog all delete input);
16> backup as backupset
17>     format='/orabackup/dbprod/fisico/spf_%d_%t_%p_%D_%M_%Y_%t'
18>     tag='BKP_SPFILE'
                (spfile);
19> 20> release channel c1;
}21>

using target database control file instead of recovery catalog
allocated channel: c1
channel c1: sid=136 devtype=DISK

Starting backup at 21-FEB-12
channel c1: starting full datafile backupset
channel c1: specifying datafile(s) in backupset
input datafile fno=00002 name=+DGDADOS/dbprod/datafile/undotbs1.257.775861731
input datafile fno=00001 name=+DGDADOS/dbprod/datafile/system.258.775861825
input datafile fno=00003 name=+DGDADOS/dbprod/datafile/sysaux.259.775861881
input datafile fno=00005 name=+DGDADOS/dbprod/datafile/users.260.775861915
input datafile fno=00009 name=+DGDADOS/dbprod/datafile/master.261.775861941
input datafile fno=00004 name=+DGDADOS/dbprod/datafile/users.262.775861967
input datafile fno=00006 name=+DGDADOS/dbprod/datafile/users.263.775861983
channel c1: starting piece 1 at 21-FEB-12
channel c1: finished piece 1 at 21-FEB-12
piece handle=/orabackup/dbprod/fisico/full_DBPROD_775871137_1_21_02_2012_775871137 tag=BKP_FULL comment=NONE
channel c1: starting piece 2 at 21-FEB-12
channel c1: finished piece 2 at 21-FEB-12
piece handle=/orabackup/dbprod/fisico/full_DBPROD_775871137_2_21_02_2012_775871137 tag=BKP_FULL comment=NONE
channel c1: backup set complete, elapsed time: 00:03:51
Finished backup at 21-FEB-12

Starting backup at 21-FEB-12
channel c1: starting full datafile backupset
channel c1: specifying datafile(s) in backupset
including current control file in backupset
channel c1: starting piece 1 at 21-FEB-12
channel c1: finished piece 1 at 21-FEB-12
piece handle=/orabackup/dbprod/fisico/ctlf_DBPROD_775871370_1_21_02_2012_775871370 tag=BKP_CONTROLFILE comment=NONE
channel c1: backup set complete, elapsed time: 00:00:04
Finished backup at 21-FEB-12

Starting Control File and SPFILE Autobackup at 21-FEB-12
piece handle=/orabackup/dbprod/fisico/c-862715809-20120221-1f comment=NONE
Finished Control File and SPFILE Autobackup at 21-FEB-12

sql statement: alter system switch logfile

Starting backup at 21-FEB-12
current log archived
channel c1: starting archive log backupset
channel c1: specifying archive log(s) in backup set
input archive log thread=1 sequence=1 recid=332 stamp=775864303
input archive log thread=1 sequence=2 recid=333 stamp=775865342
input archive log thread=1 sequence=3 recid=334 stamp=775866794
input archive log thread=1 sequence=4 recid=335 stamp=775868341
input archive log thread=1 sequence=5 recid=336 stamp=775871383
input archive log thread=1 sequence=6 recid=337 stamp=775871386
channel c1: starting piece 1 at 21-FEB-12
channel c1: finished piece 1 at 21-FEB-12
piece handle=/orabackup/dbprod/fisico/arch_DBPROD_775871387_1_21_02_2012_775871387 tag=BKP_ARCHIVELOG comment=NONE
channel c1: backup set complete, elapsed time: 00:00:26
channel c1: deleting archive log(s)
archive log filename=/orabackup/dbprod/oraarchive/dbprod_1_1_775862237.arc recid=332 stamp=775864303
archive log filename=/orabackup/dbprod/oraarchive/dbprod_1_2_775862237.arc recid=333 stamp=775865342
archive log filename=/orabackup/dbprod/oraarchive/dbprod_1_3_775862237.arc recid=334 stamp=775866794
archive log filename=/orabackup/dbprod/oraarchive/dbprod_1_4_775862237.arc recid=335 stamp=775868341
archive log filename=+DGARCH/dbprod/archivedlog/dbprod_1_5_775862237.arc recid=336 stamp=775871383
archive log filename=+DGARCH/dbprod/archivedlog/dbprod_1_6_775862237.arc recid=337 stamp=775871386
channel c1: starting archive log backupset
channel c1: specifying archive log(s) in backup set
input archive log thread=1 sequence=210 recid=322 stamp=775837219
input archive log thread=1 sequence=211 recid=323 stamp=775838278
input archive log thread=1 sequence=212 recid=330 stamp=775862239
input archive log thread=1 sequence=213 recid=331 stamp=775862239
input archive log thread=1 sequence=214 recid=329 stamp=775862237
channel c1: starting piece 1 at 21-FEB-12
channel c1: finished piece 1 at 21-FEB-12
piece handle=/orabackup/dbprod/fisico/arch_DBPROD_775871415_1_21_02_2012_775871415 tag=BKP_ARCHIVELOG comment=NONE
channel c1: backup set complete, elapsed time: 00:00:08
channel c1: deleting archive log(s)
archive log filename=/orabackup/dbprod/oraarchive/dbprod_1_210_774222764.arc recid=322 stamp=775837219
archive log filename=/orabackup/dbprod/oraarchive/dbprod_1_211_774222764.arc recid=323 stamp=775838278
archive log filename=/orabackup/dbprod/oraarchive/dbprod_1_212_774222764.arc recid=330 stamp=775862239
archive log filename=/orabackup/dbprod/oraarchive/dbprod_1_213_774222764.arc recid=331 stamp=775862239
archive log filename=/orabackup/dbprod/oraarchive/dbprod_1_214_774222764.arc recid=329 stamp=775862237
Finished backup at 21-FEB-12

Starting backup at 21-FEB-12
channel c1: starting full datafile backupset
channel c1: specifying datafile(s) in backupset
including current SPFILE in backupset
channel c1: starting piece 1 at 21-FEB-12
channel c1: finished piece 1 at 21-FEB-12
piece handle=/orabackup/dbprod/fisico/spf_DBPROD_775871424_1_21_02_2012_775871424 tag=BKP_SPFILE comment=NONE
channel c1: backup set complete, elapsed time: 00:00:02
Finished backup at 21-FEB-12

Starting Control File and SPFILE Autobackup at 21-FEB-12
piece handle=/orabackup/dbprod/fisico/c-862715809-20120221-20 comment=NONE
Finished Control File and SPFILE Autobackup at 21-FEB-12

released channel: c1

RMAN> exit


Recovery Manager complete.
[oracle@serveroracle ~]$

Agora vamos desligar o nosso Banco de Dados.
Com o ambiente de Banco de Dados Oracle em ASM, primeiramente devemos desligar a instância “dbprod” depois a instância “+ASM”, o Enterprise Manager se executando e o Listener.

[oracle@serveroracle ~]$ exit
exit

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 10g Release 10.2.0.5.0 - Production
[oracle@serveroracle orabackup]$ export ORACLE_SID=+ASM
[oracle@serveroracle orabackup]$ sqlplus sys/********* as sysdba

SQL*Plus: Release 10.2.0.5.0 - Production on Tue Feb 21 23:59:08 2012

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Release 10.2.0.5.0 - Production

SQL> shutdown immediate
ASM diskgroups dismounted
ASM instance shutdown
SQL> exit
Disconnected from Oracle Database 10g Release 10.2.0.5.0 - Production
[oracle@serveroracle ~]$ emctl stop dbconsole
TZ set to Brazil/East
Oracle Enterprise Manager 10g Database Control Release 10.2.0.5.0
Copyright (c) 1996, 2010 Oracle Corporation.  All rights reserved.
https://serveroracle.localdomain:5500/em/console/aboutApplication
Stopping Oracle Enterprise Manager 10g Database Control ...
 ...  Stopped.
[oracle@serveroracle orabackup]$ lsnrctl stop

LSNRCTL for Linux: Version 10.2.0.5.0 - Production on 21-FEB-2012 23:58:40

Copyright (c) 1991, 2010, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.104)(PORT=1521)))
The command completed successfully
[oracle@serveroracle ~]$

Pronto migramos nosso Banco de Dados Oracle Single para ASM.

%name Migrando Banco de Dados Oracle Single para ASM non RAC

Autor: Maycon Tomiasi

Formado em Tecnologia da Informação na FIPP (Faculdade de Informática de Presidente Prudente), Analista DBA Oracle pela Teiko Soluções em Tecnologia da Informação, residente em Blumenau/ SC, Certificado OCP 10g/11g/12c, OCS 11g Implementation, OCE 11g Performance Tuning, OCE 11g RAC & GRID e OPN Specialist. Conhecimentos em PHP.