viernes, 10 de abril de 2020

Oracle Database 20c- En ambiente "Always Free Services", primeras inexperiencias

Bueno, bien claro lo dice la nota introductoria, esta versión no debe ser puesta en ambiente productivos.

A partir de la disponibilidad para hacer despliegue en la plataforma de "Always Free Services" de Oracle, de la nueva versión de base de datos Oracle 20c, he empezado a tener las primeras desaventuras
Mi laboratorio inicia con la creación de una VM en el área de Hardware dedicado, VM y Exadata del servicio Cloud de Oracle.


El despliegue del servicio, fue muy rápido para tratarse de una plataforma gratuita.
El tema de conexión vía PUTTY, no tuve ningún inconveniente en especial.

Como cualquier servicio de Oracle Cloud, es necesario conectarse con el usuario OPC, para luego hacer un sudo al usuario "root" y cambiar la contraseña del usuario "oracle".

Hasta aquí nada especial. Verificamos y tenemos configurado de antemano ( de facto ), las variables de ambiente de Oracle.

Reviso el estado del servicio LISTENER y el mismo me presenta la siguiente información:

[oracle@oracledbacr admin]$ lsnrctl status

LSNRCTL for Linux: Version 20.0.0.0.0 - Production on 10-APR-2020 23:40:04

Copyright (c) 1991, 2019, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)
(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 20.0.0.0.0 - Production
Start Date                10-APR-2020 22:42:31
Uptime                    0 days 0 hr. 57 min. 33 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/homes/OraDB20Home1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/oracledbacr/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)(
   ORT=5500))(Security=(my_wallet_directory=/u01/app/oracle/homes/OraDB20Home1/admin/DB20c_iad12j/xdb_wallet))
  (Presentation=HTTP)(Session=RAW))
Services Summary...
Service "9d45645c541e0b7fe0530206f40ae9e9.sub04081356520.vncoracledbacr.oraclevcn.com" has 1 instance(s).
  Instance "DB20c", status READY, has 1 handler(s) for this service...
Service "DB20cXDB.sub04081356520.vncoracledbacr.oraclevcn.com" has 1 instance(s).
  Instance "DB20c", status READY, has 1 handler(s) for this service...
Service "DB20c_iad12j.sub04081356520.vncoracledbacr.oraclevcn.com" has 1 instance(s).
  Instance "DB20c", status READY, has 1 handler(s) for this service...
Service "lab2.sub04081356520.vncoracledbacr.oraclevcn.com" has 1 instance(s).
  Instance "DB20c", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@oracledbacr admin]$

Noten que he puesto una ruta de configuración del LISTENER resaltada en negrita, esto es de nuestro interés para más adelante.

Revisando el contenido del archivo "oratab", me muestra la información del servicio DB20c, configurado, apuntando al directorio: "/u01/app/oracle/product/20.0.0/dbhome_1"

Para mí en este momento, me es de nada o muy poca importancia esto, pero luego lo voy a pagar más adelante.

[oracle@oracledbacr admin]$ more /etc/oratab
DB20c:/u01/app/oracle/product/20.0.0/dbhome_1:Y
[oracle@oracledbacr admin]$ . oraenv
ORACLE_SID = [DB20c] ? DB20c
The Oracle base remains unchanged with value /u01/app/oracle

Verifico las variables de ambiente configuradas en el sistema, por curiosidad nada más.

[oracle@oracledbacr admin]$ env|grep ORACLE
ORACLE_UNQNAME=DB20c_iad12j
ORACLE_SID=DB20c
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/20.0.0/dbhome_1

Casi siempre me conecto como SYSDBA para verificar que realmente la instancia del contenedor esta arriba y los servicios acoplados disponibles para ser utilizados.

[oracle@oracledbacr admin]$ sqlplus /nolog

SQL*Plus: Release 20.0.0.0.0 - Production on Fri Apr 10 23:41:22 2020
Version 20.2.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

SQL> connect / as sysdba
Connected.
SQL> desc v$version
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------
 BANNER                                             VARCHAR2(80)
 BANNER_FULL                                        VARCHAR2(160)
 BANNER_LEGACY                                      VARCHAR2(80)
 CON_ID                                             NUMBER

SQL> select BANNER_FULL from v$version;

