- PR -

VB2005でSQLServerのRESTOREに失敗

1
投稿者投稿内容
mtk
会議室デビュー日: 2006/02/18
投稿数: 11
投稿日時: 2007-06-30 23:43
御世話になります。
早速質問させて下さい。

WinXP SP2 + VB2005 + SQLServer2005 の組み合わせです。
----------------------------------------------------------------------
Public Cn As New System.Data.SqlClient.SqlConnection
Public ConnectStr As String

<略>

ConnectStr = "Server=xxx;User ID=sa;Password=root;Initial Catalog=hoge"
Cn.Open() ' (1)

<略>

Dim SQL As System.Data.SqlClient.SqlCommand

Cn.Close() ' (2)
Cn.Dispose() ' (3)
Cn = Nothing

Cn = New System.Data.SqlClient.SqlConnection
ConnectStr = "Server=xxx;User ID=sa;Password=root;Initial Catalog=master"
Cn.Open()

SQL.CommandText = "RESTORE DATABASE [hoge] FROM " & _
"DISK = N'xxx' WITH FILE = 1, NOUNLOAD, STATS = 10"
SQL.ExecuteNonQuery() ' (4)

<略>

----------------------------------------------------------------------
上記のようなコードを書いています。
やりたいことは、通常hogeと言うDBを使用してるプログラムで、同じプログラムの機能
の一つとして、そのDBのバックアップとリストアを行うと言うものです。
バックアップは出来るのですが、リストアを使用とすると、(4)を行った後数秒後に、
『データベースは使用中なので、排他アクセスを獲得できませんでした。
  RESTORE DATABASE が異常終了しています。』
とエラーになります。
(1)〜(3)をコメントアウトすると、問題無くRESTORE出来ます。
(1)では接続できるかを確認しているだけです。
(2)までの間には特にDBに対してのアクセスはしていませんが、一度接続すると、閉じて
も、必ず上記のエラーが出ます。
何か回避策はあるでしょうか?それともこういうものなのでしょうか?
ご存知の方おみえでしたら、ご教授下さい。
よろしくお願いします。
未記入
大ベテラン
会議室デビュー日: 2006/12/15
投稿数: 157
投稿日時: 2007-07-02 11:25
SQLServer会議室の過去ログ。
DBの管理ツールでBの時点でコネクションがちゃんと切れているか確認して見て下さい。
.Net会議室の方で過去に参照設定でセッションが切れない云々という話題があったと思いますので探して見るといいかも。
mtk
会議室デビュー日: 2006/02/18
投稿数: 11
投稿日時: 2007-07-03 11:10
お名前が"未記入"なので、どなたか存知得ませんが、ありがとうございます。
そちらを調べてみます。
mtk
会議室デビュー日: 2006/02/18
投稿数: 11
投稿日時: 2007-07-03 12:29
解決いたしました。
教えた頂いた参照先を見た結果、

System.Data.SqlClient.SqlConnection.ClearPool(Cn)

の一文を(2)と(3)の間に挿入したところ、RESTORE出来ました。
ありがとうございました。
1

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