ld.so.1: orapwd: fatal: libocrb12.so: open failed: No such file or directory Killed

El otro día tuvimos este error intentando crear el archivo de passwords de asm:

orapwd file=’+DATA/orapwasm’ asm=y
ld.so.1: orapwd: fatal: libocrb12.so: open failed: No such file or directory
Killed

Solución:
Exportar las librerías antes:

bash-3.2$ export LD_LIBRARY_PATH=/opt/app/oracle/product/12.1.0/grid/lib
bash-3.2$ orapwd file=’+DATA/orapwasm’ asm=y

Enter password for SYS:
bash-3.2$ asmcmd ls data
ASM/
CDB/
orapwasm


			

Como reasignar un disco de asm existente a otro diskgroup

Hace unos días nos encontramos con el problema de que no teníamos espacio un tablespace, se nos había llenado un diskgroup, sin embargo teníamos otro de los diskgroup vacios, sin utilizar. Así que decidimos borrar el diskgroup sin utilizar y reasignar su disco al que teníamos problemas de espacio. Ahí van los pasos:

SQL>  SELECT name, free_mb, total_mb, free_mb/total_mb*100 "%" FROM v$asm_diskgroup;

NAME                              FREE_MB   TOTAL_MB          %
------------------------------ ---------- ---------- ----------
DATA                                    0      18976          0
DATA2                                18926      18976 99.7365093
DATA3                                5605      18976 29.5373103

 

SQL> select name, path, group_number from v$asm_disk;

NAME            PATH                      GROUP_NUMBER
--------------  ------------------------  ---------------
DATA3_0000       /dev/rdsk/data3            2
DATA_0000        /dev/rdsk/data1            1
DATA2_0000       /dev/rdsk/data2            3

sqlplus '/ as sysasm'
 -- Borras el diskgroup
DROP DISKGROUP DATA3 INCLUDING CONTENTS;
--Se le añade el nuevo disco al diskgroup
ALTER DISKGROUP DATA ADD DISK '/dev/rdsk/data3';

Cómo crear una base de datos en ASM si no tengo posibilidad de crear un raw

Vamos a explicar los pasos necesarios para crear fichero en blanco en vez de dispositivo row  real, para instalar una base de datos de prueba en Solaris. Esto puede ser práctico para crear una base de datos en una máquina que no tiene particiones libres o no tiene discos disponibles.

El primer paso es identificar una partición que tenga el espacio suficiente para que crear el dispositivo de disco de ASM

Lo primero que haremos es crear un  fichero con el comando  “dd”. Este es un comando de la familia de los Sistemas Operativos Unix que permite copiar y convertir datos de archivos a nivel bajo.En nuestro caso creamos un fichero data1 de 9GB en /var/opt/alu/asmdata/

 mkdir /var/opt/alu/asmdata
chown oracle:dba /var/opt/alu/asmdata
su - oracle
dd if=/dev/zero of=/var/opt/alu/asmdata/data1 bs=1k count=9000000

if=origen
Lee desde el archivo indicado como origen. Por defecto lee de la entrada estándar.
of=destino
Escribe al archivo indicado como destino. Por defecto escribe en la salida estándar.
bs=N
Lee y escribe N bytes. Alternativa a usar ibs y obs con un mismo valor.
count=numero
Copia un número de bloques del origen, en vez de procesar hasta el final. El tamaño del bloque es indicado por ibs.

Una vez que tenemos el fichero lo convertimos en loop device con lofiadm. Esta herramienta lo que hace es convertir un fichero en seudo dispositivo accesible

Como si fuera un dispositivo de bloque y por la tanto se puede montar hacer un mkfs, etc. Está instrucción se necesita hacer como root.

