Oracle基本資訊檢查

edwardking888發表於2010-04-13

1. 檢查Windows下的Oracle相關服務的狀態

主要服務包括: OracleServiceORA10:Oracle例項服務
OracleOraDb10g_home1TNSListenerFslmyoracle: Oracle監聽服務(OFS管理)
OracleMSCSServices:Oracle Fail Safe for MSCS服務
在當前活動節點上,服務狀態應該是正常“已啟動”狀態。

2. 檢查Oracle初始化引數

  1. select * from v$parameter;  

3. 檢查Oracle的例項狀態

  1. select instance_name,version,status,database_status   
  2. from v$instance;  

其中"STATUS"表示Oracle當前的例項狀態,必須為"OPEN";"DATABASE_STATUS"表示Oracle當前資料庫的狀態,必須為"ACTIVE"。

4. 檢查後臺執行緒的狀態

  1. Select name,Description   
  2. From V$BGPROCESS   
  3. Where Paddr<>'00';  

5. 檢查系統全域性區SGA資訊

  1. select * from v$sga;  

檢查SGA各部份的分配情況,與實際記憶體比較是否合理。

6. 檢查SGA各部分佔用記憶體狀況

  1. select * from v$sgastat;  

檢查有無佔用大量Shared pool的物件,及是否有記憶體浪費情況。

7. 檢查系統SCN號

  1. select dbms_flashback.get_system_change_number from dual;   
  2. select current_scn from v$database;  

8. 檢查資料庫狀態

  1. select name,log_mode,open_mode from v$database;  

9. 檢查當前資料庫的作業系統平臺

  1. select platform_name from v$database;  

10. 檢查資料庫的大小,和空間使用情況

  1. col tablespace format a20   
  2. select b.file_id  檔案ID,   
  3.   b.tablespace_name  表空間,   
  4.   b.file_name     物理檔名,   
  5.   b.bytes       總位元組數,   
  6.   (b.bytes-sum(nvl(a.bytes,0)))   已使用,   
  7.   sum(nvl(a.bytes,0))        剩餘,   
  8.   sum(nvl(a.bytes,0))/(b.bytes)*100 剩餘百分比   
  9.   from dba_free_space a,dba_data_files b   
  10.   where a.file_id=b.file_id   
  11.   group by b.tablespace_name,b.file_name,b.file_id,b.bytes   
  12.   order by b.tablespace_name   
  13. /  

  dba_free_space --表空間剩餘空間狀況
  dba_data_files --資料檔案空間佔用情況

11. 檢查資料庫的建立日期和歸檔方式

  1. Select Created, Log_Mode, Log_Mode From V$Database;  

12. 檢查資料庫是否處於歸檔模式,並啟動了自動歸檔程式

  1. archive log list;  

13. 檢查NLS資訊(包括字符集)

  1. select * from nls_database_parameters  

'NLS_LANGUAGE' || 'NLS_TERRITORY' || 'NLS_CHARACTERSET' 即字符集。

14. 檢查表空間的名稱、狀態及大小

  1. select t.tablespace_name, t.status, round(sum(bytes/(1024*1024)),0) ts_size   
  2.     from dba_tablespaces t, dba_data_files d   
  3.     where t.tablespace_name = d.tablespace_name   
  4. group by t.tablespace_name, t.status;  

15. 檢查每個表空間佔用空間的大小

  1. Select Tablespace_Name,Sum(bytes)/1024/1024   
  2. From Dba_Segments Group By Tablespace_Name;  

16. 檢查表空間物理檔案的名稱及大小

  1. select tablespace_name, file_id, file_name,   
  2. round(bytes/(1024*1024),0) total_space   
  3. from dba_data_files   
  4. order by tablespace_name;  

17. 查詢表空間的剩餘大小

  1. select tablespace_name,sum(bytes)/(1024*1024) as free_space   
  2. from dba_free_space   
  3. group by tablespace_name;  

