Mostrando entradas con la etiqueta Oracle. Mostrar todas las entradas
Mostrando entradas con la etiqueta Oracle. Mostrar todas las entradas

martes, 9 de septiembre de 2014

ORA-28002: the password will expire within X days


Para un ambiente de desarrollo normalmente no es importante que las contraseñas de base de datos expiren. Me estaba dando ese mensaje de que mi contraseña para el usuario 'system' iba a expirar. Así que para evitar esto en el futuro y dejar la misma contraseña, ejecuté los siguientes comandos:

SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
SQL> ALTER USER SYSTEM IDENTIFIED BY <password>;

viernes, 28 de junio de 2013

Oracle: ORA-00600: internal error code, arguments: [keltnfy-ldmInit], [46], [1], [], [], [], [], []


Otro error más a mi colección de mensajes encriptados de Oracle. Mi bases de datos locales no estaban pudiendo ser accesadas, así que me conecte a la instancia idle e inicie manualmente el servidor. De ahí me di cuenta del bello mensaje:

gabo@gabo-Precision-M6600:~$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Fri Jun 28 10:11:37 2013

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

Connected to an idle instance.

SQL> shutdown
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux Error: 2: No such file or directory
SQL> startup
ORA-00600: internal error code, arguments: [keltnfy-ldmInit], [46], [1], [], [], [], [], []

Según la leído en varios foros, este mensaje tiene que ver con la incapacidad de Oracle de resolver el host de la base de datos, lo cual me parecía raro porque según yo estaba usando localhost el cual es siempre una típica entrada quemada en el archivo hosts (linux: /etc/hosts, Windows: c:\windows\system32\drivers\etc\hosts).

Indagano el archivo listener.ora, en mi caso instalado en este path: /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/network/admin/listener.ora, me di cuenta que el host usado hacía referencia al nombre de mi laptop: "gabo-Precision-M6600".

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /usr/lib/oracle/xe/app/oracle/product/10.2.0/server)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
      (ADDRESS = (PROTOCOL = TCP)(HOST = gabo-Precision-M6600)(PORT = 1521))
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)

Así que agruegué este nombre a mi hosts apuntando a 127.0.0.1 y listo. Problema resuelto.

jueves, 27 de junio de 2013

Oracle: ORA-12519, TNS: no appropriate service handler found


Este error puede tener varias causas, pero en el caso particular me estaba molestando este error al tratar de abrir nuevas conexiones porque aparantemente había excedido la cantidad máxima de procesos y/o sessiones permitidas.

Afortundamente este valor se puede modificar con una simple sentencia SQL(es necesario reiniciar el Oracle):

alter system set processes=150 scope=spfile;

SQL*Plus: Release 10.2.0.1.0 - Production on Thu Jun 27 14:46:58 2013

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


Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

SQL> select * from v$resource_limit where resource_name in ('processes','sessions');

RESOURCE_NAME                  CURRENT_UTILIZATION MAX_UTILIZATION
------------------------------ ------------------- ---------------
INITIAL_ALLOCATION
----------------------------------------
LIMIT_VALUE
----------------------------------------
processes                                       38              40
        40
        40

sessions                                        42              49
        49
        49

RESOURCE_NAME                  CURRENT_UTILIZATION MAX_UTILIZATION
------------------------------ ------------------- ---------------
INITIAL_ALLOCATION
----------------------------------------
LIMIT_VALUE
----------------------------------------


SQL> alter system set processes=150 scope=spfile;

System altered.

SQL> exit
Disconnected from Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
gabo@gabo-Precision-M6600:/usr/lib/oracle/xe/app/oracle/product/10.2.0/server$ sudo /etc/init.d/oracle-xe restart
Shutting down Oracle Database 10g Express Edition Instance.
Stopping Oracle Net Listener.

Starting Oracle Net Listener.
Starting Oracle Database 10g Express Edition Instance.

jueves, 13 de junio de 2013

Oracle: Buscar texto en nombre de tablas y columnas


Un par de sentencias SQL de ORACLE para buscar un texto en nombre de tablas y nombre de columnas. Particularmente útil cuando se da mantenimiento a sistemas sobre los cuales uno no desarrolló desde el principio (legacy).

Para buscar en nombre de las tablas, índice, etc:

SELECT * FROM dba_objects WHERE object_name LIKE '%STRING%';

