寫了一個perl腳本靈活來備份或還原。
1.將config.txt保存到c盤根目錄
username:sa
password:passwd123!
根據實際情況修改該文件內容
2.執 行bcp.pl
#!C:\Perl64\bin
#通過BCP備份和還原SQLSERVER指定的表
use 5.014;
#加載用戶和密碼配置文 件
my $username ;
my $passwd;
##獲取用戶名
my $dir="c:";
$dir=$dir."/";
my $filename="config.txt";
my $keysword="username:";
my $count="50";
my $begincount=index($keysword,":");
my ($file);
open(FILEH,$dir.$filename);
while(my $test=<FILEH>){
if((index($test,$keysword))>=0){
my $test1=substr ($test,$begincount+1,$count);
#print "$test1";
chomp($username=$test1);
}
}
close(FILEH);
##獲取密碼
my $dir="c:";
$dir=$dir."/";
my $filename="config.txt";
my $keysword="password:";
my $count="50";
my $begincount=index($keysword,":");
my ($file);
open(FILEH,$dir.$filename);
while(my $test=<FILEH>){
if((index($test,$keysword))>=0){
my $test2=substr ($test,$begincount+1,$count);
#print "$test2";
chomp($passwd=$test2);
}
}
close(FILEH);
print "----------------------------------------------------------------- --\n";
print "請首先檢查用戶和密碼配置文件config.txt保存路徑是否為 $dir$filename\n";
print "----------------------------------------------------------------- --\n";
print "重要提示:備份表操作請輸入0;還原表操作請輸入1\n";
print "請輸入操作代碼:";
chomp(my $inp=<STDIN>);
print "你輸入的操作代碼為$inp\n";
#判斷輸入為0即備份操作
if ($inp eq 0){
print '服務器IP:(不輸入默認為 localhost)';
chomp(my $a = <STDIN>);
if ($a=='') {
$a='localhost';
}else{
print "你輸入的服務器IP為:$a\n";
}
print '用戶名:';
chomp(my $b = <STDIN>);
print "你輸入的用戶名為:$b\n";
if($b eq $username) {
print "用戶通過!\n";
} else {
print "對不起,用戶名錯誤\n";
exit;
}
print "用戶密碼: ";
chomp (my $readPsw = <STDIN>);
if($readPsw eq $passwd) {
print "密碼正確!\n";
} else {
print "對不起,密碼錯誤\n";
exit;
}
print "重要提示:備份表的表名格式為:test.dbo.t1\n";
print '備份的表:';
chomp(my $d = <STDIN>);
print "你輸入的備份的表:$d\n";
print '保存路徑:';
chomp(my $e = <STDIN>);
print "你輸入的保存路徑:$e\n";
if (-e $e){
print "$e已經存在!是否刪除?(y刪除;n不刪除)\n";
chomp(my $i=<STDIN>);
given ($i)
{
when ("y") {
unlink $e;
print "開始備份表!\n";
system (" bcp $d out $e -c -t ',' -m 1 -a 49152 -b 5000 -F 1 -S $a -U $b -P $readPsw ");
}
when ("n")
{
print "-----------備份已經終止-----------\n";
print "指定文件存在,請重新輸入文件名!\n";
}
default {print "只能輸入y或n!\n";}
}
}
else{
{
system (" bcp $d out $e -c -t ',' -m 1 -a 49152 -b 5000 -F 1 -S $a -U $b -P $readPsw ");
}
}
}
#判斷輸入 為1還原操作
elsif($inp eq 1){
print '服務器IP:(不輸入默認為localhost) ';
chomp(my $a = <STDIN>);
if ($a=='') {
$a='localhost';
}else{
print "你輸入的服務器IP為:$a\n";
}
print '用戶名:';
chomp(my $b = <STDIN>);
print "你輸入的用戶名為:$b\n";
if($b eq $username) {
print "用戶通過!\n";
} else {
print "對不起,用戶名錯誤\n";
exit;
}
print "用戶密碼: ";
chomp (my $readPsw = <STDIN>);
if($readPsw eq $passwd) {
print "密碼正確!\n";
} else {
print "對不起,密碼錯誤\n";
exit;
}
print '需要還原的表:';
chomp(my $d = <STDIN>);
print "你輸入的備份的表:$d\n";
print '備份保存路徑:';
chomp(my $e = <STDIN>);
if (-e $e) {
print "你輸入的備份保存路徑:$e\n";
system (" bcp $d in $e -c -t ',' -m 1 -a 49152 -b 5000 -F 1 -S $a -U $b -P $readPsw ");
}
else {
print "對不起,指定的備份文件$e不存在,請核實!\n";
}
}
else{
print "請參考重要提示!\n";
}
system 'pause';
查看本欄目