Data Discovery - Pre-flight SQL script

  • Note individual scripts & a tar file to download can also be found in attachment @ http://support.dbvisit.com/hc/en-us/articles/220551807-Data-Discovery-Scripts-Replicate

    The following script can help determine if the tables in your schema contain unsupported datatypes:

Prompt Specify owner for the tables that you want to replicate
Prompt Specify table_name(s) for the tables that you want to replicate. % for all.
column owner format A45
set linesize 200
set pagesize 5000
ttitle left '*****  Unsupported Data Types  *****' skip 2
btitle off

column timendate new_value spooltime noprint
select SYS_CONTEXT('USERENV', 'DB_NAME')||'_'||'unsupported_types'||'_'||to_char(sysdate,'mmddyyyy') timeNdate from dual;
set echo off

spool &spooltime-unsupported_datatypes.txt

select owner, table_name, column_name, data_type 
from sys.dba_tab_cols
where data_type not in (
 'NUMBER',
 'FLOAT',
 'BINARY_FLOAT',
 'BINARY_DOUBLE',
 'ROWID',
 'VARCHAR2',
 'VARCHAR',
 'CHAR',
 'NVARCHAR2',
 'NCHAR',
 'NCHAR2',
 'LONG',
 'LONG RAW',
 'DATE',
 'RAW',
 'BFILE',
 'CLOB',
 'BLOB',
 'NCLOB'
)
and data_type not like 'INTERVAL%'
and data_type not like 'TIMESTAMP%'
and owner not in (
'XDB','SYS','SYSTEM','SYSMAN','WMSYS','OLAPSYS','MDSYS','APEX_030200','FLOWS_FILES',
'EXFSYS','APPQOSSYS','CTXSYS','ORDDATA','OUTLN','DBSNMP','ORDSYS','DBVREP',
'APEX_040200','LBACSYS','FLOWS_030000','GSMADMIN_INTERNAL')
and table_name not in (select view_name from dba_views)
order by owner,table_name;
spool off
 

Check for XMLTYPEs stored as other than CLOB type.

-- Run on Source as a pre-check. 
REM ***********************************
REM XML Columns with storage != CLOB
REM ***********************************
set linesize 300
column owner format A40
column table_name format A45
column column_name format A30
column storage_type format A15
column timendate new_value spooltime noprint
select SYS_CONTEXT('USERENV', 'DB_NAME')||'_'||'unsupported_types'||'_'||to_char(sysdate,'mmddyyyy') timeNdate from dual;
set echo off

spool &spooltime-xmltype_storage.txt
ttitle on
ttitle left '*****  XMLTypes, NOT storage type CLOB *****' skip 2
select owner,table_name,column_name,storage_type 
from DBA_xml_tab_cols 
where owner not in ('XDB','SYS','SYSTEM','SYSMAN','WMSYS','OLAPSYS','MDSYS','APEX_030200','FLOWS_FILES',
'EXFSYS','APPQOSSYS','CTXSYS','ORDDATA','OUTLN','DBSNMP','ORDSYS','DBVREP',
'APEX_040200','LBACSYS','DMSYS')
and storage_type != 'CLOB'
order by owner,table_name,column_name;
spool off

Unsupported Identity Columns (12c)

-- find_identity_col.sql
--

ttitle left '*****  12c Tables that have an identity feature column *****' skip 2
btitle off
set linesize 150
column owner format A40
column table_name format A40
column column_name format A40
column timendate new_value spooltime noprint
select SYS_CONTEXT('USERENV', 'DB_NAME')||'_'||'unsupported_types'||'_'||to_char(sysdate,'mmddyyyy') timeNdate from dual;
set echo off

spool &spooltime-identity.txt

select owner, table_name, column_name 
from ALL_TAB_IDENTITY_COLS 
where owner not in (
'XDB','SYS','SYSTEM','SYSMAN','WMSYS','OLAPSYS','MDSYS','APEX_030200',
'FLOWS_FILES','EXFSYS','APPQOSSYS','CTXSYS','ORDDATA','OUTLN','DBSNMP',
'ORDSYS','DBVREP','APEX_040200','LBACSYS')
and table_name not like 'BIN%'
order by 1,2,3;

spool off;
 

Unsupported LOB options (11g SecureFiles):

Prompt Specify owner for the tables that you want to replicate
Prompt Specify table_name(s) for the tables that you want to replicate. % for all.
column owner format A45
set linesize 200
set pagesize 5000
column timendate new_value spooltime noprint
select SYS_CONTEXT('USERENV', 'DB_NAME')||'_'||'unsupported_types'||'_'||to_char(sysdate,'mmddyyyy') timeNdate from dual;
set echo off

