Hoy vamos ha hacer una de esas entradas «para guardar», su merito es totalmente de un compañero de trabajo, que me ha contado esta mañana la existencia de esta tabla.
Oracle tiene una tabla llamada noexp$ donde puedes ubicar los objetos de los que no quieras que se hagan exports.
Esta tabla tiene 3 campos, el OWNER del objeto, el OWNER del objeto y el tipo de objeto que es.
SQL> desc NOEXP$ Name Null? Type --------------------- -------- ------------ OWNER NOT NULL VARCHAR2(30) NAME NOT NULL VARCHAR2(30) OBJ_TYPE NOT NULL NUMBER
Si queremos exportar la tabla PASS del esquema FOTOS, ejecutaremos el comando :
[oracle@test] [$expdp system/***** tables=FOTOS.PASS file=nada.dmp directory=backup Export: Release 11.2.0.2.0 - Production on Lun Abr 14 16:38:48 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production Legacy Mode Active due to the following parameters: Legacy Mode Parameter: "file=nada.dmp" Location: Command Line, Replaced with: "dumpfile=nada.dmp" Legacy Mode has set reuse_dumpfiles=true parameter. Starting "SYSTEM"."SYS_EXPORT_TABLE_01": system/******** tables=FOTOS.PASS dumpfile=nada.dmp directory=backup reuse_dumpfiles=true Estimate in progress using BLOCKS method... Processing object type TABLE_EXPORT/TABLE/TABLE_DATA Total estimation using BLOCKS method: 1024 KB Processing object type TABLE_EXPORT/TABLE/TABLE Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS . . exported "FOTOS"."PASS" 6.796 KB 27 rows Master table "SYSTEM"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded ****************************************************************************** Dump file set for SYSTEM.SYS_EXPORT_TABLE_01 is: /vgbackup/backup/oracle/nada.dmp Job "SYSTEM"."SYS_EXPORT_TABLE_01" successfully completed at 21:39:07
Ha funcionado correctamente, pero , y si no queremos que se pueda exportar esta tabla?
Lo primero que tendremos que hacer es ver el tipo de objeto que es esa tabla. Para ello ejecutaremos la consulta
SQL> select name,type# from obj$ where name = 'PASS'; NAME TYPE# ------------------------------ ---------- PASS 2
Una vez sabemos que es de tipo «2», la introduciremos en la tabla «noexp$» (como sys)
insert into NOEXP$ values ('FOTOS','PASS','2');
Que ocurre si intentas hacer un export de esa tabla??
[oracle@test [$expdp system/**** tables=FOTOS.PASS file=nada.dmp directory=backup Export: Release 11.2.0.2.0 - Production on Lun Abr 14 16:42:03 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production Legacy Mode Active due to the following parameters: Legacy Mode Parameter: "file=nada.dmp" Location: Command Line, Replaced with: "dumpfile=nada.dmp" Legacy Mode has set reuse_dumpfiles=true parameter. Starting "SYSTEM"."SYS_EXPORT_TABLE_01": system/******** tables=FOTOS.PASS dumpfile=nada.dmp directory=backup reuse_dumpfiles=true Estimate in progress using BLOCKS method... Processing object type TABLE_EXPORT/TABLE/TABLE_DATA Total estimation using BLOCKS method: 0 KB ORA-39166: Object FOTOS.PASS was not found. ORA-31655: no data or metadata objects selected for job Job "SYSTEM"."SYS_EXPORT_TABLE_01" completed with 2 error(s) at 16:42:07
Como vemos, el export (expdp) no encuentra la tabla, con lo que no puede llevar a cabo la exportación.
Hay que tener mucho cuidado ya que, lo que no está exportando es la tabla, no los contenidos, con lo que , en nuestro caso, un export full de la base de datos haría que la aplicación no funcionase ya que ,no existe la tabla de passwords ( ni la estructura ni los datos)
Más información, como siempre en metalink en la nota «OERR: EXP 55 %s.%s is marked not exportable (Doc ID 47991.1)»