BANNER_FULL
--------------------------------------------------------------------
Oracle Database 20c EE Extreme Perf Release 20.0.0.0.0 - Production
Version 20.2.0.0.0

SQL> col name format a30

SQL> select con_id, name, open_mode from v$pdbs;

    CON_ID NAME                           OPEN_MODE
---------- ------------------------------ ----------
         2 PDB$SEED                       READ ONLY
         3 LAB2                           READ WRITE

Como observan, no hay nada especial, todo parece estar bien.

Me traslado en el sistema operativo al directorio "network/admin", en la ruta del $ORACLE_HOME, para crear el archivo de configuración de conexiones de la base de datos.

[oracle@oracledbacr admin]$ more tnsnames.ora
lab2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = lab2.sub04081356520.vncoracledbacr.oraclevcn.com)
    )
)

cdb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = DB20c_iad12j.sub04081356520.vncoracledbacr.oraclevcn.com)
    )
)

Este archivo lo he creado a partir de la información que me muestra el servicio LISTENER que se encuentra arriba.

Procedo a realizar la prueba de conexión a las cadenas definidas de servicio.

[oracle@oracledbacr admin]$ tnsping cdb

TNS Ping Utility for Linux: Version 20.0.0.0.0 - Production on 10-APR-2020 23:06:38

Copyright (c) 1997, 2019, Oracle.  All rights reserved.

Used parameter files:
/u01/app/oracle/homes/OraDB20Home1/network/admin/sqlnet.ora


TNS-03505: Failed to resolve name

Demonios algo no esta funcionando correctamente. Reviso una y otra vez la configuración del tnsnames.ora y no veo nada malo en el archivo. Que cambió en la sintaxis de configuración del tnsnames, me pregunto.?

Claro, una de las nuevas características de Oracle Database 20c, en el proceso de instalación; todos los Oracle Homes a partir de esta versión, son en modo READ-ONLY de facto.

Vuelvo a revisar el contenido del servicio LISTENER y recién percato, que la ruta de configuración del archivo del servicio, esta en una ruta distinta a la del $ORACLE_HOME

Vaya sorpresa, lo que hace la costumbre. Por eso es tan importante el proceso de estudio, las cosas cambian y en Oracle, con cada versión, hay cambios significativos, que nos pueden volver locos.

Me voy al directorio indicado en el estado del LISTENER y EUREKA, me encuentro con los archivos de configuración de listener, el sqlnet y el tnsnames. En la ruta del $ORACLE_HOME/network/admin, el directorio estaba vacío.

[oracle@oracledbacr admin]$ pwd
/u01/app/oracle/homes/OraDB20Home1/network/admin
[oracle@oracledbacr admin]$ ls -la
total 20
drwxr-xr-x. 2 oracle oinstall 4096 Apr 10 23:37 .
drwxr-xr-x. 5 oracle oinstall 4096 Jan 29 09:21 ..
-rw-r-----  1 oracle oinstall  378 Apr  9 23:18 listener.ora
-rw-r-----  1 oracle oinstall  666 Apr  9 23:22 sqlnet.ora
-rw-r-----  1 oracle oinstall  809 Apr 10 23:37 tnsnames.ora

Vuelvo a crear las cadenas de conexión con la información que me muestra en la primera entrada el tnsnames.

[oracle@oracledbacr admin]$ more tnsnames.ora

LISTENER_DB20C=(ADDRESS=(PROTOCOL=TCP)(HOST=oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT=1521))
DB20c_iad12j=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT=1521))
(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME
=DB20c_iad12j.sub04081356520.vncoracledbacr.oraclevcn.com)))

CDB=
        (DESCRIPTION=
                (ADDRESS=(PROTOCOL=TCP)(HOST=oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT=1521))
                (CONNECT_DATA=(SERVER=DEDICATED)
                (SERVICE_NAME=DB20c_iad12j.sub04081356520.vncoracledbacr.oraclevcn.com)
                )
        )
LAB2=
        (DESCRIPTION=
                (ADDRESS=(PROTOCOL=TCP)(HOST=oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT=1521))
                (CONNECT_DATA=(SERVER=DEDICATED)
                (SERVICE_NAME=lab2.sub04081356520.vncoracledbacr.oraclevcn.com)
                )
        )

Ahora si, vamos a probar la conexión a los servicios y veremos que pasa.

[oracle@oracledbacr admin]$ tnsping cdb