spool &spooltime-LOB_columns.txt

select owner, table_name, column_name 
from dba_lobs 
where 
owner not in (
'XDB','SYS','SYSTEM','SYSMAN','WMSYS','OLAPSYS','MDSYS','APEX_030200','FLOWS_FILES',
'EXFSYS','APPQOSSYS','CTXSYS','ORDDATA','OUTLN','DBSNMP','ORDSYS','DBVREP','APEX_040200','LBACSYS')
and encrypt not in ('NO','NONE')
or compression not in ('NO','NONE')
or deduplication not in ('NO','NONE')
order by owner);
spool off

Redo Volume Trending Report :

set linesize 200
set echo off
column timendate new_value spooltime noprint
select SYS_CONTEXT('USERENV', 'DB_NAME')||'_'||'unsupported_types'||'_'||to_char(sysdate,'mmddyyyy') timeNdate from dual;
set echo off
spool &spooltime-redo_estimate.txt

select name,dbid, database_role, log_Mode from v$database;
select instance_name from v$instance;

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY MM DD';

ttitle left '***** Number of redo files for previous 7 days by hour *****' skip 2

btitle off


SELECT to_date(first_time) DAY,
to_char(sum(decode(to_char(first_time,'HH24'),'00',1,0)),'9999') "00",
to_char(sum(decode(to_char(first_time,'HH24'),'01',1,0)),'9999') "01",
to_char(sum(decode(to_char(first_time,'HH24'),'02',1,0)),'9999') "02",
to_char(sum(decode(to_char(first_time,'HH24'),'03',1,0)),'9999') "03",
to_char(sum(decode(to_char(first_time,'HH24'),'04',1,0)),'9999') "04",
to_char(sum(decode(to_char(first_time,'HH24'),'05',1,0)),'9999') "05",
to_char(sum(decode(to_char(first_time,'HH24'),'06',1,0)),'9999') "06",
to_char(sum(decode(to_char(first_time,'HH24'),'07',1,0)),'9999') "07",
to_char(sum(decode(to_char(first_time,'HH24'),'08',1,0)),'9999') "08",
to_char(sum(decode(to_char(first_time,'HH24'),'09',1,0)),'9999') "09",
to_char(sum(decode(to_char(first_time,'HH24'),'10',1,0)),'9999') "10",
to_char(sum(decode(to_char(first_time,'HH24'),'11',1,0)),'9999') "11",
to_char(sum(decode(to_char(first_time,'HH24'),'12',1,0)),'9999') "12",
to_char(sum(decode(to_char(first_time,'HH24'),'13',1,0)),'9999') "13",
to_char(sum(decode(to_char(first_time,'HH24'),'14',1,0)),'9999') "14",
to_char(sum(decode(to_char(first_time,'HH24'),'15',1,0)),'9999') "15",
to_char(sum(decode(to_char(first_time,'HH24'),'16',1,0)),'9999') "16",
to_char(sum(decode(to_char(first_time,'HH24'),'17',1,0)),'9999') "17",
to_char(sum(decode(to_char(first_time,'HH24'),'18',1,0)),'9999') "18",
to_char(sum(decode(to_char(first_time,'HH24'),'19',1,0)),'9999') "19",
to_char(sum(decode(to_char(first_time,'HH24'),'20',1,0)),'9999') "20",
to_char(sum(decode(to_char(first_time,'HH24'),'21',1,0)),'9999') "21",
to_char(sum(decode(to_char(first_time,'HH24'),'22',1,0)),'9999') "22",
to_char(sum(decode(to_char(first_time,'HH24'),'23',1,0)),'9999') "23"
from
sys.v$log_history
where to_date(first_time) > sysdate -8
GROUP by
to_char(first_time,'YYYY-MON-DD'), to_date(first_time)
order by to_date(first_time)
/

rem Size of logs to help do the math in bytes.
ttitle left '***** Size of redo logs. Multiple number of logs per hour by Size of Redo to get volume in Meg/Hr *****' skip 2
btitle off

select group#,members,archived, status, trunc((bytes)/1000000) Size_of_Redo_Megbytes
from sys.v$log
/

spool off 
exit

Tables with no Primary or Unique Keys

set linesize 200
set pagesize 20000
column owner format A40
column table_name format A60
column timendate new_value spooltime noprint
select SYS_CONTEXT('USERENV', 'DB_NAME')||'_'||'unsupported_types'||'_'||to_char(sysdate,'mmddyyyy') timeNdate from dual;
set echo off

ttitle left '*****  Tables without PK or UK output to nokeys.lst  *****' skip 2
btitle off
spool &spooltime-noUniqKeys.txt

