Como podemos extrair a definição de um objeto no Oracle

Às vezes, quando você não tem acesso a ferramentas como PL/SQL Developer ou qualquer outra interface gráfica que pode ajudá-lo veja a definição de certos objetos podemos usar a função GET_DDL() da DBMS_METADATA pacote de metadados. Este artigo pode ser muito básico para alguns DBAs mas vai com certeza ajudar novatos no mundo DBA. Vou começar a falar sobre o DBMS_METADATA e o GET_DDL() ea a sintaxe básica. DBMS_METADATA - o pacote fornece uma maneira para que você possa recuperar metadados a partir do dicionário de banco de dados como XML ou criação DDL e submeter o XML para recriar o objeto. GET_DDL() - função nos permite extrair o DDL criação de um objeto. Sintaxe:

select DBMS_METADATA.GET_DDL('Object_Type','<object_name>') from DUAL;
Sintaxe completa com todos os argumentos e opções que podem ser usadas:
DBMS_METADATA.GET_DDL (
object_type     IN VARCHAR2,
name            IN VARCHAR2,
schema          IN VARCHAR2 DEFAULT NULL,
version         IN VARCHAR2 DEFAULT 'COMPATIBLE',
model           IN VARCHAR2 DEFAULT 'ORACLE',
transform       IN VARCHAR2 DEFAULT 'DDL')
RETURN CLOB;
Podemos extrair a definição dos seguintes objetos usando a função GET_DDL: TABLE,INDEXES,CONSTRAINT,CONTEXT,DB_LINK,ROLES,DIMENSION,DIRECTORY,FUNCTION,INDEXTYPE,JAVA_SOURCE,LIBRARY,MATERIALIZED_VIEW,OBJECT_GRANT,PACKAGE,PACKAGE_SPEC,PACKAGE_BODY,PROCEDURE,PROFILE,SEQUENCE,SYNONYM,TRIGGER,USER,VIEW,TYPE_BODY,TYPE,TABLESPACE,... there are few more. Exemplos de como podemos usar a função GET_DDL para extrair a definição do objeto: Nota: -ao trabalhar com sqlplus precisamos configurar a opção set pagesize e long com valores abaixo.
set pagesize 0
set long 1200
  • Extraia a definição de uma tabela
  • SQL> set pagesize 0
    SQL> set long 1200
    SQL> select DBMS_METADATA.GET_DDL('TABLE','AW$') from DUAL;
    
      CREATE TABLE "SYS"."AW$"
       (    "AWNAME" VARCHAR2(30),
            "OWNER#" NUMBER NOT NULL ENABLE,
            "AWSEQ#" NUMBER NOT NULL ENABLE,
            "VERSION" NUMBER DEFAULT null,
            "OIDS" NUMBER(10,0) DEFAULT null,
            "OBJS" NUMBER(10,0) DEFAULT null,
            "DICT" RAW(8) DEFAULT null,
            "RSYGEN" NUMBER DEFAULT null
       ) 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 FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
      TABLESPACE "SYSTEM"
  • Extraia a definição de um INDEX
  • SQL> set pagesize 0
    SQL> set long 1200
    SQL> select DBMS_METADATA.GET_DDL('INDEX','I_TS#') from DUAL;
    
      CREATE INDEX "SYS"."I_TS#" ON CLUSTER "SYS"."C_TS#"
      PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
      BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
      TABLESPACE "SYSTEM"
  • Extraia a definição de uma SEQUENCE
  • SQL> set pagesize 0
    SQL> set long 1200
    SQL> select DBMS_METADATA.GET_DDL('SEQUENCE','JOBSEQ') from DUAL;
    
       CREATE SEQUENCE  "SYS"."JOBSEQ"  MINVALUE 1 MAXVALUE 999999999 INCREMENT BY 1
     START WITH 154 CACHE 20 NOORDER  CYCLE
  • Extraia a definição de uma VIEW
  • SQL> select DBMS_METADATA.GET_DDL('VIEW','V_$PARAMETER') from DUAL;
    
      CREATE OR REPLACE FORCE VIEW "SYS"."V_$PARAMETER" ("NUM", "NAME", "TYPE", "VAL
    UE", "DISPLAY_VALUE", "ISDEFAULT", "ISSES_MODIFIABLE", "ISSYS_MODIFIABLE", "ISIN
    STANCE_MODIFIABLE", "ISMODIFIED", "ISADJUSTED", "ISDEPRECATED", "ISBASIC", "DESC
    RIPTION", "UPDATE_COMMENT", "HASH") AS
      select "NUM","NAME","TYPE","VALUE","DISPLAY_VALUE","ISDEFAULT","ISSES_MODIFIAB
    LE","ISSYS_MODIFIABLE","ISINSTANCE_MODIFIABLE","ISMODIFIED","ISADJUSTED","ISDEPR
    ECATED","ISBASIC","DESCRIPTION","UPDATE_COMMENT","HASH" from v$parameter