題記:最近客戶的一套訂購數據庫經常會因爲數據及業務壓力太大,在RMAN進行全備或是增備時,而此時業務有大量要處理時,系統資源就會被耗盡,會影響到業務的正常,所以常有時需要先終止掉RMAN備份,這裏提供了我在處理過程中的方法,希望大家喜歡!
本文的目的就是在緊急狀態下,需要立即終止正在進行的RMAN備份進程。
####查看RMAN備份進度,才40%
select sid,
serial#,
context,
sofar,
totalwork,
round (sofar / totalwork * 100, 2) "%_complete"
from v$session_longops
where opname like 'RMAN%'
and totalwork != 0
and opname not like '%aggregate%'
and sofar <> totalwork;
SQL> select sid,
2 serial#,
3 context,
4 sofar,
5 totalwork,
6 round (sofar / totalwork * 100, 2) "%_complete"
7 from v$session_longops
8 where opname like 'RMAN%'
9 and totalwork != 0
10 and opname not like '%aggregate%'
11 and sofar <> totalwork;
SID SERIAL# CONTEXT SOFAR TOTALWORK %_complete
---------- ---------- ---------- ---------- ---------- ----------
381 57130 1 10735600 27000832 39.76
SQL>
(1)查看RMAN分配的各個通道的進程號
SQL>
SELECT sid, spid, client_info
FROM v$process p, v$session s
WHERE p.addr = s.paddr
AND client_info LIKE '%rman%';
SID SPID CLIENT_INFO
---------- ------------------------ -------------------------
525 26244 rman channel=t1
1023 26245 rman channel=t2
699 26246 rman channel=t3
(2)根據第(1)中得到的進程號,終止RMAN備份
注:這裏既要kill 掉RMAN備份腳本的PID,也要kill 掉RMAN中分配的各個通道的PID
subsdb1:~ # ps -ef | grep 26244
oracle 26244 26224 7 17:12 ? 00:01:49 oraclesubsdb (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
root 9877 9603 0 17:34 pts/11 00:00:00 grep 26244
subsdb1:~ # kill -9 26244
subsdb1:~ # ps -ef | grep 26245
oracle 26245 26224 5 17:12 ? 00:01:13 oraclesubsdb (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
root 9968 9603 0 17:35 pts/11 00:00:00 grep 26245
subsdb1:~ # kill -9 26245
subsdb1:~ # ps -ef | grep 26246
oracle 26246 26224 4 17:12 ? 00:01:03 oraclesubsdb (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
root 10009 9603 0 17:35 pts/11 00:00:00 grep 26246
subsdb1:~ # kill -9 26246
subsdb1:~ # ps -ef | grep rman
oracle 26224 25962 0 17:11 pts/3 00:00:03 rman target / nocatalog
root 10061 9603 0 17:35 pts/11 00:00:00 grep rman
subsdb1:~ # kill -9 26224
subsdb1:~ # ps -ef | grep rman
root 10102 9603 0 17:36 pts/11 00:00:00 grep rman
subsdb1:~ # ps -ef | grep 26246
root 10213 9603 0 17:36 pts/11 00:00:00 grep 26246
此時RMAN備份操作已經被終止。查看(1)中的SQL語句時,結果爲空。
說明:如果單單kill掉RMAN的進程號,那麼RMAN備份並沒有停止,而是要連channel進程也一起掉纔可以!