Oracle Dataguard 漏传归档日志

Oracle dataguard因为设置为异步,非强制,有些时候会莫名漏掉一些日志不传递,很多时候都是看日志才发现日志无法应用了。
如果去找到底漏了那个日志很费功夫,于是就像写一个脚本。

1.在备份服务器上,新建一个checklog.vbs
dim fso,fs,f,f1
dim startnum,endnum
'设定其实数和结束数(这个需要根据自己的实际情况修改)
startnum=
endnum=
'创建两个文件,一个文件存放少那个日志
'另外一个日志记录注册语句
Set fso= CreateObject("Scripting.FileSystemObject")
if fso.FileExists("s:\result.txt") then
fso.DeleteFile("s:\result.txt")
fso.DeleteFile("s:\resultsql.txt")
end if
fso.CreateTextFile("s:\result.txt")
fso.CreateTextFile("s:\resultsql.txt")
'打开两个日志文件,记录缺少的日志文件
set f=Fso.OpenTextFile("s:\result.txt",2,true)
set f1=Fso.OpenTextFile("s:\resultsql.txt",2,true)
set fs=wscript.createobject("scripting.filesystemobject")
for i=startnum to endnum step 1
filestr="t:\oracle\PRD\oraarch\ARCH_1_"& i &"_845400201.ARC"
filesqlstr="Alter database register logfile'"&filestr&"';"
if (fs.FileExists(filestr)=false) then
f.WriteLine(filestr)
f1.WriteLine(filesqlstr)
end if
next
f.close
f1.close
set fso=nothing

2.在主服务上
将备份服务器上产生的结果result.txt拷贝过来。
也新建一个copylog.vbs
dim fso,fs,f
'打开结果,进行 遍历,把漏掉的log文件整理到一个文件夹中
Set Fso = CreateObject("Scripting.FileSystemObject")
set f=Fso.OpenTextFile("s:\result.txt",1,true)
set fs=wscript.createobject("scripting.filesystemobject")
Do While f.AtEndOfStream <> True
filestr=f.ReadLine()
fs.CopyFile filestr,"t:\aaa\"
loop
f.close
set fso = nothing

以为这样就成功了,结果还是不行,日志中记录:
FAL[client]: Failed to request gap sequence
 GAP - thread 1 sequence 605520-605537
 DBID 1806838021 branch 845400201
FAL[client]: All defined FAL servers have been attempted.
-------------------------------------------------------------
Check that the CONTROL_FILE_RECORD_KEEP_TIME initialization
parameter is defined to a value that is sufficiently large
enough to maintain adequate log switch information to resolve
archivelog gaps.
-------------------------------------------------------------
原来这些之前手工拷贝过去的有漏掉注册的,手工注册一下,还是不行,再检查,发现605520这个日志文件有问题,主机上的文件大小和备份机的大小居然不一致,应该是拷贝导致的,重新拷贝一次,再注册一下,OK.

猜你喜欢

转载自blog.csdn.net/samson_www/article/details/88542322
今日推荐