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)

ORA-28040: No matching authentication protocol al subir a 12c

Hoy vamos a ver un error que podemos tener con determinadas conexiones JDBC desde clientes 10g.

El principal problema es que el cliente de JDBC thin de la 10g usa el protocolo de autenticación SHA-1, este protocolo no está permitido en la 12c, por lo que da el error.

ORA-28040: No matching authentication protocol

La solución debería de ser el uso de clientes 12c, ya que, hemos de tener en cuenta que JDBC 10.1 drivers no están certificados con bases de datos 12c

Existe un workarround para salir del paso, y es el configurar en el SQLNET.ORA del servidor el parámetro.

 SQLNET.ALLOWED_LOGON_VERSION_SERVER=10
 SQLNET.ALLOWED_LOGON_VERSION_CLIENT=10

De esta manera conseguiremos que clientes antiguos funcionen, pero no debemos de perder de vista que esto solo debe de ser un workarround y la suma importancia de mantener todos los componentes de la base de datos certificados.

Aunque la manera correcta de solucionarlo es desde el cliente


The solution is to take out the "-Doracle.jdbc.thinLogonCapability=o3" java parameter from the application execution.
For example, if the next java command was used to execute the application:
java -Doracle.jdbc.thinLogonCapability=o3 -cp .:ojdbc8.jar Application
Then, it is necessary to take the "-Doracle.jdbc.thinLogonCapability=o3" parameter off from the command as follows:
java -cp .:ojdbc8.jar Application

Más información como siempre en metalink en :

  • «ORA-28040: No Matching Authentication Protocol» After Database Upgrade To 19c (Doc ID 2748273.1)
  • Client / Server Interoperability Support Matrix for Different Oracle Versions (Doc ID 207303.1)
  • 12c Database Alert.log File Shows The Message: Using Deprecated SQLNET.ALLOWED_LOGON_VERSION Parameter (Doc ID 2111876.1)
  • 11g and Older: How To Use the Parameter SQLNET.ALLOWED_LOGON_VERSION Correctly (Doc ID 1304142.1)
  • 11g and Older: How To Use the Parameter SQLNET.ALLOWED_LOGON_VERSION Correctly (Doc ID 1304142.1)
  • Error «ORA-28040: No matching authentication protocol» When Using SQLNET.ALLOWED_LOGON_VERSION (Doc ID 755605.1)

Rman DUPLICATE en 12c y Windows

Hoy vamos a ver una sencilla entrada en la que indicaremos como duplicar una base de datos en windows mediante RMAN DUPLICATE.
Este método está muy documentado en un montón de webs, pero , en entornos windows suele tener la pega ( como todo lo de Oracle+Windows) del servicio de windows.

Supongamos que tenemos una base de datos llanada PROD y que queremos clonarla para su uso en desarrollo en otra llamada DESA.
Además de esto, queremos modificar el path de los ficheros de la base de datos, ya que,en la máquina de desarrollo queremos que todo lo que esté en D: y E: pase a estar en Z:

Así pues, los pasos serán:

1- Creamos el init.ora de la instancia a partir de la clonada

Aunque hay documentos que te explican como crear un init mínimo, lo mejor y mas cómodo segun mi opinion es crear un sencillo pfile en texto dsde el spfile del origen

create pfile='initDESA.ora' from spfile;

2- Editamos el initSID.ora y cambiamos TARGET por SID en todas las lineas

Abriremos con cualquier editor el fichero que acabamos de generar y substituiremos la cadena PROD por DESA

3- Creamos el fichero de passwd

Tendremos que ir al $ORACLE_HOME/database crear nuestro fichero de password.

orapwd file=PWDDESA.ora password=mipasswd entries=6 force=y

4- Cramos el servicio de windows

Este es el paso que podemos evitarnos en unix, pero que es inevitable en windows

oradim -NEW -SID DESA -SYSPWD mipasswd -SRVC OracleServiceDESA -STARTMODE auto -SRVCSTART system -SPFILE

5- paramos y arrancamos en modo nomount

El proceso de creacion de servicio habrá arrancado la base de datos , pro lo que tendremos que entrar , pararla y dejarla arrancada en modo nomount.

6- añadimos las líneas de cambio de path en el nuevo INIT.ora

Este es el punto mas extraño ya que, las opciones de cambio de nombre del path del fichero no están en el fichero de comandos de rman, sino en el init.ora de la nueva base de datos.

Con estos comandos movemos tanto los logfiles como los datafiles normales a su nuevo path


LOG_FILE_NAME_CONVERT =('D:\oracle\ORADATA\PROD','Z:\oracle\ORADATA\DESA','E:\oracle\ORADATA\PROD','Z:\oracle\ORADATA\DESA')
DB_FILE_NAME_CONVERT = ('D:\oracle\ORADATA\PROD','Z:\oracle\ORADATA\DESA','E:\oracle\ORADATA\PROD','Z:\oracle\ORADATA\DESA')

7- Creamos el fichero de comandos rman


connect target sys/XXXX.@PROD;
connect catalog user/pass@CATALOG;
connect auxiliary /

CONFIGURE DEFAULT DEVICE TYPE TO 'SBT_TAPE';
CONFIGURE DEVICE TYPE SBT_TAPE PARALLELISM 4;
CONFIGURE CHANNEL DEVICE TYPE SBT_TAPE parms 'ENV=(NSR_SERVER=backupserver, NSR_DATA_VOLUME_POOL=pollduplicados)';

RUN{
DUPLICATE TARGET DATABASE TO "DESA" ;

}

8-Lanzamos el duplicado

Ahora solamente queda lanzar el rman


rman cmdfile=comandos.crv logfile=duplicacion.log

Y un un tiempo record tendréis duplicada vuestra base de datos PROD renombrada a DESA y en el nuevo path Z:\oracle\ORADATA\DESA

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