Search This Blog

Total Pageviews

Monday, 11 November 2024

DBMS_METADATA ......

Oracle DBMS_METADATA ....

https://anuj-singh.blogspot.com/2018/01/oracle-profile-metadata.html https://anuj-singh.blogspot.com/2012/04/oracle-job-metadata.html

from 
https://github.com/oraclebase/dba/blob/master/




--- Table and index metadata !!!
SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON

BEGIN
  DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true);
  DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true);
END;
/

define tab='XXXXXXX'
SELECT DBMS_METADATA.get_ddl ('TABLE', TABLE_name, owner)
FROM   all_tables
WHERE 1=1
--and owner      = UPPER('1')
AND    table_name = '&tab'
;
SELECT DBMS_METADATA.get_ddl ('INDEX', index_name, owner)
FROM   all_indexes
WHERE 1=1
--and owner      = UPPER('1')
AND    table_name = '&tab'
;
SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 80 LINESIZE 100 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON



define O='ANUJ'
define sequence_name='S'


SET LONG 50000 LONGCHUNKSIZE 50000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON

BEGIN
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true);
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true);
END;
/

SELECT DBMS_METADATA.get_ddl ('SEQUENCE', sequence_name, sequence_owner)
FROM   all_sequences
WHERE  sequence_owner = UPPER('&O')
AND    sequence_name  = DECODE(UPPER('&sequence_name'), 'ALL', sequence_name, UPPER('&sequence_name'))
;

SET PAGESIZE 14 LINESIZE 100 FEEDBACK ON VERIFY ON


===========

define O='ANUJ'
define SYNONYM='S'

SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON

BEGIN
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true);
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true);
END;
/

SELECT DBMS_METADATA.get_ddl ('SYNONYM', synonym_name, owner)
FROM   all_synonyms
WHERE  owner = UPPER('&O')
--AND    synonym_name  = DECODE(UPPER('&SYNONYM'), 'ALL', synonym_name, UPPER('&SYNONYM'))
;

SET PAGESIZE 14 FEEDBACK ON VERIFY ON

=================


define O='ANUJ'
define table_name='EMP'


SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON

BEGIN
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true);
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true)
;
END;
/

SELECT DBMS_METADATA.get_ddl ('CONSTRAINT', constraint_name, owner)
FROM   all_constraints
WHERE  owner      = UPPER('&O')
AND    table_name = DECODE(UPPER('&table_name'), 'ALL', table_name, UPPER('&table_name'))
AND    constraint_type IN ('U', 'P');

SET PAGESIZE 14 LINESIZE 100 FEEDBACK ON VERIFY ON


============================

define O='ANUJ'
define table_name='EMP'


SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON

BEGIN
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true);
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true);
   -- Uncomment the following lines if you need them.
   --DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SEGMENT_ATTRIBUTES', false);
   --DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'STORAGE', false);
END;
/

SELECT DBMS_METADATA.get_ddl ('TABLE', table_name, owner)
FROM   all_tables
WHERE  owner      = UPPER('&O')
AND    table_name = DECODE(UPPER('&table_name'), 'ALL', table_name, UPPER('&table_name'))
;

SET PAGESIZE 14 LINESIZE 100 FEEDBACK ON VERIFY ON

====================================

define O='ANUJ'
define OBJECT_GRANT='EMP'

SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON

BEGIN
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true);
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true);
END;
/

SELECT dbms_metadata.get_dependent_ddl('OBJECT_GRANT', UPPER('&OBJECT_GRANT'), UPPER('&O')) from dual
;

SET PAGESIZE 14 LINESIZE 100 FEEDBACK ON VERIFY ON

======================================


define O='ANUJ'
define table_name='EMP'


SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON

BEGIN
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true);
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true);

   -- Uncomment the following lines if you need them.
   --DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SEGMENT_ATTRIBUTES', false);
   --DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'STORAGE', false);

END;
/

SELECT DBMS_METADATA.get_ddl ('INDEX', index_name, owner)
FROM   all_indexes
WHERE  owner      = UPPER('&O')
AND    table_name = DECODE(UPPER('&table_name'), 'ALL', table_name, UPPER('&table_name'))
;

SET PAGESIZE 14 LINESIZE 100 FEEDBACK ON VERIFY ON


===


define O='ANUJ'
define table_name='EMP'


SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON

BEGIN
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true);
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true);
END;
/