TNS Ping Utility for Linux: Version 20.0.0.0.0 - Production on 10-APR-2020 23:46:20

Copyright (c) 1997, 2019, Oracle.  All rights reserved.

Used parameter files:
/u01/app/oracle/homes/OraDB20Home1/network/admin/sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT=1521)) 
(CONNECT_DATA=(SERVER=DEDICATED) (SERVICE_NAME=DB20c_iad12j.sub04081356520.vncoracledbacr.oraclevcn.com)))
OK (0 msec)
[oracle@oracledbacr admin]$ tnsping lab2

TNS Ping Utility for Linux: Version 20.0.0.0.0 - Production on 10-APR-2020 23:46:25

Copyright (c) 1997, 2019, Oracle.  All rights reserved.

Used parameter files:
/u01/app/oracle/homes/OraDB20Home1/network/admin/sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT=1521)) 
(CONNECT_DATA=(SERVER=DEDICATED) (SERVICE_NAME=lab2.sub04081356520.vncoracledbacr.oraclevcn.com)))
OK (0 msec)

Listo, hemos superado el primer problema encontrado.

Vamos ahora con la conexión de forma directa a los servicios con la herramienta SQL*Plus.

Si SQL*Plus, aun existe en esta versión, a pesar de los rumores de su desaparición.

[oracle@oracledbacr admin]$ sqlplus /nolog

SQL*Plus: Release 20.0.0.0.0 - Production on Fri Apr 10 23:41:22 2020
Version 20.2.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

SQL> connect / as sysdba
Connected.
SQL> desc v$version
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------
 BANNER                                             VARCHAR2(80)
 BANNER_FULL                                        VARCHAR2(160)
 BANNER_LEGACY                                      VARCHAR2(80)
 CON_ID                                             NUMBER

SQL> select BANNER_FULL from v$version;

BANNER_FULL
--------------------------------------------------------------------
Oracle Database 20c EE Extreme Perf Release 20.0.0.0.0 - Production
Version 20.2.0.0.0

SQL> col name format a30

SQL> select con_id, name, open_mode from v$pdbs;

    CON_ID NAME                           OPEN_MODE
---------- ------------------------------ ----------
         2 PDB$SEED                       READ ONLY
         3 LAB2                           READ WRITE

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 LAB2                           READ WRITE NO
SQL>


Como ven, tenemos el servicio LAB2 que es una instancia de base de datos acoplada o PDB (Pluggable Database), la cuál quiero utilizar para realizar algunas pruebas.

Así que vamos a crear un vulgar y simple usuario, como lo hemos hecho en los últimos 8 años en una base de datos de CONTENEDOR de Oracle.


SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 LAB2                           READ WRITE NO

SQL> alter session set container=LAB2;
Session altered.

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
DB20c

SQL> create user aprendizaje identified by oracle;
create user aprendizaje identified by oracle
*
ERROR at line 1:
ORA-28003: password verification for the specified password failed
ORA-20000: password length less than 9 characters

SQL> create user aprendizaje identified by Oracle$2020;
create user aprendizaje identified by Oracle$2020
*
ERROR at line 1:
ORA-28003: password verification for the specified password failed
ORA-20000: password must contain 2 or more uppercase characters

SQL> create user aprendizaje identified by ORacle;
create user aprendizaje identified by ORacle
*
ERROR at line 1:
ORA-28003: password verification for the specified password failed
ORA-20000: password length less than 9 characters

SQL> create user aprendizaje identified by ORacle$20_20;
User created.

Como observan, tuvimos algunos inconvenientes para la definición de la contraseña del usuario. El PROFILE de facto y las reglas establecidas para control de contraseñas, pide más de lo que estamos acostumbrados a configurar para un ambiente de pruebas.

Sigamos y brindemos algunos privilegios a nivel de sistema, para poder crear tablas y conectarnos a la base de datos con nuestro usuario nuevo "APRENDIZAJE".

SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS

SQL> create tablespace TBS_DATA;
Tablespace created.

SQL> alter user aprendizaje quota unlimited on TBS_DATA;
User altered.

SQL> grant create table to aprendizaje;
Grant succeeded.

SQL> grant create session to aprendizaje;

Grant succeeded.

Todo listo entonces, vamos a conectarnos a la instancia PDB.

