viernes, 4 de mayo de 2012

Colas AQ (II):- Single Consumer Queue

Para configurar cualquier tipo de Cola AQ, lo primero que hay que hacer es configurar los siguientes parámetros en el fichero de inicialización (Vamos! En el init.ora de toda la vida):

GLOBAL_NAMES=TRUE
JOB_QUEUE_INTERVAL =10
JOB_QUEUE_PROCESSES =5
AQ_TM_PROCESSES = 1

 
Estos parámetros son necesarios para que internamente Oracle sea capaz de gestionar los Jobs y los procesos q00x que se levantan a la hora de procesar las COLAS AQ.

El entorno que habría que montar, a nivel de BBDD,  para la creación de una COLA AQ sencilla (Single Consumer Queue, es decir, a un sólo destinatario) Estaría compuesto de los siguientes elementos:

El tipo de Dato.
La Tabla de Encolados.
La Cola.
Los procesos de Encolar y Desencolar.


1.- Creación del Tipo de Dato. 

Como ya se ha dicho, el Tipo de Dato puede ser tan complejo como sea necesario. En este caso se va a realizar un ejemplo para encolar-desencolar las altas que se tramitan entre usuarios. El Tipo de Datos se crea en el Esquema del usuario y un ejemplo de ello puede ser: 

CREATE TYPE altas AS OBJECT
(Codigo      NUMBER(8),
 Nombre      VARCHAR2(20),
 Apellidos   VARCHAR2(30), 
 DNI         NUMBER(8) );

 

 2.- Creación de la Tabla de Encolados (Queue Table)


Una vez creado el Tipo de Datos, ahora tenemos que crear la tabla donde se van a almacenar los datos de la cola. Esta tabla se llama QUEUE TABLE.

Para la creación de esta tabla, se utiliza el procedure CREATE_QUEUE_TABLE del paquete DBMS_AQADM. Dependiendo del tipo de cola a crear, se van a generar una serie de Tablas y Vistas que sólo serán accesibles para consulta y serán modificadas por las API de las colas.

* Nota: Es importante tener en cuenta que para la utilización de los procedures del paquete DBMS_AQADM y el DBMS_AQ, se tiene que tener instalado el paquete de Colas AQ en la BBDD. 

Para instalarlo, se ejecutaría el siguiente script:

SQL > @?/rdbms/admin/dbmsaqad.sql

En nuestro ejemplo, para crear las Queue Table, ejecutaríamos:

BEGIN

dbms_aqadm.create_queue_table (
queue_table=> 'altas_t',             -- nombre de la Queue table
queue_payload_type=> 'altas',        -- Tipo de datos
multiple_consumers=> FALSE,          -- Que es Single Consumers
message_grouping=> DBMS_AQADM.NONE   -- Grupo de Mensajes
);

COMMIT;                            
END;

/

Este procedimiento crearía la tabla ALTAS_T (Nombre que le hemos dado) y  que tendría la siguiente estructura:

SQL > DESC CYRIS.ALTAS_T

Nombre                     ?Nulo? Tipo
------------------------ -------- --------------------
Q_NAME                            VARCHAR2(30)
MSGID                             NOT NULL RAW(16)
CORRID                            VARCHAR2(128)
PRIORITY                          NUMBER
STATE                             NUMBER
DELAY                             DATE
EXPIRATION                        NUMBER
TIME_MANAGER_INFO                 DATE
LOCAL_ORDER_NO                    NUMBER
CHAIN_NO                          NUMBER
CSCN                              NUMBER
DSCN                              NUMBER
ENQ_TIME                          DATE
ENQ_UID                           NUMBER
ENQ_TID                           VARCHAR2(30)
DEQ_TIME                          DATE
DEQ_UID                           NUMBER
DEQ_TID                           VARCHAR2(30)
RETRY_COUNT                       NUMBER
EXCEPTION_QSCHEMA                 VARCHAR2(30)
EXCEPTION_QUEUE                   VARCHAR2(30)
STEP_NO                           NUMBER
RECIPIENT_KEY                     NUMBER
DEQUEUE_MSGID                     RAW(16)
SENDER_NAME                       VARCHAR2(30)
SENDER_ADDRESS                    VARCHAR2(1024)
SENDER_PROTOCOL                   NUMBER
USER_DATA                         CYRIS.ALTAS

