Buenas tardes,
Existen muchas ocasiones en nuestra empresa, cuando se va a montar una nueva aplicación muy poderosa, de prioridad uno y altamente transaccional.Para esto se nos ocurre montar ASM, pero... ¿dónde practicarlo, antes de montarlo en un sistema real?
Supongamos que el servidor productivo, donde apuntará nuestra nueva app, será completamente diferente, con respecto a los recursos físicos de las cajas de QA (Quality Assurance) o Pre-producción... es casi siempre lo que ocurre en todos lados, no??. Bueno... en resumen, el servidor de Producción será lo único que cuente con ASM.
Por obvias razones, quisiéramos practicarlo un poco, antes de montarlo en producción. El problema es que a veces es difícil hacerlo, cuando tenemos nuestro portátil o PC, con 1 ó dos discos solamente. Y dados los gastos de la empresa, no permiten adquirir un servidor real de pruebas, con algunos discos medianamente buenos, exclusivos para estos tests.
A continuación les voy a dar los pasos esenciales para montar ASM, en su base de datos creada localmente (su PC, portátil, etc).
Pasos:
Configurando Oracle Cluster Synchronization Services (CSS).
$ORACLE_HOME/bin/localconfig all
Creando directorios:
mkdir %ORACLE_BASE%\admin\+ASM\bdump
mkdir %ORACLE_BASE%\admin\+ASM\cdump
mkdir %ORACLE_BASE%\admin\+ASM\hdump
mkdir %ORACLE_BASE%\admin\+ASM\pfile
mkdir %ORACLE_BASE%\admin\+ASM\udump
Crear PFILE (parametros mínimos requeridos):
_asm_allow_only_raw_disks=FALSE
asm_diskstring='E:\oracle\product\10.2.0\oradata\ASMDISKS\disk*'
background_dump_dest=C:\oracle\product\10.1.0\admin\+ASM\bdump
core_dump_dest=C:\oracle\product\10.1.0\admin\+ASM\cdump
user_dump_dest=C:\oracle\product\10.1.0\admin\+ASM\udump
instance_type=asm
compatible=10.1.0.4.0
large_pool_size=12M
remote_login_passwordfile=exclusive
Se crea servicio e instancia:
oradim -new -asmsid +ASM -syspwd change_on_install
-pfile C:\oracle\product\10.1.0\admin\+ASM\pfile\init.ora -spfile
-startmode manual -shutmode immediate
Instance created.
C:\> oradim -edit -asmsid +ASM -startmode a
C:\> set oracle_sid=+ASM
C:\> sqlplus "/ as sysdba"
SQL> startup pfile='C:\oracle\product\10.1.0\admin\+ASM\pfile\init.ora';
ASM instance started
Total System Global Area 125829120 bytes
Fixed Size 769268 bytes
Variable Size 125059852 bytes
Database Buffers 0 bytes
Redo Buffers 0 bytes
ORA-15110: no diskgroups mounted
SQL> create spfile from pfile='C:\oracle\product\10.1.0\admin\+ASM\pfile\init.ora';
File created.
SQL> shutdown
ASM instance shutdown
SQL> startup
ASM instance started
Puede que recibas el siguiente error:
ORA-15110: no diskgroups mounted
Se crean discos simulados:
E:\>cd %ORACLE_HOME%
E:\oracle\product\10.2.0\db_1>cd bin
E:\oracle\product\10.2.0\db_1\bin>asmtool -create E:\oracle\product\10.2.0\oradata\ASMDISKS\disk1 512
E:\oracle\product\10.2.0\db_1\bin>asmtool -create E:\oracle\product\10.2.0\oradata\ASMDISKS\disk2 512
E:\oracle\product\10.2.0\db_1\bin>asmtool -create E:\oracle\product\10.2.0\oradata\ASMDISKS\disk3 512
E:\oracle\product\10.2.0\db_1\bin>asmtool -create E:\oracle\product\10.2.0\oradata\ASMDISKS\disk4 512
Verifica la nueva configuración:
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;
SQL> select group_number, disk_number, mount_status, header_status, state, path, failgroup
2 from v$asm_disk where rownum < 2;
GROUP_NUMBER DISK_NUMBER MOUNT_S HEADER_STATU STATE PATH FAILGROUP
1 0 CACHED MEMBER NORMAL E:\ORACLE\PRODUCT\10.2.0\ORADATA\ASMDISKS\DISK1 CONTROLLER1
Creando Grupos de discos:
1 CREATE DISKGROUP ASM_DATA1 NORMAL REDUNDANCY
2 FAILGROUP controller1
3 DISK 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ASMDISKS\DISK1','E:\ORACLE\PRODUCT\10.2.0\ORADATA\ASMDISKS\DISK3'
4 FAILGROUP controller2
5 DISK 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ASMDISKS\DISK2','E:\ORACLE\PRODUCT\10.2.0\ORADATA\ASMDISKS\DISK4'
Grupo de discos creado.
Conectándose a la segunda instancia (BD normal).
Ahora, usaando el nuevo ASM Group:
SQL> create tablespace users_mirror datafile '+ASM_DATA1' size 100m;
Tablespace creado.
SQL> select FILE_NAME, BYTES/1024/1024 as mb, TABLESPACE_NAME from dba_data_files order by 1;
FILE_NAME MB TABLESPACE_NAME
+ASM_DATA1/dba/datafile/users_mirror.256.663681233 100 USERS_MIRROR
Alterando un Grupo de Discos (diskgroup) para después añadir un alias...
SQL> alter diskgroup 'ASM_DATA1' add directory '+ASM_DATA1/dba/asm_alias/';
Grupo de discos modificado.
SQL> alter diskgroup ASM_DATA1
2 add alias '+ASM_DATA1/dba/asm_alias/users_alias.dbf'
3 for '+ASM_DATA1/dba/datafile/users_mirror.256.663681233';
Grupo de discos modificado.
Saludos,Carlos Isaac Contreras.DBASupport Europa.{mosimage}