Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
#!/usr/bin/perl

use warnings;
use strict;
$|++;
use File::Basename;
use Getopt::Long;

my $usage = basename($0)." --source_connect  --dest_connect time \n".
    "Options:\n".
    "--source_connect  source connect string: user/pass\@db(required)\n".
    "--dest_connect    destination database: user/pass\@db(required) \n".
    "--help, -h        Print this message and exit\n";

my $source_connect='' ;
my $dest_connect='' ;
my $help = 0;
GetOptions('source_connect=s' => \$source_connect,
	   'dest_connect=s' => \$dest_connect,
	   'help|h' => \$help );
if ($help) {
    print "$usage";
    exit;
}

my $time = shift @ARGV;

die "Must provide polling time interval in second."  unless $time;

my $conn_source = "sqlplus -SL ${source_connect}";
my $conn_dest = "sqlplus -SL ${dest_connect}";

print "Opening pipes to sqlplus...";
open SOURCE, "| $conn_source >> source_poll.txt" or die $!;
print SOURCE "set serveroutput on;\nset echo off;\n";

open DEST, "| $conn_dest >> dest_poll.txt" or die $!;
print DEST "set serveroutput on;\nset echo off;\n";
print "Done.\n";

print "Beginning polling every $time s, use Ctl-c to stop\n\n";

while (1) {
    print SOURCE "call poll_db();\n";
    print DEST "call poll_db();\n";
    sleep($time);
    print `echo -n`; # I don't know why, but this program doesn't work with out this line
}

END {
    print "Closing pipes.\n";
    close SOURCE;
    close DEST;
}