0

尝试使用 Perl 对 sql server 数据库进行远程备份。但不知何故得到以下错误:

备份错误:3041,严重性:16,状态:1。BACKUP 未能完成命令 BACKUP DATABASE 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();

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

4

2 回答 2

0

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

于 2012-08-29T12:23:27.030 回答
0

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

my $sql = "BACKUP DATABASE testdb TO DISK='d:\sql_share\backup.bak'";

设置$sqlBACKUP DATABASE testdb TO DISK='d:sql_shareackup.bak'。打印出来看看

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

my $sql = q(BACKUP DATABASE testdb TO DISK='D:\sql_share\backup.bak');
于 2012-08-29T12:23:43.523 回答