30 de julio de 2014

Administrando ASM - Disk Groups

Este post estará dedicado a la parte de administración de Disk Groups en ASM, recordar que las operaciones se las debe realizar con la instancia +ASM (o con el que se tenga en el ambiente) y las variables de entorno necesarias (ORACLE_SID, ORACLE_HOME, PATH).

A continuación se detallan algunas sentencias importantes:

Como primer paso indispensable es conectarse a la instancia +ASM.
bash-3.2$ . oraenv
ORACLE_SID = [orcl] ? +ASM
The Oracle base remains unchanged with value /u01/app/oracle
bash-3.2$ sqlplus / as sysasm

SQL*Plus: Release 11.2.0.3.0 Production on Wed Jul 30 17:12:10 2014

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

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Automatic Storage Management option
1. Script para visualizar los Disk Groups
SQL> select group_number, name, state, type, total_mb, free_mb from v$asm_diskgroup;

GROUP_NUMBER NAME                 STATE       TYPE     TOTAL_MB    FREE_MB
------------ -------------------- ----------- ------ ---------- ----------
           1 DATA                 MOUNTED     EXTERN      20394      20332
           2 FRA                  MOUNTED     EXTERN      20442      10281
           3 REDO1                MOUNTED     EXTERN       5100       5041
           4 REDO2                MOUNTED     EXTERN       5100       5041
2. Script para visualizar los Disks
column PATH format a20
column NAME format a20
SQL> select GROUP_NUMBER, PATH, NAME, TOTAL_MB, FREE_MB from v$asm_disk;

GROUP_NUMBER PATH                 NAME                   TOTAL_MB    FREE_MB
------------ -------------------- -------------------- ---------- ----------
           0 /dev/rdsk/c1t0d0s0                                 0          0
           1 /dev/rdsk/c1t1d0s0   DATA_0000                 10189      10158
           1 /dev/rdsk/c1t2d0s0   DATA_0001                 10205      10174
           2 /dev/rdsk/c1t3d0s0   FRA_0000                  20442      10281
           3 /dev/rdsk/c1t4d0s0   REDO1_0000                 5100       5041
           4 /dev/rdsk/c1t5d0s0   REDO2_0000                 5100       5041

6 rows selected.
3. Script para visualizar los Disk Groups con sus correspondientes discos, y también los discos candidatos
column PATH format a20
column NAME format a20
set line 150
SQL> select dg.NAME, d.NAME, d.PATH, d.TOTAL_MB, d.FREE_MB from v$asm_disk d, v$asm_diskgroup dg where dg.group_number=d.group_number;

NAME                 NAME                 PATH                   TOTAL_MB    FREE_MB
-------------------- -------------------- -------------------- ---------- ----------
DATA                 DATA_0000            /dev/rdsk/c1t1d0s0        10189      10158
DATA                 DATA_0001            /dev/rdsk/c1t2d0s0        10205      10174
FRA                  FRA_0000             /dev/rdsk/c1t3d0s0        20442      10281
REDO1                REDO1_0000           /dev/rdsk/c1t4d0s0         5100       5041
REDO2                REDO2_0000           /dev/rdsk/c1t5d0s0         5100       5041
O alternativamente usar el siguiente script:
column disk_path format a20
column disk_name format a20
column diskgroup_name format a20
set line 150
SELECT
    NVL(a.name, '[CANDIDATO]')      diskgroup_name
  , b.path                          disk_path
  , b.name                          disk_name
  , b.free_mb                       
  , B.total_mb
FROM
    v$asm_diskgroup a RIGHT OUTER JOIN v$asm_disk b USING (group_number)
ORDER BY
    a.name;

DISKGROUP_NAME       DISK_PATH            DISK_NAME               FREE_MB   TOTAL_MB
-------------------- -------------------- -------------------- ---------- ----------
DATA                 /dev/rdsk/c1t2d0s0   DATA_0001                 10179      10205
DATA                 /dev/rdsk/c1t1d0s0   DATA_0000                 10163      10189
FRA                  /dev/rdsk/c1t3d0s0   FRA_0000                  20392      20442
REDO1                /dev/rdsk/c1t4d0s0   REDO1_0000                 5050       5100
REDO2                /dev/rdsk/c1t5d0s0   REDO2_0000                 5050       5100
[CANDIDATO]          /dev/rdsk/c1t0d0s0                                 0          0