select name,dbid, database_role, log_Mode from v$database;
select instance_name from v$instance;

select owner, table_name
from dba_tables
where owner not in (
'XDB','SYS','SYSTEM','SYSMAN','WMSYS','OLAPSYS','MDSYS','APEX_030200','FLOWS_FILES',
'EXFSYS','APPQOSSYS','CTXSYS','ORDDATA','OUTLN','DBSNMP','ORDSYS','DBVREP','APEX_040200','LBACSYS')
and table_name not like 'BIN%'
and (owner, table_name) not in (
select owner, table_name
    from dba_constraints
    where constraint_type in ( 'P', 'U' )
    and owner not in ('XDB','SYS','SYSTEM','SYSMAN','WMSYS','OLAPSYS','MDSYS','APEX_030200','FLOWS_FILES',
'EXFSYS','APPQOSSYS','CTXSYS','ORDDATA','OUTLN','DBSNMP','ORDSYS','DBVREP','APEX_040200','LBACSYS')
and table_name not like 'BIN%')
order by owner, table_name
/

spool off


Check for DELETE Cascade constraints

-- Run on Source & post imported target db
column timendate new_value spooltime noprint
select SYS_CONTEXT('USERENV', 'DB_NAME')||'_'||'unsupported_types'||'_'||to_char(sysdate,'mmddyyyy') timeNdate from dual;
set echo off
spool &spooltime-del_constraints.txt

column owner format A35
set pagesize 4000
set linesize 132

select owner, constraint_name, delete_rule,status 
FROM dba_constraints
where delete_rule = 'CASCADE'
and owner not in
(
'XDB','SYS','SYSTEM','SYSMAN','WMSYS','OLAPSYS','MDSYS','APEX_030200','FLOWS_FILES',
'EXFSYS','APPQOSSYS','CTXSYS','ORDDATA','OUTLN','DBSNMP','ORDSYS','DBVREP','APEX_040200','LBACSYS')
order by 1,2;

spool off

Check for Compressed tables (partitioned & non-partitioned)

-- Run on Source as a pre-check
REM ****************************
REM Compressed table list
REM ****************************
set linesize 200

column timendate new_value spooltime noprint
select SYS_CONTEXT('USERENV', 'DB_NAME')||'_'||'unsupported_types'||'_'||to_char(sysdate,'mmddyyyy') timeNdate from dual;
set echo off
spool &spooltime-compressed_objs.txt

ttitle left '*****  Table Compression Assessment  *****' skip 2
btitle off

SELECT owner, table_name, compression
FROM dba_tables 
where owner not in ('XDB','SYS','SYSTEM','SYSMAN','WMSYS','OLAPSYS','MDSYS','APEX_030200','FLOWS_FILES',
'EXFSYS','APPQOSSYS','CTXSYS','ORDDATA','OUTLN','DBSNMP','ORDSYS','DBVREP',
'APEX_040200','LBACSYS')
and compression = 'ENABLED'
order by 1,2;

ttitle left '*****  Partitioned Table Compression Assessment  *****' skip 2
btitle off
SELECT table_owner,table_name, partition_name, compression
from dba_tab_partitions
where table_owner not in ('XDB','SYS','SYSTEM','SYSMAN','WMSYS','OLAPSYS','MDSYS','APEX_030200','FLOWS_FILES',
'EXFSYS','APPQOSSYS','CTXSYS','ORDDATA','OUTLN','DBSNMP','ORDSYS','DBVREP',
'APEX_040200','LBACSYS')
and compression = 'ENABLED'
order by 1,2,3;
 
spool off

Check for Encryption & encrypted columns

-- Run on Source as a pre-check
REM ****************************
REM *** Encryption
REM ****************************
column timendate new_value spooltime noprint
select SYS_CONTEXT('USERENV', 'DB_NAME')||'_'||'unsupported_types'||'_'||to_char(sysdate,'mmddyyyy') timeNdate from dual;
set echo off
spool &spooltime-encrytion_chk.txt

ttitle left '*****  Encryption Assessment  *****' skip 2
btitle off
select * from dict where lower(table_name) like '%encrypted%';

select owner, table_name, COLUMN_NAME, ENCRYPTION_ALG
from DBA_ENCRYPTED_COLUMNS
where owner not in ('XDB','SYS','SYSTEM','SYSMAN','WMSYS','OLAPSYS','MDSYS','APEX_030200','FLOWS_FILES',
'EXFSYS','APPQOSSYS','CTXSYS','ORDDATA','OUTLN','DBSNMP','ORDSYS','DBVREP',
'APEX_040200','LBACSYS')
order by 1,2,3;
spool off