SELECT DBMS_METADATA.get_ddl ('TRIGGER', trigger_name, owner)
FROM   all_triggers
WHERE  table_owner = UPPER('&O')
AND    table_name  = UPPER('&table_name');

SET PAGESIZE 14 LINESIZE 100 FEEDBACK ON VERIFY ON



==

define tablespace_name='SYSTEM'


SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON

BEGIN
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true);
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true);
END;
/

SELECT DBMS_METADATA.get_ddl ('TABLESPACE', tablespace_name)
FROM   dba_tablespaces
WHERE  tablespace_name = DECODE(UPPER('&tablespace_name'), 'ALL', tablespace_name, UPPER('&tablespace_name'));

SET PAGESIZE 14 LINESIZE 100 FEEDBACK ON VERIFY ON

====


define O='ANUJ'
define trigger_name='T'


SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON

BEGIN
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true);
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true);
END;
/

SELECT DBMS_METADATA.get_ddl ('TRIGGER', trigger_name, owner)
FROM   all_triggers
WHERE  owner        = UPPER('&O')
AND    trigger_name = DECODE(UPPER('&trigger_name'), 'ALL', trigger_name, UPPER('&trigger_name'));

SET PAGESIZE 14 LINESIZE 100 FEEDBACK ON VERIFY ON

===




define O='ANUJ'
define view_name='T'



SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON

BEGIN
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true);
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true);
END;
/

SELECT DBMS_METADATA.get_ddl ('VIEW', view_name, owner)
FROM   all_views
WHERE  owner      = UPPER('&O')
AND    view_name = DECODE(UPPER('&view_name'), 'ALL', view_name, UPPER('&view_name'));

SET PAGESIZE 14 LINESIZE 100 FEEDBACK ON VERIFY ON


========

define v_owner='ANUJ'
define v_table_name='TEST'



set feed off term off
select upper('&2') v_table_name from dual;
set feed on term on


var v_owner varchar2(30)
var v_table_name varchar2(30)

begin
	:v_owner := '&&v_owner';
	:v_table_name := '&&v_table_name';
end;
/


set pagesize 50000 linesize 200 trimspool on  long 2000000
col ddl format a150



begin
	dbms_metadata.set_transform_param(dbms_metadata.session_transform,'PRETTY',TRUE);
	dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SQLTERMINATOR',TRUE);
	dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SEGMENT_ATTRIBUTES',TRUE);
	dbms_metadata.set_transform_param(dbms_metadata.session_transform,'STORAGE', TRUE);
	dbms_metadata.set_transform_param(dbms_metadata.session_transform,'TABLESPACE',TRUE);
	dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SPECIFICATION',TRUE);
	dbms_metadata.set_transform_param(dbms_metadata.session_transform,'BODY',TRUE);
	dbms_metadata.set_transform_param(dbms_metadata.session_transform,'CONSTRAINTS',TRUE);
end;
/



set pagesize 500 linesize 200 trimspool on

col ddl format a125
prompt set echo on

prompt --########################################
prompt --## TABLE DDL
prompt --########################################

select replace(dbms_metadata.get_ddl('TABLE',:v_table_name,:v_owner),'"','') ddl from dual
/

prompt --########################################
prompt --## INDEX DDL
prompt --########################################

select replace(dbms_metadata.get_ddl('INDEX',i.index_name, i.owner),'"','') ddl
from dba_indexes i
where i.owner = :v_owner
and i.table_name = :v_table_name
/

prompt --########################################
prompt --## PRIMARY KEY
prompt --########################################

select replace(dbms_metadata.get_ddl('CONSTRAINT',c.constraint_name, c.owner),'"','') ddl
from dba_constraints c
where c.owner = :v_owner
and c.table_name = :v_table_name
and c.constraint_type = 'P'
/

prompt --########################################
prompt --## FOREIGN KEYS
prompt --########################################

select replace(dbms_metadata.get_ddl('REF_CONSTRAINT',c.constraint_name, c.owner),'"','') ddl
from dba_constraints c
where c.owner = :v_owner
and c.table_name = :v_table_name
and c.constraint_type = 'R'
/

prompt --########################################
prompt --## CHECK CONSTRAINTS
prompt --########################################

select replace(dbms_metadata.get_ddl('CONSTRAINT',c.constraint_name, c.owner),'"','') ddl
from dba_constraints c
where c.owner = :v_owner
and c.table_name = :v_table_name
and c.constraint_type = 'C'
and c.generated not like 'GENERATED%'
/


undef 1 2
============


Index metadata !!!