Esta estructura es la misma para todas las queue tablas, el único cambio sería en el campo USER_DATA, en el que se incluiría el tipo de Dato que hayamos asociado a la Cola. (En este caso CYRIS.ALTAS, donde CYRIS es el esquema sobre el que se va a apoyar la Cola.) Y en este campo, es donde se incluirían los datos que quisiéramos propagar por la Cola. 

3.- Creación de la Cola

Con las estructuras ya creadas, ahora hace falta crear y activar una cola para que sea gestionada (encole y desencole) automáticamente mediante las jobs de Oracle, a través de Procedures y Funciones creadas por el usuario.

Para la creación de la cola (Como para la creación de las tablas ) también se realiza mediante el paquete DBMS_AQADM utilizando el Procedure CREATE_QUEUE. En nuestro ejemplo, ejecutaríamos:



BEGIN
  dbms_aqadm.create_queue(
        queue_name=> 'altas_c',                -- Queue
        queue_table=> 'altas_t',               -- Queue table
        queue_type=> DBMS_AQADM.NORMAL_QUEUE   -- Tipo de Cola
       );
COMMIT;
END;
/

Una vez creada la cola, lo único que nos queda es arrancarla, a través del procedure DBMS_AQADM.START_QUEUE; de este modo:

BEGIN
   dbms_aqadm.start_queue('altas_c', TRUE, TRUE); -- permitir encolar y desencolar
COMMIT;
END;
/ 

4.- Procesos de Encolar-Desencolar

Ahora con el entorno montado de este modo, ya sólo nos queda implementar los procedures de Encolar-Desencolar para que sean utilizados por el aplicativo según sus necesidades. Estos procesos utilizarán los procedures ENQUEUE y DEQUEUE del paquete DBMS_AQ.

* Nota: Es importante tener en cuenta, que los usuarios que vayan a utilizar las colas, tengan permisos Ejecución sobre el paqute DBMS_AQ, y sobre los roles AQ_ADMINISTRATOR_ROLE y  AQ_USER_ROLE: 
GRANT EXECUTE ON dbms_aq TO user;
GRANT aq_administrator_role TO user;
GRANT aq_user_role TO user; 
En las versiones 11g, para la asignación de permisos hay que ejecutar el procedure GRANT_QUEUE_PRIVILEGE:  
BEGIN  DBMS_AQADM.GRANT_QUEUE_PRIVILEGE (   'ALL',           -- privilege   
   'altas_c',       -- queue_name  
   'Role_colasaq',  -- grantee     
   FALSE);          -- grant_option
END


Un ejemplo de la implementación de los procesos de Encolado y Desencolado podría ser:


     ENCOLAR

CREATE OR REPLACE PROCEDURE ENCOLA (datos in altas, cola in VARCHAR2) as
    enq_opt dbms_aq.enqueue_options_t;
    msg_opt dbms_aq.message_properties_t;
    msg_id raw(16);
begin
DBMS_AQ.ENQUEUE (cola,        --Queue_name
                 enq_opt,     --Opciones de la Cola,
                 msg_opt,     --Propiedades del mensaje,
                 datos,       --Datos de entrada.
                 msg_id);     --msgid OUT RAW);;
end;
/
show errors

    DESENCOLAR


CREATE OR REPLACE PROCEDURE DESENCOLA (datos out altas, cola in VARCHAR2) as
    deq_opt dbms_aq.dequeue_options_t;
    msg_opt dbms_aq.message_properties_t;
    msg_id raw(16);
begin
    DBMS_AQ.DEQUEUE (cola,     --Queue
                     deq_opt,  --Opciones de Desencolado
                     msg_opt,  --Propiedades de Mensaje
                     datos,    --Datos de salida
                     msg_id ); --msgid OUT RAW);;
end;
/
show errors

jueves, 26 de mayo de 2011

Colas AQ (I):- Concepto

Recientemente me he tenido que enfrentar a ese ‘Gran Desconocido’ que es para muchos ‘Las Colas AQ’.  En Oracle es algo poco utilizado, por eso no se suele encontrar fácilmente información de ello (Y menos en nuestro idioma). Afortunadamente en ORA-600 existe un extenso artículo relacionado con las Colas AQ, dividido en varias secciones de donde he obtenido gran parte de la información que me he propuesto incluir entre mis publicaciones, por si en un futuro, lo vuelvo a necesitar.

