Acerca de admin

Tras más de 20 años trabajando con tecnologías Oracle, me decidí a recopilar en un Blog algunas de las cosillas útiles para el día a día.

Sintaxsis basica de Ansible

Los playbooks de Ansible están codificados en YAML , para poder comprender mejor la siguiente tanda de post, vamos a ver muy muy de pasada la sintaxis básica de ansible.

Antes de empezar, tener claro que ,si seguimos al pie de la letra el documento de formación de RedHat Automation with Ansible 2.0 DO407 tenemos que Ansible NO funciona con Pyton 3. EL nodo de control debe de tener Pyton 2.6 o 2.7 . Pero ,el sistema en el que esta instalado el tower tiene un pyton 3, con lo que habra que coger la documentacion con pinzas

Apertura y cierre del playbook

En Yaml el código se abre con tres guiones consecutivos
[code lang=»py»]

[/code]

Cadenas

Las cadenas en Yaml no necesitan comillas, puedes incluirlas con comillas simple, debe o sin comillas, y funcionaria en los tres casos

[code lang=»py»]

‘ Esto es una cadena ‘
"Esto es una cadena "
Esto es una cadena
[/code]

Cadenas multilinea

Al no ser necesario el uso de comillas para las cadenas la primera pregunta que nos viene a la cabeza es ¿como ponemos las cadenas multilinea?
La respuesta es muy sencilla, tenemos dos maneras

– Mediante el caracter |
[code lang=»py»]

msg: |
Esto es una cadena
de mas de dos lineas
y mas de tres
[/code]

– Mediante el caracter >
[code lang=»py»]
msg: >
Esto es una cadena
de mas de dos lineas
y mas de tres
[/code]

Listas

Las listas en Ansible vienen delimitadas por el caracter
[code lang=»py»]

– perro
– gato
– tortuga
– canario
[/code]

También pueden configurarse delimitadas por comas entre
[code lang=»py»]
animales:
[ perro, gato , tortuga , canario ]
[/code]

Comentarios

Los comentarios al igual que en la programación bash se hacen con el caracter #

[code lang=»py»]
# Esto es un comentario
[/code]

Chequeo de sintaxis

Al ser un lenguaje interpretado o hay compilación, pero si que puedes comprobar si la sintaxis es correcta.

La comprobación puede llevarse a cabo directamente con el pyton con el comando

python -c 'import yaml, sys; print yaml.load(sys.stdin)' < playbook.yml

Pero , la mas sencilla para nosotros y mas aconsejable si estamos trabajando con ansible es hacerlo mediante el flan --syntax-check del comando ansible-playbook

ansible-playbook --syntax-check  playbook.yml

Uso de variables en Ansible

Vamos a intentar recuperar poco a poco otra de las entradas que se borraron en enero, el uso de las variables en Ansible.

El primer punto a tener en cuenta es que tal y como indica la Documentacion de ansible las variables deben de ser letras, numeros y underscores, y siempre deben de comenzar por ua letra.

Asi pues, no debemos de usar nombres de variables que comienzen por numeros, contengan puntos , sean numeros o contengan guiones.

Vamos a ver un ejemplo de definicion de variables sobre el que trabajaremos
[code lang=»py»]
oracle_user: "oracle"
root_directory: "/u01/app"
oracle_inventory: "{{root_directory}}/oraInventory"
oracle_base: "{{root_directory}}/oracle"
stage_directory: "{{oracle_base}}/stage"
oracle_hostname: "{{ ansible_hostname|upper }}"
data_location:
FS: "/oradata/{{SID}}/data"
ASM: "+{{oracle_hostname}}_DATA"
package_name :
– binutils
– oracleasm
– oracleasm-support
– compat-libcap1
– compat-libstdc++-33
– elfutils-libelf-devel
huge_pages: "{{((0.6 * ansible_memtotal_mb)*1024/2)|round|int }}"
kernel_values:
– { name: fs.file-max, value: 6815744 }
– { name: kernel.sem, value: "250 32000 100 128" }
– { name: kernel.shmmni, value: 4096 }
firewalld:
state: stopped
enabled: no

[/code]

Donde obtenemos la variable ORACLE_BASE

Vamos con una versión rápida de las entradas recuperadas

Todos sabemos que cuando cargamos el entorno con el binario oraenv oracle obtiene la variable $ORACLE_HOME del fichero /etc/oratab, pero ,

¿de donde obtiene la variable ORACLE_BASE?

La respuesta es muy sencilla, pero menos conocida que la anterior, existe un fichero llamado
$ORACLE_HOME/install/orabasetab, este fichero tiene el formato

ORACLE_HOME:ORACLE_BASE:[Y|N]

Errores Heap size XX exceeds notification threshold

Hoy vamos a volver con las entradas para dummies

Uno de las alertas con las que podemos encontrarnos en el fichero de log es :

2019-08-25T21:51:19.646997+01:00
PDB$SEED(2):Memory Notification: Library Cache Object loaded into SGA
Heap size 52942K exceeds notification threshold (51200K)
Details in trace file /u01/app/oracle/diag/rdbms/test/TEST/trace/TEST_ora_32087.trc
2019-08-25T21:51:19.647135+01:00
PDB$SEED(2):KGL object name :grant read on ku$_m_view_piot_view to public
2019-08-25T21:51:33.513723+01:00
PDB$SEED(2):Memory Notification: Library Cache Object loaded into SGA
Heap size 52903K exceeds notification threshold (51200K)
Details in trace file /u01/app/oracle/diag/rdbms/test/TEST/trace/TEST_ora_32087.trc
2019-08-25T21:51:33.513818+01:00
PDB$SEED(2):KGL object name :grant read on ku$_zm_view_piot_view to public

A pesar del susto que nos puede dar esta alerta , no se trata de un error, sino de un warning. A partir de la version 10g oracle introdujo un umbral a partir del cual nos avisa cuando superamos ese umbral en la carga de objetos en el shared pool .
Este umbral viene definido por el parametro oculto _kgl_large_heap_warning_threshold

Si queremos saber el valor actual de este valor podemos ejecutar la consulta

[code lang=»sql»]
select
nam.ksppinm NAME,
nam.ksppdesc DESCRIPTION,
val.KSPPSTVL
from
x$ksppi nam,
x$ksppsv val
where nam.indx = val.indx and nam.ksppinm like ‘%kgl_large_heap_%_threshold%’;
[/code]

En caso de que quieresemos que dejasen de apareer alertas (especialmente por que vienen asociadas a una traza ) podemos modificar el parametro con :

 alter system set "_kgl_large_heap_warning_threshold"=XXXXXX   comment='motivo aqui ' scope=spfile;

Como podeis ver, hemos de acutalizar en el spfile por lo que habra que reiniciar la base de datos si quremos que haga efecto

Como siempre podemos tener mas informacion en la nota de soporte KGL-heap-size-exceeded] (Doc ID 330239.1)