Fiquei meio limitado nessa brincadeira, meu disco estava cheio, por incrivel que pareça é muito fácil lotar um HD de 60GB com porcaria, mas é muito dificil se livrar dela, hehehe, consegui liberar 12 GB no disco, e decidi então iniciar a jornada. Instalei um VMWare, coloquei um centos4 e por fim instalei meu Oracle 10.2.0 pelo OU.
Eis que surgem 2 problemas, estou com espaço limitado em disco, cerca de 4GB para toda base de dados, não poderei brincar com failures groups, e o mais critico, para utilizar ASM teria que ter disco não formato, o que infelizmente não é essa a minha realidade, então como simular os disco no SO?
Achei a resposta no yahoo groups, utilizando arquivos vazios e o losetup, o qual irá realizar todo o trabalho de simular uma partição.
Resumindo, temos então que:
1) Criar os arquivos fisicos.
2) Simular partições.
3) Scripts de inicialização
4) Criar a instancia ASM
4.1) Parametros
4.2) Discos
4.3) DiskGroups
Salvei todo o log da minha operação e aqui esta oque foi feito:
Configurando SO:
Criando os arquivos pertencentes a partição
# mkdir /asmdisks
# chown oracle:dba /asmdisks
# su - oracle
$ dd if=/dev/zero of=/asmdisks/_file_disk1 bs=1k count=500000
$ dd if=/dev/zero of=/asmdisks/_file_disk2 bs=1k count=500000
$ dd if=/dev/zero of=/asmdisks/_file_disk3 bs=1k count=500000
$ dd if=/dev/zero of=/asmdisks/_file_disk4 bs=1k count=500000
Vinculando os arquivos vazios a partições
$ su -
# losetup /dev/loop1 /asmdisks/_file_disk1
# losetup /dev/loop2 /asmdisks/_file_disk2
# losetup /dev/loop3 /asmdisks/_file_disk3
# losetup /dev/loop4 /asmdisks/_file_disk4
Alterando as permissões
# chown oracle:dba /dev/loop1
# chown oracle:dba /dev/loop2
# chown oracle:dba /dev/loop3
# chown oracle:dba /dev/loop4
Iniciando o serviço do cluster
# <$ORACLE_HOME>/bin/localconfig add
Criando a instancia +ASM
Criando um script para iniciar a partição ao boot
como root
vi /root/rc.loopasm
# !/bin/bash
loop()
{
losetup /dev/loop1 /asmdisks/_file_disk1
losetup /dev/loop2 /asmdisks/_file_disk2
losetup /dev/loop3 /asmdisks/_file_disk3
losetup /dev/loop4 /asmdisks/_file_disk4
chown oracle:dba /dev/loop1
chown oracle:dba /dev/loop2
chown oracle:dba /dev/loop3
chown oracle:dba /dev/loop4
}
loop
# chmod +x /root/rc.loopasm
Fazer a chamada do script criado em /etc/rc2.d/:
# ln -sf /root/rc.loopasm /etc/rc2.d/S10loopasm.sh
# ln -sf /root/rc.loopasm /etc/rc5.d/S10loopasm.sh
Reiniciar o sistema
Criar a Instancia ASM
Criando os diretórios admin
$ mkdir -p $ORACLE_BASE/admin/+ASM/bdump
$ mkdir -p $ORACLE_BASE/admin/+ASM/cdump
$ mkdir -p $ORACLE_BASE/admin/+ASM/hdump
$ mkdir -p $ORACLE_BASE/admin/+ASM/pfile
$ mkdir -p $ORACLE_BASE/admin/+ASM/udump
Criando o arquivo de parametro
Criar em: $ORACLE_BASE/admin/+ASM/pfile
$ vi $ORACLE_BASE/admin/+ASM/pfile
###########################################
# Automatic Storage Management
###########################################
# _asm_allow_only_raw_disks=false
# asm_diskgroups='TESTDB_DATA1'
# 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/loop*'
###########################################
# Diagnostics and Statistics
###########################################
background_dump_dest=/u01/app/oracle/admin/+ASM/bdump
core_dump_dest=/u01/app/oracle/admin/+ASM/cdump
user_dump_dest=/u01/app/oracle/admin/+ASM/udump
###########################################
# Miscellaneous
###########################################
instance_type=asm
###########################################
# Pools
###########################################
large_pool_size=12M
###########################################
# Security and Auditing
###########################################
E criar o seguinte link simbolico
$ ln -s $ORACLE_BASE/admin/+ASM/pfile/init.ora $ORACLE_HOME/dbs/init+ASM.ora
Iniciando a instancia e criando o spfile
# su - oracle
$ ORACLE_SID=+ASM; export ORACLE_SID
$ sqlplus "/ as sysdba"
SQL> startup
ASM instance started
Total System Global Area 75497472 bytes
Fixed Size 777852 bytes
Variable Size 74719620 bytes
Database Buffers 0 bytes
Redo Buffers 0 bytes
ORA-15110: no diskgroups mounted
SQL> create spfile from pfile='/u01/app/oracle/admin/+ASM/pfile/init.ora';
SQL> shutdown
ASM instance shutdown
SQL> startup
ASM instance started
Verificando os raw devices
$ ORACLE_SID=+ASM; export ORACLE_SID
$ sqlplus "/ as sysdba"
SQL> SELECT group_number, disk_number, mount_status, header_status, state, path
2 FROM v$asm_disk;
Criar o disk group
SQL> CREATE DISKGROUP testdb_data1 external REDUNDANCY 2 DISK '/dev/loop1','/dev/loop2','/dev/loop3','/dev/loop4';Assim temos a nossa instancia +ASM criada e somente temos que criar um nova base para acessar o nosso storage com o dbca, em caso de migração de uma instancia normal para +ASM teriamos que usar o RMAN.
Fonte:
http://www.idevelopment.info/data/Oracle/DBA_tips/Automatic_Storage_Management/ASM_21.shtml
http://www.idevelopment.info/data/Oracle/DBA_tips/Automatic_Storage_Management/ASM_10.shtml
http://www.devin.com.br/dev_loop/