restore from DB2 binary backup support
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@11084 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
parent
da5da909c6
commit
e172ed8f8d
@ -24,6 +24,7 @@ use strict;
|
||||
|
||||
|
||||
restorexCATdb -p <directory containing db restore .csv files>
|
||||
restorexCATdb -b -p <directory binary database backup>
|
||||
|
||||
|
||||
=cut
|
||||
@ -33,7 +34,22 @@ use strict;
|
||||
my $rc = 0;
|
||||
|
||||
&parse_args;
|
||||
|
||||
if ($::BINARY) { # not using xCAT to dump, using the database utility
|
||||
my $DBname = xCAT::Utils->get_DBName;
|
||||
if ($DBname eq "DB2") {
|
||||
$rc=&DB2_binrestore;
|
||||
if ($rc == 0) {
|
||||
xCAT::MsgUtils->message("I", "Restore Complete. You can now restart the daemons.");
|
||||
} else {
|
||||
xCAT::MsgUtils->message("E", "Restore Failed.");
|
||||
}
|
||||
exit $rc;
|
||||
} else {
|
||||
xCAT::MsgUtils->message("E",
|
||||
"Binary restore (-b) is only supported for DB2");
|
||||
exit 1;
|
||||
}
|
||||
}
|
||||
# read all the *.csv files from the input directory and restore the database
|
||||
opendir DIRPATH, $::PATH;
|
||||
if ($? != 0)
|
||||
@ -120,14 +136,16 @@ sub parse_args
|
||||
{
|
||||
my $msg;
|
||||
my $usagemsg =
|
||||
" restorexCATdb -h \n restorexCATdb -v \n restorexCATdb [-a] [-V] <-p> [path to restore .csv files]\n";
|
||||
" restorexCATdb -h \n restorexCATdb -v \n restorexCATdb [-a] [-V] <-p> [path to restore .csv files]\n restorexCATdb -b [-V] <-t> [timestamp on restore backup file] <-p> [path to restore backup file]";
|
||||
Getopt::Long::Configure("posix_default");
|
||||
Getopt::Long::Configure("no_gnu_compat");
|
||||
Getopt::Long::Configure("bundling");
|
||||
if (
|
||||
!GetOptions(
|
||||
'a|all' => \$::ALL,
|
||||
'b|binary' => \$::BINARY,
|
||||
'p|path=s' => \$::PATH,
|
||||
't|timestamp=s' => \$::TIMESTAMP,
|
||||
'h|help' => \$::HELP,
|
||||
'V|verbose' => \$::VERBOSEREST,
|
||||
'v|version' => \$::VERSION
|
||||
@ -164,4 +182,85 @@ sub parse_args
|
||||
}
|
||||
|
||||
}
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
=head3 DB2_binrestore
|
||||
|
||||
Uses the DB2 Database supplied restore utility to restore the database
|
||||
|
||||
=cut
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
sub DB2_binrestore
|
||||
{
|
||||
my $msg;
|
||||
my $rc=0;
|
||||
if (!($::TIMESTAMP)){
|
||||
xCAT::MsgUtils->message("E", "To restore from a binary backup, the timestamp of the backup must be provided with the -t option.");
|
||||
return 1;
|
||||
}
|
||||
# check to see if xcatd running. Cannot restore if it is
|
||||
my $cmd = "ps -ef | grep xcatd";
|
||||
my @output=xCAT::Utils->runcmd($cmd, -1);
|
||||
if ($::RUNCMD_RC == 0) { # found something
|
||||
if (grep(/xcatd: SSL listener/, @output)) { # xcatd running
|
||||
xCAT::MsgUtils->message("E", "xcatd is still accessing the database. All applications accessing the DB2 database must be stopped before you can restore.");
|
||||
return 1;
|
||||
|
||||
}
|
||||
}
|
||||
# get password from cfgloc
|
||||
|
||||
my $cmd="cat /etc/xcat/cfgloc";
|
||||
my $info=xCAT::Utils->runcmd($cmd, -1);
|
||||
if ($::RUNCMD_RC != 0) {
|
||||
xCAT::MsgUtils->message("E", "Cannot read /etc/xcat/cfgloc.");
|
||||
return 1;
|
||||
}
|
||||
chomp($info);
|
||||
my ($db,$inst,$pw) = split(/\|/, $info);
|
||||
|
||||
# Hopefully nothing else is accessing the database, so try restore
|
||||
$cmd="db2 restore db xcatdb user xcatdb using $pw from $::PATH taken at $::TIMESTAMP";
|
||||
$rc = &rundb2cmd($cmd); # must su to xcatdb
|
||||
if ($rc != 0)
|
||||
{
|
||||
xCAT::MsgUtils->message("E", " $cmd error.");
|
||||
return 1;
|
||||
}
|
||||
# Now roll forward any tranactions since the backup
|
||||
$cmd="db2 rollforward database xcatdb to end of logs and complete";
|
||||
$rc = &rundb2cmd($cmd); # must su to xcatdb
|
||||
if ($rc != 0)
|
||||
{
|
||||
xCAT::MsgUtils->message("E", " $cmd error.");
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
=head3 rundb2cmd
|
||||
|
||||
|
||||
Run a commmand as the xcatdb instance id
|
||||
Input: command
|
||||
|
||||
=cut
|
||||
#-----------------------------------------------------------------------------
|
||||
sub rundb2cmd
|
||||
{
|
||||
my $orgcmd = shift;
|
||||
my $rc = 0;
|
||||
my $cmd = "\'";
|
||||
$cmd .= $orgcmd;
|
||||
$cmd .= ' 2>&1';
|
||||
$cmd .= "\'";
|
||||
system("su - xcatdb -c $cmd");
|
||||
if ($? > 0) # error
|
||||
{
|
||||
$rc = $? >> 8;
|
||||
}
|
||||
return ($rc);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user