Extraindo comando DDL com o pacote DBMS_METADATA

Por Eduardo Legatti
Postado em Maio de 2014

Para aqueles que ainda não conhecem a package DBMS_METADATA, o mesma está disponível desde a versão Oracle 9i. Esta package é definida durante a criação do banco de dados através do script $ORACLE_HOME/rdbms/admin/dbmsmeta.sql. Mas, para que serve esta package? Na verdade, esta package disponibiliza uma interface pública com uma API utilizada para a extração de metadados de objetos de banco de dados. Todas as ferramentas GUI que fornecem suporte à extração de comandos DDL's (Linguagem de definição de dados) de objetos de banco de dados Oracle, acredito eu, fazem uso do pacote DBMS_METADATA. Dentre as ferramentas mais conhecidas, posso citar o TOAD, o Oracle PL/SQL Developer, o Oracle SQL Developer, DBArtisan, o próprio Oracle Enterprise Manager Database Control, entre outras. Neste artigo irei apenas demonstrar através de exemplos práticos, como extrair comandos DDL's de criação de alguns objetos, não só invocando algumas funções do pacote DBMS_METADATA diretamente do SQL*Plus, mas também utilizando o Oracle SQL Developer e os utilitários de exportação/importação (antigos exp/imp e os novos expdp/impdp). No caso de invocar a função GET_DDL do pacote DBMS_METADATA a partir do SQL*Plus, eu irei executar o procedimento DBMS_METADATA.SET_TRANSFORM_PARAM() para alterar alguns parâmetros default.

Portanto, eu vou alterar o parâmetro SQLTERMINATOR para TRUE de modo a adicionar um terminador SQL (; ou /) para cada sentença DDL gerada, já que o seu valor padrão é FALSE. Outra alteração que realizarei será a de alterar o parâmetro SEGMENT_ATTRIBUTES para FALSE, de forma a suprimir informações de armazenamento de segmentos (storage attributes) dos comandos DDL's gerados. Vale a pena salientar que o parâmetro STORAGE mesmo estando setado para TRUE, será ignorado quando o parâmetro SEGMENT_ATTRIBUTES for setado para FALSE. Sem mais, vamos então a alguns exemplos práticos:

-- Criando um schema e alguns objetos para teste
C:\>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Ter Jul 22 14:55:04 2008
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Conectado a: Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

-- Criando o usuário SCOTT
SYS> create user scott identified by tiger
2  default tablespace users
3  quota unlimited on users;
Usuário criado.

-- Criando o usuário ADAM
SYS> create user adam identified by wayne
2  default tablespace users
3  quota unlimited on users;
Usuário criado.

-- Concedendo privilégios de sistema e roles ao usuário SCOTT
SYS> grant connect,
2  resource,
3  create view,
4  create materialized view
5  to scott;

Concessão bem-sucedida.

-- Criando objetos de teste no usuário SCOTT
SYS>  connect scott/tiger
Conectado.

-- Criando a tabela T1
SCOTT> create table t1 (id number constraint pk_t1 primary key,
2   nome varchar2(100)
3   );

Tabela criada.

-- Criando um índice para a coluna NOME na tabela T1
SCOTT>  create index i_t1_nome on t1 (nome);

Índice criado.

-- Criando um gatilho de teste para a tabela T1
SCOTT> create or replace trigger trg_bi_t1
2   before insert on t1
3   for each row
4   begin
5   :new.id := dbms_random.random;
6   end;
7   /

Gatilho criado.

-- Criando uma view de teste baseada na tabela T1
SCOTT> create view view_t1_nome as select nome from t1;
View criada.

-- Criando a tabela T2 com uma chave estrangeira referenciando T1
SCOTT>  create table t2 (id number constraint fk_t2_t1 references t1);

Tabela criada.

-- criando uma view materializada
SCOTT> create materialized view mview_t1
2   build immediate
3   using index
4   refresh force
5   start with  to_date('18/07/2008','dd/mm/yyyy hh24:mi:ss')
6   next sysdate + 1/1440
7   as
8   select * from t1;

View materializada criada.