[oracle@oracledbacr admin]$ sqlplus aprendizaje/ORacle$20_20@lab2

SQL*Plus: Release 20.0.0.0.0 - Production on Fri Apr 10 23:47:35 2020
Version 20.2.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

ERROR:
ORA-01017: invalid username/password; logon denied


Enter user-name: ^C

Diablos, por las barbas de mercurio, que esto. me da error de clave o usuario inválido al conectarme y si lo hago con el usuario SYSTEM, también.

[oracle@oracledbacr admin]$ sqlplus system/ORacle$20_20@lab2

SQL*Plus: Release 20.0.0.0.0 - Production on Fri Apr 10 23:48:32 2020
Version 20.2.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

ERROR:
ORA-01017: invalid username/password; logon denied


Enter user-name: ^C

Algo hice mal, puede ser que escribí mal la contraseña. Voy a cambiarla y probar nuevamente la conexión.

[oracle@oracledbacr admin]$ sqlplus /nolog

SQL*Plus: Release 20.0.0.0.0 - Production on Fri Apr 10 23:48:41 2020
Version 20.2.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

SQL> connect / as sysdba
Connected.
SQL> alter user system identified by ORacle$20_20;
alter user system identified by ORacle$20_20
*
ERROR at line 1:
ORA-28007: the password cannot be reused
Disconnected from Oracle Database 20c EE Extreme Perf Release 20.0.0.0.0 - Production
Version 20.2.0.0.0

Demonios, a la hora de querer cambiar la contraseña, me dice que esa contraseña no puede ser reutilizada.

Entonces la contraseña esta bien. Debo estarme volviendo loco. Probemos nuevamente.

[oracle@oracledbacr admin]$ sqlplus system/ORacle$20_20@cdb

SQL*Plus: Release 20.0.0.0.0 - Production on Fri Apr 10 23:49:20 2020
Version 20.2.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

ERROR:
ORA-01017: invalid username/password; logon denied

Nada, no tiene sentido, será que ...
Algo me acuerdo de haber leído por ahí, sobre una dependencia de asignar claves a usuarios dentro del contexto del Contenedor o del PDB.

Voy a probar cambiando la clave a SYSTEM y agregando ahora la cláusula que sea para el contenedor y todos los PDBs creados en el contenedor.

[oracle@oracledbacr admin]$ sqlplus /nolog

SQL*Plus: Release 20.0.0.0.0 - Production on Fri Apr 10 23:49:36 2020
Version 20.2.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
SQL> connect / as sysdba
Connected.

SQL> alter user system identified by ORacle_20_21 container=all;
User altered.

Voy a probar inicialmente que pueda conectar al contenedor con la clave.

SQL> connect system/ORacle_20_21
Connected.
SQL> show user
USER is "SYSTEM"

Ahora pruebo utilizando la cadena de conexión definida en el tnsnames.

SQL> connect system/ORacle_20_21@lab2
Connected.
SQL> show user
USER is "SYSTEM"

Listo, parece que ahora si esta funcionando, vamos con el usuario de pruebas. Cambiemos ahora que estamos dentro del PDB, la contraseña al usuario APRENDIZAJE.

SQL> alter user aprendizaje identified by ORacle_20_21;

User altered.

SQL> exit
Disconnected from Oracle Database 20c EE Extreme Perf Release 20.0.0.0.0 - Production
Version 20.2.0.0.0

Vamos a probar la conexión a la base de datos a ver que sucede.

[oracle@oracledbacr admin]$ sqlplus aprendizaje/ORacle_20_21@lab2

SQL*Plus: Release 20.0.0.0.0 - Production on Fri Apr 10 23:51:24 2020
Version 20.2.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.
Connected to:
Oracle Database 20c EE Extreme Perf Release 20.0.0.0.0 - Production
Version 20.2.0.0.0

SQL> show user
USER is "APRENDIZAJE"
SQL> show con_id

CON_ID
------------------------------
3
SQL>

Listo, el primer escollo ha sido superado. Ahora ya puedo hacer mis primeras pruebas con la nueva versión de base de datos.

No olvides que también estamos en Facebook/oracledbacr

1 comentario:

Te agradezco tus comentarios. Te esperamos de vuelta.

Todos los Sábados a las 8:00PM

Optimismo para una vida Mejor

Optimismo para una vida Mejor
Noticias buenas que comentar