天天看點

DBA日常巡檢手冊

日常巡檢手冊

監控所有關鍵業務系統的資料庫系統,以ORACLE資料庫為例。主要的監控名額應包括配置資訊、故障監控和性能監控。主要工作包括:

1、配置資訊管理:資料庫配置資訊包括資料庫名,資料庫執行個體名,版本資訊,資料庫位數,歸檔方式,檔案目錄,表空間資訊,記憶體資訊,其他SID.ORA的相關參數資訊。

2、故障監控:監控資料庫關鍵的運作狀态和程序等進行有效的管理,具體的管理功能應包含:(1)伺服器執行個體的可用性,監控資料庫執行個體的狀态;(2)空間監控:監控表空間、Redo日志、Archive日志的使用情況;(3)顯示和過濾Alert Log中的報警等;(4)資料庫空間、表空間、資料檔案占用或空閑的空間;磁盤的使用;表和索引的使用;重做日志Redo logs;記憶體的使用Memory usage;交換區的使用Swap usage。

3、性能監控:監控資料庫的性能,鑒别和消除瓶頸以提高資料庫系統的整體性能,包括:

(1)由記憶體容量引起的資料庫響應緩慢;

(2) 由于請求Redo日志空間引起的延遲;

(3)鎖資源監控,對阻塞了其它會話的鎖進行告警,以及可用的鎖;

(4)等待某復原段完成的事務百分比;

(5)監控SGA、Buffer Cache、I/O等相關的性能資料;(6)監控資料庫會話的狀況。

應及時變更配置資訊并定期(每月)編制資料庫監控報告并送出相關部門和人員。

檢查執行個體

1.正常檢查

編号        參數名稱        描述        參數說明

1        檔案自動擴充        正确        資料檔案使用裸裝置時,檔案不可自動擴充(使用檔案系統的資料檔案也建議不設成自動擴充):

Sql>select file_name,tablespace_name,status,autoextensible from dba_data_files  where autoextensible<>'NO';

Sql>alter database datafile '****' autoextend off;;

2        預設表空間        正确        不要使用system表空間作為應用使用者的預設表空間:

Sql>Select username,account_status,default_tablespace,temporary_tablespace from dba_Users;

Sql>alter user ctais2bb default tablespace ctais2_dat;

3        曆史錯誤資訊        沒有錯誤        搜尋oracle各執行個體的alert檔案是否有錯誤代碼出現,如:ORA-00600,ORA-00603等錯誤:

通過以下sql 找到他的路徑

Sql>select value from v$parameter where name ='background_dump_dest';

4        剩餘表空間        沒有空間壓力        Sql>Select a.Tablespace_Name, a.Total || 'M' Total_Space, (a.Total - b.Free) || 'M' Used_Space, To_Char((a.Total - b.Free) / a.Total * 100, '99.99') || '%' Pct_Free

From

(Select Tablespace_Name, Sum(Bytes) / 1024 / 1024 Total From Dba_Data_Files Group By tablespace_Name) a,

(Select Tablespace_Name, Sum(Bytes) / 1024 / 1024 Free From Dba_Free_Space Group By Tablespace_Name) b where a.Tablespace_Name = b.Tablespace_Name;

5        歸檔模式        已歸檔

        檢視資料是否啟用歸檔模式,歸檔目錄是否均已挂接,提醒管理者注意歸檔檔案的備份,以防治歸檔目錄空間不足,以sysdba登陸sqlplus:

SQL> archive log list; (sqlplus下執行)

6        備份政策        注        是否備份spfile檔案,控制檔案,歸檔日志檔案,備份歸檔日志檔案後是否删除

7        失效對象        有(已處理)        Sql>Select object_name,object_type,status From Dba_Objects Where status<>'VALID';

如有則編譯失效對象,在非業務處理時間,以sysdba登陸sqlplus:

SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql

8        行連結/遷移        沒有行遷移        是否有行連結/行遷移的情況出現:

