Para melhor visualização, recomendo resolução de no mínimo 1280 x 800 e navegador Mozilla Firefox


sexta-feira, 3 de agosto de 2012

Abordando o ASM (Automatic Storage Management) no Windows XP 32 bits

Por Eduardo Legatti

Olá,

No Oracle 11g R2 o ASM (Automatic Storage Management) e o software de Clusterware para uso de banco de dados em RAC (Real Application Clusters) tiveram suas instalações unificadas em um único setup na qual foi chamado de Oracle Grid Infrastructure. No entanto, apesar de o mesmo ter sido disponibilizado para as versões 64 bits do Windows, o mesmo não foi disponibilizado para instalação nos sistemas operacionais Windows 32 bits. Portanto, para os novatos em Oracle que já ouviram falar sobre o ASM e que queiram conhecer e adquirir um pouco de prática com o mesmo, mas que não queiram criar máquinas virtuais com outros sistemas operacionais ou até mesmo que possuam um hardware modesto com o Windows 32 bits, segue abaixo os passos necessários para a criação de uma instância ASM no Oracle 10g R2 para fins de estudo. Vale a pena salientar que o Oracle 11g veio com muitos recursos novos relacionados ao ASM. Portanto, é fundamental que os estudos não fiquem presos apenas na versão do Oracle 10g. Acessar a documentação oficial e outras fontes é de fundamental importância para entender os conceitos. Neste artigo irei apresentar apenas a criação do ambiente em uma máquina com Windows XP 32 bits.

Bom, o primeiro passo será realizar a configuração do CSS (Cluster synchronization services) como demonstrado abaixo:
E:\oracle\product\10.2.0\db_1\BIN>localconfig add
Step 1: creating new OCR repository
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'legatti', privgrp ''..
Operation successful.
Step 2: creating new CSS service
successfully created local CSS service
successfully added CSS to home

Após a configuração do CSS, irei simular alguns discos para serem utilizados pelo ASM. Para tanto, irei criar 6 discos de 500 MB de tamanho cada um, usando o utilitário asmtool.

E:\>mkdir discos_asm

E:\>asmtool -create E:\discos_asm\disco01 500
E:\>asmtool -create E:\discos_asm\disco02 500
E:\>asmtool -create E:\discos_asm\disco03 500
E:\>asmtool -create E:\discos_asm\disco04 500
E:\>asmtool -create E:\discos_asm\disco05 500
E:\>asmtool -create E:\discos_asm\disco06 500

Os próximos passos serão os de criar os diretórios abaixo para serem utilizados pela instância ASM e o arquivo de inicialização da instância ASM (init+asm.ora) que deverá ser criado no diretório %ORACLE_HOME%\database.
mkdir %ORACLE_BASE%\admin\+ASM
mkdir %ORACLE_BASE%\admin\+ASM\bdump
mkdir %ORACLE_BASE%\admin\+ASM\udump
mkdir %ORACLE_BASE%\admin\+ASM\cdump
mkdir %ORACLE_BASE%\admin\+ASM\pfile

Segue abaixo o conteúdo do arquivo init+asm.ora
*.instance_type='asm'
*.asm_diskstring='E:\discos_asm\*'
*.background_dump_dest='E:\oracle\product\10.2.0\admin\+ASM\bdump'
*.user_dump_dest='E:\oracle\product\10.2.0\admin\+ASM\udump'
*.core_dump_dest='E:\oracle\product\10.2.0\admin\+ASM\cdump'
*.large_pool_size=12M
*.remote_login_passwordfile='EXCLUSIVE'
*._asm_allow_only_raw_disks=false

Neste momento já poderemos criar a instância ASM com o utilitário oradim e criar o spfile (spfile+asm.ora) para ser utilizado em vez do arquivo pfile (init+asm.ora) criado anteriormente.
C:\>oradim -new -asmsid +ASM -syspwd manager -startmode auto
Instância criada.

C:\>SET ORACLE_SID=+ASM
C:\>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Sex Ago 3 20:46:17 2012

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

Conectado a uma instância inativa.

SQL> create spfile from pfile;

Arquivo criado.

Pronto. Já podemos iniciar os serviços e começar a executar alguns comandos SQL na instância ASM. No mais, irei criar dois grupos de discos (DATA e FRA) conforme demonstrado abaixo:
C:\>net start OracleCSService
O serviço de OracleCSService está sendo iniciado...
O serviço de OracleCSService foi iniciado com êxito.

C:\>net start OracleASMService+ASM
O serviço de OracleASMService+ASM está sendo iniciado.....
O serviço de OracleASMService+ASM foi iniciado com êxito.

