怎么检查Oracle GoldenGate(OGG)的checkpoint file 是否被locked?

适用于:

Oracle GoldenGate - Version 11.1.1.1.1 and later

Information in this document applies to any platform.

目标:

GoldenGate 使用 file lock 来确定 进程(抽取进程,传输进程,应用进程)是否在running

有时候,我们呢会看到进程(extract or replicat) 正在running,但是该进程确实没有running,并且该进程的检查点文件(checkpoint file)处于被锁定的状态。MOS文章 1314220.1 描述了解决这个问题的方法

本文描述了确认 checkpoint file 是否被locked的方法。

解决方案:

1. checkpoint file被本server上的一个进程lock:

(1) lsof

[oracle@localhost dirchk]$ lsof E1.cpe
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
extract 19025 oracle 16uW REG 253,0 53248 419123 E1.cpe

 

(2) fuser

[oracle@localhost dirchk]$ fuser E1.cpe
E1.cpe: 19025

 

[oracle@localhost dirchk]$ ps -ef|grep 19025
oracle 19025 7443 2 18:14 ? 00:00:01 /app/goldengate/source/extract PARAMFILE /app/goldengate/source/dirprm/e1.prm REPORTFILE /app/goldengate/source/dirrpt/E1.rpt PROCESSID E1 USESUBDIRS
oracle 19035 19025 1 18:14 ? 00:00:01 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 19041 19025 2 18:14 ? 00:00:01 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 19058 18929 0 18:15 pts/0 00:00:00 grep 19025

 

2.checkpoint file 在nfs server端,并且 lock 也是在nfs server端,可以用如下的perl脚本来检查:

----------------

#!/usr/bin/perl

use Fcntl ':flock'; # import LOCK+* constants

my $f = $ARGV[0];
open (MYFILE, "+< $f") || die "cannot open file\n";
print "status 1: file is opened, but not locked yet\n";
flock(MYFILE, LOCK_EX) || die "cannot flock file\n";

print "status 2: file is opened/locked, but not seeked yet\n";
seek (MYFILE, 0, 2) || die "seek failed \n";
print "status 3: file is opened/locked/seeked sucessfully, sleeping for 20 sec\n";
sleep(20);
close (MYFILE);
print "status 4: closed file\n";

-----------------

使用例子:

(1) when the file is locked
mugato:/mnt/shared/Public/Support/oracle/v111114_2_linux64_ora11g/dirchk> ./tt.pl E1.cpe
status 1: file is opened, but not locked yet

 


(2) when the file is not locked
mugato:/mnt/shared/Public/Support/oracle/v111114_2_linux64_ora11g/dirchk> ./tt.pl E1.cpe
status 1: file is opened, but not locked yet
status 2: file is opened/locked, but not seeked yet
status 3: file is opened/locked/seeked sucessfully, sleeping for 20 sec
status 4: closed file

Note: the script is only tested on Solaris 10, and it may need to be modified on other platform