oracle日常维护的几个常用脚本

    工作已经三个多月了,也积累了很多经验,脚本是一个可以简化工作的好工具,如果能用的恰到好处,那便可以事半功倍。

    对于oracle DBA的工作,除了备份恢复之外,还要懂得日常维护,如果用几个简单的脚本,可以减轻每天重复的工作量,何乐为不为呢?

1.查看表空间使用情况的脚本 usedtablespace.sql

  
  
  
  
  1. select a.tablespace_name, round(a.total_size,1) "total(M)",    
  2.        round(a.total_size)-round(nvl(b.free_size,0),1) "used(M)",    
  3.        round(nvl(b.free_size,0),1) "free(M)",    
  4.        round(nvl(b.free_size,0)/total_size*100,1) "free rate(%)"   
  5. from (select tablespace_name,sum(bytes)/1024/1024 total_size    
  6.       from dba_data_files    
  7.       group by tablespace_name) a,    
  8.      (select tablespace_name,sum(bytes)/1024/1024 free_size    
  9.       from dba_free_space    
  10.       group by tablespace_name) b    
  11. where a.tablespace_name = b.tablespace_name(+)    
  12. order by "free rate(%)"

执行结果

SQL> start usedtablespace.sql     

TABLESPACE_NAME        total(M)    used(M)    free(M) free rate(%)

-------------------- ---------- ---------- ---------- ------------

SYSTEM                      720      712.4        7.6          1.1

SYSAUX                    804.2      763.5       40.5            5

EXAMPLE                     100       77.7       22.3         22.3

USERS                         5        3.1        1.9         38.8

UNDOTBS1                    145       21.3      123.7         85.3

CMS_DATA                   2048        238       1810         88.4

WBSC_DATA                  2048        151       1897         92.6

DBS_OSS_KPI_INDEX           512       34.9      477.1         93.2

DBS_OSS_KPI_DAT            1024       29.4      994.6         97.1

BIZ_DATA                   2048         33       2015         98.4

DBS_OSS_SAT_DAT            1024        7.6     1016.4         99.3

 
2.查看会话连接数的脚本 sumsessions.sql
 
  
  
  
  
  1. SELECT A.OWNER,  
  2.        A.OBJECT_NAME,  
  3.        B.XIDUSN,  
  4.        B.XIDSLOT,  
  5.        B.XIDSQN,  
  6.        B.SESSION_ID,  
  7.        B.ORACLE_USERNAME,   
  8.        B.OS_USER_NAME,  
  9.        B.PROCESS,   
  10.        B.LOCKED_MODE,   
  11.        C.MACHINE,  
  12.        C.STATUS,  
  13.        C.SERVER,  
  14.        C.SID,  
  15.        C.SERIAL#,  
  16.        C.PROGRAM  
  17. FROM ALL_OBJECTS A,  
  18.      V$LOCKED_OBJECT B,  
  19.      SYS.GV_$SESSION C   
  20. WHERE ( A.OBJECT_ID = B.OBJECT_ID )  
  21. AND (B.PROCESS = C.PROCESS )  
  22. ORDER BY 1,2;   
有时候需要杀死会话连接,才能更新表的内容,命令如下:
alter system kill session 'sid, serial#'
例如:
alter system kill session '379, 21132'
alter system kill session '374, 6938'
 
3.删除函数,存储过程,包的脚本delobj.sql,执行此脚本后会产生一个dropobj.sql脚本,这个脚本才是真正删除用户对象的脚本。

  
  
  
  
  1. set heading off;  --关闭表头  
  2. set feedback off;    --关闭回显
  3. spool /tmp/dropobj.sql;    
  4.  prompt --Drop constraint    
  5.  select 'alter table '||table_name||' drop constraint '||constraint_name||' ;'  from user_constraints where constraint_type='R';    
  6.  prompt --Drop tables    
  7.  select 'drop table '||table_name ||';' from user_tables;     
  8.      
  9.  prompt --Drop view    
  10.  select 'drop view ' ||view_name||';' from user_views;    
  11.      
  12.  prompt --Drop sequence    
  13.  select 'drop sequence ' ||sequence_name||';' from user_sequences;     
  14.      
  15.  prompt --Drop function    
  16.  select 'drop function ' ||object_name||';'  from user_objects  where object_type='FUNCTION';    
  17.    
  18.  prompt --Drop procedure    
  19.  select 'drop procedure '||object_name||';' from user_objects  where object_type='PROCEDURE';    
  20.      
  21.  prompt --Drop package    
  22.  prompt --Drop package body    
  23.  select 'drop package '|| object_name||';' from user_objects  where object_type='PACKAGE';    
  24.    
  25.  prompt --Drop database link    
  26.  select 'drop database link '|| object_name||';' from user_objects  where object_type='DATABASE LINK';    
  27.      
  28. spool off;    
  29. set heading on;    
  30. set feedback on
 
4.查看是否有table被锁的脚本 locktable.sql 
 
  
  
  
  
  1. col sid for 999999 
  2. col username for a10 
  3. col schemaname for a10 
  4. col osuser for a16 
  5. col machine for a16 
  6. col terminal for a20 
  7. col owner for a10 
  8. col object_name for a30 
  9. col object_type for a10 
  10. select sid,serial#,username,SCHEMANAME,osuser,MACHINE, 
  11.        terminal,PROGRAM,owner,object_name,object_type,o.object_id  
  12. from dba_objects o,v$locked_object l,v$session s  
  13. where o.object_id=l.object_id and s.sid=l.session_id; 

你可能感兴趣的:(session,object,脚本,tablespace,日常维护)