desinstalacion del grid control

Tras un largo periodo de inactividad, vamos a añadir una pequeña entrada con la manera de desinstalar el grid control de Oracle .

Al contrario de cuando se tiene una base ded datos sencilla de Oracle donde con borrar binarios, inventario y oratab el sistema ( en unix) queda lo sufucientemente limpio como para llevar a cabo una reinstalacion, si tenemos que reinstalar un grid infraestructure por que ha habido problemas en la instalacion o por que queremos quitarlo, no se puede hacer «a las bravas».

La manera de lelvarlo a cabo es muy sencilla.
Solamente tenemos que ir al $GRID_HOME/deinstall y ejecutar ./deinstall
Este proceso se ha de ejecutar como propietario del grid, y , al igual que la instalacion, en un momento determinado nos solicitará la ejecucion de una cadena como root.

[grid@serverpruebas ] cd  $GRID_HOME/deinstall
[grid@serverpruebas ] ls 
bootstrap.pl         bootstrap_files.lst  deinstall            deinstall.pl         deinstall.xml        jlib                 readme.txt           response             sshUserSetup.sh      utl
[grid@serverpruebas ]./deinstall 	
Checking for required files and bootstrapping ...
Please wait ...
Location of logs /tmp/deinstall2016-11-03_09-31-33PM/logs/

############ ORACLE DECONFIG TOOL START ############


######################### DECONFIG CHECK OPERATION START #########################
## [START] Install check configuration ##


Checking for existence of the Oracle home location /opt/app/oracle/product/12.1.0/grid
Oracle Home type selected for deinstall is: Oracle Grid Infrastructure for a Standalone Server
Oracle Base selected for deinstall is: /opt/app/oracle
Checking for existence of central inventory location /opt/app/oraInventory
Checking for existence of the Oracle Grid Infrastructure home /opt/app/oracle/product/12.1.0/grid

## [END] Install check configuration ##

Traces log file: /tmp/deinstall2016-11-03_09-31-33PM/logs//crsdc_2016-11-03_09-32-36PM.log

Network Configuration check config START

Network de-configuration trace file location: /tmp/deinstall2016-11-03_09-31-33PM/logs/netdc_check2016-11-03_09-32-38-PM.log

Network Configuration check config END

Asm Check Configuration START

ASM de-configuration trace file location: /tmp/deinstall2016-11-03_09-31-33PM/logs/asmcadc_check2016-11-03_09-32-39-PM.log

ASM configuration was not detected in this Oracle home. Was ASM configured in this Oracle home (y|n) [n]: y
Automatic Storage Management (ASM) instance is detected in this Oracle home /opt/app/oracle/product/12.1.0/grid.
ASM Diagnostic Destination : /opt/app/oracle
ASM Diskgroups :
ASM diskstring : 
Diskgroups will not be dropped
 If you want to retain the existing diskgroups or if any of the information detected is incorrect, you can modify by entering 'y'. Do you  want to modify above information (y|n) [n]:
Database Check Configuration START

Database de-configuration trace file location: /tmp/deinstall2016-11-03_09-31-33PM/logs/databasedc_check2016-11-03_09-32-50-PM.log

Database Check Configuration END

######################### DECONFIG CHECK OPERATION END #########################


####################### DECONFIG CHECK OPERATION SUMMARY #######################
Oracle Grid Infrastructure Home is: /opt/app/oracle/product/12.1.0/grid
The following nodes are part of this cluster: null
The cluster node(s) on which the Oracle home deinstallation will be performed are:null
Oracle Home selected for deinstall is: /opt/app/oracle/product/12.1.0/grid
Inventory Location where the Oracle home registered is: /opt/app/oraInventory
ASM instance will be de-configured from this Oracle home
Do you want to continue (y - yes, n - no)? [n]: y
A log of this session will be written to: '/tmp/deinstall2016-11-03_09-31-33PM/logs/deinstall_deconfig2016-11-03_09-32-35-PM.out'
Any error messages from this session will be written to: '/tmp/deinstall2016-11-03_09-31-33PM/logs/deinstall_deconfig2016-11-03_09-32-35-PM.err'