set long 5000 pagesize 0
select DBMS_METADATA.GET_DDL('INDEX', index_name,owner) 
from all_indexes 
where table_name in ('XXX')
and owner='XXXX'
;



====
---materialized view

from Web--

SET serveroutput on  feedback off
UNDEF v_sql
define ENTER_MVIEW_OWNER=ANUJ'
define ENTER_MVIEW_NAME='XXX_MVIEW'



DECLARE
   v_task_name       VARCHAR2 (100);
   v_mview_owner     VARCHAR2 (30)   := UPPER ('&&ENTER_MVIEW_OWNER');
   v_mview_name      VARCHAR2 (30)   := UPPER ('&&ENTER_MVIEW_NAME');
   v_mview_sql       VARCHAR2 (4000);
   v_mview_log_sql   VARCHAR2 (4000);
BEGIN
   -- get mview text from data dictionary
   SELECT DBMS_METADATA.get_ddl ('MATERIALIZED_VIEW', mview_name, owner)
     INTO v_mview_sql
     FROM dba_mviews
    WHERE owner = v_mview_owner 
AND mview_name = v_mview_name
;

   SELECT DBMS_METADATA.get_dependent_ddl ('MATERIALIZED_VIEW_LOG',
                                           referenced_name,
                                           referenced_owner
                                          )
     INTO v_mview_log_sql
     FROM dba_dependencies
    WHERE referenced_type = 'TABLE'
     AND referenced_name != v_mview_name
      AND owner = v_mview_owner
     AND NAME = v_mview_name
;

   DBMS_OUTPUT.put_line ('MVIEW SQL Is: ' || v_mview_sql);
   DBMS_OUTPUT.put_line ('MVIEW LOG SQL Is: ' || v_mview_log_sql);
EXCEPTION
   WHEN OTHERS
   THEN
      NULL;
END;
/


=====

SET serveroutput on  feedback off  lines 400  long 999999

DECLARE
 v_task_name VARCHAR2 (100);
 v_mview_sql VARCHAR2 (4000);
 v_mview_log_sql VARCHAR2 (4000);

cursor c1 is select mview_name from dba_mviews where owner='ANUJ'; 
BEGIN
FOR MV_REC IN C1
LOOP 
 SELECT DBMS_METADATA.get_ddl ('MATERIALIZED_VIEW', mview_name, owner)
 INTO v_mview_sql
 FROM dba_mviews
 WHERE owner = 'ANUJ' 
AND mview_name = MV_REC.mview_name;
 DBMS_OUTPUT.put_line ('MVIEW SQL Is: ' || v_mview_sql);
END loop;
EXCEPTION
 WHEN OTHERS
 THEN
 NULL;
END;
/
===========================

-- PROCEDURE text 
set linesize 400 pagesize 300
col name for a20
col TEXT for a50 wrap
SELECT NAME,TYPE
--,LINE
,TEXT   FROM dba_source
 WHERE TYPE = 'PROCEDURE'
 and NAME='XXX'
and OWNER='ANUJ'
;






define O='XXX'
define T='EMP1'

SET LONG 10000 LONGCHUNKSIZE 10000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON
BEGIN
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true);
   DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true);
END;
/


SELECT REPLACE(
         DBMS_METADATA.GET_DDL('FUNCTION', object_name, OWNER),
         '"' || USER || '".',
         ''
       ) AS text
FROM   dba_objects
WHERE  1=1
--and object_type ='FUNCTION'
and object_type = 'PACKAGE'
--and object_type = 'PROCEDURE'
and OWNER='&O'
/

SELECT DBMS_METADATA.GET_DDL('PROCEDURE',U.OBJECT_NAME, U.OWNER) FROM DBA_OBJECTS U 
WHERE U.OBJECT_TYPE = 'PROCEDURE' 
AND OWNER='&O'
;

SELECT DBMS_METADATA.GET_DDL('FUNCTION',U.OBJECT_NAME, U.OWNER) FROM DBA_OBJECTS U 
WHERE U.OBJECT_TYPE = 'FUNCTION'
AND OWNER='&O'
;

SELECT DBMS_METADATA.GET_DDL('PROCEDURE',U.OBJECT_NAME, U.OWNER) FROM DBA_OBJECTS U 
WHERE U.OBJECT_TYPE = 'PROCEDURE' 
AND OWNER='&O'
;



*********************************************************************************


define v_owner='ANUJ'
define v_table_name='TEST'



set feed off term off
select upper('&2') v_table_name from dual;
set feed on term on


var v_owner varchar2(30)
var v_table_name varchar2(30)

