segunda-feira, 2 de fevereiro de 2009

ASM + losetup

Essa semana estive estudando sobre ASM, foi muito esclarecedor, porém estava com vontade de brincar um pouco, decidi então mandar bala.

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/

Um comentário:

Anônimo disse...

Gгeat агticle, exactly what I nеeded.


Hегe is my blog: payday loans