######################## DECONFIG CLEAN OPERATION START ########################
Database de-configuration trace file location: /tmp/deinstall2016-11-03_09-31-33PM/logs/databasedc_clean2016-11-03_09-32-53-PM.log
ASM de-configuration trace file location: /tmp/deinstall2016-11-03_09-31-33PM/logs/asmcadc_clean2016-11-03_09-32-53-PM.log
ASM Clean Configuration START
ASM Clean Configuration END

Network Configuration clean config START

Network de-configuration trace file location: /tmp/deinstall2016-11-03_09-31-33PM/logs/netdc_clean2016-11-03_09-33-02-PM.log

De-configuring Listener configuration file...
Listener configuration file de-configured successfully.

De-configuring Naming Methods configuration file...
Naming Methods configuration file de-configured successfully.

De-configuring backup files...
Backup files de-configured successfully.

The network configuration has been cleaned up successfully.

Network Configuration clean config END


---------------------------------------->

Run the following command as the root user or the administrator on node "serverpruebas-m".

/tmp/deinstall2016-11-03_09-31-33PM/perl/bin/perl -I/tmp/deinstall2016-11-03_09-31-33PM/perl/lib -I/tmp/deinstall2016-11-03_09-31-33PM/crs/install /tmp/deinstall2016-11-03_09-31-33PM/crs/install/roothas.pl -force  -deconfig -paramfile "/mp/deinstall2016-11-03_09-31-33PM/response/deinstall_OraGI12Home1.rsp"

Press Enter after you finish running the above commands

<----------------------------------------



######################### DECONFIG CLEAN OPERATION END #########################


####################### DECONFIG CLEAN OPERATION SUMMARY #######################
ASM instance was de-configured successfully from the Oracle home
The stopping and de-configuring of Oracle Restart failed. Fix the problem and rerun this tool to completely remove the Oracle Restart configuration and the software
Oracle Restart was already stopped and de-configured on node "serverpruebas-m"
Oracle Restart is stopped and de-configured successfully.
#######################################################################


############# ORACLE DECONFIG TOOL END #############

Using properties file /tmp/deinstall2016-11-03_09-31-33PM/response/deinstall_2016-11-03_09-32-35-PM.rsp
Location of logs /tmp/deinstall2016-11-03_09-31-33PM/logs/

############ ORACLE DEINSTALL TOOL START ############





####################### DEINSTALL CHECK OPERATION SUMMARY #######################
A log of this session will be written to: '/tmp/deinstall2016-11-03_09-31-33PM/logs/deinstall_deconfig2016-11-03_09-32-35-PM.out'
Any error messages from this session will be written to: '/tmp/deinstall2016-11-03_09-31-33PM/logs/deinstall_deconfig2016-11-03_09-32-35-PM.err'

######################## DEINSTALL CLEAN OPERATION START ########################
## [START] Preparing for Deinstall ##
Setting LOCAL_NODE to serverpruebas-m
Setting CRS_HOME to true
Setting oracle.installer.invPtrLoc to /tmp/deinstall2016-11-03_09-31-33PM/oraInst.loc
Setting oracle.installer.local to false

## [END] Preparing for Deinstall ##

Setting the force flag to false
Setting the force flag to cleanup the Oracle Base
Oracle Universal Installer clean START


Detach Oracle home '/opt/app/oracle/product/12.1.0/grid' from the central inventory on the local node : Done

Failed to delete the directory '/opt/app/oracle/product/12.1.0/grid'. The directory is in use.
Delete directory '/opt/app/oracle/product/12.1.0/grid' on the local node : Failed <<<<

Delete directory '/opt/app/oraInventory' on the local node : Done

