【问题标题】:SQL Server backup command from Perl来自 Perl 的 SQL Server 备份命令
【发布时间】:2012-08-29 12:16:39
【问题描述】:

尝试使用 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();

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

【问题讨论】:

  • 您是否“检查备份应用程序日志以获取详细消息”?

标签: database perl sql-server-2005


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • OK 备份日志中的内容(不是服务器日志)
    • 我从 Eclipse IDE 调用这个脚本。搜索 Perl 安装位置和 eclipse 工作区。我猜没有应用程序日志。我是否需要在脚本中进行一些异常处理以检查错误(类似于 java)。抱歉,我对 Perl 太陌生了
    • 鲍罗丁:谢谢,它开始工作了。不知道为什么它不起作用。我刚刚使用不同的 Internet 连接(从家庭)登录到两台机器(sql server 机器和远程机器),现在它正在创建备份:)
    猜你喜欢
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2010-10-04
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多