6 rows selected.
4. Crear un Disk Group con un disco
CREATE DISKGROUP PRUEBA EXTERNAL REDUNDANCY DISK '/dev/rdsk/c1t3d0s0';
5. Adicionar Disco a un Disk Group
ALTER DISKGROUP DATA ADD DISK '/dev/rdsk/c1t2d0s0';
6. Montar un Disk Group
ALTER DISKGROUP DATA MOUNT;
7. Borrar Disco de un Disk Group
ALTER DISKGROUP DATA DROP DISK DATA_0001;
8. Desmontar un Disk Group
ALTER DISKGROUP DATA DISMOUNT;
9. Borrar un Disk Group
DROP DISKGROUP DATA;
10. Borrar un Disk Group y sus contenidos
DROP DISKGROUP DATA including contents;
Paulo Ticona :)

Fuentes:
http://docs.oracle.com/cd/E11882_01/server.112/e18951/asmdiskgrps.htm#OSTMG10040
Oracle® Automatic Storage Management Administrator's Guide, 11g Release 2 (11.2), E18951-03

3 de julio de 2014

Instalación de Oracle Grid Infrastructure for Standalone y Oracle Database 11gR2.

En este post realizaremos los pasos para la instalación de Grid Infrastructure for standalone y Oracle Database 11gR2. Para realizar este procedimiento deberíamos tener previamente configurado los requisitos que son necesarios para la instalación, a continuación se describe lo que ya deberíamos tener:
Este escenario se dividira en dos secciones, primero instalamos Grid Infrastructure y luego Oracle Database. Nuestro ambiente tendrá en total 3 row devices, 2 discos de 4GB para el Disk Group +DATA y 1 disco de 5GB que será utilizado para el Disk Group +FRA.

Instalación de Oracle Grid Infrastructure
a)    Debemos estar conectados como usuario Oracle y tener copiado el instalador de infraestructura grid, ingresamos al directorio y ejecutamos runInstaller.
b)    Después aparecerá el interfaz con el que se comenzara la instalación.

c)    Elegimos la opción Grid Infrastructure for a Standalone Server.

 d)    Continuamos eligiendo el lenguaje. 

e)    Creamos el disk group DATA, eligiendo los dos discos de 4 GB y tipo de redundancia External.
 


f)    Se usara el mismo password (grid.123) para las cuentas SYS y ASMSNMP de la infraestructura GRID.
 


g)    Se elige los grupos del sistema operativo.

 h)    Especificamos la ruta de instalación de grid y ubicacion de Inventory.


 i)    Oracle revisa si la instalación cumple con todos lo prerequisitos establecidos.

 j)    Si todo esta correcto, pasara a la siguiente pantalla para comenzar la instalación.

 k)    Comenzará la instalación.

 l)    Durante la instalación se desplegara un mensaje en el cual pedirá ejecutar scripts como usuario root.

 

m)    Finaliza la instalación de GRID INFRAESTRUCTURE.


Instalación de Oracle Database

a)    Nos conectamos como usuario Oracle y debemos tener copiado el instalador de Oracle Database 11gR2, ingresamos al directorio y ejecutamos runInstaller.

b)    Aparecerá el interfaz con el que se comenzará la instalación.

c)    Omitimos las actualizaciones.

d)    Continuamos especificando que solo se desea instalar el software.

e)    Se elige la opción “Single instance”.

f)    Continuamos eligiendo el lenguaje.

g)    En este paso se elige la edición de la base de datos.

h)    Especificamos la ruta de instalación.

i)    Se elige los grupos del sistema operativo para la instalación.

j)    Si todo se encuentra correcto se mostrara un resumen antes de comenzar la instalación.

k)    Se realiza el proceso de la instalación.

l)    Durante la instalación aparecerá un mensaje en el cual pedirá ejecutar script como usuario root.