Failed to delete the directory '/opt/app/oracle/product/12.1.0/grid'. The directory is in use.
The Oracle Base directory '/opt/app/oracle' will not be removed on local node. The directory is not empty.

Oracle Universal Installer cleanup was successful.

Oracle Universal Installer clean END


## [START] Oracle install clean ##

Clean install operation removing temporary directory '/tmp/deinstall2016-11-03_09-31-33PM' on node 'serverpruebas-m'

## [END] Oracle install clean ##


######################### DEINSTALL CLEAN OPERATION END #########################


####################### DEINSTALL CLEAN OPERATION SUMMARY #######################
Successfully detached Oracle home '/opt/app/oracle/product/12.1.0/grid' from the central inventory on the local node.
Failed to delete directory '/opt/app/oracle/product/12.1.0/grid' on the local node.
Successfully deleted directory '/opt/app/oraInventory' on the local node.
Oracle Universal Installer cleanup was successful.


Run 'rm -r /etc/oraInst.loc' as root on node(s) 'serverpruebas-m' at the end of the session.

Run 'rm -r /opt/ORCLfmap' as root on node(s) 'serverpruebas-m' at the end of the session.
Run 'rm -r /etc/oratab' as root on node(s) 'serverpruebas-m' at the end of the session.
Oracle deinstall tool successfully cleaned up temporary directories.
#######################################################################


############# ORACLE DEINSTALL TOOL END #############

Como veis, tremendamente sencillo si se hace de manera ordenada

ORA-28221 REPLACE not specified cambiando la passwd de un usuario

Hoy vamos a ver una entrada muy muy básica.

En nuestro trabajo diario estamos acostumbrados a poder cambiar las contraseñas con el comando

ALTER USER usuario IDENTIFIED BY contraseña

Si le pedimos a un usuario que se cambie su contraseña, podemos encontrarnos con el error

 ORA-28221 REPLACE not specified

Que ha ocurrido?

La solucion es muy muy sencilla, simplemente ha de indicar cual es el password actual.
El código que debe de ejecutar un usuario para cambiar su contraseña es

ALTER USER usuario IDENTIFIED BY nuevacontraseña REPLACE antigua_contraseña ;

Como decíamos al principio , tremendamente sencillo, pero puede hacernos perder tiempo si no lo sabemos

Como siempre, mas informacion en la web de soporte en la noca OERR: ORA-28221 «REPLACE not specified» Reference Note (Doc ID 194726.1)

Errores ORA-16179 al intentar cambiar el LOG_ARCHIVE_DEST_1

Hoy vamos a ver una entrada tan absurda que roza casi lo idiota.

Supongamos que queramos modificar o añadir el destino de nuestros archivers,e intentándolo tenemos el error ORA-16179

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION = D:\oracle\FRA\QA';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION = D:\oracle\FRA\QA''
ERROR en lφnea 1:
ORA-32017: fallo al actualizar SPFILE
ORA-16179: cambios incrementales en "log_archive_dest_1" no permitidos con SPFILE

La primera accion a temar en cuenta, es buscar blancos en el entrecomillado

Una vez eliminados los blancos, funcionará correctamente 🙂

Pueden haber otros problemas que den este ORA-, todos ellos mas serios que el de esta entrada, su solucion la podéis busar en:

  • Soporte en la Nota OERR: ORA-16179 «incremental changes to %s not allowed with SPFILE» Reference Note (Doc ID 194494.1)
  • Blog de Juan Andres Mercado

ASMLIB en redhat7

Hoy vamos a ver en una sencilla entrada los pasos para instalar ASMlib en redhat 7

Tal como nos indica la web de Oracle, lo primero que hay que hacer es descargar los paquetes correspondientes a la distribución.
En nuestro caso serán los paquetes

oracleasmlib-2.0.12-1.el7.x86_64.rpm
oracleasm-support-2.1.8-3.el7.x86_64.rpm

