extract_ddl_with_dbms_metadata.get_ddl
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revision | |||
| extract_ddl_with_dbms_metadata.get_ddl [2018/12/08 12:49] – created 0.0.0.0 | extract_ddl_with_dbms_metadata.get_ddl [2021/07/30 17:48] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Extract_ddl_with_" | + | ===== Different ways of extracting ddl ===== |
| - | =====Different ways of extracting ddl===== | + | ==== Get the semi-colon appended |
| - | set pagesize 0 | + | < |
| - | set linesize 30000 | + | exec dbms_metadata.set_transform_param( DBMS_METADATA.SESSION_TRANSFORM, |
| - | set long 500000 | + | </ |
| - | set longchunksize 500000 | + | ==== Make the output pretty ==== |
| - | set trimspool on | + | < |
| - | set feed off | + | exec dbms_metadata.set_transform_param( DBMS_METADATA.SESSION_TRANSFORM, ' |
| - | spool deedeeyell.sql | + | </ |
| - | | + | ==== Don't recreate storage clause on tables/ |
| - | from dba_objects where owner = UPPER('&& | + | < |
| - | and object_type = 'INDEX' | + | BEGIN |
| - | and ... | + | dbms_metadata.set_transform_param(dbms_metadata.session_transform, |
| - | / | + | dbms_metadata.set_transform_param(dbms_metadata.session_transform, |
| - | spool off | + | dbms_metadata.set_transform_param(dbms_metadata.session_transform, |
| + | END; | ||
| + | / | ||
| - | ===== Get the semi-colon to be appended ===== | + | </code> |
| - | exec dbms_metadata.set_transform_param( DBMS_METADATA.SESSION_TRANSFORM, | + | ==== Return DDL as VARCHAR2 instead of CLOB ==== |
| - | ===== Make the pretty output ===== | + | * Use get_ddl_text insead of get_ddl |
| - | exec dbms_metadata.set_transform_param( DBMS_METADATA.SESSION_TRANSFORM, | + | ==== Get lots of DDL at once ==== |
| - | ===== Don't recreate storage clause on tables/indexes ===== | + | < |
| - | exec dbms_metadata.set_transform_param( DBMS_METADATA.SESSION_TRANSFORM, | + | set newpa none pages 0 lines 30000 long 500000 longc 500000 trims on feed off |
| - | ===== Return DDL as VARCHAR2 instead of CLOB ===== | + | select |
| - | *Use get_ddl_text insead of get_ddl | + | from |
| - | ===== Get lots of DDL at once ===== | + | where 1=1 |
| - | | + | and owner like upper('%&& |
| - | | + | and object_type |
| - | | + | / |
| - | | + | undef schema type |
| - | | + | </ |
| - | + | ||
| - | | + | < |
| - | ”’ || name || ”’, ”’ || UPPER(‘&& | + | select |
| - | | + | ”' |
| - | | + | from |
| - | | + | where 1=1 |
| - | | + | and owner = UPPER('&& |
| + | and type = 'TABLE'; — change to each of the valid types | ||
| + | </ | ||
| + | |||
| + | ==== Get User DDL with related grants (used in clone user as ... or copy user as ...) ==== | ||
| + | < | ||
| + | set long 5000000 | ||
| + | set pages 0 | ||
| + | set lines 2000 | ||
| + | set feedb off | ||
| + | set verif off | ||
| + | col deedeeyell for a1000 word_wrap | ||
| + | |||
| + | exec dbms_metadata.set_transform_param( DBMS_METADATA.SESSION_TRANSFORM, | ||
| + | |||
| + | exec dbms_metadata.set_transform_param( DBMS_METADATA.SESSION_TRANSFORM, | ||
| - | ===== Get User DDL with related grants (used in clone user as ... or copy user as ...)===== | + | select dbms_metadata.get_ddl(' |
| - | < | + | from dba_users |
| + | where 1=1 | ||
| + | and username | ||
| + | union all | ||
| + | select dbms_metadata.get_granted_ddl(' | ||
| + | from dba_users | ||
| + | where 1=1 | ||
| + | and username | ||
| + | union all | ||
| + | select dbms_metadata.get_granted_ddl(' | ||
| + | from dba_users | ||
| + | where 1=1 | ||
| + | and username | ||
| + | union all | ||
| + | select dbms_metadata.get_granted_ddl(' | ||
| + | from dba_users | ||
| + | where 1=1 | ||
| + | and username | ||
| + | </ | ||
| - | ===== Get Table DDL===== | + | ==== Get Table DDL ==== |
| - | < | + | < |
| + | set long 3000000 | ||
| + | set lines 1000 | ||
| + | set pages 0 | ||
| + | set trimspool on | ||
| + | set feedb off | ||
| + | col eskewell for a1000 | ||
| + | spool ddl_table.sql | ||
| + | select dbms_metadata.get_ddl (' | ||
| + | / | ||
| + | spool off | ||
| + | </ | ||
| - | ===== Get View DDL===== | + | ==== Get View DDL ==== |
| + | < | ||
| set long 3000000 | set long 3000000 | ||
| set lines 1000 | set lines 1000 | ||
| Line 52: | Line 99: | ||
| col eskewell for a1000 | col eskewell for a1000 | ||
| spool ddl_view.sql | spool ddl_view.sql | ||
| - | | + | |
| spool off | spool off | ||
| + | </ | ||
| - | =====Get Trigger DDL===== | + | ==== Get Trigger DDL ==== |
| + | < | ||
| set long 3000000 | set long 3000000 | ||
| set lines 1000 | set lines 1000 | ||
| Line 63: | Line 112: | ||
| col eskewell for a1000 | col eskewell for a1000 | ||
| spool ddl_trigger.sql | spool ddl_trigger.sql | ||
| - | | + | |
| | | ||
| spool off | spool off | ||
| + | </ | ||
| - | =====Extract DDL for a table without its integrity contraints===== | + | ==== Extract DDL for a table without its integrity contraints ==== |
| If you are having trouble recreating table data because of integrity contraints, trying importing the data first, then the constraints: | If you are having trouble recreating table data because of integrity contraints, trying importing the data first, then the constraints: | ||
| + | < | ||
| | | ||
| - | then extract | + | </ |
| + | then extract | ||
| Finally, extract the constraint ddl and run it separately: | Finally, extract the constraint ddl and run it separately: | ||
| + | < | ||
| | | ||
| + | </ | ||
| - | =====Generate DDL and store it in a table===== | + | ==== Generate DDL and store it in a table ==== |
| - | from: [[http:// | + | from: [[http:// |
| - | < | + | < |
| + | | ||
| + | | ||
| + | | ||
| + | text varchar2(4000)); | ||
| - | =====Extract db_links with password===== | + | |
| + | | ||
| + | |||
| + | | ||
| + | for each row | ||
| + | | ||
| + | n1 number; | ||
| + | n2 number; | ||
| + | | ||
| + | n1 := instr(: | ||
| + | n2 := instr(: | ||
| + | if n1<50 then | ||
| + | > | ||
| + | > | ||
| + | > | ||
| + | > | ||
| + | > | ||
| + | end if; | ||
| + | | ||
| + | / | ||
| + | |||
| + | |||
| + | ---- Run the following PL/SQL code to insert DDL scripts into the above table | ||
| + | ---- Comment the object types that are not required | ||
| + | ---- Additional filter can be added for the cursor queries | ||
| + | |||
| + | | ||
| + | a1 varchar2(32767); | ||
| + | str varchar2(32767); | ||
| + | n1 number; | ||
| + | | ||
| + | | ||
| + | | ||
| + | for c1 in(select a.table_name from user_tables a where a.table_name | ||
| + | not in(select object_name from user_recyclebin) order by 1) | ||
| + | | ||
| + | | ||
| + | | ||
| + | for c2 in(select index_name from user_indexes where table_name=c1.table_name and index_type in(' | ||
| + | | ||
| + | | ||
| + | | ||
| + | END LOOP; | ||
| + | END LOOP; | ||
| + | |||
| + | -- Trigger scripts | ||
| + | for c1 in(select table_name, trigger_name from user_triggers where trigger_name | ||
| + | not in(select object_name from user_recyclebin) order by 1,2) LOOP | ||
| + | | ||
| + | | ||
| + | END LOOP; | ||
| + | |||
| + | -- Views | ||
| + | for c1 IN(select view_name from user_views order by 1) LOOP | ||
| + | | ||
| + | | ||
| + | END LOOP; | ||
| + | |||
| + | -- Sequence Scripts | ||
| + | for c1 IN(select sequence_name from user_sequences order by 1) LOOP | ||
| + | | ||
| + | | ||
| + | END LOOP; | ||
| + | |||
| + | -- Directories | ||
| + | for c1 in(select directory_name from all_directories order by 1) LOOP | ||
| + | | ||
| + | | ||
| + | END LOOP; | ||
| + | |||
| + | -- Materialized Views | ||
| + | for c1 in(select mview_name from user_mviews order by 1) LOOP | ||
| + | | ||
| + | | ||
| + | END LOOP; | ||
| + | |||
| + | -- Materialized View Logs | ||
| + | for c1 in(select log_table from user_mview_logs order by 1) LOOP | ||
| + | | ||
| + | | ||
| + | END LOOP; | ||
| + | |||
| + | -- Synonyms | ||
| + | for c1 in(select synonym_name from user_synonyms order by 1) LOOP | ||
| + | | ||
| + | | ||
| + | END LOOP; | ||
| + | |||
| + | | ||
| + | for c1 in(select type_name from user_types order by 1) LOOP | ||
| + | | ||
| + | | ||
| + | END LOOP; | ||
| + | | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | ==== Extract db_links with password ==== | ||
| Database links extracted with get_ddl (or a select from dba_db_links) do not show the password so we need a script that goes into the base tables | Database links extracted with get_ddl (or a select from dba_db_links) do not show the password so we need a script that goes into the base tables | ||
| - | < | + | < |
| - | < | + | select dbms_metadata.get_ddl(' |
| + | from | ||
| + | / | ||
| + | </ | ||
| + | < | ||
| + | set headi off lines 1000 pages 0 long 1000 | ||
| + | select 'From user ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | from | ||
| + | , sys.user$ u | ||
| + | where l.owner# = u.user# | ||
| + | order by u.name | ||
| + | / | ||
| + | </ | ||
| - | =====Generate script for creating schema objects===== | + | ==== Generate script for creating schema objects ==== |
| - | < | + | < |
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | / | ||
| + | |||
| + | set long 1000000 | ||
| + | set lines 255 | ||
| + | set longchunksize 255 | ||
| + | set pages 0 | ||
| + | set trimspool ON | ||
| + | col str for a255 word_wrapped | ||
| + | |||
| + | | ||
| + | decode ( object_type | ||
| + | , 'JAVA SOURCE', | ||
| + | , ' | ||
| + | , ' | ||
| + | , ' | ||
| + | , ' | ||
| + | , object_type | ||
| + | ) | ||
| + | , | ||
| + | , | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | |||
| + | -- Create constraints | ||
| + | |||
| + | select dbms_metadata.get_ddl( | ||
| + | decode(constraint_type, | ||
| + | FROM dba_constraints | ||
| + | WHERE owner=// | ||
| + | and constraint_type IN(' | ||
| + | ORDER BY case when constraint_type IN(' | ||
| + | |||
| + | |||
| + | -- Query the table ddl_scripts | ||
| + | | ||
| + | | ||
| + | | ||
| + | SQL spool c: | ||
| + | | ||
| + | case when object_type in(' | ||
| + | object_name, | ||
| + | |||
| + | | ||
| + | </ | ||
| All possible extractable keywords can be found here: | All possible extractable keywords can be found here: | ||
| + | |||
extract_ddl_with_dbms_metadata.get_ddl.1544273360.txt.gz · Last modified: 2018/12/08 12:49 by 0.0.0.0