El propósito de las Colas AQ, viene a ser el paso de información entre procesos. Este paso de información se puede hacer en la misma BBDD o entre distintas BBDD. La información que se transmite suele ser los registros del contenido de tipo tabla.  Este tipo de información puede ser tan complejo como se precise.

Las Colas AQ permiten que existan varios procesos creando información al mismo tiempo,  y consecuentemente, puede haber también varios procesos contabilizando las colas, para asegurarse que cada elemento contenido en las colas va a tratarse una vez – y sólo una – y que estas se van a procesar en orden FIFO (First In First Out).

Un ejemplo de uso de las colas AQ – el ejemplo al que me he tenido que enfrentar en estos días – puede ser la tramitación de las Altas de un usuario sobre una aplicación. Tenemos dos aplicaciones (A y B),  situados en entornos distintos (distintas BBDD, distintas máquinas, e incluso distintos S.O. ), Si tenemos un entorno origen de la cola AQ en la BBDD de la Aplicación A y un destino de la Cola AQ en la aplicación B, puede darse el caso de que en la Aplicación A se dé de alta un usuario que consecuentemente tiene que ser dado de alta en la Aplicación B. Pero la Aplicación B tiene su propio proceso para gestionar las Altas aunque los datos que utiliza y necesita para gestionar las altas son exactamente los mismos que para la Aplicación A, con lo que esos datos se almacenan en una Cola AQ, que se propaga – de un modo Transparente – entre Entornos. 

No siempre las Altas de la Aplicación A tienen que gestionarse en la Aplicación B, pero si todos los registros que se almacenan en la Cola AQ tienen que ser propagados (tratados y procesados) para que sean gestionados por la Aplicación B. Si la propagación no se efectúa correctamente, tenemos un problema que es al  que nos hemos tenido que enfrentar en estos días.  Más adelante intentaré exponer algunos ejemplos de algunos ‘posibles’ problemas y cómo solucionarlos. 



TIPOS DE COLAS Y COMPONENTES.

La Colas AQ pueden ser :

-          Single Consumer :- Tienen un solo destinatario
-          Multiple Consumer:- Tienen Varios destinatarios

En las colas Single Consumer se necesita, al menos de los siguientes componentes:

-          La Creación de un Tipo de Datos (Que es la información que se va a propagar)
-          La Creación Tabla de la Cola (Queue Table) y la configuración de la Cola
-    Los procesos que van a ser utilizados por las aplicaciones para transmitir y recibir la información entre las colas, es decir, para Encolar y Desencolar las colas.

Si las colas están en Remoto y/o son de tipo Multiple Consumer sería necesario, además, configurar los Suscriptores, que vienen a ser el destino (en remoto o los múltiples destinos) y la Propagación de los datos de las Colas AQ. 

Un Saludo,
Cyris.

martes, 17 de mayo de 2011

Linkado de Librerías NetBackup // RMAN.

El Backup (RMAN), es una de los apartados de Oracle que menos se tocan día a día. Por lo menos en el entorno en el que yo trabajo, que las tareas de Backup son asignadas a un grupo diferente. 

Para entender esta entrada, serían necesarios unas nociones básicas del Backup de Oracle. 

Oracle dispone de una aplicación interna para la gestión del  Backup de la Base de Datos: Recovery Manager, más vulgarmente conocido como RMAN. Esta aplicación nos sirve para guardar en Disco o en unidad externa (Por ejemplo en Cinta), la información contenida en la BBDD. 

En los entornos pequeños, el Backup de RMAN, se puede realizar a Disco (En un FS específico de la máquina destinado a una Copia de Seguridad) y tomando la información del ControlFile de la BBDD, pero en los Grandes Entornos, lo más común es de disponer de una BBDD de Catálogo donde se centraliza la información de RMAN de todo el entorno y el Backup, que se almacena en cinta, se ejecuta con la ayuda de un Media Server, para comunicar el RMAN con los Robots de cintas. 

El error habitual que suele aparecer a la hora de hacer backup - o restore - en nuevas instalaciones y que no tienen linkadas las librerías del Media Server, suele ser: 



Uno de los Media Servers más utilizados, es el Media Server de NetBackup. Pero para que realmente funcione correctamente, la librería "libobk.*" existente en la ruta $ORACLE_HOME/lib  tiene que ser un enlace simbólico de la librería correspondiente "libobk.*" existente en la Ruta de NetBackup ./netbackup/bin/


RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of allocate command on C1 channel at 10/12/2014 03:01:24
ORA-19554: error al asignar el dispositivo, tipo de dispositivo: SBT_TAPE, nombre de dispositivo:
ORA-27211: fallo al cargar la biblioteca de gestión de medios físicos

Additional information: 2

La extensión de la Librería libobk  varía dependiendo del Plataforma sobre la que se apoye el RMAN, y dependiendo de la Plataforma que sea, así de las posibilidades más comunes, tenemos las siguientes extensiones :

- Solaris, Tru64 and Digital UNIX (32-bit)  libobk.so.1
- Solaris (64-bit)                          libobk.so64.1
- HP-UX (32-bit)                            libobk.sl
- HP-UX (64-bit)                            libobk.sl64
- AIX                                       libobk.a
- AIX (64-bit)                              libobk.a64


Así, si por ejemplo nuestra Plataforma fuera AIX de 32 Bits, tendríamos que crear un link simbólico en la ruta $LD_LIBRARY_PATH ($ORACLE_HOME/lib)  se tendría que crear un link simbólico a la librería libobk.a tal que: 

ln –s /ruta/completa/netbackup/bin/libobk.a64 libobk.a

Y no se tendría que hacer nada más, puesto que en Oracle - en versiones 9i y posteriores - reconocería automáticamente la librería NetBackup. 


Para versiones inferiores, dependiendo de la Plataforma sobre la que esté instalado Oracle, habría que realizar un linkado de librerías para que fuera reconocido. 


Tenemos 'suerte' de que Oracle ya haya dejado de dar soporte para la 9i, y se tienda a entornos 10g-11g en RAC con ASM. 

Saludos, 
Cyris. 

Formatos del Widget Etiquetas

Uno de los retos más importantes a los que me he tenido que enfrentar en este nuevo proyecto, es la configuración del Menú Etiquetas (Categorías) de un modo en el que me resulte sencillo el acceder a ellas. El objetivo de este blog, es primeramente, tener un punto de referencia a donde acudir para consultar todas aquellas cosas que he 'hecho' en el pasado, que me he pegado en su momento, y del que necesito tener acceso de un modo sencillo y práctico. El Widget que el Blogger te permite por defecto configurar las Etiquetas, es bastante limitado en cuanto a posibilidades. Únicamente las puedes listar o situar en una bonita forma de nube. 

Al buscar en el HTML el código que genera el Blogger por defecto es una simple línea tal que :

<b:widget id='Label1' locked='false' title='Categorías' type='Label'/>

Con poca flexibilidad para ser manipulada. 

Navegando descubrí (Gracias al Escaparate de Rosa) Una forma de mostrar las Etiquetas en forma de menú desplegable, que consistía en modificar la simple línea HTML que genera Blogger 

<b:widget id='Label1' locked='false' title='Categorías' type='Label'/>

Por el siguiente código

<b:widget id='Label1' locked='false' title='Categorías' type='Label'>
<b:includable id='main'>
<b:if cond='data:title'>
<h2><data:title/></h2>
</b:if>
<div class='widget-content'>
<select onchange='location=this.options[this.selectedIndex].value;'>
<option>Categorías</option>
<b:loop values='data:labels' var='label'>
<option expr:value='data:label.url'><data:label.name/>
(<data:label.count/>)
</option>
</b:loop>
</select>
<b:include name='quickedit'/>
</div>
</b:includable>
</b:widget>

*Nota:- A tener en cuenta a la hora de utilizar este código modificar el valor 'Categorías' por el título que le hayamos dado a nuestro Gadget de Etiquetas. 

Y el resultado visual sería algo parecido a : 


Donde las etiquetas serían un pequeño Combo-Box desplegable y no se haría referencia al contenido de las mismas. 



Pero yo no estaba buscando un Menú Desplegable, sino poder Desplegar los Contenidos de las Etiquetas en forma de Árbol de Directorio, para que me resultara más sencillo de localizar la entrada que necesitara en cada momento.

Con las mismas, encontré la solución en el Blog de Vagabundia Donde aparece una explicación bastante detallada del las Etiquetas Desplegables (O en SideBar). La síntesis, consistiría en que partiendo del código anterior del menú desplegable