begin
	:v_owner := '&&v_owner';
	:v_table_name := '&&v_table_name';
end;
/


set long 50000 pagesize 300 linesize 300
select replace(dbms_metadata.get_ddl(o.OBJECT_TYPE,o.OBJECT_NAME , o.owner),'"','') ddl from dba_objects o where 1=1 --and o.owner = :v_owner and o.OBJECT_NAME = 'LOG' /

*********************************************************************************






set pagesize 0  long 90000

define N='LLLLL'   ---object name
define OWNER='ANUJ1'
select dbms_metadata.get_ddl('FUNCTION','&N','&OWNER') FROM DUAL;
select dbms_metadata.get_ddl('PROCEDURE','&N','&OWNER') FROM DUAL;
SELECT DBMS_METADATA.GET_DDL('PACKAGE_BODY','&N','&OWNER') FROM DUAL;

set pagesize 100  long 90000


********************************


uncomment based on your requirement

set long 200000 pages 0 lines 131 doc off
column txt format a121 word_wrapped

define O='ANUJ1'
define T='EMP'

select DBMS_METADATA.GET_DDL('INDEX',u.index_name,TABLE_OWNER) txt from DBA_INDEXES u where table_name='&T' and OWNER ='&O'
union all
--prompt DDL TABLES
--prompt ******************************
select dbms_metadata.get_ddl('TABLE',TABLE_NAME,OWNER) TABLES from DBA_TABLES where table_name='&T' and OWNER ='&O'
union all
--prompt DDL TB_CONSTRAINTS
--prompt ******************************
select dbms_metadata.get_dependent_ddl('CONSTRAINT',TABLE_NAME,OWNER) TBCONSTRAINTS    from dba_constraints where table_name='&T' and OWNER ='&O'
union all
--prompt DDL REF_CONSTRAINTS
--prompt ******************************
select dbms_metadata.get_dependent_ddl('REF_CONSTRAINT',TABLE_NAME,OWNER) REFCONSTRAINTS   from dba_constraints where table_name='&T' and OWNER ='&O'
union all
--prompt INDEXES
--prompt ******************************
SELECT DBMS_METADATA.GET_DEPENDENT_DDL('INDEX',UPPER(TABLE_NAME),UPPER(OWNER)) from DBA_TABLES where table_name='&T' and OWNER ='&O'
union all
--prompt DDL TRIGGERS
--prompt ******************************
select dbms_metadata.get_dependent_ddl('TRIGGER',TABLE_NAME,OWNER)    from dba_triggers where table_name='&T' and OWNER ='&O'
union all
--prompt DDL VIEWS
--prompt ******************************
--select dbms_metadata.get_ddl('VIEW',view_name,OWNER) from dba_views where VIEW_NAME='&T' and OWNER ='&O'
--union all
/*   SELECT DBMS_METADATA.get_ddl ('MATERIALIZED_VIEW', master, LOG_OWNER) txt
     FROM dba_mview_logs 
    WHERE LOG_OWNER = UPPER('&O')
and master= UPPER('&T')
union all 
*/
SELECT DBMS_METADATA.GET_DDL('MATERIALIZED_VIEW_LOG', LOG_TABLE, LOG_OWNER) 
     FROM dba_mview_logs 
    WHERE LOG_OWNER = UPPER('&O')
and master= UPPER('&T')
;

set long 1000 pages 100 lines 100






MV logs row count 


SET SERVEROUTPUT ON;

DECLARE
    CURSOR cur IS
        SELECT log_owner, log_table 
        FROM dba_snapshot_logs 
		where LOG_OWNER='ANUJ'
		order by 2
		;

    num_rows NUMBER;
    cnt      NUMBER := 0;
BEGIN
    FOR x IN cur LOOP
        BEGIN
            EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || x.log_owner || '.' || x.log_table
                INTO num_rows;

            IF num_rows > 0 THEN
                DBMS_OUTPUT.PUT_LINE(x.log_owner || '.' || x.log_table ||
                                     ' has ' || num_rows || ' rows');
                cnt := cnt + 1;
            END IF;

        EXCEPTION
            WHEN OTHERS THEN
                DBMS_OUTPUT.PUT_LINE('Cannot access ' || x.log_owner || '.' || x.log_table ||
                                     ' -> ' || SQLERRM);
        END;
    END LOOP;

    DBMS_OUTPUT.PUT_LINE(cnt || ' materialized view logs have entries');
END;
/






Oracle DBA

anuj blog Archive