mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-31 03:12:30 +00:00 
			
		
		
		
	support backup of DB2 using db2 backup facilities
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@11082 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
		| @@ -33,6 +33,25 @@ use strict; | ||||
| my $rc = 0; | ||||
| my $cmd; | ||||
| &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_bindump; | ||||
|      if ($rc == 0) { | ||||
|        xCAT::MsgUtils->message("I", "Backup Complete."); | ||||
|      } else { | ||||
|        xCAT::MsgUtils->message("I", "Backup Failed."); | ||||
|      } | ||||
|      exit $rc; | ||||
|    }  else { | ||||
|     xCAT::MsgUtils->message("E", | ||||
|                             "Binary dump (-b) is only supported for DB2"); | ||||
|     exit 1; | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
| # Dump using xCAT utilities | ||||
| my @output = xCAT::Utils->runcmd("tabdump", 0); | ||||
| if ($::RUNCMD_RC != 0) | ||||
| {    # error | ||||
| @@ -111,13 +130,14 @@ sub parse_args | ||||
| { | ||||
|     my $msg; | ||||
|     my  $usagemsg = | ||||
|           " dumpxCATdb -h \n dumpxCATdb -v \n dumpxCATdb [-a] [-V] <-p> [path to dump directory]"; | ||||
|           " dumpxCATdb -h \n dumpxCATdb -v \n dumpxCATdb [-a] [-V] <-p> [path to dump directory] \n dumpxCATdb -b [-V] <-p> [path to dump directory]"; | ||||
|     Getopt::Long::Configure("posix_default"); | ||||
|     Getopt::Long::Configure("no_gnu_compat"); | ||||
|     Getopt::Long::Configure("bundling"); | ||||
|     if ( | ||||
|         !GetOptions( | ||||
|             'a|all'    => \$::ALL, | ||||
|             'b|bin'    => \$::BINARY, | ||||
|             'p|path=s'  => \$::PATH, | ||||
|             'h|help'    => \$::HELP, | ||||
|             'V|verbose'    => \$::DUMPVERBOSE, | ||||
| @@ -160,3 +180,101 @@ sub parse_args | ||||
|  | ||||
| } | ||||
|  | ||||
| #----------------------------------------------------------------------------- | ||||
|  | ||||
| =head3 DB_bindump  | ||||
|    | ||||
|     Uses the DB2 Database supplied dump utility to backup the database | ||||
|  | ||||
| =cut | ||||
|  | ||||
| #----------------------------------------------------------------------------- | ||||
| sub DB2_bindump  | ||||
| { | ||||
|     my $msg; | ||||
|     my $rc=0; | ||||
|     # check to see if they are setup to do an online dump | ||||
|     # Database has to have defined logretain RECOVERY and there | ||||
|     # must already been taken an offline backup.    | ||||
|     my $cmd="db2 get database configuration for xcatdb > /tmp/db2output"; | ||||
|     $rc  = &rundb2cmd($cmd);  # must su to xcatdb | ||||
|     if ($rc != 0) | ||||
|     { | ||||
|       xCAT::MsgUtils->message("E", " $cmd error."); | ||||
|       return 1; | ||||
|     } | ||||
|  | ||||
|     # check to see if they setup log recover | ||||
|     $cmd = " egrep -i \"Log retain for recovery enabled\" /tmp/db2output"; | ||||
|     my @output=xCAT::Utils->runcmd($cmd, -1); | ||||
|     if ($::RUNCMD_RC != 0) { | ||||
|       xCAT::MsgUtils->message("E", "Log retain for recovery enabled (LOGRETAIN) = RECOVERY must be set to perform ONLINE Backups and one ONLINE backup must have been taken. See  xCAT DB2 documentation. The section - Backup/Restore the database with DB2 Commands.");  | ||||
|       return 1; | ||||
|     } else {  # check to see if LOGRETAIN is ON | ||||
|       if (!grep(/ = RECOVERY/, @output)) { | ||||
|       xCAT::MsgUtils->message("E", "Log retain for recovery enabled (LOGRETAIN) = RECOVERY  must be set to perform ONLINE Backups and one ONLINE backup must have been taken. See  xCAT DB2 documentation. The section - Backup/Restore the database with DB2 Commands.");  | ||||
|       return 1; | ||||
|       } | ||||
|     } | ||||
|   | ||||
|     # check to see if they have one backup  | ||||
|     $cmd = " ls $::PATH"; | ||||
|     @output=xCAT::Utils->runcmd($cmd, -1); | ||||
|     if ($::RUNCMD_RC != 0) { | ||||
|       xCAT::MsgUtils->message("E", "One ONLINE backup must have been taken and exist in $::PATH. See  xCAT DB2 documentation. The section - Backup/Restore the database with DB2 Commands.");  | ||||
|       return 1; | ||||
|     } else {  # check to see if LOGRETAIN is ON | ||||
|       if (!grep(/XCATDB/, @output)) { | ||||
|       xCAT::MsgUtils->message("E", "One ONLINE backup must have been taken and exist in $::PATH. See  xCAT DB2 documentation. The section - Backup/Restore the database with DB2 Commands.");  | ||||
|       return 1; | ||||
|       } | ||||
|     } | ||||
|      | ||||
|    # finally all checks ok, can take an ONLINE backup | ||||
|    # 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);  | ||||
|  | ||||
|     my $cmd=" db2 backup db xcatdb user xcatdb using $pw ONLINE to $::PATH"; | ||||
|     $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); | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user