Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server备份命令通过Perl/DBI失败,但通过DOS工作>;SqlCmd。为什么?_Sql_Database_Perl_Backup_Dbi - Fatal编程技术网

SQL Server备份命令通过Perl/DBI失败,但通过DOS工作>;SqlCmd。为什么?

SQL Server备份命令通过Perl/DBI失败,但通过DOS工作>;SqlCmd。为什么?,sql,database,perl,backup,dbi,Sql,Database,Perl,Backup,Dbi,我有一个简单的Perl/DBI程序来备份SQL Server数据库。程序运行干净, 不产生错误,假定创建数据库备份,但备份文件不存在 当我通过DBI执行以下命令时 backup database dz to disk='C:\SqlBackups\dz.perl' with init 没有创建备份文件。Perl和SQL报告“为数据库“y”处理了x页, 但是当我执行DOS>dir时,备份文件不会出现 当我通过SqlCmd执行类似的命令时 backup database dz to disk='C

我有一个简单的Perl/DBI程序来备份SQL Server数据库。程序运行干净, 不产生错误,假定创建数据库备份,但备份文件不存在

当我通过DBI执行以下命令时

backup database dz to disk='C:\SqlBackups\dz.perl' with init
没有创建备份文件。Perl和SQL报告“为数据库“y”处理了x页,
但是当我执行DOS>dir时,备份文件不会出现

当我通过SqlCmd执行类似的命令时

backup database dz to disk='C:\SqlBackups\dz.sqlcmd' with init
将创建一个备份文件

我正在运行ActiveState Perl版本 这是为MSWin32-x64-multi-thread构建的Perl5,版本16,Subversion1(v5.16.1) 在…上 Microsoft Windows 7 Professional Build 6.1(Build 7601;Service Pack 1)

这是节目单

#!perl -w
#Test making database backups via Perl DBI 


#preparations
    use strict;  #require variable declaration 
    use DBI;      #database interface
    my $dbHandle = DBI->connect("dbi:ODBC:Driver={SQL Server};Server=DavidZokaites")  or die;
    $dbHandle->{TraceLevel} = "15|ALL";    #get maximum debugging information 


#loop over all databases that need a dump 
    foreach my $dbName (  qw < dz master model msdb my_test > ) 
    {
        #DBI method that runs but creates no dumps  
        my $query = "backup database $dbName to disk='C:\\SqlBackups\\$dbName.perl' with init";
        print $query, "\n"; 
        warn "\n$dbName\n";
        $dbHandle->do ($query)  or die; 

        #SQLCMD that works 
        $query = "backup database $dbName to disk='C:\\SqlBackups\\$dbName.sqlcmd' with init";
        print $query, "\n"; 
        my $sysCmd = "SqlCmd -S DavidZokaites -Q \"$query\" >> TestDbi.sqlcmd.out";
        system ($sysCmd) == 0
            or die "Unable to execute $sysCmd \n"; 
    } 
#!perl-w
#通过Perl DBI进行数据库备份测试
#准备工作
使用strict;#require变量声明
使用DBI;#数据库接口
我的$dbHandle=DBI->connect(“DBI:ODBC:Driver={sqlserver};Server=DavidZokaites”)或die;
$dbHandle->{TraceLevel}=“15 | ALL”#获取最大限度的调试信息
#循环所有需要转储的数据库
foreach my$dbName(qw)
{
#运行但不创建转储的DBI方法
my$query=“备份数据库$dbName到磁盘='C:\\SqlBackups\\\$dbName.perl'和init”;
打印$query,“\n”;
警告“\n$dbName\n”;
$dbHandle->do($query)或die;
#SQLCMD可以正常工作
$query=“将数据库$dbName备份到磁盘='C:\\SqlBackups\\$dbName.sqlcmd'和init';
打印$query,“\n”;
my$sysCmd=“SqlCmd-S DavidZokaites-Q\“$query\”>>TestDbi.SqlCmd.out”;
系统($sysCmd)=0
或“无法执行$sysCmd\n”;
} 
这里有一点DBI标准的跟踪

    DBI::db=HASH(0x297ba10) trace level set to 0x7f0fff00/15 (DBI @ 0x0/0) in DBI 1.622-ithread (pid 7712)

master
    !! info: '' CLEARED by call to do method
    -> do for DBD::ODBC::db (DBI::db=HASH(0x297bae8)~0x297ba10 'backup database master to disk='C:\SqlBackups\master.perl' with init') thr#1d97e8
    >> STORE         DISPATCH (DBI::db=HASH(0x297ba10) rc1/2 @3 g2 ima41c pid#7712) at C:/Perl64/site/lib/DBD/ODBC.pm line 424 via  at C:\David\DoBackup\TestDbi.pl line 20
1    -> STORE for DBD::ODBC::db (DBI::db=HASH(0x297ba10)~INNER 'Statement' 'backup database master to disk='C:\SqlBackups\master.perl' with init') thr#1d97e8
    !!DBD::ODBC unsupported attribute passed (Statement)
    STORE DBI::db=HASH(0x297ba10) 'Statement' => 'backup database master to disk='C:\SqlBackups\master.perl' with init'
1    <- STORE= ( 1 ) [1 items] at C:/Perl64/site/lib/DBD/ODBC.pm line 424 via  at C:\David\DoBackup\TestDbi.pl line 20
    SQLExecDirect backup database master to disk='C:\SqlBackups\master.perl' with init
    Processing non utf8 sql in unicode mode
    SQLExecDirect = 1
    !!dbd_error2(err_rc=1, what=Execute immediate success with info, handles=(26bd70,2699f00,29cd080)
    !SQLError(26bd70,2699f00,29cd080) = (01000, 4035, [Microsoft][ODBC SQL Server Driver][SQL Server]Processed 1376 pages for database 'master', file 'master' on file 1.)
    !! info: '' '[Microsoft][ODBC SQL Server Driver][SQL Server]Processed 1376 pages for database 'master', file 'master' on file 1. (SQL-01000)' (err#0)
    <- do= ( -1 ) [1 items] at C:\David\DoBackup\TestDbi.pl line 20
DBI::db=HASH(0x297ba10)跟踪级别在DBI 1.622-ithread(pid 7712)中设置为0x7f0fff00/15(DBI@0x0/0)
主人
!!信息:''已通过调用待办事项方法清除
->对DBD::ODBC::db(DBI::db=HASH(0x297bae8)~0x297ba10“将数据库主机备份到磁盘”='C:\SqlBackups\master.perl'with init')thr#
>>在C:/Perl64/site/lib/DBD/ODBC.pm第424行通过C:\David\DoBackup\TestDbi.pl第20行发送存储区(DBI::db=HASH(0x297ba10)rc1/2@3 g2 ima41c pid#7712)
1->存储DBD::ODBC::db(DBI::db=HASH(0x297ba10)~内部“语句”将数据库主机备份到磁盘class='C:\SqlBackups\master.perl'with init')thr#1d97e8
!!DBD::传递了ODBC不支持的属性(语句)
STORE DBI::db=HASH(0x297ba10)'Statement'=>'backup database master to disk='C:\SqlBackups\master.perl'with init'
1您需要阅读。当您使用“do”方法未完成时,任何可以输出打印消息的命令/过程。请使用prepare/execute和odbc\u more\u结果