Database 来自Perl的SQL Server备份命令

Database 来自Perl的SQL Server备份命令,database,perl,sql-server-2005,Database,Perl,Sql Server 2005,正在尝试使用Perl对sql server数据库进行远程备份。但不知何故,出现了以下错误: 备份错误:3041,严重性:16,状态:1。 备份无法完成备份数据库testdb命令。查看备份应用程序日志以了解详细消息 脚本如下所示: use DBI; my $dsn = 'DBI:ODBC:Driver={SQL Server}'; my $host = 'hostname'; my $database = 'dbname'; my $user = 'sa'; my $auth = 'xxxxxxx

正在尝试使用Perl对sql server数据库进行远程备份。但不知何故,出现了以下错误:

备份错误:3041,严重性:16,状态:1。 备份无法完成备份数据库testdb命令。查看备份应用程序日志以了解详细消息

脚本如下所示:

use DBI;
my $dsn = 'DBI:ODBC:Driver={SQL Server}';
my $host = 'hostname';
my $database = 'dbname';
my $user = 'sa';
my $auth = 'xxxxxxx';

my $dbh = DBI->connect("$dsn;Server=$host",
                       $user,
                       $auth,
                       { RaiseError => 1,
                         AutoCommit => 1}
                      ) || die "Database connection not made: $DBI::errstr";

my $sql = "BACKUP DATABASE testdb TO DISK='d:\sql_share\backup.bak'";
my $sth = $dbh->prepare( $sql );

$sth->execute();
print "\nexecuted";

$sth->finish();
$dbh->disconnect();

使用相同的脚本可以在远程服务器上创建数据库、查询数据库等。

\
在双引号中有一个含义。转义反斜杠。

命令中的反斜杠正在双引号上下文中处理,并且

my $sql = "BACKUP DATABASE testdb TO DISK='d:\sql_share\backup.bak'";
$sql
设置为
备份数据库testdb到DISK='d:sql\u shareackup.bak'
。打印出来看看

我建议您改为使用它,它提供单引号上下文并允许嵌入单引号

my $sql = q(BACKUP DATABASE testdb TO DISK='D:\sql_share\backup.bak');

您是否“检查备份应用程序日志以获取详细消息”?好的,它在备份日志(而不是服务器日志)中说了什么?我从eclipse IDE调用此脚本。搜索Perl安装位置和eclipse工作区。我想没有应用程序日志。我是否需要在脚本中执行一些异常处理来检查错误(类似于java)。对不起,我对PerlBorodin来说太新了。谢谢,它开始工作了。不知道为什么它不起作用。我刚刚使用不同的Internet连接(从家中)登录到这两台计算机(sql server计算机和远程计算机)并立即创建备份:)