Para melhor visualização, recomendo resolução de no mínimo 1280 x 800 e navegador Mozilla Firefox


quarta-feira, 23 de julho de 2008

Extraindo comando DDL com o pacote DBMS_METADATA ...

Por Eduardo Legatti

Olá,

Para àqueles 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" 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;



2 comentários:

Roberto Silva disse...

Muito obrigado, excelente post!

Eduardo Legatti disse...

Olá Roberto,

Obrigado pela visita e até mais ...

Legatti

Postagens populares