- PR -

SQLServerがインストールされていないPCにBkupするとエラーになる。

1
投稿者投稿内容
ケイ
大ベテラン
会議室デビュー日: 2004/04/20
投稿数: 100
投稿日時: 2005-12-27 18:27
VB6.0 + SQLserver で開発を行っています。

Vbで下記のようなソースでバックアップを行いました。

Dim objServer As Object
Dim BackObj As New SQLDMO.Backup

'直近DBのバックアップ
Set objServer = CreateObject("SQLDMO.SQLServer")

'システムとの接続を確立する。
objServer.Connect "マシン名", "ユーザー名", "パスワード名"
BackObj.Database = "DB名"
BackObj.Files = "バックアップファイル名"
BackObj.Initialize = True '既存上書き
BackObj.Action = SQLDMOBackup_Database

'バックアップ操作を実行する
BackObj.SQLBackup objServer

上記でBackObj.Files に指定する場所のPCにSQLServerが
インストールされていない場合、エラーになってしまいます。

BackObj.Files = "\\PC_A\BKUP\20051227.bkf"
と指定した場合、ネットワーク先のPC_AのマシンにSQLServerが
インストールされています。
BackObj.SQLBackup objServer でエラーになりません。

しかし、
BackObj.Files = "\\PC_B\BKUP\20051227.bkf"
と指定した場合、ネットワーク先のPC_BのマシンにSQLServerが
インストールされていません。
BackObj.SQLBackup objServer でエラーになります。

エラー内容は下記です。
-----------vb内のエラー内容-----------------
バックアップ デバイス '\\PC_B\BKUP\20051227.bkf' を開けません。
デバイス エラーまたはデバイスがオフラインです。
詳細については、SQL Server のエラー ログを参照してください。

BACKUP DATABASE が異常終了しました。
---------------------------------------------

--------SQLserverのLog -----------------------
バックアップ デバイス '\\PC_B\BKUP\20051227.bkf' をcreate にできませんでした
オペレーティング システム エラー = 5(アクセスが拒否されました。)。

コマンド BACKUP DATABASE [TAKUHAI] TO DISK = \\PC_B\BKUP\20051227.bkf'
WITH INIT , NOUNLOAD , NOSKIP , STATS = 10, NOFORMAT
を完了するための BACKUP に失敗しました
---------------------------------------------

バックアップする場合、指定するバックアップ先のマシンには、
SQLServerがインストールされていなければいけないのでしょうか?

それとも、指定する情報が足りないのでしょうか?

教えて下さい。お願いします。
ケイ
大ベテラン
会議室デビュー日: 2004/04/20
投稿数: 100
投稿日時: 2005-12-28 09:52
引用:

ケイさんの書き込み (2005-12-27 18:27) より:

上記でBackObj.Files に指定する場所のPCにSQLServerが
インストールされていない場合、エラーになってしまいます。




勘違いをしていました。
BackObj.Files に指定する場所のPCにSQLServerがインストールされていないと
エラーになるのではなく、

objServer.Connect "マシン名", "ユーザー名", "パスワード名"
のマシン名に指定したPC内のフォルダでないと
BackObj.Files に指定した場合エラーになるようです。

objServer.Connect PC_A, "ユーザー名", "パスワード名"
BackObj.Files = "\\PC_A\BKUP\20051227.bkf"

とした場合は、バックアップ出来ますが、

objServer.Connect PC_B, "ユーザー名", "パスワード名"
BackObj.Files = "\\PC_A\BKUP\20051227.bkf"

のように接続先はPC_Bで、別のPCであるPC_A内のフォルダに
バックアップしようとするとエラーになります。

SQLDMO.Backup を使用する場合、接続先とバックアップ先は、
同一PCでないといけないのでしょうか?

それとも、他の方法でバックアップをとった場合は、可能になるのでしょうか?

教えて下さい。お願い致します。






未記入
会議室デビュー日: 2005/12/26
投稿数: 10
投稿日時: 2005-12-28 11:19
SQLDMOのことはよく知らないのですが、
SQLserverのLogを拝見したところ、T-SQLのBackUpコマンドを発行しているようです。

T-SQLのBackUpコマンドでは、ネットワーク サーバーまたはリダイレクトされた
ドライブ名をバックアップ先に指定できますので、
試しに、バックアップコマンドを、PC_AのSQLServerから
直接発行してみてはいかがですか?

問題の解決に なっていなくて申し訳ないのですが、
うまくいったかどうかで問題の切り分けができると思います。
sophia(rc)
会議室デビュー日: 2005/09/02
投稿数: 18
投稿日時: 2006-01-04 16:50
引用:

バックアップ デバイス '\\PC_B\BKUP\20051227.bkf' をcreate にできませんでした
オペレーティング システム エラー = 5(アクセスが拒否されました。)。