<b:widget id='Label1' locked='false' title='Categorías' type='Label'>
<b:includable id='main'>
<b:if cond='data:title'>
<h2><data:title/></h2>
</b:if>
<div class='widget-content'>
<select onchange='location=this.options[this.selectedIndex].value;'>
<option>Categorías</option>
<b:loop values='data:labels' var='label'>
<option expr:value='data:label.url'><data:label.name/>
(<data:label.count/>)
</option>
</b:loop>
</select>
<b:include name='quickedit'/>
</div>
</b:includable>
</b:widget>

Se sustituiría el código en rojo, por el  JavaScript que nos mostrará el listado desplegable de las Etiquetas. 

OJO!! :- Para que funcione correctamente, es muy importante asegurarse que el parámetro del script 

home_page = 'http://cyrisonlinux.blogspot.com/';

Haga referencia a la URL de nuestro blog.En la nota publicada por Vagabundia se explica además las diferentes formas de configurarlo y personalizarlo. 

Saludos,
Cyris. 

lunes, 16 de mayo de 2011

Data Pump

El Data Pump aparece a partir de las versiones de Oracle 10g. Para algunos 'viejinos' como yo, el Data Pump, hasta hace poco nos sonaba bastante a chino. Si sabes manejar un Export / Import, sabes manejar un Data Pump, muchas diferencias no debería de haber, pero para los que no lo hayan usado en su vida, viene bien que tengamos algunas consideraciones:

Los comandos que lo invocan serían :

expdp - Para el Export
impdp - Para el Import

Lo más importante que debe tenerse en cuenta a la hora de invocar el expdp / impdp es que requiere tener configurado - dentro de la BBDD - un directorio destino de los ficheros 'dmp's', los logs, los scripts 'sql' y todos los ficheros generados durante el export / import.

Para crear este directorio, en el SQL*Plus, se ejecutaría lo siguiente:

SQL> create directory expdp_dir as '/ruta/ficheros/datapump';

A los usuarios con los que vayamos a ejecutar el Export / Import, hay que darle permisos de read & write sobre las el directorio recién creado:

SQL> grant read,write on directory expdp_dir to system, SYS;

También hay que tener en cuenta que el usuario que vaya a ejecutar un export / import de la BBDD, como ocurría en versiones anteriores al Data Pump, tiene que tener los privilegios sobre los Roles:

EXP_FULL_DATABASE
IMP_FULL_DATABASE

Y con este entorno montado, ya podemos hacer nuestro Export / Import.

Saludos,
Cyris.


Algunos Ejemplos de Export / Import tipicos

EXPORT

Export Full:
$ expdp system/<password> DIRECTORY=expdp_dir DUMPFILE=expfull.dmp FULL=y LOGFILE=expfull.log

Export de Esquemas
 $ expdp hr/hr DIRECTORY=expdp_dir DUMPFILE=schema_exp.dmp SCHEMAS=hr,sh,oe

Export de Tablas:
$ expdp hr/hr DIRECTORY=expdp_dir DUMPFILE=tables_exp.dmp TABLES=emp,jobs,dep

Export de Estructura:
$ expdp hr/hr DIRECTORY=expdp_dir DUMPFILE=exp_strct.dmp FULL=y CONTENT=METADATA_ONLY COMPRESSION=METADATA_ONLY

IMPORT 

Import Full:
$ impdp system/<password> DIRECTORY=expdp_dir DUMPFILE=expfull.dmp FULL=y LOGFILE=impfull.log

Import de Esquemas:
 $ impdp hr/hr DIRECTORY=expdp_dir DUMPFILE=expfull.dmp SCHEMAS=hr,sh,oe

Import de Tablas:
$ impdp hr/hr DIRECTORY=expdp_dir DUMPFILE=expfull.dmp TABLES=emp,jobs,depart

Import de Estructura:
$ impdp hr/hr DIRECTORY=expdp_dir DUMPFILE=imp_strct.dmp FULL=y CONTENT=METADATA_ONLY 

domingo, 15 de mayo de 2011

Youtube-Música para el Blogger.

