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 に答える