Sql>select table_name,num_rows,chain_cnt From dba_tables Where owner='CTAIS2' And chain_cnt<>0;

注:含有long raw列的表有行連結是正常的,找到遷移行儲存到chained_rows表中,如沒有該表執行../rdbms/admin/utlchain.sql

Sql>analyze table tablename list chained rows;

可通過表chained_rows中table_name,head_rowid看出哪些行是遷移行

如:

Sql>create table aa as select a.* from sb_zsxx a,chained_rows b where a.rowid=b.head_rowid and b.table_name ='SB_ZSXX';

sql>delete from sb_zsxx where rowid in (select head_rowid from chained_rows where table_name = 'SB_ZSXX');

sql>insert into sb_zsxx select * from chained_row where table_name = 'SB_ZSXX';

9        job        沒有失敗的任務         檢視job是否broken,是否有failure

Sql>select job,what,last_date,next_date,failures,broken from dba_jobs Where schema_user='CTAIS2';

如有問題建議重建job,如:

exec sys.dbms_job.remove(1);

commit;

exec sys.dbms_job.isubmit(1,'REFRESH_ALL_SNAPSHOT;',SYSDATE+1/1440,'SYSDATE+4/1440');

commit;

10        統計分析        管理者定期做        對于采用Oracle Cost-Based-Optimizer的系統,需要定期對資料對象的統計資訊進行采集更新,使優化器可以根據準備的資訊作出正确的explain plan。在以下情況更需要進行統計資訊的更新:

1、        應用發生變化

2、        大規模資料遷移、曆史資料遷出、其他資料的導入等

3、        資料量發生變化

檢視表或索引的統計資訊是否需更新,如:

Sql>Select table_name,num_rows,last_analyzed From user_tables where table_name ='DJ_NSRXX'

sql>select count(*) from DJ_NSRXX如num_rows和count(*)

如果行數相差很多,則該表需要更新統計資訊,建議一周做一次統計資訊收集,如:

Sql>exec sys.dbms_stats.gather_schema_stats(ownname=>'CTAIS2',cascade => TRUE,degree => 4);

11        死鎖現象        沒有發生過死鎖        檢查資料庫在運作過程中是否有死鎖現象,找出被鎖住的對象及session ID

Sql>select object_name,s.sid,s.serial# From v$locked_object o,v$session s ,dba_objects c Where o.session_id=s.sid And o.object_id=c.object_id;

oracle級kill掉該session:

sql>alter system kill session 'sid,serial#';

作業系統級kill掉session:

#>kill -9 pid

12        失效的索引        沒有失效的索引        檢查是否有失效的索引:

注:分區表上的索引status為N/A是正常的

Sql>select index_name,table_name,tablespace_name,status From dba_indexes Where owner='CTAIS2' And status<>'VALID';

如有失效索引則對該索引做rebuild,如:

Sql>alter index INDEX_NAME rebuild tablespace TABLESPACE_NAME;

13        失效的限制        沒有失效的限制        檢查是否有失效的限制:

Sq>Select constraint_type,constraint_name,table_name,r_owner,r_constraint_name, status From dba_constraints Where owner='CTAIS2' And status<>'ENABLED';

如有失效限制則啟用,如:

Sql>alter Table TABLE_NAME Enable Constraints CONSTRAINT_NAME;

14        失效的觸發器        沒有失效的觸發器        檢查是否有失效的觸發器:

Sql>select trigger_name,table_name,status From dba_triggers Where owner='CTAIS2' And status<>'ENABLED';

如有失效觸發器則啟用,如:

Sql>alter Trigger TRIGGER_NAME Enable;

15        索引空間浪費        管理者定期管理        索引的空間浪費:隻有完全空的索引塊才進入空閑清單,找到浪費空間的索引,首先分析索引:

Sql>analyze index indexname validate structure;

然後查詢index_stats視圖:

Sql>select name,lf_rows,lf_rows_len,del_lf_rows,del_lf_rows_len From index_stats;

