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.

miércoles, 19 de junio de 2013

CakePHP: Warning: _cake_core_ cache was unable to write 'cake_dev_en-us' ...


Este error me dio al acceder el sitio después de clonar una copia fresca del framework:

Warning: _cake_core_ cache was unable to write 'cake_dev_en-us' to File cache in /var/www/html/cakephp/lib/Cake/Cache/Cache.php on line 310 Warning: /var/www/html/cakephp/app/tmp/cache/persistent/ is not writable in /var/www/html/cakephp/lib/Cake/Cache/Engine/FileEngine.php on line 337


Evidentemente es un error de permisos que solucioné cambiando el usuario owner del proyecto al del servidor web que en este caso es 'apache':

chown -R apache:apache /var/www/html/cakephp

lunes, 17 de junio de 2013

SEO: Contenido amigable con Robots


Hoy día los sitios web no solamente deben verse bonitos en apariencia, sino que tambien deben ser amigables con los robots (conocidos tambien como web crawlers). Después de todo, de qué vale un sitio si nadie lo visita. Y precisamente un punto importante de entrada a un sitio son los buscadores web.

Como los sitios cada vez son más dinámicos aprovechando tecnologías como JavaScript, se podría en muchas ocasiones pecar de ignorante en el sentido de que una buena porción de contenido no es indexado por los robots pues estos no interpretan código JavaScript. 

Una sana práctica es simular el comportamiento de un robot navegando el sitio con un "user agent" de algún robot específico deshabilitando completamente el JavaScript. Esto nos puede dar una idea que tan amigable es nuestro sitio con los robots.

Recomiendo para esto dos addons de FireFox: "Web Developer" y "User Agent Switcher".





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 ...

sábado, 1 de junio de 2013

CakePHP: Warning: strtotime(): It is not safe to rely on the system's timezone settings.


Recién copié un proyecto que tenía de CakePHP a una máquina virtual y comencé a tener este mensaje de warning:


Warning: strtotime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/Los_Angeles' for 'PDT/-7.0/DST' instead in /path/to/cake/lib/Cake/Cache/CacheEngine.php on line 45 Warning: strtotime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/Los_Angeles' for 'PDT/-7.0/DST' instead in /path/to/cake/lib/Cake/Cache/CacheEngine.php on line 45 


La solución más rápida es ubicar el archivo de 'core.php': /path/to/cake/app/Config/core.php y descomentar esta línea:

/**
 * Uncomment this line and correct your server timezone to fix 
 * any date & time related errors.
 */
date_default_timezone_set('UTC');