descargamos estos paquetes a nuestro directorio, y los instalamos con la opcion localinstall del YUM, esto nos encontrará automáticamente el paquete kmod-oracleasm.x86_64

[root@localhost ~]# yum localinstall ./oracleasmlib-2.0.12-1.el7.x86_64.rpm oracleasm-support-2.1.8-3.el7.x86_64.rpm
Complementos cargados:langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Examinando ./oracleasmlib-2.0.12-1.el7.x86_64.rpm: oracleasmlib-2.0.12-1.el7.x86_64
Marcando ./oracleasmlib-2.0.12-1.el7.x86_64.rpm para ser instalado
Examinando oracleasm-support-2.1.8-3.el7.x86_64.rpm: oracleasm-support-2.1.8-3.el7.x86_64
Marcando oracleasm-support-2.1.8-3.el7.x86_64.rpm para ser instalado
Resolviendo dependencias
--> Ejecutando prueba de transacción
---> Paquete oracleasm-support.x86_64 0:2.1.8-3.el7 debe ser instalado
---> Paquete oracleasmlib.x86_64 0:2.0.12-1.el7 debe ser instalado
--> Procesando dependencias: oracleasm >= 1.0.4 para el paquete: oracleasmlib-2.0.12-1.el7.x86_64
--> Ejecutando prueba de transacción
---> Paquete kmod-oracleasm.x86_64 0:2.0.8-15.el7 debe ser instalado
--> Resolución de dependencias finalizada
Dependencias resueltas
===========================================================================================================
 Package                     Arquitectura     Versión         Repositorio                             Tamaño
============================================================================================================
Instalando:
 oracleasm-support           x86_64           2.1.8-3.el7     /oracleasm-support-2.1.8-3.el7.x86_64   242 k
 oracleasmlib                x86_64           2.0.12-1.el7    /oracleasmlib-2.0.12-1.el7.x86_64       39 k
Instalando para las dependencias:
 kmod-oracleasm              x86_64           2.0.8-15.el7    local                                   35 k
Resumen de la transacción
=====================================================================================================
Instalar  2 Paquetes (+1 Paquete dependiente)
Tamaño total: 316 k
Tamaño total de la descarga: 35 k
Tamaño instalado: 405 k
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Instalando    : kmod-oracleasm-2.0.8-15.el7.x86_64    1/3
  Instalando    : oracleasmlib-2.0.12-1.el7.x86_64      2/3
  Instalando    : oracleasm-support-2.1.8-3.el7.x86_64  3/3
Nota: Reenviando petición a 'systemctl enable oracleasm.service'.
Created symlink from /etc/systemd/system/multi-user.target.wants/oracleasm.service to /usr/lib/systemd/system/oracleasm.service.
  Comprobando   : oracleasmlib-2.0.12-1.el7.x86_64             1/3
  Comprobando   : oracleasm-support-2.1.8-3.el7.x86_64         2/3
  Comprobando   : kmod-oracleasm-2.0.8-15.el7.x86_64           3/3
Instalado:
  oracleasm-support.x86_64 0:2.1.8-3.el7
 oracleasmlib.x86_64 0:2.0.12-1.el7
Dependencia(s) instalada(s):
  kmod-oracleasm.x86_64 0:2.0.8-15.el7

Mediante este paquete propio de redHat kmod-oracleasm nos ahorramos los problemas que teníamos anteriormente con los módulos del kernel y que solucionábamos de manera casera con cargar módulos de oracleasm sin la versión exacta del kernel

mas info en :

  • https://access.redhat.com/solutions/315643
  • http://www.oracle.com/technetwork/server-storage/linux/asmlib/rhel7-2773795.html

Securizando el listener

Vamos a ver una serie de entradas sencillas sobre securización básica de la base de datos