m)    Finaliza la instalación de Oracle Database 11gR2.

Con eso se concluye la instalación.



Paulo Ticona

Fuentes:
http://docs.oracle.com/cd/E11882_01/nav/portal_11.htm#solaris_installation_guides
Grid Infrastructure Installation Guide, 11g Release 2 (11.2) for Oracle Solaris E47805-02
Database Installation Guide, 11g Release 2 (11.2) for Oracle Solaris E48357-02

1 de julio de 2014

Configuración Previa de Solaris 5.10 para Instalar Grid Infrastructure y Oracle Database 11gR2

En este post nos enfocaremos a realizar las configuraciones previas para la instalación de Grid Infrastructure y Oracle Database 11gR2. A continuación se describen en detalle los pasos a seguir:

a) Revisamos que el tamaño de la memoria asignada sea de 4Gb o superior, determinamos con la siguiente instrucción:
bash-3.2# /usr/sbin/prtconf | grep "Memory size"

b) Determinamos el tamaño de SWAP que tenemos configurado, el valor debería ser bajo lo especificado con la tabla a continuación:

RAM
Tamaño del SWAP
Entre 1 GB y 2 GB
1.5 veces al del tamaño de la memoria RAM.
Entre 2 GB y 16 GB
Igual tamaño al de la memoria RAM.
Más de 16 GB
16 GB

En nuestro caso la memoria RAM es de 4 GB, por lo tanto, en función de la tabla mencionada anteriormente nuestro SWAP debería ser del mismo tamaño. Para determinar el tamaño ejecutamos lo siguiente:
bash-3.2# /usr/sbin/swap –l
 
El tamaño de SWAP para cada bloque es de 512 bytes, por lo tanto, para hallar el tamaño total se debe calcular bajo la siguiente expresion (blocks*512)/1024/1024/1024=Swap expresado en GB. Así el tamaño obtenido es de 4Gb.

 c) Verificamos que lo paquetes necesarios ya se encuentre instalados en el sistema operativo. Ejecutamos la siguiente instrucción:
bash-3.2# pkginfo -i SUNWarc SUNWbtool SUNWcsl SUNWhea SUNWlibC SUNWlibm SUNWlibms SUNWsprot SUNWtoo SUNWi1of SUNWi1cs SUNWi15cs

Si no estuviera instalado y diera el error como se muestra en la captura anterior, ejecutamos lo siguiente teniendo como origen el cd de instalación de los binarios:
bash-3.2# pkgadd -d /cdrom/sol_10_113_x86/Solaris_10/Product SUNWi1cs SUNWi15cs
Una vez instalado ya no debería dar error al listar los paquetes necesarios para el sistema operativo.

d) Para nuestra instalación utilizaremos un solo usuario (oracle) para que maneje tanto la infraestructura Grid y el motor de Base de Datos, por lo tanto, creamos los usuarios y grupos necesarios para la instalación.
bash-3.2# groupadd dba
bash-3.2# groupadd oinstall
bash-3.2# groupadd oper
bash-3.2# groupadd asmadmin
bash-3.2# groupadd asmdba
bash-3.2# groupadd asmoper
bash-3.2# useradd -g oinstall -G dba,oper,asmdba,asmadmin,asmoper -d /export/home/oracle oracle
bash-3.2# passwd oracle (ejemplo: oracle123)

e) Creamos los directorios para el usuario “oracle”:
bash-3.2# mkdir /export/home/oracle
bash-3.2# chown -R oracle:oinstall /export/home/oracle

f) Creamos los directorios para la instalación:
bash-3.2# mkdir -p /u01/app/oracle/product/11.2.0.3/db_1
bash-3.2# mkdir -p /u01/app/oracle/product/11.2.0.3/grid_1
bash-3.2# chmod -R 775 /u01
bash-3.2# chown -R oracle:oinstall /u01

g) Adicionamos project y verificamos en “/etc/project” que se haya creado correctamente.
bash-3.2# projadd -U oracle oracle

Añadimos la siguiente entrada al archivo “/etc/user_attr” dell project asignando al usuario y luego lo verificamos:
bash-3.2# echo "oracle::::project=oracle" >> /etc/user_attr