lf_rows --目前索引值的數量

lf_rows_len --目前索引值的大小(byte)

del_lf_rows --從索引中删除的值的數量

del_lf_rows_len --從索引中删除的值的大小(byte)

如果del_lf_rows_len達到lf_rows_len的20%則需要rebuild索引了

16        定期修改密碼        暫時未使用        在綜合征管系統系統的資料庫上往往存在很多的使用者,如:第三方資料庫監控系統,電話申報系統等等,初始安裝資料庫時的示範使用者,管理者使用者等等。這些使用者的密碼往往是寫定的,被很多人知道,會被别有用心的人利用來攻擊系統甚至進行修改資料。

需要修改密碼的使用者包括:

資料庫管理者使用者INTERNAL(ORACLE9I版本中已經廢棄了),SYS,SYSTEM,

綜合征管系統系統的超級使用者CTAIS,CTAIS2,CTAIS_MAINT,

外圍軟體使用者,如銀稅聯網,電話申報等使用者。

修改方法:

Sql>alter user USER_NAME identified by PASSWORD;

17        緩沖區命中率        正常        .緩沖區命中率:

Sql>select name, 1-(physical_reads/(db_block_gets+consistent_gets)) "hit_ratio" from v$buffer_pool_statistics where db_block_gets+consistent_gets>0;

如果命中率低于90% 則需加大資料庫參數db_cache_size

18        共享池命中率        正常        共享池命中率:

Sql>select sum(pinhits)/sum(pins)*100 from v$librarycache;

如低于95%,則需要調整應用程式使用綁定變量,或者調整資料庫參數shared pool的大小

19        排序區        正常        排序區:

Sql>select name,value from v$sysstat where name like '%sort%';

如果disk/(memoty+row)的比例過高,則需要調整sort_area_size(workarea_size_policy=false)或pga_aggregate_target(workarea_size_policy=true)

20        日志緩沖區        正常        日志緩沖區:

Sql>select name,value from v$sysstat where name in ('redo entries','redo buffer allocation retries');

如果redo buffer allocation retries/redo entries 超過1% ,則需要增大log_buffer

2.資料庫參數收集

說明:資料庫參數的檢查,是否有不合理的配置(資料庫伺服器的硬體配置及各地業務壓力各不相同,涉及到程序及記憶體的參數僅供參考,使用表格下面的語句檢查,夠用即可):

select Name,Value from v$parameter order by NAME;

1        參數        2        參數值

processes        2400

timed_statistics        TRUE

shared_pool_size        自動管理

sga_max_size        64G

large_pool_size        自動管理

java_pool_size        自動管理

control_files        /dev/rzs_control01,

/dev/rzs_control02,

/dev/rzs_control03

db_block_size            8192

db_writer_processes        4

db_cache_size        自動管理

compatible        10.2.0.3.0

log_archive_start        false

log_archive_dest_1        LOCATION=/arc1

log_archive_max_processes        5  

log_buffer        14131200

db_file_multiblock_read_count(生産)        16

fast_start_mttr_target        0

log_checkpoints_to_alert        TRUE

dml_locks        15000

transactions        2909

undo_management        AUTO

undo_tablespace        UNDOTBS1

undo_retention        10800

remote_login_passwordfile        EXCLUSIVE

db_domain       

instance_name             Sdtais1

cursor_space_for_time(生産)        false

session_cached_cursors        300

job_queue_processes        10

cursor_sharing(生産)        SIMILAR

hash_join_enabled        TRUE

background_dump_dest        /oracle/admin/sdtais/bdump

user_dump_dest        /oracle/admin/sdtais/udump

core_dump_dest        /oracle/admin/sdtais/cdump

sort_area_size        65536

open_cursors        4000

star_transformation_enabled        FALSE

query_rewrite_enabled        true

pga_aggregate_target        9820M

aq_tm_processes        1   ( odc)

fast_start_parallel_rollback        LOW   根據統計值調整