############################################################ getcode.sql --获得某个存储过程、包、函数代码脚本 set feedback off set heading off set termout off set linesize 1000 set trimspool on
set verify off spool &1..sql prompt set define off select decode( type'-'to_char(line,'fm99999'), 'PACKAGE BODY-1', '/'chr(10), null) decode(line,1,'create or replace ', '' ) text text from user_source where name = upper('&&1') order by type, line; prompt / prompt set define on spool off set feedback on set heading on set termout on set linesize 100 ############################################################ getallcode.sql --获得所以存储过程、包、函数代码脚本 set termout off set heading off set feedback off set linesize 50 spool xtmpx.sql select '@getcode ' object_name from user_objects where object_type in ( 'PROCEDURE', 'FUNCTION', 'PACKAGE' ) / spool off spool getallcode_INSTALL.sql select '@' object_name from user_objects where object_type in ( 'PROCEDURE', 'FUNCTION', 'PACKAGE' ) / spool off set heading on set feedback on set linesize 130 set termout on @xtmpx.sql ############################################################ getaview.sql --获得某个视图脚本 set heading off set feedback off set linesize 1000 set trimspool on set verify off set termout off set embedded on set long 50000 column column_name format a1000 column text format a1000 spool &1..sql prompt create or replace view &1 ( select decode(column_id,1,'',',') column_name column_name from user_tab_columns where table_name = upper('&1') order by column_id / prompt ) as select text from user_views where view_name = upper('&1') / prompt / spool off set heading on set feedback on set verify on set termout on ############################################################ getallview.sql --获得所有视图脚本 set heading off set feedback off set linesize 1000 set trimspool on set verify off set termout off set embedded on spool tmp.sql select '@getaview ' view_name from user_views / spool off set termout on set heading on set feedback on set verify on @tmp ########################################################## gettrig.sql --获得触发器脚本 set heading off set feedback off set linesize 1000 set trimspool on set verify off set termout off set embedded on spool &1..sql select 'create or replace trigger "' trigger_name'"'chr(10) decode(substr(trigger_type,1,1), 'A','AFTER','B',BEFORE','I','INSTEAD OF') CHR(10) triggering_eventchr(10) 'ON"'table_owner'"."' table_name'"'chr(10) decode(instr(trigger_type,'EACH ROW'),0,null, 'FOR EACH ROW')chr(10), trigger_body from user_triggers where trigger_name = upper('&1') / prompt / spool off set verify on set feedback on set termout on set heading on ################################################################# analyze.sql --分析某用户下的表及索引(大表将以评估的方式分析) set serveroutput on size 100000 declare v_per number(3); v_start number := dbms_utility.get_time; v_end number; begin for rec in (select segment_name,segment_type,ceil(sum(bytes)/1024/1024) segment_size from user_segments group by segment_name,segment_type) loop if rec.segment_type = 'INDEX' then dbms_stats.gather_index_stats(ownname=>'?
??', --自己改一下 INDNAME=>rec.segment_name ); -- dbms_output.put_line(rec.segment_name' 'rec.segment_size'm 'ceil((dbms_utility.get_time - v_start)/100)'s'); v_start := dbms_utility.get_time; elsif rec.segment_type = 'TABLE' then case when rec.segment_size < 32 then v_per := 100; when rec.segment_size < 320 then v_per := 10; else v_per := 1; end case; dbms_stats\.gather_table_stats(OWNNAME=>'???', TABNAME=>rec.segment_name, ESTIMATE_PERCENT=>v_per, METHOD_OPT=>'FOR ALL INDEXED COLUMNS'); -- dbms_output.put_line(rec.segment_name' 'rec.segment_size'm 'ceil((dbms_utility.get_time - v_start)/100)'s'); v_start := dbms_utility.get_time; end if; end loop; end; / ###############################################################
|