oracle維護管理指令(不斷更新)
在日常oracle維護過程中,我們不止一次的使用一些SQL或者命令。所以這裡給出一個總結(不斷更新的總結):
監控所有關鍵業務系統的資料庫系統,以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
21:查詢在等待的SQL
select sw.username,
sw.sid,
sw.serial#,
sw.event,
sw.sql_hash_value,
sw.sql_id,
sw.last_call_et "times(s)",
sw.p1,
sw.p2,
sw.p3
from v$session sw
where wait_class <> 'Idle'
order by event,last_call_et asc;
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 根據統計值調整
--檢視引用的外來鍵
Select B.Table_Name, B.Column_Name
From Dba_Constraints a,
Dba_Cons_Columns b
Where A.Constraint_Name = B.Constraint_Name
And A.R_Constraint_Name = :constraint_name;
-- 檢視鎖住的表並殺死session
Select S.Sid,
S.Serial#,
S.Machine,
O.Object_Name,
L.Oracle_Username,
L.Locked_Mode,
'ALTER SYSTEM KILL SESSION ''' || S.Sid || ', ' || S.Serial# ||
''';' Command
From V$locked_Object l, V$session s, All_Objects o
Where L.Session_Id = S.Sid
And L.Object_Id = O.Object_Id ;
--根據pid檢視sql
select sql_text,spid,v$session.program,process,v$sqlarea.ADDRESS,v$session.sid,v$session.SERIAL#,v$sqlarea.HASH_VALUE,v$process.* from
v$sqlarea,v$session,v$process
where v$sqlarea.address=v$session.sql_address
and v$sqlarea.hash_value=v$session.sql_hash_value
and v$session.paddr=v$process.addr
and v$process.spid in (23345);
--檢視佔用temp情況
SELECT S.sid || ',' || S.serial# sid_serial,
S.username,
T.blocks * TBS.block_size / 1024 / 1024 mb_used,
T.tablespace,
T.sqladdr address,
Q.hash_value,
Q.sql_text
FROM v$sort_usage T, v$session S, v$sqlarea Q, dba_tablespaces TBS
WHERE T.session_addr = S.saddr
AND T.sqladdr = Q.address(+)
AND T.tablespace = TBS.tablespace_name
ORDER BY S.sid;
--檢視資料庫中物件的大小
select segment_name,
segment_type,
tablespace_name,
sum(bytes) / 1024 / 1024
FROM dba_segments
/*where tablespace_name=''
*/
group by segment_name, segment_type, tablespace_name
order by 4 desc;
--檢視錶空間使用情況
Select D.Tablespace_Name,
Space "SUM_SPACE(M)",
Space - Nvl(Free_Space, 0) "USED_SPACE(M)",
Round((1 - Nvl(Free_Space, 0) / Space) * 100, 2) "USED_RATE(%)",
Free_Space "FREE_SPACE(M)",
Blocks Used_Blocks
From (Select Tablespace_Name,
Round(Sum(Bytes) / (1024 * 1024), 2) Space,
Sum(Blocks) Blocks
From Dba_Data_Files
Group By Tablespace_Name) d,
(Select Tablespace_Name,
Round(Sum(Bytes) / (1024 * 1024), 2) Free_Space
From Dba_Free_Space
Group By Tablespace_Name) f
Where D.Tablespace_Name = F.Tablespace_Name(+)
Order By D.Tablespace_Name;
--修改表空間的資料檔案的大小
alter Database datafile '全路徑的資料檔名稱' resize 10240M
--給表空間增加資料檔案
Alter Tablespace 表空間名稱 Add Datafile '全路徑的資料檔名稱' Size 10240M
--停止一個定時任務
SQL> exec dbms_job.broken(job_id,true)
--啟用一個停止的job
SQL> exec dbms_job.broken(job_id,false)
--連入sga
sqlplus -prelim / as sysdba
從Oracle10g開始,sqlplus提供了一個引數選項-prelim,用這個引數,在系統已經hang的時候。我們可以連線到SGA而不是資料庫,也就是說沒有session被建立。
但是隻能在裡面用shutdown abort停庫,或者使用oradug,可以參考:
--刪除歸檔日誌
rman>crosscheck archivelog all;
rman>delete expired archivelog;
--刪除過期備份
RMAN> report obsolete;
RMAN> delete obsolete;
--殺死外部連結程式
ps -ef |grep oracle |grep LOCAL=NO |grep -v grep |awk '{print $2}' |xargs kill -9
rac維護管理指令
--檢視asm磁碟使用情況
select name,total_mb,free_mb from v$asm_diskgroup;
1、檢視狀態的命令
$ crs_stat -t /crsctl stat res -t --檢視crs及所有的service的狀態
$ crsctl check crs --用crsctl命令,檢查crs相關服務的狀態
$ srvctl status nodeapps -n rac01 (rac02) --使用srvctl檢視所有節點上的服務是否正常
$ srvctl status database -d rac --使用srvctl檢視資料庫狀態
2、啟動和關閉相關服務的命令
$ crs_start–all --啟動所有的crs服務
$ crs_stop–all --停止所有的crs服務
$ crsctl start crs --啟動crs服務
$ crsctl stop crs --停止crs服務
$ srvctl start nodeapps -n rac01(rac02) --啟動某節點上所有的應用
$ srvctl stop nodeapps -n rac01(rac02) --停止某節點上所有的應用
$ srvctl start listener -n rac01(rac02) --啟動某個節點的listener
$ srvctl stop listener -n rac01(rac02) --停止某個節點的listener
$ srvctl start instance–d rac–i db01(rac02) --啟動某個instance
$ srvctl stop instance–d rac–i db01(rac02) --停止某個instance
$ srvctl start database–d rac --啟動資料庫
$ srvctl stop database–d rac --停止資料庫
檢視一個大事物的完成度
SELECT se.sid,
opname,
TRUNC (sofar / totalwork * 100, 2) pct_work,
elapsed_seconds elapsed,
ROUND (elapsed_seconds * (totalwork - sofar) / sofar) remain_time,
sql_text
FROM v$session_longops sl, v$sqlarea sa, v$session se
WHERE sl.sql_hash_value = sa.hash_value
AND sl.sid = se.sid
AND sofar != totalwork
ORDER BY start_time;
持續更新中。
監控所有關鍵業務系統的資料庫系統,以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
21:查詢在等待的SQL
select sw.username,
sw.sid,
sw.serial#,
sw.event,
sw.sql_hash_value,
sw.sql_id,
sw.last_call_et "times(s)",
sw.p1,
sw.p2,
sw.p3
from v$session sw
where wait_class <> 'Idle'
order by event,last_call_et asc;
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 根據統計值調整
--檢視引用的外來鍵
Select B.Table_Name, B.Column_Name
From Dba_Constraints a,
Dba_Cons_Columns b
Where A.Constraint_Name = B.Constraint_Name
And A.R_Constraint_Name = :constraint_name;
-- 檢視鎖住的表並殺死session
Select S.Sid,
S.Serial#,
S.Machine,
O.Object_Name,
L.Oracle_Username,
L.Locked_Mode,
'ALTER SYSTEM KILL SESSION ''' || S.Sid || ', ' || S.Serial# ||
''';' Command
From V$locked_Object l, V$session s, All_Objects o
Where L.Session_Id = S.Sid
And L.Object_Id = O.Object_Id ;
--根據pid檢視sql
select sql_text,spid,v$session.program,process,v$sqlarea.ADDRESS,v$session.sid,v$session.SERIAL#,v$sqlarea.HASH_VALUE,v$process.* from
v$sqlarea,v$session,v$process
where v$sqlarea.address=v$session.sql_address
and v$sqlarea.hash_value=v$session.sql_hash_value
and v$session.paddr=v$process.addr
and v$process.spid in (23345);
--檢視佔用temp情況
SELECT S.sid || ',' || S.serial# sid_serial,
S.username,
T.blocks * TBS.block_size / 1024 / 1024 mb_used,
T.tablespace,
T.sqladdr address,
Q.hash_value,
Q.sql_text
FROM v$sort_usage T, v$session S, v$sqlarea Q, dba_tablespaces TBS
WHERE T.session_addr = S.saddr
AND T.sqladdr = Q.address(+)
AND T.tablespace = TBS.tablespace_name
ORDER BY S.sid;
--檢視資料庫中物件的大小
select segment_name,
segment_type,
tablespace_name,
sum(bytes) / 1024 / 1024
FROM dba_segments
/*where tablespace_name=''
*/
group by segment_name, segment_type, tablespace_name
order by 4 desc;
--檢視錶空間使用情況
Select D.Tablespace_Name,
Space "SUM_SPACE(M)",
Space - Nvl(Free_Space, 0) "USED_SPACE(M)",
Round((1 - Nvl(Free_Space, 0) / Space) * 100, 2) "USED_RATE(%)",
Free_Space "FREE_SPACE(M)",
Blocks Used_Blocks
From (Select Tablespace_Name,
Round(Sum(Bytes) / (1024 * 1024), 2) Space,
Sum(Blocks) Blocks
From Dba_Data_Files
Group By Tablespace_Name) d,
(Select Tablespace_Name,
Round(Sum(Bytes) / (1024 * 1024), 2) Free_Space
From Dba_Free_Space
Group By Tablespace_Name) f
Where D.Tablespace_Name = F.Tablespace_Name(+)
Order By D.Tablespace_Name;
--修改表空間的資料檔案的大小
alter Database datafile '全路徑的資料檔名稱' resize 10240M
--給表空間增加資料檔案
Alter Tablespace 表空間名稱 Add Datafile '全路徑的資料檔名稱' Size 10240M
--停止一個定時任務
SQL> exec dbms_job.broken(job_id,true)
--啟用一個停止的job
SQL> exec dbms_job.broken(job_id,false)
--連入sga
sqlplus -prelim / as sysdba
從Oracle10g開始,sqlplus提供了一個引數選項-prelim,用這個引數,在系統已經hang的時候。我們可以連線到SGA而不是資料庫,也就是說沒有session被建立。
但是隻能在裡面用shutdown abort停庫,或者使用oradug,可以參考:
--刪除歸檔日誌
rman>crosscheck archivelog all;
rman>delete expired archivelog;
--刪除過期備份
RMAN> report obsolete;
RMAN> delete obsolete;
--殺死外部連結程式
ps -ef |grep oracle |grep LOCAL=NO |grep -v grep |awk '{print $2}' |xargs kill -9
rac維護管理指令
--檢視asm磁碟使用情況
select name,total_mb,free_mb from v$asm_diskgroup;
1、檢視狀態的命令
$ crs_stat -t /crsctl stat res -t --檢視crs及所有的service的狀態
$ crsctl check crs --用crsctl命令,檢查crs相關服務的狀態
$ srvctl status nodeapps -n rac01 (rac02) --使用srvctl檢視所有節點上的服務是否正常
$ srvctl status database -d rac --使用srvctl檢視資料庫狀態
2、啟動和關閉相關服務的命令
$ crs_start–all --啟動所有的crs服務
$ crs_stop–all --停止所有的crs服務
$ crsctl start crs --啟動crs服務
$ crsctl stop crs --停止crs服務
$ srvctl start nodeapps -n rac01(rac02) --啟動某節點上所有的應用
$ srvctl stop nodeapps -n rac01(rac02) --停止某節點上所有的應用
$ srvctl start listener -n rac01(rac02) --啟動某個節點的listener
$ srvctl stop listener -n rac01(rac02) --停止某個節點的listener
$ srvctl start instance–d rac–i db01(rac02) --啟動某個instance
$ srvctl stop instance–d rac–i db01(rac02) --停止某個instance
$ srvctl start database–d rac --啟動資料庫
$ srvctl stop database–d rac --停止資料庫
檢視一個大事物的完成度
SELECT se.sid,
opname,
TRUNC (sofar / totalwork * 100, 2) pct_work,
elapsed_seconds elapsed,
ROUND (elapsed_seconds * (totalwork - sofar) / sofar) remain_time,
sql_text
FROM v$session_longops sl, v$sqlarea sa, v$session se
WHERE sl.sql_hash_value = sa.hash_value
AND sl.sid = se.sid
AND sofar != totalwork
ORDER BY start_time;
持續更新中。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28869493/viewspace-2137416/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle效能 - 常用查詢診斷及調整指令碼[不斷更新] (final)Oracle指令碼
- Oracle AWR管理與維護Oracle
- Oracle效能問題 - 常用查詢診斷及調整指令碼[不斷更新] (final)Oracle指令碼
- ORACLE user profile配置/管理/維護Oracle
- oracle表空間管理維護Oracle
- Oracle效能異常查詢及調整指令碼-不斷更新(old versionl)Oracle指令碼
- MS SQL 日常維護管理常用指令碼(下)SQL指令碼
- MS SQL 日常維護管理常用指令碼(上)SQL指令碼
- Oracle Standby系統管理與維護Oracle
- 專案管理相關網站(不斷更新)專案管理網站
- ****阿里雲使用+快速運維總結(不斷更新)阿里運維
- 史上最全近百條Oracle DBA日常維護SQL指令碼指令OracleSQL指令碼
- ORACLE資料庫管理維護綱要Oracle資料庫
- mysql 管理維護MySql
- Oracle DBA常用Linux,Unix命令(不斷更新中)OracleLinux
- DBA日常維護SQL指令碼SQL指令碼
- 使用Linux系統的Shell指令碼維護Oracle(轉)Linux指令碼Oracle
- RAC維護管理命令
- Oracle11g RAC常用操作 (維護及管理)Oracle
- oracle rac管理維護筆記_轉自網友Oracle筆記
- Javascript Lib (不斷更新中)JavaScript
- oracle goldengate維護OracleGo
- Oracle RAC 日常維護Oracle
- Oracle RAC維護命令Oracle
- oracle維護相關Oracle
- Oracle 索引的維護Oracle索引
- oracle 維護常用SQLOracleSQL
- Oracle11g RAC下ASM 的管理與維護OracleASM
- Oracle學習遇到的問題收集及解決 - 不斷更新Oracle
- const特性總結(不斷更新)
- java基礎:面試題【不斷更新】Java面試題
- Nginx配置使用積累[不斷更新]Nginx
- iterator標籤總結(不斷更新)
- oracle常用維護查詢Oracle
- Oracle OGG日常維護Oracle
- 針對oracle日常維護Oracle
- CentOS6官方不維護了,更新怎麼辦?配置阿里雲yum源CentOS阿里
- File檔案處理工具(不斷更新)