亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現自動刪除歸檔日志的腳本

發布時間:2021-12-20 09:35:16 來源:億速云 閱讀:216 作者:小新 欄目:開發技術

這篇文章主要介紹如何實現自動刪除歸檔日志的腳本,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

自動刪除歸檔日志的腳本(尤其是dataguard環境)

已有 236 次閱讀2011-12-16 21:02 |個人分類:oracle data guard

自動刪除歸檔日志的腳本(尤其是dataguard環境)

在歸檔模式下,要時刻注意磁盤空間不要被歸檔撐爆,尤其在dataguard環境中,更是需要定期清理已經apply的日志,以免把硬盤撐爆。

在自動刪除日志需要考慮幾點:
1. 日志必須是已經被apply的
2. 日志備份已經被備份過的
3. 為了保證一定的管理余地,不要apply后馬上刪除,而應該根據實際情況設定一個刪除策略。
4. 腳本要能夠兼容primary和standby兩種狀態,且自動判斷狀態并執行不同的邏輯,否則在切換后,如果忘記修改腳本,那就可能杯具了。

以下是我用于刪除歸檔日志的一個腳本,運行這個腳本需要輸入一個參數來控制日志的保留時間。
這個腳本可用于primary端也可用于standby端,
1. 對于standby端,只要在保存周期內且被apply的歸檔都會被刪除
2. 對于primary端,除了滿足保存周期以及被apply條件外,還要保證歸檔已經被備份過才會被刪除

對于dataguard環境,雖然備份可以選擇在primary和standby端執行,但如果壓力不是非常大的話,為了管理方便,更建議在primary端執行。

詳細腳本如下:

[oracle@dwapp1 DBA]$ cat delete_arch.sh
#!/bin/bash

##################################################################################################################
#
# This script is to delete the arch logs for the standby database after it has applied the logs to the instance.
#
##################################################################################################################

source /home/oracle/.bash_profile

#####################
usage()
{ #usage
echo " USAGE: `basename $0` $retention"
exit 2
}


ArgNum=1

if [ ! $# -eq $ArgNum ];then
echo " "
echo " Incorrect parameter"
usage
fi


retention=$1

script=`basename $0`

dir=/tmp
tmpf=$dir/.$script.tmp

# get archived log list for standby database
function GetLogListForStandby
{
sqlplus -S /nolog <<EOF > $tmpf
connect / as sysdba
set head off
set feedback off
set pages 0
select name from(
select name,sequence#,row_number() over(partition by a.sequence# order by name) rn,
count(decode(applied,'YES',1,null)) over (partition by a.sequence#) cn from v$archived_log a
where completion_time <sysdate-$retention
and a.resetlogs_id in (
select i.resetlogs_id from v$database_incarnation i where status = 'CURRENT')
)
where rn=1 and cn=1
order by sequence#;
exit
EOF
return
}

function GetDBRole
{
sqlplus -S /nolog <<EOF
connect / as sysdba
set head off
set feedback off
set pages 0
select controlfile_type from v$database;
exit
EOF
return
}

# get archived log list for primary database
function GetLogListForPrimary
{
sqlplus -S /nolog <<EOF > $tmpf
connect / as sysdba
set head off
set feedback off
set pages 0
select name from(
select name,sequence#,row_number() over(partition by a.sequence# order by name) rn,
sum(backup_count) over(partition by a.sequence# ) bk_cnt,
count(decode(applied,'YES',1,null)) over (partition by a.sequence#) cn
from v$archived_log a where completion_time <sysdate-$retention
and a.resetlogs_id in (
select i.resetlogs_id from v$database_incarnation i where status = 'CURRENT')
)
where rn=1 and cn=1 and bk_cnt>0
order by sequence#;
exit
EOF
return
}

function GetDBRole
{
sqlplus -S /nolog <<EOF
connect / as sysdba
set head off
set feedback off
set pages 0
select controlfile_type from v$database;
exit
EOF
return
}



# check database role
DBROLE=`GetDBRole`

NUM=0

if [ $DBROLE = "CURRENT" ];then
echo "It's a primary database ......"
# get archived log list for primary
GetLogListForPrimary

elif [ $DBROLE = "STANDBY" ];then
echo "It's a standby database ......"
# get archived log list for standby
GetLogListForStandby
fi

echo "deleting archived log files ......"

if [ -n $tmpf ]; then
for ARCH in `cat $tmpf`;do
if [ -f $ARCH ];then
NUM=`expr $NUM + 1`
rm -f $ARCH
fi
done
fi

rm -f $tmpf

echo "finished deleting $NUM files"


使用測試:需要輸入一個參數,用于設定保存周期。以下例子是刪除3天前的歸檔

[oracle@dwapp1 DBA]$ ./delete_arch.sh 3
It's a primary database ......
deleting archived log files ......
finished deleting 12 files

設定定時任務自動執行

1 */4 * * * /home/oracle/DBA/delete_arch.sh 2


當然,對于非dataguard環境或者dataguard環境的primary端,更建議使用RMAN來管理歸檔了。

以上是“如何實現自動刪除歸檔日志的腳本”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南投县| 怀仁县| 晴隆县| 栾城县| 榆社县| 甘泉县| 邵东县| 阿拉善右旗| 南和县| 天等县| 长泰县| 玛沁县| 三明市| 马龙县| 呼伦贝尔市| 峨眉山市| 诸暨市| 广西| 乐亭县| 资源县| 同仁县| 瓦房店市| 灵山县| 皋兰县| 隆回县| 登封市| 武陟县| 栾川县| 南安市| 沧州市| 吴忠市| 清远市| 冷水江市| 邵阳市| 庆云县| 昆山市| 霍林郭勒市| 滦平县| 唐河县| 三河市| 德庆县|