La securización del listener es una de las tareas mas sencillas y de las primeas que tenemos que hacer con la instalación de la base de datos.
Esta securización consta de varias partes:

  • Securizacion del S.O
  • Restringir las IPs desde las que se permite el acceso
  • Añadir autenticacion al listener.
  • Auditar listeners
  • Parametrizar conexiones
  • Cifrar tráfico

Securización del S.O

Como en todo componente de Oracle, la securización del Sistema Operativo es primordial.
Oracle por defecto cuenta con una estructura de permisos en directorios que no deben de variarse.
En cualquier caso siempre es conveniente seguir los aparatados de managing security de los documentos de instalacion de los productos

Restringir las IPs desde las que se permite el acceso

Este apartado es muy relativo, ya que puede no aplicar a nuestro sistema, sin embargo, en la mayoría de los casos estaremos tratando arquitecturas de 3 capas donde los accesos a las bases de datos son desde nuestra capa de servidor de aplicación.

Para habilitar las whitelists usaremos los parámetros tcp.invited_nodes y tcp.validnode_checking en el fichero $TNS_ADMIN/sqlnet.ora de la siguiente manera

tcp.validnode_checking = YES
tcp.invited_nodes = ( X.X.X.X, hostname, ... )

La documentación de estos parámetros la tenemos en Configuring Database Access Control

Añadir autenticación al listener.

Esta opcion está desoportada en la version 12c Desupport of Oracle Net Listener Password
Una de las primeras vulnerabilidades que van a encontrarte en una auditoria de seguridad es la falta de autenticacion del listener.
Poner password al listener previene a la base de datos de ejecución de los comandos de control del mismo desde ubicaciones remotas. Es importante destacar que , desde la version 10g «the listener password is no longer required as the listener implements OSAuthentication,«, esto quiere decir que el usuario del sistema operativo propietario del listener no necesita el password para pararlo o arrancarlo ( que es el principal miedo del DBA cuando pone password al listener)

Para poner password al listener ejecutaremos:

$ lsnrctl
LSNRCTL> change_password
Old password:
New password:
Reenter new password: 
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=BBDD1)(PORT=1521)))
Password changed for LISTENER
The command completed successfully
LSNRCTL> set password
Password:
The command completed successfully
LSNRCTL> save_config
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=BBDD1)(PORT=1521)))
Saved DBLSNR configuration parameters.
Listener Parameter File /oracle/product/BBDD/network/admin/listener.ora
Old Parameter File /oracle/product/BBDD/network/admin/listener.bak
The command completed successfully

Esto nos habrá añadido unas lineas al listener.ora

This added the following lines to listener.ora:
#----ADDED BY TNSLSNR 21-JUN-2016 13:47:56---
PASSWORDS_VSEC = D911537DUT5E6546

Auditar el listener

Toda securizacion de un elemento debe incluir la habilitación de un registro del mismo.
Para habilitar el regitro del log de listener añadiremos al fichero $TNS_ADMIN/listener.ora las siguientes lineas :

LOG_STATUS = ON
LOG_DIRECTORY_ = $TNS_ADMIN
LOG_FILE_ = $ORACLE_SID

Esto ya se lleva a cabo por defecto a partir de la versión 11.5.10.

Parametrizar conexiones

El ultimo y no menos importante de los apartados es el de parametrizar los parámetros del listener ,un ejemplo de uno de estos parámetros es CONNECT_TIMEOUT
Añafiendo en el $TNS_ADMIN/listener.ora el parámetro

CONNECT_TIMEOUT_ = 10

Especificamos el tiempo en segundos que el listener esperará para que se complete una conexion de cliente.

Cifrar tráfico

El cifrado del tráfico de la base de datos es posiblemente uno de los puntos mas importantes a la hora de securizar una conexion.
¿Por que la hemos dejado para el final?
La respuesta es sencilla, por que este cifrado implica una opcion de pago que es la Advanced Security
Option (ASO).

Si estás interesado en ahondar en esta opcion tienes la informacion en el grupo Advanced Security Option del MSOC