-- Concendendo privilégios de objeto para o usuário ADAM
SCOTT>  grant select,update on t1 to adam;

Concessão bem-sucedida.

-- Verificando os objetos criados de propriedade do usuário SCOTT
SCOTT> select object_name,object_type from user_objects order by 2;

OBJECT_NAME                    OBJECT_TYPE ------------------------------ ------------------- I_T1_NOME                      INDEX PK_T11                         INDEX PK_T1                          INDEX MVIEW_T1                       MATERIALIZED VIEW T2                             TABLE MVIEW_T1                       TABLE T1                             TABLE TRG_BI_T1                      TRIGGER VIEW_T1_NOME                   VIEW
9 linhas selecionadas.

-- Verificando a chave estrangeira criada
SCOTT> select table_name,constraint_name
2   from user_constraints
3   where constraint_type = 'R';

TABLE_NAME                     CONSTRAINT_NAME ------------------------------ ------------------------------ T2                             FK_T2_T1

Usando o Oracle SQL Developer

Após a criação dos objetos acima, utilizarei o Oracle SQL Developer e selecionarei a aba SQL para mostrar os comandos DDL's de alguns destes objetos. A figura abaixo mostra as configurações que utilizo de forma a formatar os comandos DDL's gerados.

 

Obtendo os comandos DDL's de criação da tabela T1 e seus dependentes


Obtendo o comando DDL de criação da tabela T2


Usando o pacote DBMS_METADATA no SQL*Plus

-- Verificando algumas das funções que utilizarei para geração dos comandos DDL's

SCOTT> desc dbms_metadata;

FUNCTION GET_DDL RETURNS CLOB
  Nome do Argumento              Tipo                    In/Out Default?
  ------------------------------ ----------------------- ------ --------
  OBJECT_TYPE                    VARCHAR2                IN
  NAME                           VARCHAR2                IN
  SCHEMA                         VARCHAR2                IN     DEFAULT
  VERSION                        VARCHAR2                IN     DEFAULT
  MODEL                          VARCHAR2                IN     DEFAULT
  TRANSFORM                      VARCHAR2                IN     DEFAULT
  

FUNCTION GET_DEPENDENT_DDL RETURNS CLOB
  Nome do Argumento              Tipo                    In/Out Default?
  ------------------------------ ----------------------- ------ --------
  OBJECT_TYPE                    VARCHAR2                IN
  BASE_OBJECT_NAME               VARCHAR2                IN
  BASE_OBJECT_SCHEMA             VARCHAR2                IN     DEFAULT
  VERSION                        VARCHAR2                IN     DEFAULT
  MODEL                          VARCHAR2                IN     DEFAULT
  TRANSFORM                      VARCHAR2                IN     DEFAULT
  OBJECT_COUNT                   NUMBER                  IN     DEFAULT
  

FUNCTION GET_GRANTED_DDL RETURNS CLOB
  Nome do Argumento              Tipo                    In/Out Default?
  ------------------------------ ----------------------- ------ --------
  OBJECT_TYPE                    VARCHAR2                IN
  GRANTEE                        VARCHAR2                IN     DEFAULT
  VERSION                        VARCHAR2                IN     DEFAULT
  MODEL                          VARCHAR2                IN     DEFAULT
  TRANSFORM                      VARCHAR2                IN     DEFAULT
  OBJECT_COUNT                   NUMBER                  IN     DEFAULT
  

-- Configurando o ambiente
  SCOTT>  set linesize 1000
  SCOTT> set pagesize 1000
  SCOTT> set long 9999999
  

-- Adicionando um terminador SQL (; ou /) para cada sentença DDL gerada
  SCOTT>exec  dbms_metadata.set_transform_param(
  dbms_metadata.session_transform,'SQLTERMINATOR',true);
  
Procedimento PL/SQL concluído com sucesso.

-- Suprimindo qualquer informação de atributos de armazenamento de segmentos
  SCOTT>exec  dbms_metadata.set_transform_param(
  dbms_metadata.session_transform,'SEGMENT_ATTRIBUTES',false);
  
Procedimento PL/SQL concluído com sucesso.

