Instalacion oracle 26ai -Preparacion del servidor

Ya esta disponible la version on-prem de oracle26ai, con lo que en esta entrada vamos a ver de manera sencilla los pasos para su instalacion.

Paqueteria

Vamos a partir de una OEL9 con la instalacion mínima, por lo que , tendremos que instalar algunos paquetes de comodities que nos facilitaran el trabajo, como son:

  • binutils c
  • compat-libstdc++-33
  • elfutils-libelf
  • elfutils-libelf-devel
  • fontconfig-devel
  • glibc
  • glibc-devel
  • ksh
  • libaio
  • libaio-devel
  • libX11
  • libXau
  • libXi
  • libXtst
  • libXrender
  • libXrender-devel
  • libgcc
  • libxcb
  • make
  • smartmontools
  • sysstat
  • net-tools
  • nfs-utils
  • python3
  • python3-configshell
  • python3-rtslib
  • python3-six
  • targetcli
  • bc
  • tmux
  • parted
  • tcpdump
  • zip
  • unzip
  • xterm
  • lsof
  • lsscsi

Esto lo haremos con el comando

dnf install -y binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel \
fontconfig-devel glibc glibc-devel ksh libaio libaio-devel libX11 libXau libXi \
libXtst libXrender libXrender-devel libgcc libxcb make \
smartmontools sysstat net-tools nfs-utils python3 python3-configshell \
python3-rtslib python3-six targetcli bc compat-openssl11 tmux \
parted tcpdump zip unzip xterm lsof lsscsi \

Definicion de limites

Editaremos el fichero /etc/security/limits.d/30-oracle.conf añadiendo el contenido:

grid     soft   nofile   1024
grid     hard   nofile   65536

grid     soft   nproc    16384
grid     hard   nproc    16384

grid     soft   stack    10240
grid     hard   stack    32768

grid     soft   memlock  134217728
grid     hard   memlock  134217728

oracle     soft   nofile   1024
oracle     hard   nofile   65536

oracle     soft   nproc    16384
oracle     hard   nproc    16384

oracle     soft   stack    10240
oracle     hard   stack    32768

oracle     soft   memlock  134217728
oracle     hard   memlock  134217728

Configuration de red

Hay qequeños ajustes de red que deben de hacerse, si el sistema no esta propiamente registrado en un dns, deberemos de añadir la entrada en el fichero /etc/hosts por ejemplo

192.168.1.149 gigabyte.pamplona.name gigabyte

Ademas de esto, deberemos de poner en el fichero /etc/sysconfig/network el contenido

NOZEROCONF=yes

Y reniniciar el subsistema de red con el comando systemctl restart NetworkManager

Configuración de Huge Pages

Deberemos de meterle mano al GRUB para añadir la line transparent_hugepage=madvise
Editaremos el fichero /etc/default/grub

y donde ponía
GRUB_CMDLINE_LINUX=»resume=UUID=7691cd59-d957-4d6f-8d2b-e6825eea5403″
Lo modificaremos por
GRUB_CMDLINE_LINUX=»resume=UUID=7691cd59-d957-4d6f-8d2b-e6825eea5403 transparent_hugepage=madvise»
Y regeneraremos el grub con el comando grub2-mkconfig -o /boot/grub2/grub.cfg –update-bls-cmdline
Tras esto reiniciaremos el server.

Una vez reiniciado,comprobaremos que está así mirando el fichero /sys/kernel/mm/transparent_hugepage/enabled

[root@gigabyte ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never

Por que aparece ese valor y no always
Es el modo en el que Transparent HugePages se activan solo cuando un proceso lo solicita explícitamente, evitando los problemas de rendimiento que genera THP siempre activo (“always”) en bases de datos.

Creacion de usuarios y grupos

En primer lugar, como siempre tendremos que crear la estructura de usuarios y grupos que soportara la instalacion

# Crear grupos
groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
groupadd -g 54324 backupdba
groupadd -g 54325 dgdba
groupadd -g 54326 kmdba
groupadd -g 54327 asmdba
groupadd -g 54328 asmoper
groupadd -g 54329 asmadmin
groupadd -g 54330 racdba

# Usuario grid (Grid Infrastructure + ASM)
useradd -u 54331 -g oinstall -G dba,asmadmin,asmdba,asmoper,racdba grid
passwd grid

# Usuario oracle (Base de datos)
useradd -u 54321 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,asmdba,asmoper,asmadmin,racdba oracle
passwd oracle

Creacion de arbol de directirios

Una vez tenemos los usuarios, creareos el arbol de directorios donde queremos instalar el grid.
En nuestro caso sera

  • /u01/app/grid Para el GRID
  • /u01/app/oracle/product/26ai/dbhome_1 Para el motor de bases de datos
  • /u01/app/oracle será nuestro ORACLE_BASE

# 3. Directorios OFA compartidos
mkdir -p /u01/app
mkdir -p /u01/app/oraInventory # Ubicacion del inventory de la base de datos
mkdir -p /u01/app/oracle # ORACLE_BASE compartido
mkdir -p /u01/app/oracle/product/26ai/dbhome_1 # Home de la primera base dedatos
mkdir -p /u01/app/grid # GRID_HOME

# 4. Permisos
chown -R oracle:oinstall /u01/app
chown -R grid:oinstall /u01/app/grid
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/app

Con estos sencillos pasos,deberíamos de tener el servidor configurado para proceder a la instalacion , que podremos ver en las entradas

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