« 指定保留多少GB的归档 »
Developer » http://www.anysql.net/developer/purge_archivelog_by_space.html 2008-11-25管理很多个数据库的归档日志时, 比较好的功能是保留指定容量的归档, 一般来讲归档所在的卷是独立的, 以容易方式设置比设置归档产生时间和归档日志个数都有优势. 下面是用Perl实现了这个功能, 传入一个日志序号(通常传入最大的日志号)和一个容量(以GB为单位).
#
# getLogSequenceBySize
#
sub getLogSequenceBySize
{
my ($logseq, $szlimit) = @_;
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,
$size,$atime,$mtime,$ctime,$blksize,$blocks);
my $totalsz = 0;
my ($archive_log);
$szlimit = 20 if (!defined($szlimit) or $szlimit < 20);
while ($totalsz < $szlimit)
{
$archive_log = findLogBySequence($logseq);
if (-e $archive_log)
{
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,
$size,$atime,$mtime,$ctime,$blksize,
$blocks) = stat($archive_log);
$totalsz = $totalsz + ($size/1024/1024/1024);
$logseq --;
}
else
{
last;
}
}
scalar $logseq;
}
数据库越多, 这样的智能脚本越有发挥余地. 有时间整一个Windows上的Perl脚本版本, Windows上的Oracle还是很多的.


Windows上,Signal Handler不支持。类似SIG{INT}和SIG{ALARM}都用不出,唉。。