lofiadm -a /var/opt/alu/asmdata/data1
 ls -lL /dev/lofi/*
brw-------   1 root     sys      147,  1 Apr 21 13:28 /dev/lofi/1

Una vez creado el dispositivo de bloque crearemos el dispositivo de caracteres, para esto utilizaremos mknod con el nombre del dispositivo que queremos crear y la opción c para caracteres y utilizando el número mayor y menor del dispositivo que hemos creado previamente

mknod /dev/rdsk/data1 c 147 1
chown oracle:dba /dev/rdsk/data1

Una vez creado ya seremos capaces de verlo desde ASM

Error al montar un diskgroup en ASM: ORA-15040: diskgroup is incomplete.

Este error se produce porque alguno de los discos que component el disckgroup no está presente.
Para corregirlo es necesario comprobar:
1. Qué le valor del parámetro ASM_DISKSTRING es correcto.
2. Que se tiene acceso a todos los discos que compone el diskgroup.
En nuestro caso tenemos enlaces simbolicos a los discos, con lo cual es necesario obtener el disco a través y de un ls –la y luego con la opción de format comprobar que el disco no tiene ningún error. Pongo un ejemplo más abajo.
1. Los primero sería obtener los disgroup que component ASM:

SQL> select name, state from v$asm_diskgroup;
NAME                           STATE
------------------------------ -----------
RECUPERACION                       MOUNTED
DATOS                           DISMOUNTED

2. Comprobar el valor del parametro asm_diskstring.

SQL> show parameters asm_diskstring;
NAME                   TYPE         VALUE
----------------------- ----------- ------------------------------
asm_diskstring         string      /dev/rdsk/dato*,/dev/rdsk/recu*

3. Comprobar los discos que componen cada grupo de discos:

SQL> select name, path, group_number from v$asm_disk;
NAME                PATH                                GROUP_NUMBER
------------------- ----------------------------------- ------------
                    /dev/rdsk/dato1                                0
                    /dev/rdsk/dato2                                0
RECO1               /dev/rdsk/recu1                                1
RECO2               /dev/rdsk/recu2                                1

En este caso había problemas en uno de los volúmenes de dato.

3. Verificarlo a nivel de sistema operativo:

Con un ls -la de cada volumen que compone el diskgroup de data, identificas el disco. Y luego haces un root, haces un format eliges particiones y le pides que te las muestre. Te pongo un ejemplo:

ls -la /dev/rdsk/dato1
lrwxrwxrwx   1 root     root          91 Nov 16 12:14 /dev/rdsk/dato1 -> ../../devices/pci@0/pci@0/pci@8/pci@0/pci@a/SUNW,qlc@0/fp@0,0/ssd@w202500a0b874a36a,1:a,raw

$ su - root
Password:
.
# format
Searching for disks...done
c2t2d31: configured with capacity of 16.00MB
data3: configured with capacity of 100.00GB
data4: configured with capacity of 100.00GB

AVAILABLE DISK SELECTIONS:
       0. c1t0d0 <SUN146G cyl 14087 alt 2 hd 24 sec 848>
          /pci@0/pci@0/pci@2/scsi@0/sd@0,0
       1. c1t1d0 <SUN146G cyl 14087 alt 2 hd 24 sec 848>
          /pci@0/pci@0/pci@2/scsi@0/sd@1,0
       2. c2t2d31 <SUN-UniversalXport-0735 cyl 8 alt 2 hd 64 sec 64>
          /pci@0/pci@0/pci@8/pci@0/pci@a/SUNW,qlc@0/fp@0,0/ssd@w202500a0b874a36a,1f
       3. data1 <SUN-LCSM100_F-0735 cyl 35568 alt 2 hd 512 sec 64>
          /pci@0/pci@0/pci@8/pci@0/pci@a/SUNW,qlc@0/fp@0,0/ssd@w202500a0b874a36a,2
       4. data2 <SUN-LCSM100_F-0735 cyl 5118 alt 2 hd 64 sec 64>
          /pci@0/pci@0/pci@8/pci@0/pci@a/SUNW,qlc@0/fp@0,0/ssd@w202500a0b874a36a,3
       5. data3 <SUN-LCSM100_F-0735 cyl 51198 alt 2 hd 64 sec 64>
          /pci@0/pci@0/pci@8/pci@0/pci@a/SUNW,qlc@0/fp@0,0/ssd@w202500a0b874a36a,4
       6. data4 <SUN-LCSM100_F-0735 cyl 51198 alt 2 hd 64 sec 64>
          /pci@0/pci@0/pci@8/pci@0/pci@a/SUNW,qlc@0/fp@0,0/ssd@w202500a0b874a36a,5
       7. ocr <SUN-LCSM100_F-0735 cyl 513 alt 2 hd 64 sec 64>
          /pci@0/pci@0/pci@8/pci@0/pci@a/SUNW,qlc@0/fp@0,0/ssd@w202500a0b874a36a,0
       8. ocv <SUN-LCSM100_F-0735 cyl 513 alt 2 hd 64 sec 64>
          /pci@0/pci@0/pci@8/pci@0/pci@a/SUNW,qlc@0/fp@0,0/ssd@w202500a0b874a36a,1
Specify disk (enter its number): 8
selecting ocv
[disk formatted]

FORMAT MENU:
        disk       - select a disk
        type       - select (define) a disk type
        partition  - select (define) a partition table
        current    - describe the current disk
        format     - format and analyze the disk
        repair     - repair a defective sector
        label      - write label to the disk
        analyze    - surface analysis
        defect     - defect list management
        backup     - search for backup labels
        verify     - read and display labels
        save       - save new disk/partition definitions
        inquiry    - show vendor, product and revision
        volname    - set 8-character volume name
        !<cmd>     - execute <cmd>, then return
        quit
format> p

PARTITION MENU:
        0      - change `0' partition
        1      - change `1' partition
        2      - change `2' partition
        3      - change `3' partition
        4      - change `4' partition
        5      - change `5' partition
        6      - change `6' partition
        7      - change `7' partition
        select - select a predefined table
        modify - modify a predefined partition table
        name   - name the current table
        print  - display the current table
        label  - write partition map and label to the disk
        !<cmd> - execute <cmd>, then return
        quit
partition> p
Current partition table (original):
Total disk cylinders available: 513 + 2 (reserved cylinders)
Part      Tag    Flag     Cylinders       Size            Blocks
  0 unassigned    wm       1 - 512     1024.00MB    (512/0/0) 2097152
  1 unassigned    wu       0              0         (0/0/0)         0
  2     backup    wu       0 - 512        1.00GB    (513/0/0) 2101248
  3 unassigned    wm       0              0         (0/0/0)         0
  4 unassigned    wm       0              0         (0/0/0)         0
  5 unassigned    wm       0              0         (0/0/0)         0
  6 unassigned    wm       0              0         (0/0/0)         0
  7 unassigned    wm       0              0         (0/0/0)         0
partition>

 

Crear un raw device para ASM en Solaris 10

Para las instalación de la base de datos se recomienda que el raw device este separado de las aplicaciones y del sistema operativo

En un monohost se utiliza normalmente un disco adicional para almacenar los datos.

En este post vamos a explicar la forma de montar el disco y de crear el volumen.

  • Lo primero es identificar que disco se está utilizando, como se muestra en este ejemplo:
#zpool status
  pool: rpool
 state: ONLINE
 scrub: none requested
config:
        NAME        STATE     READ WRITE CKSUM
        rpool       ONLINE       0     0     0
          c0t0d0s0  ONLINE       0     0     0
errors: No known data errors

En este ejemplo se ve que el único disco utilizado es el c0t0d0

Ninguno de los discos que aparezcan con este comando se debe utilizar para crear el raw device.

  • Luego utiliza comando ‘format’ para crear un raw device, como sigue:
  • Introduce el comando ‘format’ y luego selecciona de la lista el disco que se va a utilizar para el almacenamiento de la base de datos, como se ve en el ejemplo:
# format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
       0. c0t0d0 <SUN72G cyl 14087 alt 2 hd 24 sec 424>
          /pci@780/pci@0/pci@9/scsi@0/sd@0,0
       1. c0t1d0 <SUN72G cyl 14087 alt 2 hd 24 sec 424>
          /pci@780/pci@0/pci@9/scsi@0/sd@1,0
   Specify disk (enter its number): 1
selecting c0t1d0
[disk formatted]

En este ejemplo el disco que no está siendo utilizado por el sistema operativo es el disco c0t1d0  como vimos con el comando zpool status’.

  • Aparecerá un menú mostrando las opciones de formateo elegir ‘partition’:
FORMAT MENU:
        disk       - select a disk
        type       - select (define) a disk type
        partition  - select (define) a partition table
        current    - describe the current disk
        format     - format and analyze the disk
        repair     - repair a defective sector
        label      - write label to the disk
        analyze    - surface analysis
        defect     - defect list management
        backup     - search for backup labels
        verify     - read and display labels
        save       - save new disk/partition definitions
        inquiry    - show vendor, product and revision
        volname    - set 8-character volume name
        !<cmd>     - execute <cmd>, then return
        quit
format> partition
  • Dentro del menú de partición elegir print para ver las particiones configuradas en el disco.
PARTITION MENU:
        0      - change `0’ partition
        1      - change `1’ partition
        2      - change `2’ partition
        3      - change `3’ partition
        4      - change `4’ partition
        5      - change `5’ partition
        6      - change `6’ partition
        7      - change `7’ partition
        select – select a predefined table
        modify – modify a predefined partition table
        name   - name the current table
        print  - display the current table
        label  - write partition map and label to the disk
        !<cmd> - execute <cmd>, then return
        quit
partition> print
  • Se muestran las particiones actuales. La finalidad es dejar la paticion 0 con todo el espacio disponible.
  • Primero, elegir todas las particiones menos 0 y ‘backup’ (o overlap) y configurarlas con el nombre de ‘unassigned’ y un tamaño de 0.

Nota: La partición Backup (o overlap) no se puede editar porque no es un partición real, es una partición lógica que contiene la información del disco.

El siguiente ejemplo muestra cómo hacerlo:

Current partition table (original):
Total disk cylinders available: 14087 + 2 (reserved cylinders)
Part      Tag    Flag     Cylinders         Size            Blocks
  0       root    wm       0 -    25      129.19MB    (26/0/0)       264576
  1       swap    wu      26 -    51      129.19MB    (26/0/0)       264576
  2     backup    wu       0 – 14086       68.35GB    (14087/0/0) 143349312
  3 unassigned    wm       0                0         (0/0/0)             0
  4 unassigned    wm       0                0         (0/0/0)             0
  5 unassigned    wm       0                0         (0/0/0)             0
  6        usr    wm      52 – 14086       68.10GB    (14035/0/0) 142820160
  7 unassigned    wm       0                0         (0/0/0)             0

En este ejemplo las particiones 1 y 6 son las únicas, parte de la 0 yd e backup que no está ‘unassigned’ y que su tamaño es mayor que 0. Hay que seleccionar ambas y modificarlas.

Primero seleccionamos la partición 6

partition>  6
Part      Tag    Flag     Cylinders         Size            Blocks
  6        usr    wm      52 – 14086       68.10GB    (14035/0/0) 142820160

Esta partición tiene que ser reconfigurada utilizando el nombre de ‘unassigned’, se dejan los flags por defecto, se introduce 0 como cilindro de inicio y se elige el tamaño de 0c. El tamaño se puede indicar en cilindros o en gigas en este caso lo estamos indicando en cilindros.

Enter partition id tag[usr]: unassigned
Enter partition permission flags[wm]:
Enter new starting cyl[52]: 0
Enter partition size[142820160b, 14035c, 14034e, 69736.41mb, 68.10gb]: 0c

El proceso se repite con la partición 1

partition> 1
Part      Tag    Flag     Cylinders         Size            Blocks
  1       swap    wu      26 -    51      129.19MB    (26/0/0)       264576
Enter partition id tag[swap]: unassigned Enter partition permission flags[wu]:
Enter new starting cyl[26]: 0
Enter partition size[264576b, 26c, 25e, 129.19mb, 0.13gb]: 0c
  • Una vez que todas las particiones menos la 0 y la de backup (o overlap) se configurar a un tamaño de 0 y volverle a asignar a la partición 0 todo el espacio disponible.

Selecciona la partición 0, y configúrala como ‘unassigned’, con los flag por defecto y comenzando por el cilindro ‘1’. Introduce el tamaño de la partición. Se puede poner en gigas o en cilindros. Si se eligen cilindros y se crear un raw con todo el tamaño disponible hay que buscar el ultimo numero los cilindros de la partición de backup y introducirlo seguido de una c , como se muestra en el ejemplo, si no se dice el tamaño en gigas:

Partition> 0
Part      Tag    Flag     Cylinders         Size            Blocks
  0       root    wm       0 -    25      129.19MB    (26/0/0)       264576
Enter partition id tag[root]: unassigned
Enter partition permission flags[wm]:
Enter new starting cyl[0]: 1
Enter partition size[264576b, 26c, 26e, 129.19mb, 0.13gb]: 14086c
  • Comprueba con el comando ‘print’ que has conseguido lo que querías. Fíjate que la partición 0 comienza con 1:
partition> print
Current partition table (unnamed):
Total disk cylinders available: 14087 + 2 (reserved cylinders)
Part      Tag    Flag     Cylinders         Size            Blocks
  0 unassigned    wm       1 – 14086       68.35GB    (14086/0/0) 143339136
  1 unassigned    wu       0                0         (0/0/0)             0
  2     backup    wu       0 – 14086       68.35GB    (14087/0/0) 143349312
  3 unassigned    wm       0                0         (0/0/0)             0
  4 unassigned    wm       0                0         (0/0/0)             0
  5 unassigned    wm       0                0         (0/0/0)             0
  6 unassigned    wm       0                0         (0/0/0)             0
  7 unassigned    wm       0                0         (0/0/0)             0
  • Introduce el comando ‘label’ para salvar los cambios:
partition> label
Ready to label disk, continue? Y
  • Sale de la utilidad utilizando el comando partición:.
Partition> quit         
 format> quit
  • Finalmente si quieres darle un nombre más significativo crea un link simbólico /dev/rdsk/volumenasm al raw device.
ln –s /dev/rdsk/c0t1d0s0 /dev/rdsk/volumenasm
  • Cambia los permisos de usuario oracle y el grupo dba:
chown –R oracle:dba /dev/rdsk/volumenasm

Como cambiar el hostname con la base de datos (single instance) instalada 11g y asm

1. Parar todas las bases de datos
2. Parar todos los listeners
3. Parar asm
4. Parar el listener de asm
5. Como usuario root  borrar el demonio css:

cd /opt/app/oracle/product/11.1.0/asm/bin/
./localconfig delete

Cambiar el hostname de la máquina, en el post anterior expliqué como hacerlo.

6. Cambiar los listener y tnsnames de asm y la base de datos
7. Recrear el demonio css

cd /opt/app/oracle/product/11.1.0/asm/bin/
./localconfig add

8. Levantar asm, su listener , las base de datos y sus listener

9. A esto hay que añadir los cambio de local_lister y dispatchers en el init o spfile si se están utilizando

 En este post no se incluye el cambio en entreprise manager.

Tienen que tener en cuenta que  se creará un nuevo directorio con los logs del listener /opt/app/oracle/diag/tnslsnr/nuevo_hostname