* Nix рдкрд░ DB2 рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдмреИрдХрдЕрдк

рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд╣реАрдВ, рдХрд╛рдо рдкрд░, рдореБрдЭреЗ AIX рдкрд░ DB2 рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдСрдлрд╝рд▓рд╛рдЗрди рдмреИрдХрдЕрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЪреВрдВрдХрд┐ рдорд╛рдирдХ рд╡рд┐рдзрд┐ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рдереА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрди рд╕рднреА рд▓рд┐рдкрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдЬреЛ рдореБрдХреБрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛рдПрдВрдЧреАред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░рд╣рд╛рд░ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХреБрдЫ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯреНрд╕ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдкреВрд░реНрдг рдСрдлрд╝рд▓рд╛рдЗрди рдмреИрдХрдЕрдк 7z рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╣реБрдд рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдЖрдХрд╛рд░ рдореЗрдВ 2-3 рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 20-50 рдПрдордмреА рд▓реЗрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдк рддрд┐рдерд┐ рджреНрд╡рд╛рд░рд╛ рдкреИрдХ рдкреВрд░реНрдг рдмреИрдХрдЕрдк рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рдкреВрд░реА рдЪреАрдЬ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдорд╛рд░ рджреЗрдЧрд╛, рдпреЛрдЬрдирд╛ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдмреИрдХрдЕрдк рдЦреБрдж рдмрдирд╛ рд▓реЗрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реЗрдВрдЯреЛрд╕ 5.5 рдкрд░ рд╕реНрдерд╛рдкрд┐рдд DB2 9.7.4 рдПрдХреНрд╕рдкреНрд░реЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЗрд╕ рдкреВрд░реА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд░реНрд▓ рдФрд░ 7za рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдзрд╛рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ / рд╣реЛрдо / db2inst1 рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рдЪрд▓реЛ рджреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдФрд░ рдПрдХ рдмреИрдХрдЕрдк рдХреЗ рд▓рд┐рдПред
mkdir bin mkdir backups 

рд╣рдореЗрдВ рдЬрд┐рд╕ рдкрд╣рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡рд╣ рдордЬрдмреВрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдорд╛рд░рдиреЗ рдХреА рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ
 #!/usr/bin/perl sub getDBApplicationHandles { my $dbname = $_[0]; my @appHandles = (); open (DB2, "db2 list application for database ".$dbname." |"); $f = 0; while (<DB2>){ $l = $_; if($l =~ /^\-\-\-/){ $f = 1; } if($f == 1 && !($l =~ /^\-\-\-/)){ for($i=0;$i<1000;$i++){ $l =~ s/ / /g; } my @val = split(' ', $l); push(@appHandles, @val[2]); } } close DB2; return @appHandles; } sub forceDBApplication { my $dbname = $_[0]; my $forceS = "( "; my $found = 0; my @appHandles = getDBApplicationHandles($dbname); foreach my $val (@appHandles) { $val =~ s/^\s+//; if(length($val) > 0){ $found = 1; $forceS = $forceS . $val . ", "; } } if($found == 1){ $forceS = substr($forceS, 0, length($forceS)-2) . " )"; print "db2 \"force application ".$forceS."\"\n"; system("db2 \"force application ".$forceS."\""); } } if(length($ARGV[0]) == 0){ print "Please specify database name to force connections\n"; exit 1; } forceDBApplication($ARGV[0]); 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, getDBApplicationHandles рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХреЗрд╡рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИрдВрдбрд▓ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ ForceDBApplication рдЙрдиреНрд╣реЗрдВ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмреИрдХрдЕрдк рдХреЗ рджреМрд░рд╛рди рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреА рд▓реЗрдХрд┐рди рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИред рд╣рдо рджреВрд╕рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░реЗрдВрдЧреЗред рдЖрдк рдкреВрдЫрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреНрдпреЛрдВ рдПрдореНрдмреЗрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ? рдпрд╣ рд╕рдм рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдХрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рд╕рд┐рд╕реНрдЯрдо рдЬреЛ db2 рд╕реЗ рдЬреБрдбрд╝рддреЗ рд╣реИрдВ, рдирдП рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ .profile рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
 export PATH=~/bin:$PATH export DB2_BACKUP_DIR=~/backups export DB2_BACKUP_PARALLELISM=4 
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдордиреЗ рджреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░реЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХреА рд╣реИред рд╣рдо рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рджреВрд╕рд░реА рд▓рд┐рдкрд┐ рдореЗрдВ рдХрд░реЗрдВрдЧреЗред рд╕рдорд╛рдирд╛рдВрддрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ db2 рдмреИрдХрдЕрдк рдХреЗ рджреМрд░рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдмреИрдХрдЕрдк рд╕рдордп рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред

рджреВрд╕рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмреИрдХрдЕрдкрдбрдм рд╣реИ
 #!/usr/bin/perl use Time::localtime; $globBackupDirectoryPath = $ENV{'DB2_BACKUP_DIR'}; $globBackupParallelism = $ENV{'DB2_BACKUP_PARALLELISM'}; sub getTimeStamp { $tm = localtime; ($DAY, $MONTH, $YEAR, $HOUR, $MINUTE) = ($tm->mday, $tm->mon, $tm->year, $tm->hour, $tm->min); return $HOUR ."-". $MINUTE . "." . $DAY . "." . ($MONTH+1) . "." . ($YEAR+1900); } sub getPathPrefix { $tm = localtime; return ($tm->year+1900). "/" . ($tm->mon+1); } sub archiveDirectory { $dirPath = $_[0]; $dbname = $_[1]; $tm = localtime; ($DAY, $MONTH, $YEAR, $HOUR, $MINUTE) = ($tm->mday, $tm->mon, $tm->year, $tm->hour, $tm->min); $dirPathArch = $dirPath."/tmp/". $dbname .".". getTimeStamp() . ".7z"; if (-e $dirPathArch){ system("rm",$dirPathArch); } system("7za","a","-r","-mx=9","-mfb=64","-md=64m","-ms=on",$dirPathArch,$dirPath."/tmp/"); system("mv",$dirPathArch,$dirPath . "/db/" . getPathPrefix()); system("rm","-Rf",$dirPath."/tmp/"); print $dirPathArch . " archived\n"; } sub backupDB { my $dbname = $_[0]; my $dbschema = $_[1]; my $dbparallelism = "".$globBackupParallelism; my $backupDir = $globBackupDirectoryPath."/".$dbname; # Schema backup if(length($dbschema) > 0){ system("mkdir","-p",$backupDir . "/schema/" . getPathPrefix()); my $schemapath = $backupDir . "/schema/" . getPathPrefix() ."/". $dbname . "." . getTimeStamp().".sql"; system("db2look","-d",$dbname,"-z",$dbschema,"-e","-o",$schemapath,"-nofed"); print "db2 ".$dbname." schema ".$dbschema." backup completed\n"; } # Database backup system("mkdir","-p",$backupDir . "/db/" . getPathPrefix()); system("rm","-Rf",$backupDir."/tmp/"); system("mkdir","-p",$backupDir."/tmp/"); forceDBApplication($dbname); system("db2","backup","database",$dbname,"to",$backupDir."/tmp/","parallelism",$dbparallelism); archiveDirectory($backupDir,$dbname); } sub getDBApplicationHandles { my $dbname = $_[0]; my @appHandles = (); open (DB2, "db2 list application for database ".$dbname." |"); $f = 0; while (<DB2>){ $l = $_; if($l =~ /^\-\-\-/){ $f = 1; } if($f == 1 && !($l =~ /^\-\-\-/)){ for($i=0;$i<1000;$i++){ $l =~ s/ / /g; } my @val = split(' ', $l); push(@appHandles, @val[2]); } } close DB2; return @appHandles; } sub forceDBApplication { my $dbname = $_[0]; my $forceS = "( "; my $found = 0; my @appHandles = getDBApplicationHandles($dbname); foreach my $val (@appHandles) { $val =~ s/^\s+//; if(length($val) > 0){ $found = 1; $forceS = $forceS . $val . ", "; } } if($found == 1){ $forceS = substr($forceS, 0, length($forceS)-2) . " )"; print "db2 \"force application ".$forceS."\"\n"; system("db2 \"force application ".$forceS."\""); } } if(length($ARGV[0]) == 0){ print "Please specify database name and schema to backup\n"; exit 1; } backupDB($ARGV[0],$ARGV[1]); 

GetTimeStamp рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрдВ рд╡рд╣ рджрд┐рдирд╛рдВрдХ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмреИрдХрдЕрдк рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдирд╛рдо рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред GetPathPrefix рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрдВ рд╡рд╣ рдкрде рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдмреИрдХрдЕрдк рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдк рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдЖрд░реНрдХрдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ 7za рд╕рдВрдЧреНрд░рд╣ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рдХреЗ рдмреИрдХрдЕрдк рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ db2look рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдмреИрдХрдЕрдкрдбреАрдмреА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рджреЗрдЦреЗрдВред

рдмрд┐рди рдореЗрдВ рдПрдХ рдФрд░ backup.sh рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рд╕реЗ рд╣рдо рдореБрдХреБрдЯ рдХрд╣реЗрдВрдЧреЗред
 #!/usr/bin/env bash # Loading Enviroment variables . /home/db2inst1/.profile # Backing up database backupdb DBNAME SCHEMANAME echo "Backup Completed" 
рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕реЗ рдЖрдк рдмреИрдХрдЕрдк рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдмреИрдХрдЕрдк рдХреЗ рд▓рд┐рдП рдмреИрдХрдЕрдк рдХреЗ рд╕рд╛рде рдЙрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдирд╛рдо рдФрд░ рдмреИрдХрдЕрдк рдпреЛрдЬрдирд╛ рдХреЗ рдирд╛рдо рд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рдЖрдк .sql рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдпреЛрдЬрдирд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдмреИрдХрдЕрдк рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╕рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдФрд░ рдореБрдХреБрдЯ рдореЗрдВ рдПрдХ backup.sh рдХреЙрд▓ рдЬреЛрдбрд╝реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣рд░ рджрд┐рди 3 рдмрдЬреЗред
 # DB2 backups 0 3 * * * /home/db2inst1/bin/backup.sh 

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/In127794/


All Articles