Para buscar en nombre de columnas:

SELECT owner, table_name, column_name FROM all_tab_columns WHERE column_name LIKE '%COL_STRING%';


lunes, 3 de junio de 2013

Oracle: Desinstalando completamente


Tengo instalado Oracle XE 10.2.0.1-1.1 en mi Ubuntu. Hace unos días quería reinstalarlo porque las bases de datos se desbarataron después de que se corrompieron por un freeze del sistema. Intentaba deinstalarlo de muchas maneras y por alguna razón me quedaba mal instalado y tampoco podía reconfigurarlo apareciendome el mensaje:

Oracle Database 10g Express Edition is already configured

Después de sufrir un rato intentando varias soluciones, tuve éxito ejecutando el siguiente comando que limpia totalmente la instalación: 'sudo apt-get --purge remove oracle-xe-universal'

$ sudo apt-get --purge remove oracle-xe-universal
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following package was automatically installed and is no longer required:
  libdb4.8
Use 'apt-get autoremove' to remove them.
The following packages will be REMOVED:
  oracle-xe-universal:i386*
0 upgraded, 0 newly installed, 1 to remove and 58 not upgraded.
After this operation, 451 MB disk space will be freed.
Do you want to continue [Y/n]? Y
(Reading database ... 223556 files and directories currently installed.)
Removing oracle-xe-universal:i386 ...
Shutting down Oracle Database 10g Express Edition Instance.
Stopping Oracle Net Listener.

Purging configuration files for oracle-xe-universal:i386 ...
Processing triggers for ureadahead ...
Processing triggers for man-db ...
Processing triggers for bamfdaemon ...
Rebuilding /usr/share/applications/bamf.index...
Processing triggers for desktop-file-utils ...
Processing triggers for gnome-menus ...

miércoles, 15 de mayo de 2013

Indeces basados en funciones (function-based indexes) usados como constraints


Supongamos que quisieramos evitar duplicidad de valores de una columna por una mal chequeo de formularios de un programa que termina permitiendo agregar valores que ya existen, con la única diferencia que le agrega espacios en blanco o cambia alguna letra a mayúscula o minúscula.

Un índice basado en función no solamente permite agilizar las búsquedas por expresión. Recomiendo este video para una breve explicación:




Un índice basado en función también puede usarse como un tipo constraint. Dado el caso explicado al principio, podríamos crear un índice de tipo "UNIQUE" para prevenir duplicidad con una función que limpia el valor a insertar y chequea si el valor limpiado es único:

create unique index INDEX_NAME on TABLE (lower(trim(COL_1)));

Una vez agregado el índice a la tabla, cualquier inserción de un valor duplicado (que tiene espacios o letras cambiadas a minúscula/mayúscula) lanzará el siguiente error:

SQL Error: ORA-00001: unique constraint (TABLE.INDEX_NAME) violated
00001. 00000 -  "unique constraint (%s.%s) violated"
*Cause:    An UPDATE or INSERT statement attempted to insert a duplicate key.
           For Trusted Oracle configured in DBMS MAC mode, you may see
           this message if a duplicate entry exists at a different level.
*Action:   Either remove the unique restriction or do not insert the key.

jueves, 14 de marzo de 2013

Oracle Drop Schema

La manera en que uno borra una base de datos en Oracle (típico DROP SCHEMA), o al menos la forma que conozco, es borrando el usuario dueño del esquema con la opción de cascada:

sqlplus "/ as sysdba";
SQL> drop user user_name cascasde;

Oracle: Importar/Exportar un dump


Una actividad muy recurrente cuando se manejan bases de datos es la de exportar algún esquema para respaldar la base de datos, y luego importarla para restaurar un esquema a un estado en particular.

En Oracle esto se puede hacer desde la línea de comandos usando "expdp" y "impdp" para exportar un dump e importar un dump.

expdp db_user/db_pass schemas=schema_name dumpfile=file_name.dmp
impdp db_user/db_pass schemas=schema_name dumpfile=file_name.dmp

El comando exporta el dump en el path donde está instalado el Oracle. En mi caso lo tira en este directorio:

/usr/lib/oracle/xe/app/oracle/admin/XE/dpdump/

A la hora de importarlo hay que colocarlo ahí tambien puesto que el comando no permite indicar el path  en el parámetro del archivo.