-- Gerando DDL para a tabela T1
  SCOTT> select dbms_metadata.get_ddl('TABLE','T1') "DDL  TABLE" from dual;
  
DDL TABLE -------------------------------------------------------------------------------- CREATE TABLE "SCOTT"."T1" (    "ID" NUMBER, "NOME" VARCHAR2(100), CONSTRAINT "PK_T1" PRIMARY KEY ("ID") ENABLE );

-- Gerando DDL para a view VIEW_T1_NOME
SCOTT> select dbms_metadata.get_ddl('VIEW','VIEW_T1_NOME') "DDL  VIEW" from dual;
  
DDL VIEW -------------------------------------------------------------------------------- CREATE OR REPLACE FORCE VIEW "SCOTT"."VIEW_T1_NOME" ("NOME") AS SELECT NOME FROM T1;

-- Gerando DDL apenas para a chave estrangeira definida na tabela T2
  SCOTT> select dbms_metadata.get_dependent_ddl('REF_CONSTRAINT','T2')  "DDL FK" from dual;
  
DDL FK -------------------------------------------------------------------------------- ALTER TABLE "SCOTT"."T2" ADD CONSTRAINT "FK_T2_T1" FOREIGN KEY ("ID") REFERENCES "SCOTT"."T1" ("ID") ENABLE;

-- Gerando DDL para restrições do tipo (PK/UK/CHK) existentes definidas em T1
SCOTT> select dbms_metadata.get_dependent_ddl('CONSTRAINT','T1')  "DDL PK/UK/CHK" from dual;
  
DDL PK/UK/CHK -------------------------------------------------------------------------------- ALTER TABLE "SCOTT"."T1" ADD CONSTRAINT "PK_T1" PRIMARY KEY ("ID") ENABLE;

-- Gerando o comando DDL para qualquer gatilho existente para a tabela T1
SCOTT> select dbms_metadata.get_dependent_ddl('TRIGGER','T1') "DDL  TRIGGER" from dual;
  
DDL TRIGGER -------------------------------------------------------------------------------- CREATE OR REPLACE TRIGGER "SCOTT"."TRG_BI_T1" BEFORE INSERT ON T1 FOR EACH ROW BEGIN :NEW.ID := DBMS_RANDOM.RANDOM; END; / ALTER TRIGGER "SCOTT"."TRG_BI_T1" ENABLE;

-- Gerando comando DDL para qualquer índice existente para a tabela T1
SCOTT> select dbms_metadata.get_dependent_ddl('INDEX','T1') "DDL ÍNDICE"  from dual;
  
DDL ÍNDICE -------------------------------------------------------------------------------- CREATE INDEX "SCOTT"."I_T1_NOME" ON "SCOTT"."T1" ("NOME"); CREATE UNIQUE INDEX "SCOTT"."PK_T1" ON "SCOTT"."T1" ("ID");

-- Gerando DDL para a view materializada
SCOTT> select dbms_metadata.get_ddl('MATERIALIZED_VIEW','MVIEW_T1')  "DDL MVIEW"
  2  from  dual;
  
DDL MVIEW -------------------------------------------------------------------------------- CREATE MATERIALIZED VIEW "SCOTT"."MVIEW_T1" ORGANIZATION HEAP PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" BUILD IMMEDIATE USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" REFRESH FORCE ON DEMAND START WITH sysdate+0 NEXT sysdate + 1/1440 WITH PRIMARY KEY USING DEFAULT LOCAL ROLLBACK SEGMENT DISABLE QUERY REWRITE AS SELECT "T1"."ID" "ID","T1"."NOME" "NOME" FROM "T1" "T1";

-- Exemplo para geração de comandos DDL's para todas as tabelas existentes
SCOTT> select dbms_metadata.get_ddl(object_type, object_name) ddl
  2   from user_objects
  3   where object_type = 'TABLE';
  
