Jugando con las estadisticas de un esquema

Hoy vamos a ver algunas consultas practicas de las estadisticas de sistema

Esquemas o objetos de un esquema con las estadisticas bloqueadas

Veamos algunas consultas utiles para comprobar cuales son las tablas que estan bloqueadas o para trabajar con las estadistias del esquema APPSCHEMA

Tablas conlas estadisticas bloqueadas para un esquema


select owner, table_name, stattype_locked
from dba_tab_statistics
where
stattype_locked is not null and OWNER=’APPSCHEMA’;

Cuando fueron bloqueadas las estadisticas en estas tablas?


set linesize 200
set pagesize 0
col owner format a20;
col table_name format a30;
Select table_name,last_analyzed from dba_tables
where table_name in
(select table_name from dba_tab_statistics where stattype_locked is not null and OWNER=’APPSCHEMA’)
order by last_analyzed asc ;

Tenemos una metaconsulta para desbloquearlas todas?

  select 'exec dbms_stats.unlock_table_stats('||chr(39)||'APPSCHEMA'||chr(39)||','||chr(39)||TABLE_NAME||chr(39)||' );'
       from dba_tab_statistics where stattype_locked is not null and OWNER='APPSCHEMA';

Ver las fechas de las estadisticas que han sido analizadas en los ultimos 2 dias

set pagesize 9000;
column owner format a20;
column TABLE_NAME format a30;
column PARTITION_NAME format a30;
select owner,table_name,partition_name,to_char(LAST_ANALYZED,'dd-mm-yy hh:mi'),NUM_ROWS,STATTYPE_LOCKED from dba_TAB_STATISTICS
where OWNER='APPSCHEMA' 
and LAST_ANALYZED  < sysdate-2
order by LAST_ANALYZED asc ;

Ver la fecha en la que fueron obtenidas las estadisticas de una tabla en concreto

set pagesize 9000;
column owner format a20;
column TABLE_NAME format a30;
column PARTITION_NAME format a30;
select owner,table_name,partition_name,to_char(LAST_ANALYZED,'dd-mm-yy hh:mi'),NUM_ROWS,STATTYPE_LOCKED from dba_TAB_STATISTICS
where TABLE_NAME='APPSCHEMA' 
order by LAST_ANALYZED asc ;

Como salvamos las estadisticas de un determinado esquema

Creamos una tabla de estadisticas llamada «MISTATS bajo el esquema APPSCHEMA

exec dbms_stats.create_stat_table(ownname => 'APPSCHEMA', stattab => 'MISTATS');

Si quisiesemos guardar solo las estadisticas de una tabla

  
exec dbms_stats.export_table_stats(ownname=>'APPSCHEMA', tabname=>'MISTATS', statown=>'APPSCHEMA', stattab=>'MISTATS', cascade=>true);

Si queremos salvar los de un esquema

EXEC DBMS_STATS.export_schema_stats('APPSCHEMA','MISTATS',NULL,'APPSCHEMA');

Mas informacion en

Uso de variables de entorno en script sde rman

Hoy vamos a ver una entrada muy rapida para dummies.

Muchas veces queremos hacer que el log de rman tenga una variable de entorno ( usualmente a fecha),haciendo algo similar a

#!/bin/bash
HORA=`date +%Y%m%d_%H:%M:%S`
rman  cmdfile restore_${ORACLE_SID}.cmd  log logs/${HORA}_restore_${ORACLE_SID}.log

Pero cuando vamos al subdirecorio de logs nos encontramos con que nos ha creado un fichero llamado ${HORA}_restore_${ORACLE_SID}.log

Como solucionamos esto?

La solucion no pasa por jugar con las comillas sino con el uso del parametro MSGLOG
Simplemente tendremos que cambiar nuestro script por

#!/bin/bash
HORA=`date +%Y%m%d_%H:%M:%S`
rman  cmdfile restore_${ORACLE_SID}.cmd  MSGLOG logs/${HORA}_restore_${ORACLE_SID}.log

Y funcionara tal y como queremos

impdp/expdp en 19c sin password

Uno de los problemas que podemos encontrarnos en la 19c es que cuando intentamos ejecutar un expdp en modo comando en el que tenemos seteado el usuario y la contraseña (o ocmo sysdba0 , el exdp quea detenido preguntando por el password.

Aunque pueda pareceerlo, esto no es una nueva funcionalidad de seguridad de la 19c, sino que esta provocado por un bug no publicado (bug 28707931 ) que afecta a la 19c

Desgraciadamente , las soluciones que nos da oracle no son nada del otro mundo

  • Acutualiza a 20.1 cuando este disponible
  • Aplica el parche Patch: 28707931 si puedes
  • Pulsa ua tecla para pasar la fase de passowd

Como siempre, mas informacion en soporte Oracle

  • Data Pump Prompts For A Password Even Though Using External Authentication (Doc ID 2556152.1)
  • Espacios y tabulaciones en Ansible

    Hoy vamos a empezar con una pequeña entrada referente a la automatización con Ansible

    Como sabemos, Ansible a diferencia de los lenguajes de programación clásicos basa los bloques de código en las sangrías ( creo que sangría es en nuestro caso la traducción mas correcta del ingles >i>Identation)

    Llegados a este punto, los programadores de toda la vida, aquellos que siempre hemos programado en la ventana de terminal, gente precisa y que optimiza el código, usamos tabulaciones, pero , hemos de tener cuidado, ya que Ansible no nos lo permite.

    Esto nos lleva a el siguiente video

    A parte de bromas, para todos aquellos que estamos acostumbrados a las tabulaciones, hay un pequeño truco para indicarle al vim que traslade las tabulaciones a espacios

    [code lang=plain]
    autocmd FileType yaml set local ai ts=2 sw=2 et
    [code]

    Con este sencillo comando podremos seguir usando nuestras tabulaciones mientras programamos en Ansible

    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