h) Modificamos y configuramos los procesos de los projects creados:
bash-3.2# projmod -s -K "project.max-sem-ids=(priv,100,deny)" oracle
bash-3.2# projmod -s -K "process.max-sem-nsems=(priv,256,deny)" oracle
bash-3.2# projmod -s -K "project.max-shm-memory=(priv,4g,deny)" oracle
bash-3.2# projmod -s -K "project.max-shm-ids=(priv,100,deny)" oracle
bash-3.2# projmod -s -K "process.max-file-descriptor=(basic,1024,deny)" oracle

i) Configuramos los parámetros del kernel a valores iguales o superiores de lo recomendado.
bash-3.2# echo "set max_nprocs = 30000"  >> /etc/system
bash-3.2# echo "set maxuprc = 16384"     >> /etc/system
bash-3.2# echo "set noexec_user_stack=1"  >> /etc/system
bash-3.2# echo "set semsys:seminfo_semmni=100"  >> /etc/system
bash-3.2# echo "set semsys:seminfo_semmns=1024"  >> /etc/system
bash-3.2# echo "set semsys:seminfo_semmsl=256"  >> /etc/system
bash-3.2# echo "set semsys:seminfo_semvmx=32767"  >> /etc/system
bash-3.2# echo "set shmsys:shminfo_shmmax=4294967296"  >> /etc/system
bash-3.2# echo "set shmsys:shminfo_shmmni =100"  >> /etc/system

Asignamos valores a los parámetros TCP y UDP:
bash-3.2# /usr/sbin/ndd -set /dev/tcp tcp_smallest_anon_port 9000
bash-3.2# /usr/sbin/ndd -set /dev/tcp tcp_largest_anon_port 65500
bash-3.2# /usr/sbin/ndd -set /dev/udp udp_smallest_anon_port 9000
bash-3.2# /usr/sbin/ndd -set /dev/udp udp_largest_anon_port 65500

Adicionar las siguientes líneas en el archivo “/etc/inittab”, para que las configuración de TCP y UDP del kernel persistan después de algún reinicio.
bash-3.2# echo “tm::sysinit:/usr/sbin/ndd -set /dev/tcp tcp_smallest_anon_port 9000 > /dev/console” >> /etc/inittab
bash-3.2# echo “tm::sysinit:/usr/sbin/ndd -set /dev/tcp tcp_largest_anon_port 65500 > /dev/console” >> /etc/inittab
bash-3.2# echo "tm::sysinit:/usr/sbin/ndd -set /dev/udp udp_smallest_anon_port 9000 > /dev/console" >> /etc/inittab
bash-3.2# echo "tm::sysinit:/usr/sbin/ndd -set /dev/udp udp_largest_anon_port 65500 > /dev/console" >> /etc/inittab


j) Finalmente configuramos las variables de entorno. Nos conectamos como usuario oracle y definimos sus variables de entorno, para ello modificamos el archivo .profile adicionando las siguientes entradas.
echo "Asignando variables para usuario ORACLE"
echo "...................................."
LD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0.3/db_1/lib; export LD_LIBRARY_PATH
PATH=/usr/sbin:/usr/ucb:/etc:.; export PATH
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0.3/db_1; export ORACLE_HOME
GRID_HOME=$ORACLE_BASE/product/11.2.0.3/grid_1; export GRID_HOME
ORACLE_SID=orcl; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=$ORACLE_HOME/bin:$GRID_HOME/bin:/usr/ccs/bin:/usr/bin:/usr/sbin:/usr/local/bin:.; export PATH
EDITOR=vi; export EDITOR
TEMP=/tmp; export TEMP
TMPDIR=/tmp; export TMPDIR
echo "Realizado"

Paulo Ticona

Fuentes:
http://docs.oracle.com/cd/E11882_01/nav/portal_11.htm#solaris_installation_guides
Grid Infrastructure Installation Guide, 11g Release 2 (11.2) for Oracle Solaris E47805-02
Database Installation Guide, 11g Release 2 (11.2) for Oracle Solaris E48357-02