DDL -------------------------------------------------------------------------------- CREATE TABLE "SCOTT"."MVIEW_T1" (    "ID" NUMBER, "NOME" VARCHAR2(100), CONSTRAINT "PK_T11" PRIMARY KEY ("ID") ENABLE );
CREATE TABLE "SCOTT"."T1" (    "ID" NUMBER, "NOME" VARCHAR2(100), CONSTRAINT "PK_T1" PRIMARY KEY ("ID") ENABLE );
CREATE TABLE "SCOTT"."T2" (    "ID" NUMBER, CONSTRAINT "FK_T2_T1" FOREIGN KEY ("ID") REFERENCES "SCOTT"."T1" ("ID") ENABLE );


Apenas como demonstração, irei gerar abaixo os comandos DDL's necessários para concessão de privilégios, criação do usuário, role e tablespace:

  SCOTT> connect / as sysdba
  Conectado.
  
SYS> set linesize 1000 SYS> set pagesize 1000 SYS> set long 9999999
SYS>exec dbms_metadata.set_transform_param( dbms_metadata.session_transform,'SQLTERMINATOR',true);
Procedimento PL/SQL concluído com sucesso.
SYS>exec dbms_metadata.set_transform_param( dbms_metadata.session_transform,'SEGMENT_ATTRIBUTES',false);
Procedimento PL/SQL concluído com sucesso.

-- Gerando DDL para criação da tablespace USERS
SYS> select dbms_metadata.get_ddl('TABLESPACE','USERS') DDL from  dual;
  
DDL -------------------------------------------------------------------------------- CREATE TABLESPACE "USERS" DATAFILE 'C:\ORACLEXE\ORADATA\XE\USERS.DBF' SIZE 104857600 AUTOEXTEND ON NEXT 10485760 MAXSIZE 5120M LOGGING ONLINE PERMANENT BLOCKSIZE 8192 EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO; ALTER DATABASE DATAFILE 'C:\ORACLEXE\ORADATA\XE\USERS.DBF' RESIZE 3145728000;

-- Gerando DDL para criação do usuário SCOTT
SYS> select dbms_metadata.get_ddl('USER','SCOTT') DDL from dual;
  
DDL -------------------------------------------------------------------------------- CREATE USER "SCOTT" IDENTIFIED BY VALUES 'F894844C34402B67' DEFAULT TABLESPACE "USERS" TEMPORARY TABLESPACE "TEMP";

-- Gerando DDL de privilégios de sistema concedidos ao usuário SCOTT
SYS> select dbms_metadata.get_granted_ddl('SYSTEM_GRANT','SCOTT') DDL  from dual;
  
DDL -------------------------------------------------------------------------------- GRANT CREATE MATERIALIZED VIEW TO "SCOTT"; GRANT CREATE VIEW TO "SCOTT"; GRANT UNLIMITED TABLESPACE TO "SCOTT";

-- Gerando DDL de roles conedidas ao usuário SCOTT
SYS> select dbms_metadata.get_granted_ddl('ROLE_GRANT','SCOTT') DDL from  dual;
  
DDL -------------------------------------------------------------------------------- GRANT "CONNECT" TO "SCOTT"; GRANT "RESOURCE" TO "SCOTT";

-- Gerando DDL de privilégios de objetos que foram concedidos pelo usuário
-- SCOTT ao usuário ADAM
SYS> select dbms_metadata.get_granted_ddl('OBJECT_GRANT','ADAM') DDL  from dual;
  
DDL -------------------------------------------------------------------------------- GRANT SELECT ON "SCOTT"."T1" TO "ADAM"; GRANT UPDATE ON "SCOTT"."T1" TO "ADAM";

-- Gerando DDL de criação da role CONNECT
SYS> select dbms_metadata.get_ddl('ROLE','CONNECT') DDL from dual;
  
DDL -------------------------------------------------------------------------------- CREATE ROLE "CONNECT";

Usando os utilitários exp/imp

-- exportando as tabelas do schema SCOTT
C:\exp scott/tiger file=c:\scott grants=n  statistics=none rows=n
  
