ORACLE: Importar CLOBS

¿Cómo importar CLOBS en Oracle?

Si probamos de hacer un export desde el SQLDeveloper, veremos que solamente podemos exportar la estructura de la tabla sin poder volver a recrear el contenido del CLOB. Seguramente una vez llegados a este punto, decidamos realizar un export mediante las utilidades EXP/IMP. Si intentamos esto nos encontraremos con la sorpresa que para poder recrear la tabla, si no tenemos el mismo TABLESPACE creado en la BD destino no nos dejará crear la tabla dándonos el siguiente error:

ORA-00959: tablespace 'XXXXX' does not exist

Después de darle varias vueltas he encontrado una solución y es la siguiente:

1) Hacer export mediante comando EXP, por ejemplo:

EXP schema_origen/pass OWNER=schema_orgien FILE=file_destino.dmp DIRECT=Y ROWS=Y LOG=file.log

2) Crear la estructura de la tabla mediante DDL:

CREATE TABLE tabla (col1 tipo, ....)

Nota: La estructura debe ser la misma que en la de la tabla en el export

3) Realizar un import con el flag IGNORE=Y

IMP USERID=schema_destino/pass FROMUSER=schema_origen/pass TOUSER=schema_destino file=file_destino.dmp LOG=file_import.log TABLES=nombre_tabla IGNORE=Y

Fuente de la notícia con la explicación técnica detallada:

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:66890284723848

ORACLE: Compile all invalid objects

Para compilar los objetos inválidos del usuario de BD actual podemos ejecutar el siguiente script:

1
2
3
4
5
6
7
8
SELECT 'ALTER '
  ||decode(object_type,'PACKAGE BODY','PACKAGE',object_type)
  ||' '
  ||object_name
  ||decode(object_type,'PACKAGE BODY', ' COMPILE BODY;',' COMPILE;')
   FROM user_objects
  WHERE STATUS   = 'INVALID'
AND object_type IN ('PACKAGE','PACKAGE BODY','FUNCTION','PROCEDURE');

Esto nos generará una serie de alters para poder recompilar los objetos inválidos.

Cómo cargar el entorno de portal en una sesión SQL

Si necesitamos acceder a las vistas de portal para realizar una query externa usando SQL plus o SQL Developer, necesitarem iniciar el entorno de Portal. Lo podemos hacer con la siguiente sentencia:

BEGIN
portal.wwctx_api_private.set_context( p_user_name => 'portal') ;
END;

Como cargar el entorno de Aplicaciones desde una SQL window

Si necesitamos tener cargado el entrono de applications para ejecutar una query (para filtrar correctamente por las vistas, etc.) tenemos que ejecutar el siguiente trozo de código: 

DECLARE
var VARCHAR2(20);
BEGIN
fnd_client_info.setup_client_info(551,52845,3018,-1);
fnd_global.apps_initialize(3018,52845,551);
SELECT fnd_profile.VALUE('GEMMS_DEFAULT_ORGN')
INTO var
FROM dual;
DBMS_OUTPUT.enable(10000);
DBMS_OUTPUT.put_line('var=>'||var);
END;

Query para averiguar las responsabilidades desde donde se puede lanzar un Request Set

[sql]select rs.user_request_set_name,
rg.request_group_name
from fnd_request_groups rg,
FND_REQUEST_GROUP_UNITS rgu,
FND_REQUEST_SETS_tl rs
where rg.request_group_id = rgu.request_group_id
and rgu.request_unit_type = ‘S’
and rgu.request_unit_id = rs.request_set_id
–and rg.request_group_id = 816
and rs.user_request_set_name like ‘%NOMBRE_REQUEST_SET%’
and rs.language = ‘E’[/sql]

Encontrar el Request Set al que pertenece un concurrent

[sql]select rs.USER_REQUEST_SET_NAME USER_RS_NAME,
rs.request_set_name RS_NAME,
rs.REQUEST_SET_ID RS_ID,
rsp.concurrent_program_id CP_ID,
cp.USER_CONCURRENT_PROGRAM_NAME U_CP_NAME,
cp.CONCURRENT_PROGRAM_NAME CP_NAME
from fnd_request_sets_vl rs,
fnd_request_set_stages rss,
fnd_request_set_programs rsp,
fnd_concurrent_programs_vl cp
where rss.request_set_stage_id = rsp.request_set_stage_id and
rs.application_id = 20004 and
rs.request_set_id = rss.request_set_id and
cp.CONCURRENT_PROGRAM_ID = rsp.CONCURRENT_PROGRAM_ID and
cp.CONCURRENT_PROGRAM_NAME like upper(’%NOMBRE_CONCURRENT%’)[/sql]

Query para ver el estado de los tablespaces

[sql]SELECT Total.name “Tablespace Name”,
nvl(Free_space, 0) Free_space,
nvl(total_space-Free_space, 0) Used_space,
total_space
FROM
(select tablespace_name, sum(bytes/1024/1024) Free_Space
from sys.dba_free_space
group by tablespace_name
) Free,
(select b.name,  sum(bytes/1024/1024) TOTAL_SPACE
from sys.v_$datafile a, sys.v_$tablespace B
where a.ts# = b.ts#
group by b.name
) Total
WHERE Free.Tablespace_name(+) = Total.name[/sql]

Consultar el número de objetos inválidos (no compilados) en una instancia

[sql]select COUNT(*)
from dba_objects
where status=’INVALID’[/sql]

Obtener el información de las últimas ejecuciones de un concurrent

[sql]
select cr.program_short_name
,cr.request_id
,cr.actual_start_date
,cr.actual_completion_date
,cr.argument_text
,cr.COMPLETION_TEXT
,r.RESPONSIBILITY_NAME
from FND_CONC_REQ_SUMMARY_V cr
,fnd_responsibility_vl r
where cr.responsibility_id = r.responsibility_id
and upper(cr.program_short_name) like ‘%NOMBRE_ABREVIADO_CONCURRENT%’[/sql]

Obtener la última query realizada en un form

Ayuda -> Diagnósticos -> Examinar -> (password apps) Seleccionar bloque: SYSTEM i campo: LAST_QUERY