No es una primera entrada muy 'Espectacular', pero es lo primero que se me ha ocurrido publicar. Resulta que este ha sido un fin de semana bastante productivo, y me he enganchado a la 'Fiebre' de los Blogs. Siempre me ha gustado escribir y siempre me ha gustado la idea de escribir un Blog que fuera interesante para el resto del mundo, con lo que en este fin de semana he desplegado todas mis ideas para Blogs que pueden funcionar. (Y cuando digo Funcionar, me refiero a Blogs de los que me sienta orgullosa... Con 'entradas' de las que me sienta orgullosa... Además de un buen diseño y un impecable contenido.

Navegando por Internet buscando Plantillas para Blogger, me he encontrado con una plantilla en la que nada más iniciarse, sonaba una bonita canción. Pero no fui capaz de ver la procedencia. Resulta, que la plantilla tenía insertado un simple 'botón' de YouTube, que enlazaba con la canción "Just A Kiss" de Lady Antebellum, y me volví 'loca' para descubrir el 'Secreto' del origen de la canción. Tuve suerte, y puesto que se trataba de una Plantilla gratuíta y descargable, me descargué el código, y aquí está el resultado del orígen de la música:

<embed allowfullscreen="true" allowscriptaccess="always" height="30" src="http://www.youtube-nocookie.com/v/zJ1wlLvVOw8?fs=1&amp;hl=en_US&amp;rel=0&amp;autoplay=1" type="application/x-shockwave-flash" width="30"></embed>
 Lo importante de este código son tres Cosas:

1.- La URL de Referencia:

http://www.youtube-nocookie.com/v/zJ1wlLvVOw8fs=1&amp;hl=en_US&amp;rel=0&amp;autoplay=1 

Para cambiar la canción que se reproduce automáticamente, hay que mantener - al menos - los parámetros marcados en Rojo, y modificar el código en azul por el que nos aparezca en la Barra del explorador del Youtube:

http://www.youtube.com/watch?v=b4qFlA2r6KE

En mi caso he elegido el código b4qFlA2r6KE (de una canción de una Serie Koreana).

El código 'final' quedaría tal que
<embed allowfullscreen="true" allowscriptaccess="always" height="30" src="http://www.youtube-nocookie.com/v/b4qFlA2r6KE?fs=1&amp;hl=en_US&amp;rel=0&amp;autoplay=1" type="application/x-shockwave-flash" width="30"></embed>

2.- Otro punto importante es el tamaño 30x30 pixels, que están definidos en las etiquetas height y width.

3.- El Tercer punto importante es la Alineación, es decir, en qué punto de la página, gadget o entrada queremos alinear el botón de 'YouTube-Música' que acabamos de configurar. Y ello se puede hacer con las etiquetas de P ALIGN, CENTER o diversas versiones de DIV.

ESTE sería el resultado Final del 'Copy-Pegui' del código mostrado.

ESTE es el resultado Final adaptado a la canción que se desee.

Ahora ya sólo es Probar y Expermientar.

Saludos,
Cyris.




domingo, 16 de mayo de 2010

Import Data Pump

Palabra Clave               Descripción (Valor por Defecto)
------------------------------------------------------------------------------
ATTACH                Se conecta al trabajo existente, p. ej. ATTACH [=nombre del trabajo].
CONTENT               Especifica los datos que se van a cargar donde las palabras clave válidas son:
                      (ALL), DATA_ONLY y METADATA_ONLY.
DATA_OPTIONS          Indicadores de nivel de datos donde el único valor válido es:
                      Los errores SKIP_CONSTRAINT_ERRORS-constraints no son fatales.
DIRECTORY             Objeto de directorio que se va a utilizar para los archivos de volcado, log y sql.
DUMPFILE              Lista de los archivos de volcado de los que se va a importar (expdat.dmp),
                      p. ej. DUMPFILE=scott1.dmp, scott2.dmp, dmpdir:scott3.dmp.
ENCRYPTION_PASSWORD   Clave de contraseña para acceder a datos de columna cifrados.
                      Este parámetro no es válido para trabajos de importación de red.
ESTIMATE              Calcula las estimaciones de trabajo donde las palabras clave válidas son:
                      (BLOCKS) y STATISTICS.
EXCLUDE               Excluye tipos de objetos específicos, p. ej. EXCLUDE=TABLE:EMP.
FLASHBACK_SCN         SCN utilizado para volver a definir la instantánea de sesión.
FLASHBACK_TIME        Tiempo utilizado para obtener el SCN más cercano al tiempo especificado.
FULL                  Importa todo del origen (S).
HELP                  Muestra los mensajes de ayuda (N).
INCLUDE               Incluye tipos de objetos específicos, p. ej. INCLUDE=TABLE_DATA.
JOB_NAME              Nombre del trabajo de importación que se va a crear.
LOGFILE               Nombre del archivo log (import.log).
NETWORK_LINK          Nombre del enlace de base de datos remota al sistema de origen.
NOLOGFILE             No escribe en el archivo log.
PARALLEL              Cambia el número de workers activos para el trabajo actual.
PARFILE               Especifica el archivo de parámetros.
PARTITION_OPTIONS     Especifica cómo se deben transformar las particiones donde
                      las palabras clave válidas son: DEPARTITION, MERGE y (NONE)
QUERY                 Cláusula de predicado utilizada para importar un subjuego de una tabla.
REMAP_DATA            Especifica una función de conversión de datos,
                      p. ej. REMAP_DATA=EMP.EMPNO:REMAPPKG.EMPNO
REMAP_DATAFILE        Redefine las referencias del archivo de datos en todas las sentencias DDL.
REMAP_SCHEMA          Los objetos de un esquema se cargan en otro.
REMAP_TABLE           Los nombres de tabla se reasignan a otra tabla,
                      p. ej. REMAP_TABLE=EMP.EMPNO:REMAPPKG.EMPNO.
REMAP_TABLESPACE      El objeto de tablespace se vuelve a asignar a otro tablespace.
REUSE_DATAFILES       Se inicializará el tablespace si ya existe (N).
SCHEMAS               Lista de esquemas que se van a importar.
SKIP_UNUSABLE_INDEXES Se salta los índices que estén definidos en estado Índice no Utilizable.
SQLFILE               Escribe todo el SQL DDL en el archivo especificado.
STATUS                Estado del trabajo de frecuencia (seg) que se va a controlar donde
                      el valor por defecto (0) mostrará el nuevo estado cuando esté disponible.
STREAMS_CONFIGURATION Permite la carga de metadatos de flujo
TABLE_EXISTS_ACTION   Acción que se debe realizar si el objeto ya existe.
                      Palabras clave válidas: (SKIP), APPEND, REPLACE y TRUNCATE.
TABLES                Identifica una lista de tablas que se van a importar.
TABLESPACES           Identifica una lista de tablespaces que se va a importar.
TRANSFORM             Transformación de metadatos que se va a aplicar a objetos aplicables.
                      Palabras clave de transformación válidas: SEGMENT_ATTRIBUTES, STORAGE,
                      OID y PCTSPACE.
TRANSPORTABLE         Opciones para elegir el movimiento de datos transportable.
                      Palabras clave válidas: ALWAYS y (NEVER).
                      Sólo válido en operaciones de importación de modo NETWORK_LINK.
TRANSPORT_DATAFILES   Lista de archivos de datos que se va a importar mediante el modo transportable.
TRANSPORT_FULL_CHECK  Verifica segmentos de almacenamiento de todas las tablas (N).
TRANSPORT_TABLESPACES Lista de tablespaces desde los que se cargarán los metadatos.
                      Sólo válido en operaciones de importación de modo NETWORK_LINK.
VERSION               Versión de los objetos que se van a exportar donde las palabras clave válidas son:
                      (COMPATIBLE), LATEST o cualquier versión de base de datos válida.
                      Sólo válido para NETWORK_LINK y SQLFILE.


Los siguientes comandos son válidos mientras se está en modo interactivo.
Nota: Están permitidas las abreviaturas


Comando               Descripción (Valor por Defecto)
------------------------------------------------------------------------------
CONTINUE_CLIENT       Vuelve al modo de registro. El trabajo se reiniciará si está inactivo.
EXIT_CLIENT           Sale de la sesión del cliente y deja el trabajo ejecutándose.
HELP                  Resume los comandos interactivos.
KILL_JOB              Desconecta y suprime un trabajo.
PARALLEL              Cambia el número de workers activos para el trabajo actual.
                      PARALLEL=.
START_JOB             Inicia/reanuda el trabajo actual.
                      START_JOB=SKIP_CURRENT iniciará el trabajo después de saltar
                      cualquier acción en curso cuando se paró el trabajo.
STATUS                Estado del trabajo de frecuencia (seg) que se va a controlar donde
                      el valor por defecto (0) mostrará el nuevo estado cuando esté disponible.
                      STATUS[=intervalo]
STOP_JOB              Cierra en orden la ejecución del trabajo y sale del cliente.
                      STOP_JOB=IMMEDIATE realiza un cierre inmediato del
                      trabajo de pump de datos.