Export: Release 10.2.0.1.0 - Production on Sex Jul 18 12:58:03 2008
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Conectado a: Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production Exportação executada no conjunto de caracteres de WE8PC850  e no conjunto de caracteres de AL16UTF16 NCHAR o servidor usa WE8MSWIN1252 conjunto de caracteres (conversão de conjunto de caracteres possível) OBS: dados (linhas) da tabela não serão exportados OBS: concessões em tabelas/views/seqüências/funções não serão exportadas . exportando objetos e ações procedurais anteriores ao esquema . exportando os nomes da biblioteca de função externa para usuário SCOTT . exportando sinônimos do tipo PÚBLICO . exportando sinônimos do tipo privado . exportando definições de tipos de objeto para usuário SCOTT Sobre exportar objetos de SCOTT ... . exportando vínculos de banco de dados . exportando números de seqüência . exportando definições de cluster . sobre exportar tabelas de SCOTT ... via Caminho Convencional ... . . exportando tabela             MVIEW_T1 . . exportando tabela             T1 . . exportando tabela             T2 . exportando sinônimos . exportando views . exportando procedimentos armazenados . exportando operadores . exportando restrições referenciais de integridade . exportando gatilhos . exportando tipos de índices . exportando índices funcionais, extensíveis e de bitmap . exportando ações contabilizáveis . exportando views materializadas . exportando logs de snapshot . exportando filas de serviço . exportando filhos e grupos de renovação . exportando dimensões . exportando objetos e ações procedurais posteriores ao esquema . exportando estatística Exportação encerrada com sucesso, sem advertências.

-- Gerando os comandos DDL's para arquivo texto
C:\>imp scott/tiger  file=c:\scott indexfile=c:\ddl.sql
  
Import: Release 10.2.0.1.0 - Production on Sex Jul 18 12:59:25 2008
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Conectado a: Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
Arquivo de exportação criado por EXPORT:V10.02.01 via caminho convencional importação realizada nos conjuntos de caracteres WE8PC850 e NCHAR AL16UTF16 o servidor de importação usa o conjunto de caracteres WE8MSWIN1252 (conversão de charset possível) . . saltando a tabela "MVIEW_T1" . . saltando a tabela "T1" . . saltando a tabela "T2"
Importação encerrada com sucesso, sem advertências.

-- Verificando os comandos DDL's gerados
C:\>type C:\ddl.sql
  
REM  CREATE TABLE "SCOTT"."MVIEW_T1" ("ID" NUMBER, "NOME" VARCHAR2(100)) REM  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 REM  FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" REM  LOGGING NOCOMPRESS ;
CONNECT SCOTT;
CREATE UNIQUE INDEX "SCOTT"."PK_T11" ON "MVIEW_T1" ("ID" ) PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING;
REM  ALTER TABLE "SCOTT"."MVIEW_T1" ADD CONSTRAINT "PK_T11" PRIMARY KEY REM  ("ID") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL REM  65536 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE REM  "USERS" LOGGING ENABLE;
REM  CREATE TABLE "SCOTT"."T1" ("ID" NUMBER, "NOME" VARCHAR2(100)) PCTFREE REM  10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS REM  1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING REM  NOCOMPRESS;
CREATE UNIQUE INDEX "SCOTT"."PK_T1" ON "T1" ("ID" ) PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING;
CREATE INDEX "SCOTT"."I_T1_NOME" ON "T1" ("NOME" ) PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING;
REM  ALTER TABLE "SCOTT"."T1" ADD CONSTRAINT "PK_T1" PRIMARY KEY ("ID") REM  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 REM  FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" REM  LOGGING ENABLE;
REM  CREATE TABLE "SCOTT"."T2" ("ID" NUMBER) PCTFREE 10 PCTUSED 40 REM  INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST REM  GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING NOCOMPRESS;
REM  ALTER TABLE "SCOTT"."T2" ADD CONSTRAINT "FK_T2_T1" FOREIGN KEY ("ID") REM  REFERENCES "T1" ("ID") ENABLE NOVALIDATE ;
REM  ALTER TABLE "SCOTT"."T2" ENABLE CONSTRAINT "FK_T2_T1";

Usando os utilitários expdp/impdp (Datapump 10g)

-- Realizando a exportação apenas dos metadados
C:\>expdp scott/tiger directory=data_pump_dir  dumpfile=scott content=metadata_only
  