18. 檢查表空間的使用情況

  1. SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,   
  2. (B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"  
  3. FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C   
  4. WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME   
  5. AND A.TABLESPACE_NAME=C.TABLESPACE_NAME;  

19. 檢查表空間碎塊狀況

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

如果最大可用塊(max_chunk)與總大小(total_space)相比太小,要考慮接合表空間碎片或重建某些資料庫物件。 碎片接合的方法: alter tablespace 表空間名 coalesce;

20. 檢查回滾段名稱、狀態及大小

  1. select segment_name, tablespace_name, r.status,   
  2. (initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,   
  3. max_extents, v.curext CurExtent   
  4. From dba_rollback_segs r, v$rollstat v   
  5. Where r.segment_id = v.usn(+)   
  6. order by segment_name ;  

21. 檢查控制檔案狀態

  1. select * from v$controlfile;  

22. 檢查日誌檔案狀態

  1. select * from v$logfile;  

23. 檢查日誌組資訊

  1. select * from v$log;  

24. 檢查資料檔案狀態

  1. select file_name,status   
  2. from dba_data_files;  

25. 檢查資料檔案存放路徑

  1. col file_name format a50   
  2. select tablespace_name,file_id,bytes/1024/1024,file_name   
  3. from dba_data_files order by file_id;  

26. 檢查資料檔案的自動增長控制

  1. select file_name,autoextensible from dba_data_files;  

27. 檢查臨時資料檔案路徑

  1. select file_name   
  2. from Dba_temp_files;  

28. 檢查閃回恢復區的路徑

  1. select name from v$recovery_file_dest;  

29. 檢查資料庫庫物件

  1. select owner, object_type, status, count(*) count#   
  2. from all_objects group by owner, object_type, status;  

30. 檢查資料庫的版本 

  1. Select version FROM Product_component_version   
  2. Where SUBSTR(PRODUCT,1,6)='Oracle';   
  3.   
  4. VERSION   
  5. ---------------   
  6. 11.1.0.6.0  

依次為:版本號11、新特性版本號1、維護版本號0、普通的補丁設定號碼6、特殊的平臺補丁設定號碼0

31. 檢查資料庫的建立日期和歸檔方式

  1. Select Created, Log_Mode, Log_Mode From V$Database;  

32. 檢查當前所有物件

  1. select * from tab;  

33. 檢查當前連線使用者

34. 檢查已有使用者:

  1. select username from dba_users;  

35. 檢查所有表、索引、儲存過程、觸發器、包等物件的狀態

  1. select owner,object_name,object_type   
  2. from dba_objects where status!='VALID'  
  3. and owner!='SYS' and owner!='SYSTEM';  

36. 檢查當前使用者的預設表空間、臨時表空間

  1. select username,default_tablespace, temporary_tablespace from user_users;  

37. 檢查當前使用者的角色

  1. select * from user_role_privs;  

38. 檢查當前使用者的系統許可權和表級許可權

  1. select * from user_sys_privs;   
  2. select * from user_tab_privs;  

39. 檢查使用者下所有的表

  1. select * from user_tables;  

40. 檢查各個表的大小

檢查當前使用者每個表佔用空間的大小:

  1. Select Segment_Name,Sum(bytes)/1024/1024   
  2. From User_Extents Group By Segment_Name  

注:段名即表名

按資料物件大小排序

  1. Select Segment_Name,segment_type, Sum(bytes)/1024/1024 as MB   
  2. From User_Extents   
  3. Group By Segment_Name, segment_type   
  4. Order by MB  

41. 檢查某表的建立時間

  1. select object_name,created from user_objects where object_name=upper('&table_name');  

42. 檢查名稱包含log字元的表

  1. select object_name,object_id from user_objects   
  2.      where instr(object_name,'LOG')>0;  

43. 檢查某表的大小

  1. select sum(bytes)/(1024*1024) as "size(M)" from user_segments   
  2.      where segment_name=upper('&table_name');  

44. 檢查放在記憶體區裡的表

  1. select table_name,cache from user_tables where instr(cache,'Y')>0;  

45. 檢查索引個數和類別

  1. select index_name,index_type,table_name from user_indexes order by table_name;  

46. 檢查索引中被索引的欄位

  1. select * from user_ind_columns where index_name=upper('&index_name');  

47. 檢查索引的大小

  1. select sum(bytes)/(1024*1024) as "size(M)" from user_segments   
  2.      where segment_name=upper('&index_name');  

48. 檢查是否有失效的索引

  1. select index_name, owner, table_name, tablespace_name   
  2. from dba_indexes   
  3. where owner not in ('SYS','SYSTEM'and status != 'VALID';  

如果有記錄返回,考慮重建這些索引。

49. 檢查是否有無效的物件

  1. select object_name,      object_type,      owner,      status   
  2. from dba_objects   
  3. where status !='VALID'  
  4. and owner not in ('SYS','SYSTEM')   
  5. and object_type in  ('TRIGGER','VIEW','PROCEDURE','FUNCTION');  

如果存在無效的物件,手工重新編譯一下。

50. 檢查序列號

  1. select * from user_sequences;  

last_number是當前值

51. 檢查序列號的使用

  1. select sequence_owner, sequence_name, min_value,   
  2. max_value, increment_by, last_number,   
  3. cache_size, cycle_flag from dba_sequences;  

檢查是否存在即將達到max_value的sequence 。

52. 檢查檢視的名稱

  1. select view_name from user_views;  

53. 檢查建立檢視的select語句

  1. set view_name,text_length from user_views;   
  2. set long 2000;                --說明:可以根據檢視的text_length值設定set long 的大小   
  3. select text from user_views where view_name=upper('&view_name');  

54. 檢查同義詞的名稱

  1. select * from user_synonyms;  

55. 檢查某表的約束條件

  1. select constraint_name, constraint_type,search_condition, r_constraint_name   
  2.      from user_constraints where table_name = upper('&table_name');   
  3.   
  4. select c.constraint_name,c.constraint_type,cc.column_name   
  5.  from user_constraints c,user_cons_columns cc   
  6.  where c.owner = upper('&table_owner'and c.table_name = upper('&table_name')   
  7.  and c.owner = cc.owner and c.constraint_name = cc.constraint_name   
  8.  order by cc.position;  

56. 檢查函式和過程的狀態

  1. select object_name,status from user_objects where object_type='FUNCTION';   
  2. select object_name,status from user_objects where object_type='PROCEDURE';  

57. 檢查函式和過程的原始碼

  1. select text from all_source where owner=user and name=upper('&plsql_name');  

58. 檢查當前資料庫有幾個使用者連線

用系統管理員許可權執行,

  1. select username,sid,serial#, machine, status from v$session;  

USERNAME:建立該會話的使用者名稱;
SID:會話(session)的ID號;
SERIAL#:會話的序列號,和SID一起用來唯一標識一個會話;
PROGRAM: 這個會話是用什麼工具連線到資料庫的;
MACHINE:這個會話是從哪臺電腦連過來的
STATUS 當前這個會話的狀態,ACTIVE表示會話正在執行某些任務,INACTIVE表示當前會話沒有執行任何操作;

如果要停某個連線用

  1. SQL> alter system kill session 'sid,serial#';  

如果這命令不行,找它UNIX的程式數

  1. SQL> select pro.spid   
  2.     from v$session ses,v$process pro   
  3.     where ses.sid=21 and ses.paddr=pro.addr;  

說明:21是某個連線的sid數

然後用 kill 命令殺此程式號。

59. 檢查定時作業的完成情況

  1. select job,log_user,last_date,failures   
  2. from dba_jobs;   
  3.   
  4. select  job, this_date, this_sec, next_date, next_sec, failures, what   
  5. from dba_jobs where failures !=0 or failures is not null;  

如果FAILURES列是一個大於0的數的話,說明JOB執行失敗,要進一步的檢查。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8183550/viewspace-659608/,如需轉載,請註明出處,否則將追究法律責任。

相關文章