miércoles, 21 de noviembre de 2007

Suse 10.3 : SQL logic error or missing database

Si intentar actualizar con el yast en opensuse nos sale el siguiente mensaje de error:
SQL logic error or missing database

debemos ejecutar como root:
1) rm /var/cache/zypp/zypp.db
2) zypper refresh


viernes, 16 de noviembre de 2007

Crear tabla temporal en oracle

Para crear una tabla temporal usaremos la siguiente sentencia

CREATE GLOBAL TEMPORARY TABLE nombre_tabla (
columna1 NUMBER,
columna2 NUMBER
) ON COMMIT DELETE ROWS;

si cuando se realice un commit queremos que no se pierdan los registros insertados.

o bien
) ON COMMIT PRESERVE ROWS;

En este caso cuando se haga un commit, los registros segirán en la tabla. Se borra la tabla automáticamente cuando termina la sesión

jueves, 8 de noviembre de 2007

Conexion mediante alias : tnsnames.ora

Tanto si usamos windows como linux podemos conectarnos a BD oracles usando alias de conexión. Para ello debemos hacer lo siguiente

1) Si es posible cogeremos el tnsnames.ora de la máquina a la que queremos acceder. En el archivo vendrá mas información del a que necesitamos, asi que cogemos únicamente la que se refiera a la instancia a la que queremos acceder.Por ejemplo el que tenía en mi servidor era algo asi:
MIALIAS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = unamaquina.es.com)(PORT = ELPUERTO))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = instancia)
(INSTANCE_NAME = instancia)
)
(HS = OK)
)


2) Añadimos lo anterior a nuestro tnsnames.ora o bien creamos uno con esa información
3) Definimos la variable de entonrno NS_ADMIN apuntando al directorio donde está el tnsnames.ora. normalmente sera $ORACLE_HOME\network\admin si por ejemplo tenemos el instant client en c:\oracle pues hacemos que apunte ahí
4) Un ejemplo de conexión podría ser este:
$c=oci_connect('usuario', 'contraseña','mialias');
oci_close($c);

Par mas info sobre el oci pulsa aqui.

miércoles, 7 de noviembre de 2007

IIS7 y php5 en windows vista : Oci8

La version de windows Vista profesional tiene la posibilidad de activar el servidor internet information services 7. Nuestra idea es Configurarlo para que podamos usar php y acceder a oracle mediante oci.

Instalación IIS 7 :

1) Panel de control / Programas / Activar o desactivar Características de Windows
2) buscamos el IIS y selecionamos las caracteristicas que necesitemos. Al menos debemos marcar en Caracteristicas de desarrollo de aplicaciones las opciones de "Extensiones Isapi" y "filtros ISAPI"
3)Si mas adelante necesitamos alguna otra característica podremos añadirla del mismo modo sin problema ninguno.

Instalacion de php:

1) bajamos php de http://www.php.net/downloads.php . Yo he usado la que viene con el instalador.
2)Ejecutamos la instalación y durante la misma se nos preguntarán si queremos instalar php para algun servidor web, seleccionamos isapi para IIS.
3) En la selección de módulos escogemos al menos la extensión oracle8. No es conveniente instalar todos los módulos ya que muchos tienen dependencias externas, y dará error al ejecutar php. En el futuro podemos instalar nuevos módulos a través de Panel de control/"Programas y caractreristicas"/php 5.X.Y/botón derecho / cambiar.

Probando PHP:
1) inicio/ejecutar/php y le damos a aceptar
2) Nos saldrá un error: "no se encontró OCI.dll" y un "unable to load dynamic library php_oci8.dll". Esto es debido a que faltan algunos archivos porque no tenía instalado oracle en este ordenador.

Instalación del INSTANT CLIENT de oracle
1) descargamos el instant client de oracle: http://www.oracle.com/technology/tech/oci/instantclient/index.html . Yo escogi la versión Basic
2) La descomprimimos por ejemplo en c:\oracle
3) Añadimos "c:\oracle" a la variable de entorno "PATH". Para ello Inicio/equipo/boton derecho/propiedades/Configuración Avanzada del sistema/opciones Avanzadas/Variables de Entorno. Debemos editar la variable "PATH" que se encuentra en las "Variables del Sistema", no en las "Variables de usuario". Si metemos la ruta en las de usuario se cargara oci en una ventana de consola pero no en IIS, ya que es un servicio.
4) ejecutamos de nuevo php y no debería salir de nuevo el error. Si sale habria que probar a revisar que se haya escrito correctamente el path y a reiniciar el ordenador.

Si tenemos oracle instalado en el ordenador, no hace falta bajar el instant client, únicamente añadiriamos la ruta de las librerias de Oracle al path.Tal y como hicimos en el paso 3, las librerias suelen estar el subdirectorio lib de oracle que debería tener la oci.dll.

Configurando IIS para ejecutar php:

1) Ejecutamos el IIS Manager (inetmgr.exe)
2) Nos vamos a "Filtros ISAPI", le damos a agregar. En nombre de filtro ponemos lo que queramos y en ejecutable "C:\Program Files\PHP\php5isapi.dll" (o la ruta donde lo instalamos)
3)Volvemos atrás y pulsamos "Restricciones de ISAPI y CGI", agregar. En ruta de acceso ponemos "C:\Program Files\PHP\php5isapi.dll", en descripcion por ejemplo "php5isapi". Y marcamos "Permitir ejecución de la ruta de extensión".
4)Volvemos al menu. Y pulsamos "Asignación de controlador" y luego "Modificar asignación de script". En "ruta de acceso de solicitudes escribimos *.php, en ejecutable C:\Program Files\PHP\php5isapi.dll , en nombre por ejemplo PHP. En el botón de "restricción de solicitudes debemos marcar "invocar controlador solo si..." y "Archivo", en la pestaña verbos, "todos los verbos".

Probamos una página que tenga php y todo debería funcionar bien. En el caso de que podamos ejecutar php en linea de comando pero falle en ISS alguno de lo módulos deberíamos darle permiso al iss para acceder a las carpetas de PHP (C:\Program Files\PHP\) y de ORACLE (c:\Oracle). Para ello.
1) vamos al explorador de windos
2) buscamos la carpeta C:\Oracle
3) botón derecho/propiedades/seguridad/Editar
4) Pulsamos el botón Agregar, y en nombre de objeto ponemos IUSR.Como permisos los fijamos en "lectura y ejecución".

ISUR es el usuario con el que se conecta ISS para peticiones anónimas.Para saber como se llama volvemos al administrador de IIS/Autenticacion. En "Autenticación Anónima", si le damos a modificar aparece el usuario con el que se conecta.

Es probable que slaga un mensaje de error del tipo "IIS Worker Process stopped working". SI miramos en "administracion de equipos/Eventos" . Veremos un aviso cuyo origen es WAS y el id del evento es el 5186. He indica que:
"Un proceso de trabajo con el Id. de proceso de '688' que sirve al grupo de aplicaciones 'DefaultAppPool' se cerró por inactividad". Para evitar que salga nos vamos de nuevo al ISS y en "grupo de Aplicaciones" modificamos "DefaultAppPool" .

martes, 6 de noviembre de 2007

OpenSuse 10.3 , Oracle, php y Apache: Oci8

Si instalamos los paquetes PHP5 y apache a través de yast no tendremos el modulo OCI8 para poder acceder a oracle. Hay dos opciones o compilar php5 con soporte OCI8 o bien obtener únicamente el modulo OCI8 que nos hace falta.

Paquetes preinstalados:
- autoconf
- php5
- apache2-mod_php5
- php5-pdo
- php5-devel
- php5-pear

Tener instalado Oracle y fijado el ORACLE_HOME, por ejemplo:
export ORACLE_HOME=/home/usuario/oracle/product/10.2.0/db_1

Ahora realizamos los siguientes pasos:
1) Descargamos el paquete oci8 -> http://pecl.php.net/get/oci8
2) Como root ejecutamos: pear5 install oci8-1.3.0.tgz (o la version que hayamos descargado)
3) durante el paso 2 nos preguntará por la ruta de ORACLE_HOME, como lo tenemos fijado antes, simplemente le damos a enter.
4) Para que se cargue la extensión en apache y php ejecutamos: echo "extension=oci8.so" > /etc/php5/conf.d/oci8.ini
5) Apuntamos la variable a las librerias de oracle. Ejecutamos: export LD_LIBRARY_PATH=$ORACLE_HOME/lib
6)Reiniciamos apache: rcapache2 restart

Para Comprobar que todo ha ido bien, ejecutamos:
php -r "phpinfo();" | grep oci8
y nos deberia mostrar algo asi:
oci8
oci8.connection_class => no value => no value
oci8.default_prefetch => 10 => 10
oci8.events => 0 => 0
oci8.max_persistent => -1 => -1
oci8.old_oci_close_semantics => 0 => 0
oci8.persistent_timeout => -1 => -1
oci8.ping_interval => 60 => 60
oci8.privileged_connect => Off => Off
oci8.statement_cache_size => 20 => 20

lunes, 5 de noviembre de 2007

OpenSuse 10.3, Vista y Samba: contraseña incorrecta

Si tenemos nuestro servidor samba corriendo en Suse e intentamos acceder desde windows Vista a alguna de las carpetas compartidas, se nos solicitará un usuario y contraseña. Da igual lo que introduzcamos, nunca podremos acceder. El problema tendremos que corregirlo en Vista- Para ellos realizamos los siguiente pasos:

1) Inicio / ejecutar / secpol.msc / Aceptar
2) Configuración de Seguridad / Directivas locales / Opciones de Seguridad
3) Buscamos la directiva local "Seguridad de Red: nivel de autenticacion de LAN manager
4) El valor por defecto es "Enviar sólo respuestas NTLMv2", debemos cambiarlo a "Enviar LM y NTML: usar la seguridad de sesión NTLMv2 si se negocia"