Export: Release 10.2.0.1.0 - Production on Sexta-Feira, 18 Julho, 2008 13:32:50
Copyright (c) 2003, 2005, Oracle.  All rights reserved.
Conectado a: Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production Iniciando "SCOTT"."SYS_EXPORT_SCHEMA_01": scott/******** directory=data_pump_dir dumpfile=scott content=metadata_only Processando o tipo de objeto SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Processando o tipo de objeto SCHEMA_EXPORT/TABLE/TABLE Processando o tipo de objeto SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT Processando o tipo de objeto SCHEMA_EXPORT/TABLE/INDEX/INDEX Processando o tipo de objeto SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT Processando o tipo de objeto SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Processando o tipo de objeto SCHEMA_EXPORT/TABLE/COMMENT Processando o tipo de objeto SCHEMA_EXPORT/VIEW/VIEW Processando o tipo de objeto SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT Processando o tipo de objeto SCHEMA_EXPORT/TABLE/TRIGGER Processando o tipo de objeto SCHEMA_EXPORT/MATERIALIZED_VIEW Processando o tipo de objeto SCHEMA_EXPORT/JOB Tabela-mestre "SCOTT"."SYS_EXPORT_SCHEMA_01" carregada/descarregada com sucesso ****************************************************************************** Conjunto de arquivos de dump para SCOTT.SYS_EXPORT_SCHEMA_01 é: C:\ORACLEXE\APP\ORACLE\ADMIN\XE\DPDUMP\SCOTT.DMP O job "SCOTT"."SYS_EXPORT_SCHEMA_01" foi concluído com sucesso em 13:33:06

-- Gerando os comandos DDL's para arquivo texto
C:\>impdp scott/tiger  directory=data_pump_dir dumpfile=scott sqlfile=ddl.sql
  
Import: Release 10.2.0.1.0 - Production on Sexta-Feira, 18 Julho, 2008 13:34:24
Copyright (c) 2003, 2005, Oracle.  All rights reserved.
Conectado a: Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production ORA-39154: Objetos de esquemas estrangeiros foram removidos da importação Tabela-mestre "SCOTT"."SYS_SQL_FILE_FULL_01" carregada/descarregada com sucesso Iniciando "SCOTT"."SYS_SQL_FILE_FULL_01": scott/******** directory=data_pump_dir dumpfile=scott sqlfile=ddl.sql Processando o tipo de objeto SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Processando o tipo de objeto SCHEMA_EXPORT/TABLE/TABLE Processando o tipo de objeto SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT Processando o tipo de objeto SCHEMA_EXPORT/TABLE/INDEX/INDEX Processando o tipo de objeto SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT Processando o tipo de objeto SCHEMA_EXPORT/TABLE/COMMENT Processando o tipo de objeto SCHEMA_EXPORT/VIEW/VIEW Processando o tipo de objeto SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT Processando o tipo de objeto SCHEMA_EXPORT/TABLE/TRIGGER Processando o tipo de objeto SCHEMA_EXPORT/MATERIALIZED_VIEW O job "SCOTT"."SYS_SQL_FILE_FULL_01" foi concluído com sucesso em 13:34:28

-- Verificando os comandos DDL's gerados
C:\>type ddl.sql
  -- CONNECT SCOTT   -- SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
BEGIN
sys.dbms_logrep_imp.instantiate_schema(schema_name=>SYS_CONTEXT
('USERENV','CURRENT_SCHEMA'),
export_db_name=>'XE', inst_scn=>'372450');
COMMIT;
END;
/

  -- SCHEMA_EXPORT/TABLE/TABLE
CREATE TABLE "SCOTT"."T1"
(    "ID" NUMBER,
"NOME" VARCHAR2(100)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS";

CREATE TABLE "SCOTT"."T2" (    "ID" NUMBER ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS";
CREATE TABLE "SCOTT"."MVIEW_T1" (    "ID" NUMBER, "NOME" VARCHAR2(100) ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS";

  -- SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
GRANT SELECT ON "SCOTT"."T1" TO "ADAM";
GRANT UPDATE ON "SCOTT"."T1" TO "ADAM";

  -- SCHEMA_EXPORT/TABLE/INDEX/INDEX
CREATE UNIQUE INDEX "SCOTT"."PK_T1" ON  "SCOTT"."T1" ("ID")
PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS" PARALLEL 1;

ALTER INDEX "SCOTT"."PK_T1" NOPARALLEL;
CREATE INDEX "SCOTT"."I_T1_NOME" ON "SCOTT"."T1" ("NOME") PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" PARALLEL 1;
ALTER INDEX "SCOTT"."I_T1_NOME" NOPARALLEL;
CREATE UNIQUE INDEX "SCOTT"."PK_T11" ON "SCOTT"."MVIEW_T1" ("ID") PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" PARALLEL 1;
ALTER INDEX "SCOTT"."PK_T11" NOPARALLEL;

  -- SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
ALTER TABLE "SCOTT"."T1" ADD CONSTRAINT "PK_T1"  PRIMARY KEY ("ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS" ENABLE;

ALTER TABLE "SCOTT"."MVIEW_T1" ADD CONSTRAINT "PK_T11" PRIMARY KEY ("ID") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" ENABLE;

  -- SCHEMA_EXPORT/TABLE/COMMENT
COMMENT ON MATERIALIZED VIEW "SCOTT"."MVIEW_T1"  IS
'snapshot table for snapshot SCOTT.MVIEW_T1';

  -- SCHEMA_EXPORT/VIEW/VIEW
CREATE  FORCE VIEW  "SCOTT"."VIEW_T1_NOME" ("NOME") AS
SELECT NOME FROM T1;

  -- SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
ALTER TABLE "SCOTT"."T2" ADD CONSTRAINT  "FK_T2_T1" FOREIGN KEY ("ID")
REFERENCES "SCOTT"."T1" ("ID") ENABLE;

-- SCHEMA_EXPORT/TABLE/TRIGGER
CREATE TRIGGER "SCOTT"."TRG_BI_T1"
BEFORE INSERT ON T1
FOR EACH ROW
BEGIN
 :NEW.ID := DBMS_RANDOM.RANDOM;
END;
/

ALTER TRIGGER "SCOTT"."TRG_BI_T1" ENABLE;
ALTER TRIGGER "SCOTT"."TRG_BI_T1" COMPILE PLSQL_OPTIMIZE_LEVEL = 2 PLSQL_CODE_TYPE=  INTERPRETED;

  -- SCHEMA_EXPORT/MATERIALIZED_VIEW
CREATE MATERIALIZED VIEW "SCOTT"."MVIEW_T1" USING
("MVIEW_T1", (8, 'XE', 1, 0, 0, "SCOTT", "T1",  '2008-07-18 13:32:43', 0, 14796,
'1950-01-01 12:00:00', '', 0, 372263, 0, NULL, (1, "ID",  "ID", 0, 321, 0)),
2097249, 8, ('1950-01-01 12:00:00', 4, 0, 0, 372263, 0, 0, 2, NULL, NULL))
REFRESH FORCE WITH PRIMARY KEY AS
SELECT "T1"."ID"  "ID","T1"."NOME" "NOME" FROM  "T1" "T1";

ALTER MATERIALIZED VIEW "SCOTT"."MVIEW_T1" COMPILE;



Eduardo Legatti é Analista de Sistemas e Administrador de banco de dados. É pós graduado em Gerência da Tecnologia da Informação, possui as certificações OCA 9i - OCP 9i/10g/11g – OCE SQL Expert, e vem trabalhando como DBA Oracle desde a versão 8.0.5. Se interessa particularmente em planejar estratégias de backup/recovery, performance tuning e projetos de bancos de dados (modelagem física e lógica) atuando como consultor. Como Oracle ACE, ele tem o hábito de disseminar seu conhecimento através de artigos, grupos de discussão (Oracle OTN Forums) e dedica-se a compartilhar informações de forma a motivar novos DBAs. Frequentemente posta artigos em seu Oracle blog http://eduardolegatti.blogspot.com.