├── README ├── active_rollback.sql ├── ascii.sql ├── client_info.sql ├── db_buffer_hr.sql ├── db_cache_advice.sql ├── db_report.sql ├── dbfile_seqread.sql ├── dbfile_seqread_object.sql ├── dbv_list.sql ├── ddl_extract.sql ├── dump_env.sql ├── kill_oracle.sh ├── last5.sql ├── litersql.sql ├── log_switches.sql ├── maxshrink.sql ├── monitor_cursors.sql ├── need_to_pin.sql ├── oracle_connection.sh ├── pga_cache_advice.sql ├── proc_datafiles.sql ├── proc_extents.sql ├── proc_free_bytes.sql ├── proc_last_change.sql ├── proc_open_cursors.sql ├── proc_sessions.sql ├── proc_show_events.sql ├── proc_table_pk.sql ├── proc_update_mail.sql ├── rebuild_indexes.sql ├── redo_log_switches.sql ├── rollback_extensions.sql ├── search_long.sql ├── show_events.sql ├── tab_desc.sql ├── tableinfo.sql ├── test_table.sql ├── tp_stats.sql ├── unix_process.sql └── user_privs.sql /README: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geekcomputers/Oracle-SQL/77b3a549f6a81d035edb538c9aa263b3e0a6baf1/README -------------------------------------------------------------------------------- /active_rollback.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : active_rollback.sql 2 | REM Author : Craig Richards 3 | REM Created : 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : Shows active rollback segments 10 | 11 | SELECT SUBSTR(r.name,1,5) RSN,s.sid SID, SUBSTR(nvl(s.username, 'No Tran'),1,7) USR, s.osuser OSUSR, s.terminal TERM, o.rssize/(1024*1024) RSIZE 12 | FROM v$lock l, v$session s, v$rollname r, v$rollstat o 13 | WHER l.sid = s.sid(+) 14 | AND TRUNC(l.id1/65536) = r.usn 15 | AND o.usn = r.usn 16 | AND l.type = 'TX' 17 | AND l.lmode = 6 18 | ORDER BY r.name; 19 | 20 | REM End of Script 21 | -------------------------------------------------------------------------------- /ascii.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : ascii.sql 2 | REM Author : Craig Richards 3 | REM Created : 06-February-2008 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : Shows the ASCII chart 10 | 11 | SET SERVEROUTPUT ON SIZE 10240 12 | 13 | DECLARE 14 | i NUMBER; 15 | j NUMBER; 16 | k NUMBER; 17 | BEGIN 18 | FOR i IN 2..15 LOOP 19 | FOR j IN 1..16 LOOP 20 | k:=i*16+j; 21 | DBMS_OUTPUT.PUT((to_char(k,'000'))||':'||chr(k)||' '); 22 | IF k mod 8 = 0 THEN 23 | DBMS_OUTPUT.PUT_LINE(''); 24 | END IF; 25 | END LOOP; 26 | END LOOP; 27 | END; 28 | / 29 | 30 | SHOW ERRORS 31 | 32 | REM End of Script 33 | -------------------------------------------------------------------------------- /client_info.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : client_info.sql 2 | REM Author : Craig Richards 3 | REM Created : 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : Shows the client connections within the oracle database 10 | 11 | COLUMN username FORMAT A15 WORD_WRAPPED 12 | COLUMN module FORMAT A15 WORD_WRAPPED 13 | COLUMN action FORMAT A15 WORD_WRAPPED 14 | COLUMN client_info FORMAT A30 WORD_WRAPPED 15 | 16 | SELECT username||'('||sid||','||serial#||')' username, module, action, client_info 17 | FROM v$session 18 | WHERE module||action||client_info IS NOT NULL; 19 | 20 | REM End of Script 21 | -------------------------------------------------------------------------------- /db_buffer_hr.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : db_buffer_hr.sql 2 | REM Author : Craig Richards 3 | REM Created : 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : Displays the buffer cache hit ratio 10 | 11 | COLUMN BUFFER_POOL_NAME FORMAT A20 12 | 13 | SELECT name BUFFER_POOL_NAME, consistent_gets Consistent, db_block_gets Dbblockgets, 14 | physical_reads Physrds, 15 | ROUND(100*(1 - (physical_reads/(consistent_gets + db_block_gets))),2) HitRatio 16 | FROM v$buffer_pool_statistics 17 | WHERE (consistent_gets + db_block_gets) != 0; 18 | 19 | REM End of Script 20 | -------------------------------------------------------------------------------- /db_cache_advice.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : db_cache_advice.sql 2 | REM Author : Craig Richards 3 | REM Created : 05-March-2009 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : Shows whether or not to change the setting for DB_CACHE 10 | 11 | COLUMN size_for_estimate FORMAT 999,999,999,999 HEADING 'Cache Size(M)' 12 | COLUMN buffers_for_estimate FORMAT 999,999,999 HEADING 'Buffers' 13 | COLUMN estd_physical_read_factor FORMAT 999.90 HEADING 'Estd Phys|Read Factor' 14 | COLUMN estd_physical_reads FORMAT 999,999,999 HEADING 'Estd Phys| Reads' 15 | 16 | SET ECHO OFF 17 | SET FEEDBACK OFF 18 | SET PAGESIZE 50 19 | SET LINESIZE 200 20 | 21 | SPOOL db_cache_advice.txt 22 | 23 | SELECT size_for_estimate, buffers_for_estimate,estd_physical_read_factor,estd_physical_reads 24 | FROM v$db_cache_advice 25 | WHERE name = 'DEFAULT' 26 | AND block_size = (SELECT value FROM v$parameter WHERE name = 'db_block_size') 27 | AND advice_status = 'ON'; 28 | 29 | SPOOL OFF 30 | 31 | SET FEEDBACK 6 32 | SET PAGESIZE 24 33 | 34 | CLEAR COLUMNS 35 | 36 | REM End of Script 37 | -------------------------------------------------------------------------------- /db_report.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : db_report.sql 2 | REM Author : Craig Richards 3 | REM Created : 07-December-2006 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : 10 | 11 | SET PAUSE OFF 12 | SET HEADING OFF 13 | 14 | ACCEPT dbsid PROMPT "Enter SID for report : "; 15 | SPOOL /admin/output/db_report_&dbsid 16 | 17 | PROMPT Database Information 18 | PROMPT ==================== 19 | 20 | SELECT banner from v$version; 21 | 22 | SET HEADING ON 23 | 24 | select DBID,name,LOG_MODE,created from v$database; 25 | 26 | SET HEADING OFF 27 | 28 | PROMPT 29 | PROMPT Who Has the Dba privilege 30 | PROMPT ========================= 31 | 32 | SELECT grantee FROM dba_role_privs WHERE granted_role = 'DBA'; 33 | 34 | PROMPT 35 | PROMPT Who owns the recovery catalog 36 | PROMPT ============================= 37 | 38 | SELECT grantee FROM dba_role_privs WHERE granted_role = 'RECOVERY_CATALOG_OWNER'; 39 | 40 | SET FEEDBACK OFF 41 | 42 | PROMPT 43 | PROMPT Map of datafiles, controlfiles, redo logs 44 | PROMPT ========================================= 45 | 46 | PROMPT 47 | PROMPT Datafiles 48 | PROMPT ========= 49 | 50 | SELECT file_name FROM dba_data_files; 51 | 52 | PROMPT 53 | PROMPT Control Files 54 | PROMPT ============= 55 | 56 | COLUMN name FORMAT A40 57 | 58 | SELECT name FROM v$controlfile; 59 | 60 | CLEAR COLUMNS 61 | 62 | PROMPT 63 | PROMPT Redo Logs 64 | PROMPT ========= 65 | 66 | SELECT member FROM v$logfile; 67 | 68 | SET PAUSE OFF 69 | SET FEEDBACK OFF 70 | SET PAGESIZE 66 71 | SET TERMOUT OFF 72 | SET TRIMSPOOL ON 73 | 74 | TTITLE SKIP 2 CENTER 'FREE - Free space by Tablespace' skip 2 75 | 76 | COLUMN dummy NOPRINT 77 | COLUMN pct_used FORMAT 999.9 HEADING "%|Used" 78 | COLUMN name FORMAT A16 HEADING "Tablespace Name" 79 | COLUMN bytes FORMAT 9,999,999,999,999 HEADING "Total Bytes" 80 | COLUMN used FORMAT 9,999,999,999,999 HEADING "Used" 81 | COLUMN free FORMAT 999,999,999,999 HEADING "Free" 82 | 83 | BREAK ON REPORT 84 | 85 | COMPUTE SUM of bytes ON REPORT 86 | COMPUTE SUM of free ON REPORT 87 | COMPUTE SUM of used ON REPORT 88 | 89 | SELECT a.tablespace_name name, b.tablespace_name dummy, 90 | SUM(b.bytes)/COUNT( DISTINCT a.file_id||'.'||a.block_id ) bytes, 91 | SUM(b.bytes)/COUNT( DISTINCT a.file_id||'.'||a.block_id ) - 92 | SUM(a.bytes)/COUNT( DISTINCT b.file_id ) used, 93 | SUM(a.bytes)/COUNT( DISTINCT b.file_id ) free, 94 | 100 * ( (SUM(b.bytes)/COUNT( DISTINCT a.file_id||'.'||a.block_id )) - 95 | (SUM(a.bytes)/COUNT( DISTINCT b.file_id ) )) / 96 | (SUM(b.bytes)/COUNT( DISTINCT a.file_id||'.'||a.block_id )) pct_used 97 | FROM sys.dba_free_space a, sys.dba_data_files b 98 | WHERE a.tablespace_name = b.tablespace_name 99 | GROUP BY a.tablespace_name, b.tablespace_name; 100 | SET TERMOUT ON 101 | 102 | TTITLE OFF 103 | 104 | PROMPT 105 | PROMPT User Information 106 | PROMPT ================ 107 | PROMPT 108 | 109 | COLUMN username FORMAT A20 110 | COLUMN profile FORMAT A10 111 | COLUMN default_tablespace FORMAT A15 112 | COLUMN temporary_tablespace FORMAT A15 113 | 114 | select username, default_tablespace, temporary_tablespace,profile, created from dba_users; 115 | 116 | CLEAR COLUMNS 117 | 118 | PROMPT 119 | PROMPT Database Parameters 120 | PROMPT =================== 121 | 122 | COLUMN name FORMAT A40 123 | COLUMN value FORMAT A60 124 | 125 | SET LINES 200 126 | 127 | select name, value from v$parameter; 128 | 129 | CLEAR COLUMNS 130 | 131 | SET LINES 80 132 | 133 | SET PAUSE OFF 134 | 135 | COLUMN segment_name FORMAT A15 136 | COLUMN tablespace_name FORMAT A15 137 | 138 | PROMPT 139 | PROMPT Rollback Segments 140 | PROMPT ================= 141 | 142 | SELECT segment_name, tablespace_name, segment_id, status 143 | FROM dba_rollback_segs; 144 | 145 | SET PAUSE OFF 146 | SET FEEDBACK OFF 147 | 148 | COLUMN name FORMAT A20 149 | 150 | SELECT name, optsize, shrinks, aveshrink, extends,wraps 151 | FROM v$rollstat, v$rollname 152 | WHERE v$rollstat.usn=v$rollname.usn; 153 | 154 | PROMPT 155 | PROMPT Invalid Objects in the database 156 | PROMPT =============================== 157 | 158 | SET LINES 200 159 | 160 | COLUMN owner FORMAT A20 161 | COLUMN object_name FORMAT A30 162 | COLUMN object_type FORMAT A30 163 | 164 | select owner, object_name, object_type from dba_objects where status = 'INVALID'; 165 | 166 | CLEAR COLUMNS 167 | 168 | SET LINESIZE 80 169 | 170 | PROMPT 171 | PROMPT SGA Settings 172 | PROMPT ============ 173 | 174 | SHOW SGA; 175 | 176 | PROMPT 177 | PROMPT Tablespace Information 178 | PROMPT ====================== 179 | 180 | COLUMN tablespace_name FORMAT A25 181 | 182 | SET LINES 200 183 | SET HEADING ON 184 | 185 | select tablespace_name, initial_extent, next_extent,min_extents,max_extents,extent_management from dba_tablespaces; 186 | 187 | COLUMN file_name FORMAT A80 188 | 189 | select file_name from dba_data_files where AUTOEXTENSIBLE = 'YES'; 190 | 191 | CLEAR COLUMNS 192 | 193 | SET LINES 80 194 | 195 | PROMPT 196 | PROMPT DBMS SCHEDULER 197 | PROMPT ============== 198 | 199 | SELECT owner, job_name, job_type FROM dba_scheduler_jobs; 200 | 201 | PROMPT 202 | PROMPT Undo Stats 203 | PROMPT ========== 204 | PROMPT 205 | 206 | SET LINES 200 207 | 208 | SELECT TO_CHAR(MIN(Begin_Time), 'DD-MON-YYYY HH24:MI:SS') "Begin Time", 209 | TO_CHAR(MAX(End_Time), 'DD-MON-YYYY HH24:MI:SS') "End Time", 210 | SUM(Undoblks) "Total Undo Blocks Used", 211 | SUM(Txncount) "Total Num Trans Exec", 212 | MAX(Maxquerylen) "Longest Query(in secs)", 213 | MAX(Maxconcurrency) "Highest Concurrent Trans Count", 214 | SUM(Ssolderrcnt), SUM(Nospaceerrcnt) 215 | FROM v$undostat; 216 | 217 | SPOOL OFF 218 | 219 | REM exit 220 | 221 | REM End of Script 222 | -------------------------------------------------------------------------------- /dbfile_seqread.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : dbfile_seqread.sql 2 | REM Author : Craig Richards 3 | REM Created : 06-August-2008 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : Shows the waits for dbfile_sequential_reads 10 | 11 | SET LINES 200 12 | SET PAUSE OFF 13 | 14 | SELECT a.sid, a.event, a.time_waited, 15 | a.time_waited / c.sum_time_waited * 100 pct_wait_time, 16 | ROUND((sysdate - b.logon_time) * 24) hours_connected 17 | FROM v$session_event a, v$session b, 18 | (SELECT sid, SUM(time_waited) sum_time_waited 19 | FROM v$session_event 20 | WHERE event NOT IN ( 21 | 'Null event', 22 | 'client message', 23 | 'KXFX: Execution Message Dequeue - Slave', 24 | 'PX Deq: Execution Msg', 25 | 'KXFQ: kxfqdeq - normal deqeue', 26 | 'PX Deq: Table Q Normal', 27 | 'Wait for credit - send blocked', 28 | 'PX Deq Credit: send blkd', 29 | 'Wait for credit - need buffer to send', 30 | 'PX Deq Credit: need buffer', 31 | 'Wait for credit - free buffer', 32 | 'PX Deq Credit: free buffer', 33 | 'parallel query dequeue wait', 34 | 'PX Deque wait', 35 | 'Parallel Query Idle Wait - Slaves', 36 | 'PX Idle Wait', 37 | 'slave wait', 38 | 'dispatcher timer', 39 | 'virtual circuit status', 40 | 'pipe get', 41 | 'rdbms ipc message', 42 | 'rdbms ipc reply', 43 | 'pmon timer', 44 | 'smon timer', 45 | 'PL/SQL lock timer', 46 | 'SQL*Net message from client', 47 | 'WMON goes to sleep') 48 | HAVING SUM(time_waited) > 0 GROUP BY sid) c 49 | WHERE a.sid = b.sid 50 | AND a.sid = c.sid 51 | AND a.time_waited > 0 52 | AND a.event = 'db file sequential read' 53 | ORDER BY hours_connected desc, pct_wait_time; 54 | 55 | REM End of Script 56 | -------------------------------------------------------------------------------- /dbfile_seqread_object.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : dbfile_seqread_object.sql 2 | REM Author : Craig Richards 3 | REM Created : 06-August-2008 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : Shows the object causing the waits 10 | 11 | SELECT b.sid, nvl(substr(a.object_name,1,30),'P1='||b.p1||' P2='||b.p2||' P3='||b.p3) object_name, 12 | a.subobject_name, 13 | a.object_type 14 | FROM dba_objects a, v$session_wait b, x$bh c 15 | WHERE c.obj = a.object_id(+) 16 | AND b.p1 = c.file#(+) 17 | AND b.p2 = c.dbablk(+) 18 | AND b.event = 'db file sequential read' 19 | UNION 20 | SELECT b.sid, nvl(substr(a.object_name,1,30), 'P1='||b.p1||' P2='||b.p2||' P3='||b.p3) object_name, 21 | a.subobject_name, 22 | a.object_type 23 | FROM dba_objects a, v$session_wait b, x$bh c 24 | WHERE c.obj = a.data_object_id(+) 25 | AND b.p1 = c.file#(+) 26 | AND b.p2 = c.dbablk(+) 27 | AND b.event = 'db file sequential read' 28 | ORDER BY 1; 29 | 30 | REM End of Script 31 | -------------------------------------------------------------------------------- /dbv_list.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : dbv_list.sql 2 | REM Author : Craig Richards 3 | REM Created : 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : Creates a spool file of database files you can then use to use DBV utility 10 | 11 | SET HEADING OFF 12 | SET ECHO OFF 13 | SET FLUSH OFF 14 | SET PAGESIZE 9999 15 | SET LINESIZE 132 16 | 17 | SPOOL check_files_with_dbv.lis 18 | 19 | SELECT 'dbv file='||d.file_name||' blocksize='||block_size||' feedback=1000 logfile='||d.file_id||'.lis' 20 | FROM dba_data_files d, dba_tablespaces t 21 | WHERE d.tablespace_name = t.tablespace_name 22 | ORDER BY d.file_id desc; 23 | 24 | SPOOL OFF 25 | 26 | REM End of Script 27 | -------------------------------------------------------------------------------- /ddl_extract.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : ddl_extract.sql 2 | REM Author : Craig Richards 3 | REM Created : 12-January-2009 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : Extracts the DDL statement for the object when the parameters are passed, Object Name and Object Type 10 | 11 | REM extract_object.sql 12 | 13 | SET ECHO OFF 14 | SET HEADING OFF 15 | SET FEEDBACK OFF 16 | SET VERIFY OFF 17 | SET LINESIZE 10000 18 | SET LONG 2000000000 19 | SET LONGCHUNKSIZE 16000 20 | SET TRIMSPOOL ON 21 | SET PAGESIZE 0 22 | 23 | COLUMN test FORMAT A10000 24 | 25 | DEFINE _object_file = '&1' 26 | DEFINE _object_name = '&2' 27 | DEFINE _object_type = '&3' 28 | 29 | SPOOL &_object_file 30 | 31 | SELECT DBMS_METADATA.GET_DDL('&&_object_type', '&&_object_name',USER) test FROM DUAL; 32 | 33 | SPOOL OFF 34 | 35 | REM End of Script 36 | -------------------------------------------------------------------------------- /dump_env.sql: -------------------------------------------------------------------------------- 1 | REM Filename : dump_env.sql 2 | REM Author : Craig Richards 3 | REM Created : 09-April-2008 4 | REM Version : 1.0 5 | REM Modifications : 6 | REM 7 | REM Description : Creates a procedure to gather some environment information, both OS and database 8 | 9 | CREATE OR REPLACE PROCEDURE DUMP_ENV 10 | AUTHID CURRENT_USER 11 | IS 12 | buffer VARCHAR2(260); 13 | BEGIN 14 | DBMS_OUTPUT.PUT_LINE(CHR(10)); 15 | DBMS_OUTPUT.PUT_LINE('Your Environment :'); 16 | DBMS_OUTPUT.PUT_LINE('=================='); 17 | DBMS_OUTPUT.PUT_LINE(CHR(10)); 18 | SYS.DBMS_SYSTEM.GET_ENV('ORACLE_HOME',BUFFER); 19 | DBMS_OUTPUT.PUT_LINE('ORACLE_HOME: ' || BUFFER); 20 | SYS.DBMS_SYSTEM.GET_ENV('ORACLE_SID',BUFFER); 21 | DBMS_OUTPUT.PUT_LINE('ORACLE_SID: ' || BUFFER); 22 | SYS.DBMS_SYSTEM.GET_ENV('LD_LIBRARY_PATH',BUFFER); 23 | DBMS_OUTPUT.PUT_LINE('LD_LIBRARY_PATH: ' || BUFFER); 24 | SYS.DBMS_SYSTEM.GET_ENV('SHELL',BUFFER); 25 | DBMS_OUTPUT.PUT_LINE('SHELL: ' || BUFFER); 26 | SYS.DBMS_SYSTEM.GET_ENV('EDITOR',BUFFER); 27 | DBMS_OUTPUT.PUT_LINE('EDITOR: ' || BUFFER); 28 | select host_name into BUFFER from v$instance; 29 | DBMS_OUTPUT.PUT_LINE('HOSTNAME: ' || BUFFER); 30 | select version into BUFFER from v$instance; 31 | DBMS_OUTPUT.PUT_LINE('VERSION: ' || BUFFER); 32 | SYS.DBMS_SYSTEM.GET_ENV('ALERT',BUFFER); 33 | DBMS_OUTPUT.PUT_LINE('ALERT: ' || BUFFER); 34 | END DUMP_ENV; 35 | / 36 | 37 | REM End of Script 38 | -------------------------------------------------------------------------------- /kill_oracle.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Name : kill_oracle.sh 4 | 5 | # Author : Craig Richards 6 | # Created : 31-May-2012 7 | # Last Modified : 8 | # Version : 1.0 9 | # Modifications : 10 | 11 | # Description : This will kill all the oracle processes associated with a given sid 12 | 13 | # Instructions : kill_oracle.sh $ORACLE_SID 14 | 15 | ################################# 16 | # Start of procedures/functions # 17 | ################################# 18 | 19 | funct_check_params() # Function Name 20 | { # Start of the function 21 | if [ ${NARG} -ne 1 ]; then # If the number of arguments is not one, then output a message 22 | echo "$0 : Not enough Parameters passed, you need to supply an ORACLE_SID" 23 | exit 1 # Quit the program 24 | elif # Else if 25 | 26 | # If the argument passed is -h or --h then display the following message in the echo statement 27 | 28 | [[ ${SID} = "-h" ]] || [[ ${SID} = "--h" ]]; then 29 | echo "Usage: You need to add an ORACLE_SID, e.g $0 BOSSLIVE" 30 | exit 1 # Quit the program 31 | fi # End of the if statement 32 | } # End of the function 33 | 34 | funct_check_user() # Function Name 35 | { # Start of the function 36 | if [ `/usr/ucb/whoami` != 'oracle' ]; then # Check the user is Oracle 37 | echo "Error: you must run this as oracle" # Display a message if its another user 38 | exit 99 # Quit the program 39 | fi 40 | } # End of the function 41 | 42 | funct_kill_oracle() # Function Name 43 | { # Start of the function 44 | get_processes=`ps -ef | grep "ora_" | grep ${SID} | grep -v grep` ; export get_processes # Set the variable get_processes to show the processes that will be killed 45 | echo -e "\nProcesses that will be killed is \n\n ${get_processes}" 46 | ps -ef | grep "ora_" | grep ${SID} | grep -v grep | awk '{print $2}' | xargs kill -9 # Kill all the processes associated with the given sid 47 | } # End of the function 48 | 49 | ################ 50 | # Main Program # 51 | ################ 52 | 53 | # Variable Settings 54 | 55 | SID=$1 # Set the variable KEYWORD as the first argument passed 56 | NARG=$# # Set the variable NARG to a number of arguments on the command line 57 | 58 | { # Start of the main program 59 | funct_check_params # Call the function funct_check_params 60 | funct_check_user # Call the function funct_check_user 61 | funct_kill_oracle # Call the function funct_kill_oracle 62 | } # End of the main program 63 | 64 | ## End of Script 65 | -------------------------------------------------------------------------------- /last5.sql: -------------------------------------------------------------------------------- 1 | REM Filename : last5.sql 2 | REM Author : Craig Richards 3 | REM Created : 4 | REM Version : 1.0 5 | REM Modifications : 6 | REM 7 | REM Description : Displays the last 5 extents at the end of the datafile 8 | 9 | SELECT * 10 | FROM ( 11 | SELECT owner, segment_name, 12 | segment_type, block_id 13 | FROM dba_extents 14 | WHERE file_id = 15 | ( SELECT file_id 16 | FROM dba_data_files 17 | WHERE file_name = '&FILE_NAME' ) 18 | ORDER BY block_id desc 19 | ) 20 | WHERE rownum <= 5 21 | ; 22 | 23 | REM End of Script 24 | -------------------------------------------------------------------------------- /litersql.sql: -------------------------------------------------------------------------------- 1 | REM Filename : litersql.sql 2 | REM Author : Craig Richards 3 | REM Created : 06-March-2009 4 | REM Version : 1.0 5 | REM Modifications : 6 | REM 7 | REM Description : Identify statements that could benefit converting to using bind variables 8 | 9 | SET VERIFY OFF 10 | 11 | SELECT SUBSTR(sql_text,1,60) "SQL", COUNT(*),SUM(executions) "TOTAL EXECUTIONS" 12 | FROM v$sqlarea 13 | WHERE executions < 5 14 | GROUP BY SUBSTR(sql_text,1,60) 15 | HAVING COUNT(*) > 20 16 | ORDER BY 2; 17 | 18 | REM End of Script 19 | -------------------------------------------------------------------------------- /log_switches.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : log_switches.sql 2 | REM Author : Craig Richards 3 | REM Created : 18 March 2013 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : Show information about recent log switches in the database, orginally got FROM http://www.dba-oracle.com/tips_oracle_v$_log_history.htm 10 | 11 | COLUMN c1 format a10 HEADING "Month" 12 | COLUMN c2 format a25 HEADING "Archive Date" 13 | COLUMN c3 format 999 HEADING "Switches" 14 | 15 | COMPUTE AVG of C on A 16 | COMPUTE AVG of C on REPORT 17 | 18 | BREAK ON A skip 1 ON REPORT SKIP 1 19 | 20 | SELECT TO_CHAR(TRUNC(first_time), 'Month') c1, 21 | TO_CHAR(TRUNC(first_time), 'Day : DD-Mon-YYYY') c2, COUNT(*) c3 22 | FROM v$log_history 23 | WHERE TRUNC(first_time) > last_day(sysdate-100) +1 24 | GROUP BY TRUNC(first_time); 25 | 26 | 27 | REM Daily COUNT and Size of Redo Log Space (Single Instance) 28 | 29 | SELECT A.*, ROUND(A.COUNT#*B.AVG#/1024/1024) Daily_Avg_Mb 30 | FROM 31 | ( 32 | SELECT 33 | TO_CHAR(First_Time,'YYYY-MM-DD') DAY, 34 | COUNT(1) COUNT#, 35 | MIN(RECID) Min#, 36 | MAX(RECID) Max# 37 | FROM 38 | v$log_history 39 | GROUP BY 40 | TO_CHAR(First_Time,'YYYY-MM-DD') 41 | ORDER BY 1 DESC 42 | ) A, 43 | ( 44 | SELECT 45 | AVG(BYTES) AVG#, 46 | COUNT(1) COUNT#, 47 | MAX(BYTES) Max_Bytes, 48 | MIN(BYTES) Min_Bytes 49 | FROM v$log 50 | ) B 51 | ; 52 | 53 | -------------------------------------------------------------------------------- /maxshrink.sql: -------------------------------------------------------------------------------- 1 | REM Filename : maxshrink.sql 2 | REM Author : Craig Richards - originally from Asktom.oracle.com 3 | REM Created : 4 | REM Version : 1.0 5 | REM Modifications : 6 | REM 7 | REM Description : Displays the size your datafiles can be shrunk to, it also generates the commands for you 8 | 9 | SET VERIFY OFF 10 | 11 | COLUMN file_name FORMAT a50 word_wrapped 12 | COLUMN smallest FORMAT 999,990 HEADING "Smallest|Size|Poss." 13 | COLUMN currsize FORMAT 999,990 HEADING "Current|Size" 14 | COLUMN savings FORMAT 999,990 HEADING "Poss.|Savings" 15 | 16 | BREAK ON report 17 | 18 | COMPUTE sum of savings on report 19 | 20 | COLUMN value new_val blksize 21 | 22 | SELECT value FROM v$parameter WHERE name = 'db_block_size' 23 | / 24 | 25 | SELECT file_name, 26 | CEIL( (NVL(hwm,1)*&&blksize)/1024/1024 ) smallest, 27 | CEIL( blocks*&&blksize/1024/1024) currsize, 28 | CEIL( blocks*&&blksize/1024/1024) - 29 | CEIL( (NVL(hwm,1)*&&blksize)/1024/1024 ) savings 30 | FROM dba_data_files a, 31 | ( SELECT file_id, max(block_id+blocks-1) hwm 32 | FROM dba_extents 33 | group by file_id ) b 34 | WHERE a.file_id = b.file_id(+) 35 | / 36 | 37 | COLUMN cmd FORMAT a75 word_wrapped 38 | 39 | SELECT 'alter database datafile '''||file_name||''' resize ' || 40 | CEIL( (NVL(hwm,1)*&&blksize)/1024/1024 ) || 'm;' cmd 41 | FROM dba_data_files a, 42 | ( SELECT file_id, max(block_id+blocks-1) hwm 43 | FROM dba_extents 44 | GROUP BY file_id ) b 45 | WHERE a.file_id = b.file_id(+) 46 | AND CEIL( blocks*&&blksize/1024/1024) - 47 | CEIL( (NVL(hwm,1)*&&blksize)/1024/1024 ) > 0 48 | / 49 | 50 | REM End of Script 51 | -------------------------------------------------------------------------------- /monitor_cursors.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : monitor_cursors.sql 2 | REM Author : Craig Richards 3 | REM Created : 17 July 2013 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : Shows the amount of cursors currently open 10 | 11 | SET LINESIZE 200 12 | 13 | COLUMN max_open_cursor FORMAT a30 14 | 15 | SELECT MAX(a.value) AS highest_open_cursor, p.value AS max_open_cursor 16 | FROM v$sesstat a, v$statname b, v$parameter p 17 | WHERE a.statistic# = b.statistic# 18 | AND b.name = 'opened cursors current' AND p.name= 'open_cursors' 19 | GROUP BY p.value; -------------------------------------------------------------------------------- /need_to_pin.sql: -------------------------------------------------------------------------------- 1 | REM Filename : need_to_pin.sql 2 | REM Author : Craig Richards 3 | REM Created : 02-April-2009 4 | REM Version : 1.0 5 | REM Modifications : 6 | REM 7 | REM Description : Shows if certain objects could be pinned to improve performance 8 | 9 | SET LINES 200 10 | SET PAGES 100 11 | 12 | SELECT SUBSTR(owner,1,10) Owner, SUBSTR(type,1,12) Type, SUBSTR(name,1,30) Name, 13 | executions, sharable_mem Mem_used, SUBSTR(kept||' ',1,4) "Kept?" 14 | FROM v$db_object_cache 15 | WHERE type IN ('TRIGGER','PROCEDURE','PACKAGE BODY','PACKAGE') 16 | ORDER BY executions DESC; 17 | 18 | REM End of Script 19 | -------------------------------------------------------------------------------- /oracle_connection.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Name : oracle_connections.sh 4 | 5 | # Author : Craig Richards 6 | # Created : 30-May-2012 7 | # Last Modified : 8 | # Version : 1.0 9 | # Modifications : 10 | 11 | # Description : This will show all of the client connections to the database 12 | 13 | # Instructions : oracle_connections.sh $ORACLE_SID 14 | 15 | ################################# 16 | # Start of procedures/functions # 17 | ################################# 18 | 19 | funct_check_params() # Function Name 20 | { # Start of the function 21 | if [ ${NARG} -ne 1 ]; then # If the number of arguments is not one, then output a message 22 | echo "$0 : Not enough Parameters passed, you need to supply an ORACLE_SID" 23 | exit 1 # Quit the program 24 | elif # Else if 25 | 26 | # If the argument passed is -h or --h then display the following message in the echo statement 27 | 28 | [[ ${SID} = "-h" ]] || [[ ${SID} = "--h" ]]; then 29 | echo "Usage: You need to add an ORACLE_SID, e.g $0 BOSSLIVE" 30 | exit 1 # Quit the program 31 | fi # End of the if statement 32 | } # End of the function 33 | 34 | funct_count_connections() # Function Name 35 | { # Start of the function 36 | numconnections=`ps -ef | grep ${SID}| grep -v grep | grep -v ora_ | wc -l` ; export numconnections # Set the variable numconnections as running the UNIX one liner 37 | echo " You have ${numconnections} connections to the database ${SID}" # Display the amount of connections to the database 38 | } # End of the function 39 | 40 | ################ 41 | # Main Program # 42 | ################ 43 | 44 | # Variable Settings 45 | 46 | SID=$1 # Set the variable KEYWORD as the first argument passed 47 | NARG=$# # Set the variable NARG to a number of arguments on the command line 48 | 49 | { # Start of the main program 50 | funct_check_params # Call the function funct_check_params 51 | funct_count_connections # Call the function funct_file_files 52 | } # End of the main program 53 | 54 | ## End of Script 55 | -------------------------------------------------------------------------------- /pga_cache_advice.sql: -------------------------------------------------------------------------------- 1 | REM Filename : pga_cache_advice.sql 2 | REM Author : Craig Richards 3 | REM Created : 26-March-2009 4 | REM Version : 1.0 5 | REM Modifications : 6 | REM 7 | REM Description : Shows whether or not to change the setting for PGA_AGGREGATE_TARGET 8 | 9 | SET ECHO OFF 10 | SET FEEDBACK OFF 11 | SET PAGESIZE 50 12 | SET LINESIZE 200 13 | 14 | COLUMN estd_extra_bytes_rw FORMAT 999,999,999,999 15 | COLUMN bytes_processed FORMAT 999,999,999,999 16 | 17 | SELECT pga_target_for_estimate/1048576 pga_target,bytes_processed,estd_extra_bytes_rw 18 | FROM v$pga_target_advice; 19 | 20 | SET FEEDBACK 6 21 | SET PAGESIZE 24 22 | 23 | CLEAR COLUMNS 24 | 25 | REM End of Script 26 | -------------------------------------------------------------------------------- /proc_datafiles.sql: -------------------------------------------------------------------------------- 1 | REM Filename : proc_datafiles.sql 2 | REM Author : Craig Richards 3 | REM Created : 19th December 2012 4 | REM Version : 1.0 5 | REM Modifications : 6 | REM 7 | 8 | REM Instructions : Show all the datafiles and there sizes for the given tablespace name 9 | 10 | CREATE OR REPLACE PROCEDURE cr_datafiles (inp_tblspc VARCHAR2:=NULL) 11 | AUTHID CURRENT_USER 12 | AS 13 | 14 | -- Define Exception 15 | 16 | ERROR exception; 17 | 18 | -- Variable Declaration 19 | 20 | lv_file_name sys.dba_data_files.file_name%TYPE; 21 | lv_bytes sys.dba_data_files.bytes%TYPE; 22 | 23 | -- Create the cursors 24 | 25 | CURSOR c_files IS 26 | SELECT rpad(file_name,50,' '), bytes 27 | FROM sys.dba_data_files 28 | WHERE UPPER(tablespace_name) = UPPER(inp_tblspc) 29 | ORDER BY bytes; 30 | 31 | -- Output the Information 32 | 33 | BEGIN 34 | 35 | -- If the parameter passed is blank, or nothing is passed in the raise the error 36 | 37 | IF inp_tblspc IS NULL OR NVL(LENGTH(TRIM(inp_tblspc)),0)=0 THEN RAISE ERROR; 38 | ELSE 39 | OPEN c_files; 40 | DBMS_OUTPUT.PUT_LINE(CHR(10)); 41 | DBMS_OUTPUT.PUT_LINE('Datafiles for : ' || inp_tblspc); 42 | DBMS_OUTPUT.PUT_LINE(CHR(10)); 43 | DBMS_OUTPUT.PUT_LINE('FILENAME' || CHR(9) || CHR(9) || CHR(9) || CHR(9) || CHR(9) || CHR(9) || CHR(9) || 'BYTES' ); 44 | DBMS_OUTPUT.PUT_LINE('--------' || CHR(9) || CHR(9) || CHR(9) || CHR(9) || CHR(9) || CHR(9) || CHR(9) || '-----' ); 45 | LOOP 46 | FETCH c_files INTO lv_file_name, lv_bytes; 47 | EXIT WHEN c_files%NOTFOUND; 48 | DBMS_OUTPUT.PUT_LINE(lv_file_name|| CHR(9) || CHR(9) || lv_bytes); 49 | END LOOP; 50 | CLOSE c_files; 51 | END IF; 52 | 53 | -- Exception 54 | 55 | EXCEPTION 56 | WHEN ERROR THEN 57 | DBMS_OUTPUT.PUT_LINE (CHR(10) || 'ORA-77777 : You need to pass a tablespace'); 58 | DBMS_OUTPUT.PUT_LINE ('ie exec cr_datafiles(''EBOND1'');'); 59 | END cr_datafiles; 60 | / 61 | SHOW ERROR 62 | 63 | -------------------------------------------------------------------------------- /proc_extents.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : proc_extents.sql 2 | REM Author : Craig Richards 3 | REM Created : 16-Mar-2009 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : Creates a procedure which shows the largest available extent for each tablespace 10 | 11 | CREATE OR REPLACE PROCEDURE extents 12 | AUTHID CURRENT_USER 13 | AS 14 | 15 | -- Variable Declaration 16 | 17 | LV_TABLESPACE_NAME dba_free_space.tablespace_name%TYPE; 18 | LV_BYTES dba_free_space.bytes%TYPE; 19 | 20 | -- Create the cursor 21 | 22 | CURSOR c_extent IS 23 | SELECT rpad(tablespace_name,15,' '), MAX(bytes) 24 | FROM dba_free_space 25 | GROUP BY tablespace_name 26 | UNION 27 | SELECT rpad(tablespace_name,15,' '), MAX(bytes) 28 | FROM dba_temp_files 29 | GROUP BY tablespace_name; 30 | 31 | -- Output the information 32 | 33 | BEGIN 34 | DBMS_OUTPUT.PUT_LINE('Tablespace Name'||CHR(9)||CHR(9) ||'Bytes'); 35 | DBMS_OUTPUT.PUT_LINE('==============='||CHR(9)||CHR(9) ||'====='); 36 | OPEN c_extent; 37 | LOOP 38 | FETCH c_extent INTO LV_TABLESPACE_NAME,LV_BYTES; 39 | EXIT WHEN c_extent%NOTFOUND; 40 | DBMS_OUTPUT.PUT_LINE(LV_TABLESPACE_NAME||CHR(9)||CHR(9) ||LV_BYTES); 41 | END LOOP; 42 | CLOSE c_extent; 43 | 44 | END extents; 45 | / 46 | 47 | REM End of Script 48 | -------------------------------------------------------------------------------- /proc_free_bytes.sql: -------------------------------------------------------------------------------- 1 | REM Filename : proc_free_bytes.sql 2 | REM Author : Craig Richards 3 | REM Created : 19th December 2012 4 | REM Version : 1.0 5 | REM Modifications : 6 | REM 7 | 8 | REM Instructions : Show all the free bytes in the given tablespace 9 | 10 | CREATE OR REPLACE PROCEDURE cr_free_bytes (inp_tblspc VARCHAR2:=NULL) 11 | AUTHID CURRENT_USER 12 | AS 13 | 14 | -- Define Exception 15 | 16 | ERROR EXCEPTION; 17 | 18 | -- Variable Declaration 19 | 20 | lv_bytes sys.dba_free_space.bytes%TYPE; 21 | 22 | -- Create the cursors 23 | 24 | CURSOR c_free IS 25 | SELECT bytes 26 | FROM sys.dba_free_space 27 | WHERE UPPER(tablespace_name) = UPPER(inp_tblspc) 28 | ORDER BY bytes; 29 | 30 | -- Output the Information 31 | 32 | BEGIN 33 | 34 | -- If the parameter passed is blank, or nothing is passed in the raise the error 35 | 36 | IF inp_tblspc IS NULL OR NVL(LENGTH(TRIM(inp_tblspc)),0)=0 THEN RAISE ERROR; 37 | ELSE 38 | OPEN c_free; 39 | DBMS_OUTPUT.PUT_LINE(CHR(10)); 40 | DBMS_OUTPUT.PUT_LINE('Tablespace : ' || inp_tblspc); 41 | DBMS_OUTPUT.PUT_LINE(CHR(10)); 42 | DBMS_OUTPUT.PUT_LINE('BYTES' ); 43 | DBMS_OUTPUT.PUT_LINE('=====' ); 44 | LOOP 45 | FETCH c_free INTO lv_bytes; 46 | EXIT WHEN c_free%NOTFOUND; 47 | DBMS_OUTPUT.PUT_LINE(lv_bytes); 48 | END LOOP; 49 | CLOSE c_free; 50 | END IF; 51 | 52 | -- Exception 53 | 54 | EXCEPTION 55 | WHEN ERROR THEN 56 | DBMS_OUTPUT.PUT_LINE (CHR(10) || 'ORA-77777 : You need to pass a tablespace'); 57 | DBMS_OUTPUT.PUT_LINE ('ie exec cr_datafile(''EBOND1'');'); 58 | END cr_free_bytes; 59 | / 60 | SHOW ERROR 61 | 62 | -------------------------------------------------------------------------------- /proc_last_change.sql: -------------------------------------------------------------------------------- 1 | REM Filename : proc_last_change.sql 2 | REM Author : Craig Richards 3 | REM Created : 14-Feburary-2012 4 | REM Version : 1.0 5 | REM Modifications : 6 | REM 7 | REM Description : Creates two procedures which shows you the last time a password was changed. 8 | REM The First last_change_all, when called will show you all the users with the last date 9 | REM The next last_change, when called you pass the user and it displays the details for that user 10 | 11 | REM Instructions : For last_change call it by exec last_change('username') 12 | 13 | CREATE OR REPLACE PROCEDURE last_change_all 14 | AUTHID CURRENT_USER 15 | AS 16 | 17 | -- Variable Declaration 18 | 19 | lv_user sys.user$.user#%TYPE; 20 | lv_name sys.user$.name%TYPE; 21 | lv_ptime sys.user$.ptime%TYPE; 22 | 23 | -- Create the cursor 24 | 25 | CURSOR c_user IS 26 | SELECT user#, RPAD(name,24,' '), ptime FROM sys.user$ WHERE ptime IS NOT NULL; 27 | 28 | -- Output the Information 29 | 30 | BEGIN 31 | OPEN c_user; 32 | DBMS_OUTPUT.PUT_LINE(CHR(10)); 33 | DBMS_OUTPUT.PUT_LINE('This displays the usernames and the date the password was last changed'); 34 | DBMS_OUTPUT.PUT_LINE('======================================================================'); 35 | DBMS_OUTPUT.PUT_LINE(CHR(10)); 36 | DBMS_OUTPUT.PUT_LINE('USERNAME' || CHR(9) || CHR(9) || 'LAST CHANGED'); 37 | DBMS_OUTPUT.PUT_LINE('========' || CHR(9) || CHR(9) || '============'); 38 | LOOP 39 | FETCH c_user INTO lv_user, lv_name, lv_ptime; 40 | EXIT WHEN c_user%NOTFOUND; 41 | DBMS_OUTPUT.PUT_LINE(lv_name || lv_ptime); 42 | END LOOP; 43 | CLOSE c_user; 44 | END last_change_all; 45 | / 46 | 47 | SHOW ERROR 48 | 49 | CREATE OR REPLACE PROCEDURE last_change (inp_user VARCHAR2) 50 | AUTHID CURRENT_USER 51 | AS 52 | 53 | -- Variable Declaration 54 | 55 | lv_user sys.user$.user#%TYPE; 56 | lv_name sys.user$.name%TYPE; 57 | lv_ptime sys.user$.ptime%TYPE; 58 | 59 | -- Create the CURSOR 60 | 61 | CURSOR c_user IS 62 | SELECT user#, name, ptime FROM sys.user$ WHERE UPPER(name) = UPPER(inp_user); 63 | 64 | -- Output the Information 65 | 66 | BEGIN 67 | OPEN c_user; 68 | LOOP 69 | FETCH c_user INTO lv_user, lv_name, lv_ptime; 70 | EXIT WHEN c_user%NOTFOUND; 71 | DBMS_OUTPUT.PUT_LINE(CHR(10)); 72 | DBMS_OUTPUT.PUT_LINE('Last change for ' || inp_user || ' was ' || lv_ptime); 73 | END LOOP; 74 | CLOSE c_user; 75 | END last_change; 76 | / 77 | -------------------------------------------------------------------------------- /proc_open_cursors.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : tp_open_cursors.sql 2 | REM Author : Craig Richards 3 | REM Created : 27 September 2013 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : Shows the open cursors and the maximum number of cursors 10 | 11 | CREATE OR REPLACE PROCEDURE tp_open_cursors 12 | AS 13 | 14 | -- Variable Declaration 15 | 16 | lv_highest sys.v$sesstat.value%TYPE; 17 | lv_max sys.v$parameter.value%TYPE; 18 | lv_percentage NUMBER; 19 | 20 | -- Create the cursors 21 | 22 | CURSOR c_open_cursor IS 23 | SELECT MAX(a.value) AS highest_open_cursor, p.value AS max_open_cursor 24 | FROM v$sesstat a, v$statname b, v$parameter p 25 | WHERE a.statistic# = b.statistic# 26 | AND b.name = 'opened cursors current' AND p.name= 'open_cursors' 27 | GROUP BY p.value; 28 | 29 | -- Output the Information 30 | 31 | BEGIN 32 | DBMS_OUTPUT.PUT_LINE(CHR(10)||'Open ' || CHR(9) || 'Max Cursors'); 33 | DBMS_OUTPUT.PUT_LINE('==== ' || CHR(9) || '==========='); 34 | OPEN c_open_cursor; 35 | LOOP 36 | FETCH c_open_cursor into lv_highest,lv_max; 37 | EXIT WHEN c_open_cursor%NOTFOUND; 38 | DBMS_OUTPUT.PUT_LINE(lv_highest||CHR(9)||lv_max); 39 | END LOOP; 40 | CLOSE c_open_cursor; 41 | lv_percentage := (lv_highest / lv_max *100); 42 | DBMS_OUTPUT.PUT_LINE (CHR(10) || 'You are using ' || TRUNC(lv_percentage,2) || '% of the open_cursors parameter'); 43 | END tp_open_cursors; 44 | / 45 | -------------------------------------------------------------------------------- /proc_sessions.sql: -------------------------------------------------------------------------------- 1 | REM Filename : proc_sessions.sql 2 | REM Author : Craig Richards 3 | REM Created : 15-Feburary-2012 4 | REM Version : 1.0 5 | REM Modifications : 6 | REM 7 | REM Description : Creates two procedures which shows you the last time a password was changed. 8 | REM The First last_change_all, when called will show you all the users with the last date 9 | REM The next last_change, when called you pass the user and it displays the details for that user 10 | 11 | REM Instructions : For last_change call it by exec last_change('username') 12 | 13 | CREATE OR REPLACE PROCEDURE sessions (inp_user VARCHAR2) 14 | AUTHID CURRENT_USER 15 | AS 16 | 17 | -- Variable Declaration 18 | 19 | lv_username sys.v$session.username%TYPE; 20 | lv_sid sys.v$session.sid%TYPE; 21 | lv_serial# sys.v$session.serial#%TYPE; 22 | lv_status sys.v$session.status%TYPE; 23 | lv_active_count NUMBER; 24 | lv_inactive_count NUMBER; 25 | 26 | -- Create the cursors 27 | 28 | CURSOR c_active IS 29 | SELECT username, sid, serial#, status 30 | FROM sys.V$session 31 | WHERE UPPER(USERNAME) = UPPER(inp_user) 32 | AND status = 'ACTIVE'; 33 | 34 | CURSOR c_inactive IS 35 | SELECT RPAD(username,24,' '), sid, serial#, status 36 | FROM sys.V$session 37 | WHERE UPPER(USERNAME) = UPPER(inp_user) 38 | AND status != 'ACTIVE'; 39 | 40 | CURSOR c_active_count IS 41 | select count(*) from v$session where status = 'ACTIVE' 42 | and UPPER(USERNAME) = UPPER(inp_user); 43 | 44 | CURSOR c_inactive_count IS 45 | select count(*) from v$session where status != 'ACTIVE' 46 | and UPPER(USERNAME) = UPPER(inp_user); 47 | 48 | -- Output the Information 49 | 50 | BEGIN 51 | DBMS_OUTPUT.PUT_LINE('Session Counts :'); 52 | DBMS_OUTPUT.PUT_LINE('================'); 53 | OPEN c_active_count; 54 | LOOP 55 | FETCH c_active_count INTO lv_active_count; 56 | EXIT WHEN c_active_count%NOTFOUND; 57 | DBMS_OUTPUT.PUT_LINE(inp_user || ' has ' || lv_active_count || ' active sessions'); 58 | END LOOP; 59 | CLOSE c_active_count; 60 | 61 | OPEN c_inactive_count; 62 | LOOP 63 | FETCH c_inactive_count INTO lv_inactive_count; 64 | EXIT WHEN c_inactive_count%NOTFOUND; 65 | DBMS_OUTPUT.PUT_LINE(inp_user || ' has ' || lv_inactive_count || ' inactive sessions'); 66 | END LOOP; 67 | CLOSE c_inactive_count; 68 | 69 | OPEN c_active; 70 | DBMS_OUTPUT.PUT_LINE(CHR(10)); 71 | DBMS_OUTPUT.PUT_LINE('Active Session Information for : ' || inp_user); 72 | DBMS_OUTPUT.PUT_LINE(CHR(10)); 73 | DBMS_OUTPUT.PUT_LINE('USERNAME' || CHR(9) || 'SID' || CHR(9) || 'SERIAL#' || CHR(9) || 'STATUS'); 74 | LOOP 75 | FETCH c_active INTO lv_username , lv_sid, lv_serial#, lv_status; 76 | EXIT WHEN c_active%NOTFOUND; 77 | DBMS_OUTPUT.PUT_LINE(lv_username || CHR(9) || CHR(9) || lv_sid || CHR(9) || lv_serial# || CHR(9) || lv_status); 78 | END LOOP; 79 | CLOSE c_active; 80 | 81 | OPEN c_inactive; 82 | DBMS_OUTPUT.PUT_LINE(CHR(10)); 83 | DBMS_OUTPUT.PUT_LINE('Inactive Session Information for : ' || inp_user); 84 | DBMS_OUTPUT.PUT_LINE(CHR(10)); 85 | DBMS_OUTPUT.PUT_LINE('USERNAME' || CHR(9) || 'SID' || CHR(9) || 'SERIAL#' || CHR(9) || 'STATUS'); 86 | LOOP 87 | FETCH c_inactive INTO lv_username , lv_sid, lv_serial#, lv_status; 88 | EXIT WHEN c_inactive%NOTFOUND; 89 | DBMS_OUTPUT.PUT_LINE(lv_username || CHR(9) || CHR(9) || lv_sid || CHR(9) || lv_serial# || CHR(9) || lv_status); 90 | END LOOP; 91 | CLOSE c_inactive; 92 | END sessions; 93 | / 94 | SHOW ERROR 95 | -------------------------------------------------------------------------------- /proc_show_events.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : proc_show_events.sql 2 | REM Author : Craig Richards 3 | REM Created : 11 April 2013 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : Create a procedure you can call to show what events are set in the database, this is for sessions mainly, but if they are set in the database they will exist in all sessions 10 | 11 | CREATE OR REPLACE PROCEDURE cr_show_events 12 | AS 13 | event_level NUMBER; 14 | BEGIN 15 | FOR i IN 10000..10999 LOOP 16 | sys.dbms_system.read_ev(i,event_level); 17 | IF (event_level > 0) THEN 18 | DBMS_OUTPUT.ENABLE(1000000); 19 | DBMS_OUTPUT.PUT_LINE('Event '||to_char(i)||' set at level '|| 20 | TO_CHAR(event_level)); 21 | END IF; 22 | END LOOP; 23 | END; 24 | / 25 | -------------------------------------------------------------------------------- /proc_table_pk.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : proc_table_pk.sql 2 | REM Author : Craig Richards 3 | REM Created : 16th November 2012 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : Create a procedure you can call to check the primary key for a table name passed in 10 | 11 | CREATE OR REPLACE PROCEDURE table_pk (p_tab VARCHAR2) 12 | AUTHID CURRENT_USER 13 | AS 14 | 15 | -- Variable Declaration 16 | 17 | LV_TABLE_NAME dba_cons_columns.table_name%TYPE; 18 | LV_CONSTRAINT_NAME dba_cons_columns.constraint_name%TYPE; 19 | LV_COLUMN_NAME dba_cons_columns.column_name%TYPE; 20 | LV_POSITION dba_cons_columns.position%TYPE; 21 | LV_STATUS dba_constraints.status%TYPE; 22 | 23 | -- Create the cursor 24 | 25 | CURSOR c_tab_pk IS 26 | SELECT dbcc.table_name,dbcc.constraint_name,dbcc.column_name,dbcc.position,dbc.status 27 | FROM dba_cons_columns dbcc, dba_constraints dbc 28 | WHERE dbcc.constraint_name = dbc.constraint_name 29 | AND dbcc.table_name = dbc.table_name 30 | AND dbc.constraint_TYPE = 'P' 31 | AND dbc.table_name = UPPER(p_tab); 32 | 33 | -- Output the information 34 | 35 | BEGIN 36 | OPEN c_tab_pk; 37 | LOOP 38 | FETCH c_tab_pk INTO LV_TABLE_NAME, LV_CONSTRAINT_NAME, LV_COLUMN_NAME, LV_POSITION, LV_STATUS; 39 | EXIT WHEN c_tab_pk%NOTFOUND; 40 | DBMS_OUTPUT.PUT_LINE(lv_table_name||CHR(9)||lv_constraint_name||CHR(9)||lv_column_name||CHR(9)||lv_position||CHR(9)||lv_status); 41 | END LOOP; 42 | CLOSE c_tab_pk; 43 | END table_pk; 44 | / 45 | -------------------------------------------------------------------------------- /proc_update_mail.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : tp_datamgt_bonds.sql 2 | REM Author : Craig Richards 3 | REM Created : 20 May 2013 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : This procedure updates data 10 | 11 | CREATE OR REPLACE PROCEDURE tp_datamgt_bonds 12 | AUTHID CURRENT_USER 13 | AS 14 | 15 | --Variable Declaration 16 | 17 | num_rows NUMBER; 18 | v_From VARCHAR2(80) := 'From@mail.com'; 19 | v_Recipient VARCHAR2(80) := 'To@mail.com'; 20 | v_Subject VARCHAR2(80) := 'Your Update Statement'; 21 | v_Mail_Host VARCHAR2(30) := 'mailhost'; 22 | v_Mail_Conn UTL_SMTP.Connection; 23 | CRLF VARCHAR2(2) := CHR(13)||CHR(10); 24 | 25 | BEGIN 26 | 27 | -- Update SQL Statement 28 | 29 | UPDATE table 30 | SET active_flag = 'N' 31 | WHERE a=b; 32 | 33 | num_rows := SQL%ROWCOUNT; 34 | 35 | -- Send an email with the amount of rows that have been updated 36 | 37 | v_Mail_Conn := UTL_SMTP.Open_Connection(v_Mail_Host, 25); 38 | UTL_SMTP.Helo(v_Mail_Conn, v_Mail_Host); 39 | UTL_SMTP.Mail(v_Mail_Conn, v_From); 40 | UTL_SMTP.Rcpt(v_Mail_Conn, v_Recipient); 41 | UTL_SMTP.Data(v_Mail_Conn,'Date: ' || to_char(sysdate, 'Dy, DD Mon YYYY hh24:mi:ss') || CRLF || 42 | 'From: ' || v_From || CRLF || 43 | 'Subject: '|| v_Subject || CRLF || 44 | 'To: ' || v_Recipient || CRLF ||CRLF ||'Procedure Ran and there were ' || num_rows || ' rows updated '|| CRLF || CRLF || 'Regards' ||CRLF ||'DBA Team'); 45 | 46 | -- Exception Code 47 | 48 | EXCEPTION 49 | WHEN UTL_SMTP.Transient_Error OR UTL_SMTP.Permanent_Error THEN 50 | RAISE_APPLICATION_ERROR(-20000, 'Unable to send mail: '||SQLERRM); 51 | DBMS_OUTPUT.PUT_LINE (num_rows || ' Rows Updated'); 52 | END; 53 | / 54 | -------------------------------------------------------------------------------- /rebuild_indexes.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : rebuild_indexes.sql 2 | REM Author : Craig Richards 3 | REM Created : 20 May 2013 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : This procedure generates and runs the codes to rebuild the indexes for a given table 10 | 11 | CREATE OR REPLACE PROCEDURE rebuild_indexes (p_owner IN VARCHAR2:=NULL, p_table_name IN VARCHAR2:=NULL, p_tblspc IN VARCHAR2:=NULL) 12 | AS 13 | 14 | -- Variable Declaration 15 | 16 | ERROR EXCEPTION; 17 | rebuild_indexes VARCHAR2(2000); 18 | 19 | BEGIN 20 | 21 | -- Check the inputs exist 22 | 23 | IF p_owner IS NULL OR NVL(length(trim(p_owner)),0)=0 THEN raise error; 24 | ELSIF p_table_name IS NULL OR NVL(length(trim(p_table_name)),0)=0 THEN raise error; 25 | ELSIF p_tblspc IS NULL OR NVL(length(trim(p_tblspc)),0)=0 THEN raise error; 26 | END IF; 27 | 28 | -- Check the Tablespace 29 | 30 | IF p_tblspc = 'REORG' THEN 31 | tp_resize_reorg(2000); 32 | END IF; 33 | 34 | DBMS_OUTPUT.PUT_LINE(' The Commands that were executed wereis :' || CHR(10)); 35 | 36 | FOR indexes_to_rebuild IN 37 | (SELECT index_name FROM dba_indexes WHERE owner = p_owner AND table_name = p_table_name) 38 | LOOP 39 | rebuild_indexes := 'ALTER INDEX ' ||p_owner||'.'||indexes_to_rebuild.index_name|| ' rebuild tablespace '|| p_tblspc; 40 | DBMS_OUTPUT.PUT_LINE(rebuild_indexes); 41 | EXECUTE IMMEDIATE rebuild_indexes; 42 | END LOOP; 43 | 44 | EXCEPTION 45 | WHEN error THEN 46 | DBMS_OUTPUT.PUT_LINE (CHR(10) || 'ORA-77777 : You need to pass the OWNER, TABLE NAME, TABLESPACE TO REBUILD TO'); 47 | DBMS_OUTPUT.PUT_LINE ('ie exec tp_rebuild_indexes(''SCOTT'',''EMP'',''REORG'');'); 48 | END tp_rebuild_indexes; 49 | / 50 | 51 | 52 | -------------------------------------------------------------------------------- /redo_log_switches.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : redo_log_switches.sql 2 | REM Author : Craig Richards 3 | REM Created : 30 November 2012 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : Show the redo log switching in the database, two different ways to display the information 10 | 11 | COLUMN c1 FORMAT A10 HEADING "Month" 12 | COLUMN c2 FORMAT A25 HEADING "Archive Date" 13 | COLUMN c3 FORMAT 999 HEADING "Switches" 14 | 15 | COMPUTE AVG of C ON A 16 | COMPUTE AVG of C ON REPORT 17 | 18 | BREAK ON A SKIP 1 ON REPORT SKIP 1 19 | 20 | SELECT TO_CHAR(TRUNC(first_time), 'Month') c1, TO_CHAR(TRUNC(first_time), 'Day : DD-MON-YYYY') c2, COUNT(*) c3 21 | FROM v$log_history 22 | WHERE TRUNC(first_time) > last_day(SYSDATE-30) +1 23 | GROUP BY trunc(first_time); 24 | 25 | -- Daily Count and Size of Redo Log Space (Single Instance) 26 | 27 | SELECT A.*, ROUND(A.COUNT#*B.AVG#/1024/1024) Daily_Avg_Mb 28 | FROM (SELECT TO_CHAR(First_Time,'YYYY-MM-DD') DAY, COUNT(1) COUNT#, MIN(RECID) MIN#, MAX(RECID) MAX# 29 | FROM v$log_history 30 | GROUP BY TO_CHAR(First_Time,'YYYY-MM-DD') 31 | ORDER BY 1) A, 32 | ( 33 | SELECT AVG(BYTES) AVG#, COUNT(1) COUNT#, MAX(BYTES) Max_Bytes, MIN(BYTES) Min_Bytes 34 | FROM v$log) B; -------------------------------------------------------------------------------- /rollback_extensions.sql: -------------------------------------------------------------------------------- 1 | REM Filename : rollback_extensions.sql 2 | REM Author : Craig Richards 3 | REM Created : 4 | REM Version : 1.0 5 | REM Modifications : 6 | REM 7 | REM Description : Shows roll back segment extensions to show if they are sized correctly 8 | 9 | SET PAUSE OFF 10 | SET FEEDBACK OFF 11 | 12 | COLUMN name FORMAT A20 13 | 14 | SELECT name, optsize, shrinks, aveshrink, extends,wraps 15 | FROM v$rollstat, v$rollname 16 | WHERE v$rollstat.usn=v$rollname.usn; 17 | 18 | REM End of Script 19 | -------------------------------------------------------------------------------- /search_long.sql: -------------------------------------------------------------------------------- 1 | REM Filename : search_long.sql 2 | REM Author : Craig Richards 3 | REM Created : 15-March-2007 4 | REM Version : 1.0 5 | REM Modifications : 6 | REM 7 | REM Description : Two Examples to search the long text field in DBA_VIEWS 8 | 9 | PROMPT Edit the two pieces of code below to enable you to search the long field in DBA_VIEWS 10 | PROMPT 11 | PROMPT In the example below enter the search text in lower case 12 | 13 | REM SET SERVEROUTPUT ON SIZE 10000 14 | REM DECLARE 15 | REM CURSOR c_dbv IS 16 | REM SELECT owner,view_name,text 17 | REM FROM all_views; 18 | REM txt VARCHAR(32000); 19 | REM searchstring VARCHAR(100) := 'scott.emp'; 20 | REM BEGIN 21 | REM FOR ct IN c_dbv LOOP 22 | REM IF INSTR(LOWER(ct.text), LOWER(searchstring)) > 0 THEN 23 | REM DBMS_OUTPUT.PUT_LINE(ct.owner||'.'||ct.view_name); 24 | REM END IF; 25 | REM END LOOP; 26 | REM END; 27 | REM / 28 | 29 | 30 | REM SET SERVEROUTPUT ON 31 | REM 32 | REM BEGIN 33 | REM FOR x IN (SELECT * FROM dba_views ) LOOP 34 | REM IF ( x.view_text LIKE '%customer_address%' ) THEN 35 | REM DBMS_OUTPUT.PUT_LINE( x.view_name ); 36 | REM END IF; 37 | REM END LOOP; 38 | REM END; 39 | REM / 40 | 41 | PROMPT The above sample will work as long as the view text is 32k or less. 42 | 43 | REM End of Script 44 | -------------------------------------------------------------------------------- /show_events.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : show_events.sql 2 | REM Author : Craig Richards 3 | REM Created : 11 April 2013 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : Shows what events are set in the database, this is for sessions mainly, but if they are set in the database they will exist in all sessions 10 | 11 | SET SERVEROUTPUT ON; 12 | 13 | DECLARE 14 | event_level NUMBER; 15 | BEGIN 16 | FOR i IN 10000..10999 LOOP 17 | sys.dbms_system.read_ev(i,event_level); 18 | IF (event_level > 0) THEN 19 | DBMS_OUTPUT.PUT_LINE('Event '||to_char(i)||' set at level '|| 20 | TO_CHAR(event_level)); 21 | END IF; 22 | END LOOP; 23 | END; 24 | / 25 | -------------------------------------------------------------------------------- /tab_desc.sql: -------------------------------------------------------------------------------- 1 | REM Filename : tab_desc.sql 2 | REM Author : Craig Richards 3 | REM Created : 25-February-2009 4 | REM Version : 1.0 5 | REM Modifications : 6 | REM 7 | REM Description : Gives a full description of the table, including all constraints, indexes and comments etc 8 | 9 | SET ECHO OFF 10 | SET TERM ON 11 | 12 | ACCEPT table_name PROMPT "Enter the name of the table: " 13 | ACCEPT tab_owner PROMPT "Enter table owner: " 14 | 15 | SET HEADING ON 16 | SET NEWPAGE 0 17 | 18 | TTITLE 'Table Description - Space Definition' 19 | 20 | SPOOL tab_desc.log 21 | 22 | BTITLE off 23 | COLUMN nline newline 24 | 25 | SET PAGESIZE 54 26 | SET LINESIZE 78 27 | SET HEADING OFF 28 | SET EMBEDDED OFF 29 | SET VERIFY OFF 30 | 31 | ACCEPT report_comment char PROMPT 'Enter a comment to identify the system: ' 32 | SET TERMOUT OFF 33 | SELECT 'Date - '||TO_CHAR(sysdate,'Day Ddth Month YYYY HH24:MI:SS'), 34 | 'At - '||'&&report_comment' nline, 35 | 'Username - '||User nline 36 | FROM sys.dual 37 | / 38 | PROMPT 39 | 40 | SET EMBEDDED ON 41 | SET HEADING ON 42 | 43 | COLUMN Ts FORMAT a30 44 | COLUMN Ta FORMAT a30 45 | COLUMN Clu FORMAT a30 46 | COLUMN Pcf FORMAT 99999999999990 47 | COLUMN Pcu FORMAT 99999999999990 48 | COLUMN Int FORMAT 99,999,999,990 49 | COLUMN Mat FORMAT 99,999,999,990 50 | COLUMN Inx FORMAT 99,999,999,990 51 | COLUMN Nxt FORMAT 99,999,999,990 52 | COLUMN Mix FORMAT 99,999,999,990 53 | COLUMN Max FORMAT 99,999,999,990 54 | COLUMN Pci FORMAT 99999999999990 55 | COLUMN Num FORMAT 99,999,999,990 56 | COLUMN Blo FORMAT 99,999,999,990 57 | COLUMN Emp FORMAT 99,999,999,990 58 | COLUMN Avg FORMAT 99,999,999,990 59 | COLUMN Cha FORMAT 99,999,999,990 60 | COLUMN Rln FORMAT 99,999,999,990 61 | COLUMN Hdg FORMAT a30 newline 62 | SET HEADING OFF 63 | SELECT 'Table Name' Hdg, table_name Ta, 64 | 'Tablespace_name' Hdg, tablespace_name Ts, 65 | 'Cluster Name' Hdg, cluster_name Clu, 66 | '% Free' Hdg, Pct_Free Pcf, 67 | '% Used' Hdg, Pct_Used Pcu, 68 | 'Ini Trans' Hdg, Ini_Trans Int, 69 | 'Max Trans' Hdg, Max_Trans Mat, 70 | 'Initial Extent (K)' Hdg, Initial_Extent/1024 Inx, 71 | 'Next Extent (K)' Hdg, Next_extent/1024 Nxt, 72 | 'Min Extents' Hdg, Min_extents Mix, 73 | 'Max Extents' Hdg, Max_extents Max, 74 | '% Increase' Hdg, Pct_Increase Pci, 75 | 'Number of Rows' Hdg, Num_Rows Num, 76 | 'Number of Blocks' Hdg, Blocks Blo, 77 | 'Number of Empty Blocks' Hdg, Empty_Blocks Emp, 78 | 'Average Space' Hdg, Avg_Space Avg, 79 | 'Chain Count' Hdg, Chain_Cnt Cha, 80 | 'Average Row Length' Hdg, Avg_Row_len Rln 81 | FROM dba_tables 82 | WHERE table_name = UPPER('&&table_name') 83 | AND owner=UPPER('&&tab_owner') 84 | / 85 | 86 | SET HEADING ON 87 | 88 | PROMPT 89 | PROMPT Comments on the Table 90 | PROMPT 91 | 92 | SELECT COMMENTS FROM dba_tab_comments 93 | WHERE table_name = UPPER('&&table_name') 94 | AND owner=UPPER('&&tab_owner') 95 | / 96 | 97 | SET HEADING ON 98 | SET EMBEDDED OFF 99 | 100 | COLUMN Cn FORMAT A30 HEADING 'Column Name' 101 | COLUMN Fo FORMAT A15 HEADING 'Type' 102 | COLUMN Nu FORMAT A8 HEADING 'Null' 103 | COLUMN Nds FORMAT 99,999,999 HEADING 'No Distinct' 104 | COLUMN Dfl FORMAT 9999 HEADING 'Dflt Len' 105 | COLUMN Dfv FORMAT A40 HEADING 'Default Value' 106 | 107 | TTITLE 'Table Description - Column Definition' 108 | 109 | SELECT Column_name Cn, data_type || 110 | DECODE(Data_type,'NUMBER','('||TO_CHAR(data_precision)||DECODE(data_scale,0,'',','||TO_CHAR(data_scale))||')','VARCHAR2', 111 | '('||TO_CHAR(Data_Length)||')','CHAR', 112 | '('||TO_CHAR(Data_Length)||')','DATE','','LONG','','Error') Fo, 113 | DECODE(NUllable,'Y','','NOT NULL') Nu, 114 | Num_Distinct Nds, 115 | Default_length Dfl, 116 | Data_Default Dfv 117 | FROM dba_tab_columns 118 | WHERE table_name = UPPER('&&table_name') 119 | AND owner=UPPER('&&tab_owner') 120 | ORDER BY COLUMN_ID 121 | / 122 | 123 | TTITLE off 124 | 125 | PROMPT 126 | PROMPT TABLE CONSTRAINTS 127 | PROMPT 128 | 129 | SET HEADING ON 130 | 131 | COLUMN Cn FORMAT a30 HEADING 'Primary Constraint' 132 | COLUMN Cln FORMAT a45 HEADING 'Table.Column Name' 133 | COLUMN Ct FORMAT a7 HEADING 'Type' 134 | COLUMN St FORMAT a7 HEADING 'Status' 135 | COLUMN Ro FORMAT a30 HEADING 'Ref Owner| Constraint Name' 136 | COLUMN Se FORMAT a70 HEADING 'Criteria ' newline 137 | 138 | BREAK ON Cn ON St 139 | 140 | SET EMBEDDED ON 141 | 142 | PROMPT Primary Key 143 | PROMPT 144 | 145 | SELECT CNS.Constraint_name Cn, 146 | CNS.Table_name||'.'||CLS.Column_Name Cln,INITCAP(CNS.Status) St 147 | FROM dba_constraints CNS, DBA_CONS_COLUMNS CLS 148 | WHERE CNS.Table_name=UPPER('&&table_name') 149 | AND CNS.Owner=UPPER('&&tab_owner') 150 | AND CNS.Constraint_Type='P' 151 | AND CNS.Constraint_Name=CLS.Constraint_name 152 | ORDER BY CLS.Position 153 | / 154 | 155 | PROMPT Unique Key 156 | PROMPT 157 | 158 | COLUMN Cn FORMAT a30 HEADING 'Unique Key' 159 | 160 | SELECT CNS.Constraint_name Cn, 161 | CNS.Table_name||'.'||CLS.Column_Name Cln, 162 | INITCAP(CNS.Status) St 163 | FROM dba_constraints CNS, DBA_CONS_COLUMNS CLS 164 | WHERE cns.Table_name=UPPER('&&table_name') 165 | AND CNS.Owner=UPPER('&&tab_owner') 166 | AND CNS.Constraint_Type='U' 167 | AND CNS.Constraint_name=CLS.Constraint_name 168 | ORDER BY CLS.Position 169 | / 170 | 171 | PROMPT Foreign Keys 172 | PROMPT 173 | 174 | COLUMN Cln FORMAT a38 HEADING 'Foreign Key' newline 175 | COLUMN Clfn FORMAT a38 HEADING 'Parent Key' 176 | COLUMN Cn FORMAT a40 HEADING 'Foreign Constraint' 177 | 178 | BREAK ON Cn ON St SKIP 1 179 | 180 | SELECT cns.constraint_name Cn, 181 | INITCAP(CNS.Status) St, 182 | CLS.Table_name||'.'||cls.COLUMN_name Cln, 183 | CLF.Owner||'.'||CLf.Table_name||'.'||clf.COLUMN_name Clfn 184 | FROM dba_constraints cns, dba_cons_COLUMNs clf, dba_cons_COLUMNs cls 185 | WHERE cns.table_name=UPPER('&&table_name') 186 | AND CNS.Owner=UPPER('&&tab_owner') 187 | AND CNS.Constraint_Type='R' 188 | AND cns.constraint_name=cls.constraint_name 189 | AND clf.constraint_name = cns.r_constraint_name 190 | AND clf.owner = cns.owner 191 | AND clf.position = cls.position 192 | ORDER BY cns.constraint_name, cls.position 193 | / 194 | 195 | PROMPT Check Constraints 196 | PROMPT 197 | 198 | COLUMN Cn FORMAT a40 HEADING 'Check Constraint' 199 | COLUMN Se FORMAT a75 HEADING 'Criteria ' 200 | 201 | SET ARRAYSIZE 1 202 | SET LONG 32000 203 | 204 | SELECT constraint_name Cn,INITCAP(Status) St, 205 | Search_Condition Se 206 | FROM DBA_CONSTRAINTS 207 | WHERE table_name=UPPER('&&table_name') 208 | AND owner=UPPER('&&tab_owner') 209 | AND Constraint_Type='C' 210 | / 211 | 212 | PROMPT View Constraints 213 | PROMPT 214 | 215 | COLUMN Cn FORMAT a40 HEADING 'View Constraint' 216 | SELECT Constraint_Name Cn, 217 | INITCAP(Status) St, 218 | Search_Condition Se 219 | FROM DBA_CONSTRAINTS 220 | WHERE table_name=UPPER('&&table_name') 221 | AND owner=UPPER('&&tab_owner') 222 | AND Constraint_Type='V' 223 | / 224 | 225 | SPOOL OFF 226 | 227 | SET ARRAYSIZE 30 228 | SET NEWPAGE 1 VERIFY ON FEEDBACK 6 PAGESIZE 24 LINESIZE 80 229 | SET HEADING ON EMBEDDED OFF TERMOUT ON ARRAYSIZE 15 LONG 80 230 | 231 | UNDEFINE table_name 232 | UNDEFINE tab_owner 233 | UNDEFINE report_comment 234 | 235 | TTITLE OFF 236 | BTITLE OFF 237 | CLEAR COLUMNS 238 | 239 | REM End of Script 240 | -------------------------------------------------------------------------------- /tableinfo.sql: -------------------------------------------------------------------------------- 1 | REM Filename : tableinfo.sql 2 | REM Author : Craig Richards 3 | REM Created : 4 | REM Version : 1.0 5 | REM Modifications : 6 | REM 7 | REM Description : Displays everything assocaited with a given table 8 | 9 | SET PAGES 1000 10 | SET LINES 200 11 | SET AUTOTRACE OFF 12 | SET TIMING OFF 13 | SET FEEDBACK ON 14 | SET VERIFY OFF 15 | 16 | COLUMN COMMENTS FORMAT A50 17 | COLUMN column_name FORMAT A35 18 | COLUMN Data_Type FORMAT A15 19 | COLUMN DATA_DEFAULT FORMAT A20 20 | COLUMN "PK Column" FORMAT A35 21 | COLUMN "FK Column" FORMAT A20 22 | 23 | UNDEF Owner 24 | ACCEPT Owner PROMPT 'Enter Owner :' 25 | UNDEF Table_Name 26 | ACCEPT Table_Name PROMPT 'Enter Table Name :' 27 | 28 | SET HEADING OFF 29 | 30 | PROMPT 31 | PROMPT Comments for Table &Table_Name. 32 | SELECT COMMENTS 33 | FROM ALL_TAB_COMMENTS 34 | WHERE TABLE_NAME = UPPER('&Table_Name.') 35 | AND Owner = UPPER('&Owner.') ; 36 | 37 | SET HEADING ON 38 | PROMPT 39 | PROMPT Column Details for Table &Table_Name. 40 | 41 | SELECT ROWNUM "Sr No", T.COLUMN_NAME , T.Data_Type , T.DATA_LENGTH, 42 | DECODE(T.Nullable, 'N' , 'NOT NULL' , 'Y', ' ') NULLABLE , T.Data_Default , C.Comments 43 | FROM ALL_TAB_COLS T , All_Col_Comments C 44 | WHERE T.OWNER = C.OWNER 45 | AND T.TABLE_NAME = C.TABLE_NAME 46 | AND T.COLUMN_NAME = C.COLUMN_NAME 47 | AND T.TABLE_NAME = UPPER('&Table_Name.') 48 | AND T.Owner = UPPER('&Owner.') ; 49 | 50 | PROMPT 51 | PROMPT PRIMARY KEY for Table &Table_Name. 52 | 53 | select COLUMN_NAME 54 | FROM ALL_CONS_COLUMNS 55 | WHERE TABLE_NAME = UPPER('&Table_Name.') 56 | AND Owner = UPPER('&Owner.') 57 | AND CONSTRAINT_NAME = ( SELECT CONSTRAINT_NAME 58 | FROM ALL_CONSTRAINTS 59 | WHERE TABLE_NAME = UPPER('&Table_Name.') 60 | AND CONSTRAINT_TYPE = 'P' 61 | AND Owner = UPPER('&Owner.') 62 | )ORDER BY POSITION 63 | / 64 | 65 | PROMPT 66 | PROMPT INDEXES for Table &Table_Name. 67 | 68 | BREAK ON INDEX_NAME ON UNIQUENESS SKIP 1 69 | 70 | SELECT I.INDEX_NAME , C.COLUMN_NAME , I.UNIQUENESS 71 | FROM ALL_IND_COLUMNS C , ALL_INDEXES I 72 | WHERE C.INDEX_NAME = I.INDEX_NAME 73 | AND C.TABLE_NAME = I.TABLE_NAME 74 | AND I.TABLE_NAME = UPPER('&Table_Name.') 75 | AND I.Owner = UPPER('&Owner.') 76 | AND C.Table_Owner = UPPER('&Owner.') 77 | AND NOT EXISTS ( SELECT 'X' 78 | FROM ALL_CONSTRAINTS 79 | WHERE CONSTRAINT_NAME = I.INDEX_NAME 80 | AND Owner = UPPER('&Owner.')) 81 | ORDER BY INDEX_NAME , COLUMN_POSITION 82 | / 83 | 84 | 85 | CLEAR BREAKS 86 | 87 | PROMPT 88 | PROMPT FOREIGN KEYS for Table &Table_Name. 89 | 90 | BREAK ON CONSTRAINT_NAME ON TABLE_NAME ON R_CONSTRAINT_NAME SKIP 1 91 | 92 | COLUMN POSITION NOPRINT 93 | 94 | SELECT UNIQUE A.CONSTRAINT_NAME, C.COLUMN_NAME "FK Column" , B.TABLE_NAME || '.' || B.COLUMN_NAME "PK Column", A.R_CONSTRAINT_NAME , C.POSITION FROM ALL_CONSTRAINTS A, ALL_CONS_COLUMNS B, ALL_CONS_COLUMNS C 95 | WHERE A.R_CONSTRAINT_NAME=B.CONSTRAINT_NAME AND B.OWNER=UPPER('&OWNER') 96 | AND A.CONSTRAINT_NAME=C.CONSTRAINT_NAME AND A.OWNER=C.OWNER AND A.OWNER = B.OWNER 97 | AND A.TABLE_NAME=C.TABLE_NAME AND B.POSITION=C.POSITION AND A.TABLE_NAME LIKE UPPER('&TABLE_NAME') 98 | ORDER BY A.CONSTRAINT_NAME, C.POSITION 99 | / 100 | 101 | COLUMN POSITION NOPRINT 102 | CLEAR BREAKS 103 | 104 | PROMPT 105 | PROMPT CONSTRAINTS for Table &Table_Name. 106 | 107 | SELECT CONSTRAINT_NAME , SEARCH_CONDITION 108 | FROM ALL_CONSTRAINTS 109 | WHERE TABLE_NAME = UPPER('&Table_Name.') 110 | AND Owner = UPPER('&Owner.') 111 | AND CONSTRAINT_TYPE NOT IN ( 'P' , 'R'); 112 | 113 | PROMPT 114 | PROMPT ROWCOUNT for Table &Table_Name. 115 | 116 | SET FEEDBACK OFF 117 | SET SERVEROUTPUT ON 118 | 119 | DECLARE N NUMBER ; 120 | V VARCHAR2(100) ; 121 | BEGIN 122 | V := 'SELECT COUNT(*) FROM ' || UPPER('&Table_Name.') ; 123 | EXECUTE IMMEDIATE V INTO N ; 124 | DBMS_OUTPUT.PUT_LINE (N); 125 | END; 126 | / 127 | 128 | SET FEEDBACK ON 129 | 130 | PROMPT 131 | PROMPT Tables That REFER to Table &Table_Name. 132 | 133 | BREAK ON TABLE_NAME ON CONSTRAINT_NAME skip 1 134 | 135 | SELECT C.TABLE_NAME , C.CONSTRAINT_Name , CC.COLUMN_NAME "FK Column" 136 | FROM ALL_CONSTRAINTS C, All_Cons_colUMNs CC 137 | WHERE C.Constraint_Name = CC.Constraint_Name 138 | AND R_CONSTRAINT_NAME = ( SELECT CONSTRAINT_NAME 139 | FROM ALL_CONSTRAINTS 140 | WHERE TABLE_NAME = UPPER('&Table_Name.') 141 | AND CONSTRAINT_TYPE = 'P' 142 | AND Owner = UPPER('&Owner.')) 143 | AND C.Owner = UPPER('&Owner.') 144 | / 145 | 146 | 147 | 148 | CLEAR BREAKS 149 | 150 | PROMPT 151 | PROMPT PARTITIONED COLUMNS for Table &Table_Name. 152 | 153 | SELECT COLUMN_NAME , COLUMN_POSITION 154 | FROM All_Part_Key_Columns 155 | WHERE NAME = UPPER('&Table_Name.') 156 | AND Owner = UPPER('&Owner.') ; 157 | 158 | PROMPT 159 | PROMPT PARTITIONS for Table &Table_Name. 160 | 161 | SELECT PARTITION_NAME , NUM_ROWS 162 | FROM All_Tab_Partitions 163 | WHERE TABLE_NAME = UPPER('&Table_Name.') 164 | AND Table_Owner = UPPER('&Owner.') ; 165 | 166 | PROMPT 167 | PROMPT TRIGGERS for Table &Table_Name. 168 | 169 | SELECT Trigger_Name 170 | FROM All_Triggers 171 | WHERE TABLE_NAME = UPPER('&Table_Name.') 172 | AND Owner = UPPER('&Owner.') ; 173 | 174 | 175 | PROMPT 176 | PROMPT DEPENDANTS for Table &Table_Name. 177 | 178 | BREAK ON TYPE SKIP 1 179 | 180 | SELECT TYPE , NAME 181 | FROM ALL_DEPENDENCIES 182 | WHERE REFERENCED_NAME = UPPER('&Table_Name.') 183 | ORDER BY TYPE ; 184 | 185 | CLEAR BREAKS 186 | 187 | SET TERMOUT OFF 188 | SET AUTOTRACE ON 189 | SET TIMING ON 190 | SET TERMOUT ON 191 | 192 | REM End of Script 193 | -------------------------------------------------------------------------------- /test_table.sql: -------------------------------------------------------------------------------- 1 | REM Filename : test_table.sql 2 | REM Author : Craig Richards 3 | REM Created : 18-Mar-2009 4 | REM Version : 1.0 5 | REM Modifications : 6 | REM 7 | REM Description : Creates a test table and inserts 1000 rows 8 | 9 | CREATE OR REPLACE PROCEDURE test_table 10 | AS 11 | 12 | -- Variable Declaration 13 | 14 | lv_count NUMBER; 15 | lv_one VARCHAR2(30) :='TESTONE'; 16 | lv_two VARCHAR2(30) :='TESTTWO'; 17 | lv_three VARCHAR2(30) :='TESTTHREE'; 18 | lv_four VARCHAR2(30) :='TESTFOUR'; 19 | 20 | BEGIN 21 | EXECUTE IMMEDIATE('drop table test'); 22 | EXECUTE IMMEDIATE('Create table test(test1 varchar2(30), test2 varchar2(30), test3 varchar2(30), test4 varchar2(30)) tablespace tools'); 23 | FOR i in 1..1000 LOOP 24 | insert into test (test1,test2,test3,test4) values (lv_one,lv_two,lv_three,lv_four); 25 | END LOOP; 26 | END; 27 | / 28 | 29 | REM End of Script 30 | -------------------------------------------------------------------------------- /tp_stats.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : tp_stats.sql 2 | REM Author : Craig Richards 3 | REM Created : 17 January 2013 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : 10 | 11 | REM Procedure to gather the statistics, this will be called via the DBMS_SCHEDULER 12 | 13 | CREATE OR REPLACE PROCEDURE GATHER_RIMS_STALE_STATISTICS 14 | AS 15 | BEGIN 16 | dbms_stats.gather_schema_stats(ownname=>'RIMS',estimate_percent=>NULL,options=>'GATHER STALE',cascade=>TRUE); 17 | END; 18 | / 19 | 20 | REM DBMS_SCHEDULER job to call the procedure 21 | 22 | BEGIN 23 | dbms_scheduler.create_job 24 | (job_name=>'GATHER_STALE_RIMS_STATISTICS', 25 | repeat_interval => 'FREQ=DAILY; BYDAY=MON,TUE,WED,THU,FRI; BYHOUR=4; BYMINUTE=00', 26 | job_type=>'stored_procedure', 27 | job_action=>'sys.GATHER_RIMS_STALE_STATISTICS', 28 | enabled=>TRUE, 29 | comments=>'GATHER_RIMS_STALE_STATISTICS'); 30 | END; 31 | / -------------------------------------------------------------------------------- /unix_process.sql: -------------------------------------------------------------------------------- 1 | REM Filename : unix_process.sql 2 | REM Author : Craig Richards 3 | REM Created : 27-June-2006 4 | REM Version : 1.1 5 | REM Modifications : 1.1 10th March 2009 (CR) - Added the sid and the serial number 6 | REM 7 | REM Description : Show what program is running when you pass a UNIX PID 8 | 9 | SELECT s.username, s.program, p.spid,s.status,s.sid, s.serial# 10 | FROM v$session s, v$process p 11 | WHERE p.addr = s.paddr 12 | AND p.spid = &PROC_ID; 13 | 14 | REM End of Script 15 | -------------------------------------------------------------------------------- /user_privs.sql: -------------------------------------------------------------------------------- 1 | REM Script Name : user_privs.sql 2 | REM Author : Craig Richards 3 | REM Created : 20 May 2013 4 | REM Last Modified : 5 | REM Version : 1.0 6 | REM 7 | REM Modifications : 8 | REM 9 | REM Description : This code show all privileges for a given user or users, if you pass multiple users you need to do it like USER1','USER2','USER3 etc 10 | 11 | SET PAGESIZE 200 12 | SET LINESIZE 200 13 | SET VERIFY OFF 14 | 15 | COLUMN granted_by_role FORMAT a20 16 | COLUMN obj_owner FORMAT a15 17 | 18 | UNDEFINE Users; 19 | 20 | SELECT a.grantee, b.privilege, a.granted_role AS GRANTED_BY_ROLE, NULL AS OBJECT, NULL AS OBJ_OWNER 21 | FROM dba_role_privs a 22 | JOIN dba_sys_privs b 23 | ON a.granted_role=b.grantee 24 | WHERE a.grantee IN ('&&Users') 25 | UNION 26 | SELECT grantee, privilege, 'n/a', NULL, NULL 27 | FROM dba_sys_privs 28 | WHERE grantee IN ('&&Users') 29 | UNION 30 | SELECT grantee, privilege, ' ', table_name, owner 31 | FROM DBA_TAB_PRIVS 32 | WHERE grantee IN ('&&Users') 33 | UNION 34 | SELECT username, 'QUOTA', DECODE(max_bytes, -1, 'unlimited', max_bytes/1024/1024) MAX_MB, 'TABLESPACE: ' || tablespace_name, NULL 35 | FROM DBA_TS_QUOTAS 36 | WHERE username IN ('&&Users') 37 | ORDER BY grantee, privilege; 38 | 39 | SELECT grantee,granted_role,admin_option FROM dba_role_privs WHERE grantee IN ('&&Users'); 40 | 41 | --------------------------------------------------------------------------------