jueves, 25 de octubre de 2012

Como salimos de: Import file: expdat.dmp >


Hoy quería compartir con ustedes el hecho de que cuando escribimos mal el path del archivo .dmp para realizar el import, como sabrán nos aparece en nuestro prompt lo siguiente:

IMP-00002: failed to open /prueba.dmp for read
Import file: expdat.dmp >

Imagino que todos probamos con “quit”, “exit”, Ctrl+C, etc…
Pues bien, la respuesta para salir de dicho prompt no es ninguna de esas alternativas sino que, salimos del mismo con Ctrl D.

Espero les haya servido.

Saludos!
Gondalf

jueves, 17 de mayo de 2012

String de conexión JDBC para Oracle RAC


Quizás varios de uds conocen la clásica conexión por JDBC a una single instance de Oracle, pues bien, si necesitamos conectarnos a un RAC con x cantidad de nodos dicho string de conexión sufre algunas modificaciones.

La clásica conexión a una single instance es

jdbc:oracle:thin:@:1521:

La conexión a un RAC presenta las siguientes diferencias:

jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)
 (ADDRESS=(PROTOCOL=TCP)(HOST=host1) (PORT=1521))
 (ADDRESS=(PROTOCOL=TCP)(HOST=host2) (PORT=1521))
 (CONNECT_DATA=(SERVICE_NAME=service)
   (FAILOVER_MODE =(TYPE = SELECT)(METHOD = BASIC))))

Espero les haya servido.

Saludos!
Gondalf.

jueves, 26 de abril de 2012

Empezando a trabajar con Fechas

Seguramente tuvimos varios problemas al tratar con fechas en Oracle. Se nos complico en sumar o restar horas, o cambiar los días.

Lo que vamos a tratar ahora es de dar unos ejemplos para que no vuelva a suceder. Antes de empezar, tengamos en cuenta que Oracle trabaja con la aritmética en función de un 1 día.

Teniendo entendido este concepto nos va a resultar más fácil la explicación.
Veamos algunos ejemplos:

        - Sumar días:
        'fecha' + 'días a sumar'
        Ejemplo: select sysdate + 1 from dual;
        - Sumar horas:
         'fecha' + 'horas a sumar / 24'
        Ejemplo: select sysdate + 3/24 from dual;
       - Sumar minutos:
         'fecha' + 'minutos a sumar / 1440'  
        Ejemplo: select sysdate + 25/1440 from dual;
      Sumar segundos:
         'fecha' + 'minutos a sumar / 86400' 
        Ejemplo: select sysdate + 1/86400 from dual;

Espero les haya servido.

Saludos!
Gondalf.


Pd: En el próximo post trabajaremos más a fondo con las fechas viendo algunas funciones que nos facilitaran mucho trabajo.

miércoles, 18 de enero de 2012

ORA-02287: sequence number not allowed here

Comencemos por la causa del mismo., curre cuando intentamos utilizar una secuencia donde no está permitido hacerlo.

Para ser un poco más explícitos, NO podemos utilizar secuencias en los siguientes casos:

- Dentro de una sentencias SELECT:

* En la claúsula WHERE

* En las claúsulas GROUP BY u ORDER BY
* En una claúsula DISTINCT
* Utilizando UNION o INTERSECT o MINUS
* En un Sub-Query

- En una VISTA o SNAPSHOT
- En una condición de DEFAULT o CHECK de una tabla

(Cabe aclarar que existen más excepciones pero que estas son las mas representativas)

Algunas posibles soluciones para nuestro problema serian:

- Si necesitamos utilizar nuestra secuencia en un WHERE o bien un ORDER BY o un Sub-Query, lo que hacemos es asignarla a una variable previa y dicha variable es la que podemos utilizar en los caso mencionados.

- Si necesitamos utilizar la secuencia para ser insertada tras la creación de las filas de una tabla lo que podemos hacer es utilizar un trigger "before insert" para que realice el trabajo.

- Si quisiéramos una secuencia en una vista podríamos crear la mismas sin la secuencia y luego al momento de llamarla utilizarla (ej: select a, b, "secuencia" from "nuestra vista").

- Si quisiéramos usar la secuencia en un query con una DISTINCT lo que podemos hacer es utilizar este en un Sub-Query y la secuencia en el query principal

Espero que les haya servido

Saludos!
Gondalf.

martes, 15 de noviembre de 2011

Parametros EXCLUDE e INCLUDE en DataPump

Los parametros EXCLUDE e INCLUDE están disponibles con DataPump (expdp, impdp), los mismos pueden ser utilizados para limitar lo que se importa o exporta, ya sean tablas, índices, triggers, funciones, vistas, procedures, paquetes o secuencias (creo que no me olvido de ningún otro).

La sintaxis de estos parámetros es la siguiente:
EXCLUDE=[object_type]:[name_clause],[object_type]:[name_clause]

INCLUDE=[object_type]:[name_clause],[object_type]:[name_clause]


Ejemplos:

expdp < paramentro varios > SCHEMAS=scott EXCLUDE=SEQUENCE,TABLE:”IN (’EMPLEADOS’,'DEPARTAMENTOS’)”;

En este ejemplo vemos que excluimos exportar todas las secuencias y tablas que se llamen EMPLEADOS o DEPARTAMENTOS del schema backup

impdp < paramentro varios > SCHEMAS=backup INCLUDE=TABLE:”=’OLD_TABLE’”

En este ejemplo vemos como hacemos un import incluyendo solo la tabla de nombre OLD_TABLE.

Espero les haya servido

Saludos!
Gondalf

jueves, 10 de noviembre de 2011

Diferencias entre los CharacterSet WE8ISO8859P1 y WE8MSWIN1252

Según oracle tenemos que el characterset definido en WE8ISO8859P1 es un “subgrupo” del characterset WE8MSWIN1252, es decir que este ultimo posee characters adicionales al primero.

Hilando un poco más fino, podemos decir que el characterset WE8MSWIN1252 posee 27 caracteres adicionales.

A continuación vemos la lista con las 27 diferencias:


Win-1251 Unicode Char Charact Descripción
0x80 0x20AC [€] [€] EURO SIGN
0x82 0x201A [‚] [‚] SINGLE LOW-9 QUOTATION MARK
0x83 0x0192 [ƒ] [ƒ] LATIN SMALL LETTER F WITH HOOK
0x84 0x201E [„] [„] DOUBLE LOW-9 QUOTATION MARK
0x85 0x2026 […] […] HORIZONTAL ELLIPSIS
0x86 0x2020 [†] [†] DAGGER
0x87 0x2021 [‡] [‡] DOUBLE DAGGER
0x88 0x02C6 [ˆ] [ˆ] MODIFIER LETTER CIRCUMFLEX ACCENT
0x89 0x2030 [‰] [‰] PER MILLE SIGN
0x8A 0x0160 [Š] [Š] LATIN CAPITAL LETTER S WITH CARON
0x8B 0x2039 [‹] [‹] SINGLE LEFT-POINTING ANGLE QUOTATION MARK
0x8C 0x0152 [Œ] [Œ] LATIN CAPITAL LIGATURE OE
0x8E 0x017D [Ž] [Ž] LATIN CAPITAL LETTER Z WITH CARON
0x91 0x2018 [‘] [‘] LEFT SINGLE QUOTATION MARK
0x92 0x2019 [’] [’] RIGHT SINGLE QUOTATION MARK
0x93 0x201C [“] [“] LEFT DOUBLE QUOTATION MARK
0x94 0x201D [”] [”] RIGHT DOUBLE QUOTATION MARK
0x95 0x2022 [•] [•] BULLET
0x96 0x2013 [–] [–] EN DASH
0x97 0x2014 [—] [—] EM DASH
0x98 0x02DC [˜] [˜] SMALL TILDE
0x99 0x2122 [™] [™] TRADE MARK SIGN
0x9A 0x0161 [š] [š] LATIN SMALL LETTER S WITH CARON
0x9B 0x203A [›] [›] SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
0x9C 0x0153 [œ] [œ] LATIN SMALL LIGATURE OE
0x9E 0x017E [ž] [ž] LATIN SMALL LETTER Z WITH CARON
0x9F 0x0178 [Ÿ] [Ÿ] LATIN CAPITAL LETTER Y WITH DIAERESIS


Esto quiere decir que si necesitamos utilizar por ejemplo el simbolo del Euro y nuestra base esta configurada en P1 deberiamos modificar el characterset de la base siguiente los siguientes pasos:

SQL> SHUTDOWN IMMEDIATE;

SQL> STARTUP MOUNT;

SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;

SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

SQL> Alter DATABASE OPEN;

SQL> ALTER DATABASE CHARACTER SET WE8MSWIN1252;

SQL> SHUTDOWN IMMEDIATE;

SQL> STARTUP;

Espero les haya servido.

Saludos!
Gondalf

martes, 8 de noviembre de 2011

Un poquito de PL/SQL, Packages

Un paquete es una agrupación lógica codigo PL/SQL.

Una de las ventajas que nos brinda como varios lenguajes de programación es la MODULARIDAD. Permitiendo agrupaciones lógicas y un diseño más sencillo, eficaz y un mejor rendimiento.

Otra ventaja es la de permitirnos la SOBRECARGA* de modo que podemos crear procedimientos o funciones con el mismo nombre y con diferentes parámetros en el mismo paquete

DESCRIPCION

Un paquete está compuesto de dos partes:

- Especificación
- Cuerpo

A su vez este puede contener métodos privados y públicos, todo procedimiento declarado en la "Especificación" tiene carácter público; mientras que todo procedimiento declarado y desarrollado en el cuerpo tiene carácter privado.

Las variable definida dentro de un subprograma son locales, mientras que las definidas fuera son globales.

SINTAXIS

Cabecera:

CREATE [o REPLACE ] PACKAGE "nombre_del_paquete"
IS | AS
< declaración de variables públicas >
< declaración de los miembros y funciones públicas >
END "nombre_del_paquete";


Cuerpo:

CREATE [ o REPLACE ] PACKAGE BODY "nombre_del_paquete"
IS | AS
< declaración de las variables privadas >
< cuerpo de los miembros y funciones >
END nombre_del_paquete;


(*)La sobrecarga de métodos es la técnica mediante la cual se utiliza el mismo nombre para diferentes subprogramas dentro de un paquete.
La diferencia entre los métodos es el número y orden de parámetros.


Espero les haya servido.

Saludos!
Gondalf.