SQL Server の実行アカウントが LocalSystem アカウントなど、バックアップ先の共有フォルダ(\\PC_B\BKUP)にアクセス権のないユーザだったりしませんか?
ウェスカ
会議室デビュー日: 2005/11/19
投稿数: 12
投稿日時: 2006-01-04 19:11
状況がいまいち掴めてませんけど、
ネットワークドライブが繋がった状態で実行されていますか?

的外れでしたらごめんなさい。

_________________
らい
大ベテラン
会議室デビュー日: 2005/08/02
投稿数: 159
お住まい・勤務地: 東京都と千葉県のさかいめ
投稿日時: 2006-01-05 09:07
はじめまして、らいと申します。
結構昔の書き込みなのでおそらく解決しているでしょうがとりあえず。

引用:

ケイさんの書き込み (2005-12-28 09:52) より:
objServer.Connect "マシン名", "ユーザー名", "パスワード名"
のマシン名に指定したPC内のフォルダでないと
BackObj.Files に指定した場合エラーになるようです。


や、そうではないと思います。
SQLDMO.SQLServer.connectの第一引数は、「サーバー名」です。
一番初めの書き込みを信じるのであれば、
「PC_B」にはSQLServerはインストールされていないのですよね?
であれば、PC_Bにログインすることは、できないというわけです。
なので、下の動きはごく当然と判断できます。

引用:

objServer.Connect PC_A, "ユーザー名", "パスワード名"
BackObj.Files = "\\\\PC_A\\BKUP\\20051227.bkf"
とした場合は、バックアップ出来ますが、
objServer.Connect PC_B, "ユーザー名", "パスワード名"
BackObj.Files = "\\\\PC_A\\BKUP\\20051227.bkf"
のように接続先はPC_Bで、別のPCであるPC_A内のフォルダに
バックアップしようとするとエラーになります。



ちなみに、
「開発環境」=「サーバ(SQLServer入り:ここでいうPC_A)」
ではないですよね?

あと、PC_AにもPC_BにもSQLServerが入っているということであれば、
sophia(rc)さんがおっしゃるように、権限の問題かと思われます。

では。

_________________
一寸先は闇
安定してるシステムって言ったじゃん(泣)
ケイ
大ベテラン
会議室デビュー日: 2004/04/20
投稿数: 100
投稿日時: 2006-01-06 09:11
sophia(rc)さん、ウェスカさん、らいさん返信ありがとうございます。
そして、返信遅れて申し訳ありません。


引用:

らいさんの書き込み (2006-01-05 09:07) より:

SQLDMO.SQLServer.connectの第一引数は、「サーバー名」です。
一番初めの書き込みを信じるのであれば、
「PC_B」にはSQLServerはインストールされていないのですよね?
であれば、PC_Bにログインすることは、できないというわけです。
なので、下の動きはごく当然と判断できます。



申し訳ありません。
一番初めは、SQLServerのインストールが関係していると思っていた為、
PC_A,PC_Bのうち片方にはSQLServerが入っていない状態でテストしていましたが、

PC_A,PC_B共にSQLServerが入っている状態で
objServer.Connect PC_B, "ユーザー名", "パスワード名"
BackObj.Files = "\\PC_A\BKUP\20051227.bkf"
を行うとエラーになった為、それは関係がないのだと思いました。

引用:

あと、PC_AにもPC_BにもSQLServerが入っているということであれば、
sophia(rc)さんがおっしゃるように、権限の問題かと思われます。



そうですか・・・
権限の問題とは考えがいかなかった為、下記の方法で解決する事になりました。
1.DBのマシン内のフォルダに一度バックアップをする。
2.そのファイルを別のフォルダにコピーする。

上記の方法で別PCもしくは、別の媒体に保存する事になりました。

ただ、はっきり出来ない。出来る。どちらかを確認する為に、
権限については確認して見ます。

本当にありがとうございました。
らい
大ベテラン
会議室デビュー日: 2005/08/02
投稿数: 159
お住まい・勤務地: 東京都と千葉県のさかいめ
投稿日時: 2006-01-06 13:03
らいです。

解決したようですね。
ただ、根本的なものではなさそうなので、一点だけ確認。
PC_AとPC_BのDB構成は同じですか?
まったく同じでなくとも、バックアップ対象のDBがあればいいのですが。
(あったところで空であれば、意味はないのですが…)

まぁ、上の文章だけでわかってもらえると思いますが、とりあえず補足。
一番初めの書き込みに書かれているロジックを使っているのであれば、
マシン名をPC_Bとしたときに、「BackObj.Database」に入れられる値(DB名)
は、存在しなければエラーになってしまいます。
(バックアップ対象がないですから)

# 上の内容に関してはもちろん、PC_AとPC_BでバックアップするDB名が
# 同じであるというのが条件です。
# はずしていたら申し訳ない。

あと、権限については、PC_BのPC_Aに対する書込権限も確認してみてください。

では。

_________________
一寸先は闇
安定してるシステムって言ったじゃん(泣)
1

スキルアップ/キャリアアップ(JOB@IT)