C:\>set ORACLE_SID=+ASM
C:\>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sex Ago 3 20:59:38 2012

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

Conectado a:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> select instance_name from v$instance;

INSTANCE_NAME
-------------
+asm

SQL> select group_number,disk_number,mount_status,path,total_mb from v$asm_disk;

GROUP_NUMBER DISK_NUMBER MOUNT_S PATH TOTAL_MB
------------ ----------- ------- ------------------------ ----------
0 0 CLOSED E:\DISCOS_ASM\DISCO01 500
0 1 CLOSED E:\DISCOS_ASM\DISCO02 500
0 2 CLOSED E:\DISCOS_ASM\DISCO03 500
0 3 CLOSED E:\DISCOS_ASM\DISCO04 500
0 4 CLOSED E:\DISCOS_ASM\DISCO05 500
0 5 CLOSED E:\DISCOS_ASM\DISCO06 500

6 linhas selecionadas.

SQL> create diskgroup DATA external redundancy disk
2 'e:\discos_asm\disco01',
3 'e:\discos_asm\disco02',
4 'e:\discos_asm\disco03',
5 'e:\discos_asm\disco04';

Grupo de discos criado.

SQL> create diskgroup FRA external redundancy disk
2 'e:\discos_asm\disco05',
3 'e:\discos_asm\disco06';

Grupo de discos criado.

Após criar os grupos, para montá-los automaticamente no startup da instância ASM, o parâmetro abaixo deverá ser setado:
SQL> alter system set asm_diskgroups='DATA','FRA';

Sistema alterado.

Após o shutdown e startup da instância, veremos que os grupos de discos foram montados automaticamente.
SQL> startup
Instância do ASM iniciada

Total System Global Area 83886080 bytes
Fixed Size 1295152 bytes
Variable Size 57425104 bytes
ASM Cache 25165824 bytes
Grupos de discos do ASM montados

SQL> select group_number,name,total_mb,state,type from v$asm_diskgroup;

GROUP_NUMBER NAME TOTAL_MB STATE TYPE
------------ ---------- ---------- ----------- ------
1 DATA 2000 MOUNTED EXTERN
2 FRA 1000 MOUNTED EXTERN

SQL> select group_number,disk_number,mount_status,path,total_mb from v$asm_disk;

GROUP_NUMBER DISK_NUMBER MOUNT_S PATH TOTAL_MB
------------ ----------- ------- ------------------------------ ----------
1 0 CACHED E:\DISCOS_ASM\DISCO01 500
1 1 CACHED E:\DISCOS_ASM\DISCO02 500
1 2 CACHED E:\DISCOS_ASM\DISCO03 500
1 3 CACHED E:\DISCOS_ASM\DISCO04 500
2 0 CACHED E:\DISCOS_ASM\DISCO05 500
2 1 CACHED E:\DISCOS_ASM\DISCO06 500

6 linhas selecionadas.

Com a instância ASM pronta para uso, será necessário criar um banco de dados normal para começar a usufruir do ASM. No meu caso eu já possuo um banco de dados ativo na minha máquina chamado de BD01. Portanto, irei utilizá-lo.
C:\>set ORACLE_SID=BD01
C:\>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sex Ago 3 21:35:14 2012

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

Conectado a uma instância inativa.

SQL> startup
Instância ORACLE iniciada.

Total System Global Area 209715200 bytes
Fixed Size 1248140 bytes
Variable Size 62915700 bytes
Database Buffers 142606336 bytes
Redo Buffers 2945024 bytes
Banco de dados montado.
Banco de dados aberto.

SQL> select group_number,name,total_mb,state,type from v$asm_diskgroup;

GROUP_NUMBER NAME TOTAL_MB STATE TYPE
------------ ---------- ---------- ----------- ------
1 DATA 2000 MOUNTED EXTERN
2 FRA 1000 MOUNTED EXTERN

Abaixo irei criar uma tablespace (TBS_04) que terá seus arquivos de dados armazenados e gerenciados pela instância ASM.
SQL> create tablespace TBS_04 datafile '+DATA' size 10M;

Tablespace criado.

SQL> select tablespace_name,file_id,file_name from dba_data_files;

