Oracle dba常用脚本


以下为Oracle dba常用的脚本

1、检查数据缓冲区和共享区命中率 

  1. declare   
  2. reads_value number(15);  
  3. direct_value number(15);  
  4. lob_value number(15);  
  5. consical_value number(15);  
  6. db_value number(15);  
  7. x number;  
  8. y number;  
  9. z number;  
  10. begin   
  11.   select value into reads_value from v$sysstat where name ='physical reads';   
  12.    select value into direct_value from v$sysstat where name ='physical reads direct';   
  13.   select value into lob_value from v$sysstat where name ='physical reads direct (lob)';   
  14.    select value into consical_value from v$sysstat where name ='consistent gets';   
  15.   select value into db_value from v$sysstat where name = 'db block gets';   
  16.   x:=direct_value+lob_value;  
  17.     
  18.   y:=1-(reads_value-x)/(consical_value+db_value-x);  
  19.   dbms_output.put_line('数据缓冲区命中率是:'||y);  
  20.   if(y>=0.9) then  
  21.    dbms_output.put_line('命中率大于0.9数据缓存大小比较合适');  
  22.   else   
  23.     dbms_output.put_line('数据缓存命中率小于0.9,请调试db_cache_size大小');  
  24.   end if;  
  25.   select sum(pinhits-reloads)/sum(pins) into z from v$librarycache;  
  26.   dbms_output.put_line('共享区命中率是:'||z);  
  27.   if(z>=0.9) then  
  28.    dbms_output.put_line('共享区命中率大于0.9大小比较合适');  
  29.   else   
  30.     dbms_output.put_line('共享区命中率小于0.9,请调试db_cache_size大小');  
  31.   end if;  
  32. end;  

2、检查表空间的是使用情况 

  1.  select a.tablespace_name,total,free,(total-free)/total used from  
  2. (select tablespace_name,sum(bytes)/1024/1024 total from dba_data_files group by tablespace_name) a,   
  3. (select tablespace_name,sum(bytes)/1024/1024 free from dba_free_space group by tablespace_name) b  
  4. where a.tablespace_name=b.tablespace_name;  

3、检查和表空间生成语句

  1. --表空间生成语句,请在sql窗体中执行  
  2. select dbms_metadata.get_ddl('TABLESPACE',tablespace_name) from dba_tablespaces;  
  3. --表生成语句  
  4. select dbms_metadata.get_ddl('TABLE',upper('&TABLE_NAME'),upper('&USER_NAME')) from dual;  

4、找出系统中cpu消耗和io比较大的语句

  1. select SQL_TEXT,SQL_FULLTEXT from v$sql a where a.HASH_VALUE   
  2. in (select hash_value from v$sqlarea where buffer_gets>1000000  
  3. or disk_reads>1000000/*order by buffer_gets+disk_reads desc*/);  

5、找出当前系统中比较慢的sql

     ①aix中通过topas命令找出cpu系统比较大的pid

     ②通过sql语句方法找出具体语句 

  1. --spid为进程号  
  2. select SQL_TEXT,SQL_FULLTEXT,FIRST_LOAD_TIME from v$sql where ADDRESS=(select SQL_ADDRESS from v$session where   
  3. PADDR=(select ADDR from v$process where spid=&&spid));  

6、找出比较多的表空间碎片 

  1. select tablespace_name,  
  2. count(*) chunks ,  
  3. max(bytes/1024/1024) max_chunk  
  4.   from dba_free_space  
  5. group by tablespace_name;  

说明:得分越高,表空间的碎片越大

相关内容