TABLESPACE_NAME FILE_ID FILE_NAME
-------------------- ---------- ---------------------------------------------------
SYSTEM 1 E:\ORACLE\PRODUCT\10.2.0\ORADATA\BD01\SYSTEM01.DBF
UNDOTBS1 2 E:\ORACLE\PRODUCT\10.2.0\ORADATA\BD01\UNDOTBS01.DBF
SYSAUX 3 E:\ORACLE\PRODUCT\10.2.0\ORADATA\BD01\SYSAUX01.DBF
USERS 4 E:\ORACLE\PRODUCT\10.2.0\ORADATA\BD01\USERS01.DBF
TBS_01 5 E:\ORACLE\PRODUCT\10.2.0\ORADATA\BD01\TBS01.DBF
TBS_02 6 E:\ORACLE\PRODUCT\10.2.0\ORADATA\BD01\TBS02.DBF
TBS_03 7 E:\ORACLE\PRODUCT\10.2.0\ORADATA\BD01\TBS03.DBF
TBS_04 8 +DATA/bd01/datafile/tbs_04.256.780092939

8 linhas selecionadas.

Retornando para a instância ASM, poderemos verificar que o banco da dados se registrou na mesma conforme o resultado do SQL abaixo:
SQL> select group_number,db_name,status,software_version from v$asm_client;

GROUP_NUMBER DB_NAME STATUS SOFTWARE_VERSION
------------ -------- ------------ ----------------------------------------
1 BD01 CONNECTED 10.2.0.1.0

Poderemos verificar também que o arquivo de dados criado anteriormente e pertencente à tablespace TBS_04 foi reconhecida pela instância ASM:
SQL> select group_number,file_number,incarnation,type from v$asm_file;

GROUP_NUMBER FILE_NUMBER INCARNATION TYPE
------------ ----------- ----------- ---------------------------------
1 256 780092939 DATAFILE

Apenas para fins de demonstração, neste momento irei criar um novo diretório dentro do ASM para armazenar um segundo arquivo de dados da tablespace TBS_04. Para tanto eu preciso estar conectado na instância ASM.
C:\>set ORACLE_SID=+ASM
C:\>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sex Ago 3 21:45:14 2012

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

Conectado a:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> alter diskgroup DATA add directory '+DATA/BD01/ORADATA';

Grupo de discos alterado.

No banco de dados BD01 eu irei criar um novo arquivo de dados pertencente à tablespace TBS_04 conforme demonstrado abaixo:
C:\>set ORACLE_SID=BD01
C:\>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sex Ago 3 21:49:18 2012

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

Conectado a:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> alter tablespace TBS_04 add datafile '+DATA/BD01/ORADATA/tbs_04_2.dbf' size 10M;

Tablespace alterado.

Por fim, poderemos ver abaixo os novos arquivos de dados criados dentro do ASM.
SQL> select tablespace_name,file_id,file_name from dba_data_files;

TABLESPACE_NAME FILE_ID FILE_NAME
------------------- ---------- -----------------------------------------------------
SYSTEM 1 E:\ORACLE\PRODUCT\10.2.0\ORADATA\BD01\SYSTEM01.DBF
UNDOTBS1 2 E:\ORACLE\PRODUCT\10.2.0\ORADATA\BD01\UNDOTBS01.DBF
SYSAUX 3 E:\ORACLE\PRODUCT\10.2.0\ORADATA\BD01\SYSAUX01.DBF
USERS 4 E:\ORACLE\PRODUCT\10.2.0\ORADATA\BD01\USERS01.DBF
TBS_01 5 E:\ORACLE\PRODUCT\10.2.0\ORADATA\BD01\TBS01.DBF
TBS_02 6 E:\ORACLE\PRODUCT\10.2.0\ORADATA\BD01\TBS02.DBF
TBS_03 7 E:\ORACLE\PRODUCT\10.2.0\ORADATA\BD01\TBS03.DBF
TBS_04 8 +DATA/bd01/datafile/tbs_04.256.780092939
TBS_04 9 +DATA/bd01/oradata/tbs_04_2.dbf

9 linhas selecionadas.

C:\>set ORACLE_SID=+ASM
C:\>set ORACLE_HOME=E:\oracle\product\10.2.0\db_1

C:\>asmcmd
ASMCMD> ls -l
State Type Rebal Unbal Name
MOUNTED EXTERN N N DATA/
MOUNTED EXTERN N N FRA/

O ambiente está pronto. Bons estudos.



2 comentários:

Anônimo disse...

Ola!Parabéns pelo blog!
Também sou de BH, sou formado em computação e agora estou estudando para a certificação OCA e seu blog sempre tem sido referencia para mim!
Já me salvou em varias situações :)

Tudo de bom!

Att, Igor Marinho
igor.rmarinho@gmail.com

Eduardo Legatti disse...

Olá Igor,

Obrigado pela visita e bons estudos!

Abraços,

Legatti

Postagens populares