- PR -

IIS6 + ASP + Access2003で時々DBアクセス不能

投稿者投稿内容
AYANO
会議室デビュー日: 2004/08/03
投稿数: 11
投稿日時: 2006-05-23 17:01
まったく同感なんですが、
イントラネットサイトのテンプレートとして、
ASPなどをUSから提供されており、
これを変更することはなかなか難しい状況なんです。

2000で動いていたわけで、
ユーザや運用部門からすると
「なんでWin2003になって動かなくなるの?」
っていわれてしまうとなかなか・・・

とにかく調べてみます!
ありがとうございました!
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-23 18:33
再現性がないが、しばらく使っていると生じる
再起動しないと回復しない
マシンを変えたら改善された事例がある
全ての mdb ファイルにアクセスできなくなる
2000の環境では問題なかった。2003から症状がでるようになった。

というところでしょうか。
デバッグページを作ったとのことですから、その結果も見てみたいですよね。
データベースのドライバ関係が何かの弾みで吹っ飛んでいるのかな〜?

#JET なだけに・・・

NEC製のサーバー機・2003サーバー・ACCESS C/Sなシステムを運用しているお客さんがいます。サーバー側でAccess読んでデータを提供するシステムなんですが、1ヶ月くらい動きっぱなしでも問題ないんですよね。

なので、ASP固有の問題である可能性は高いですかね。
AYANO
会議室デビュー日: 2004/08/03
投稿数: 11
投稿日時: 2006-05-24 14:15
こんにちは。
残念ながら今日も発生してしまいました。
作戦通り、
デバッグページおよびデバッグバッチを実行しました。
ログファイル内容は以下です。

**現象が発生**

**VBSで実行**
DB接続Obj作成
DBOpen完了
DBSelect完了(結果:4)
DBInsert完了

**WEBから実行**
DB接続Obj作成

**再起動後WEBから実行**
DB接続Obj作成
DBOpen完了
DBSelect完了(結果:5)
DBInsert完了

となり、VBScriptのバッチでは正しく書き込みが行われ、
ASPではやはり全てのMDBファイルへアクセスできなくなってしまいました。

一応長くなりますが、テストに使用したモジュール(バッチ版のみ)のソースを
以下に記しておきます。

以下のソースに起因しているならば
少しは解決の糸口が見えるかもしれないですが、
ここまで来ると、何が悪いのかさっぱりです・・・

サーバ機なのでスペア機などはもちろん無く、
現在ほとんどのサーバがWin2000で運用されておりますので、
マシンを変えるという対応はなかなかむずかしそうです。

うーん
Access不信が確信に変わりそうです。
SQLServerに移したいですねぇ・・・


***************************************************************
Const DBSource="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Inetpub\wwwroot\TEST\TEST.mdb"
Const FLSource="D:\Inetpub\wwwroot\TEST\TEST.log"

Set objFso = WScript.CreateObject("Scripting.FileSystemObject")
Set objTS = objFso.OpenTextFile (FLSource,8,True)
On Error Resume Next

'DB接続
Set db=WScript.CreateObject("ADODB.Connection")
If Err.Number <> 0 Then
objTS.WriteLine "DB接続Obj作成エラー"
Else
objTS.WriteLine "DB接続Obj作成"
End If

'DBオープン
db.Open DBSource
If Err.Number <> 0 Then
objTS.WriteLine "DBOpenエラー"
Else
objTS.WriteLine "DBOpen完了"
End If
'検索
sql = "select count(*) as CNT from T_TEST"
Set rs = db.Execute(sql)
If Err.Number <> 0 Then
objTS.WriteLine "DBSelectエラー"
Else
objTS.WriteLine "DBSelect完了(結果:" & rs("CNT") & ")"
End If
i = rs("CNT")
Set rs = Nothing

'登録
sql = "insert into T_TEST (TEST2) values('" & i+1 & "件目の登録')"
db.Execute(sql)
If Err.Number <> 0 Then
objTS.WriteLine "DBInsertエラー"
Else
objTS.WriteLine "DBInsert完了"
End If

db.Close
Set db = Nothing
objTS.Close
Set objTS = Nothing
Set objFso = Nothing
***************************************************************

冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2006-05-24 14:35
もう何年もaccess使っていない&IIS使った事無いなんで大外ししてしまっていたらごめんなさい。
(後、ハードウェア関係で・・・なんて意見も出てるんでハードウェアなんか?って事も・・・)

記憶が薄いのですが、accessって同時接続数に制限ありませんでしたっけ?
複数の人で同時にアクセスしようとしてみると確実に再現するか調べてみてはどうでしょう?
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-05-24 15:07
引用:

残念ながら今日も発生してしまいました。
(略)
となり、VBScriptのバッチでは正しく書き込みが行われ、
ASPではやはり全てのMDBファイルへアクセスできなくなってしまいました。



既に指摘されていることですが、おそらく原因は同時アクセス(の集中?)にあるはずです。

MDB 読み書きの前後で Application.Lock(), Application.Unlock() を行い、同時アクセスから保護すればきちんと動作するはずです。

ただし、著しく性能を落とす可能性があります。

引用:

Access不信が確信に変わりそうです。
SQLServerに移したいですねぇ・・・



変更可能なら変更した方がいいと思いますよ。
同時アクセスに対する耐性とパフォーマンスの面で遥かに有利です。
びーんず
会議室デビュー日: 2003/11/13
投稿数: 15
お住まい・勤務地: 東京都
投稿日時: 2006-05-24 15:55
引用:
残念ながら今日も発生してしまいました。
(略)
となり、VBScriptのバッチでは正しく書き込みが行われ、
ASPではやはり全てのMDBファイルへアクセスできなくなってしまいました。



もう少し詳しく説明すると、
私は半年ほどWindows Server 2003+IIS+ASP+Access 2002の環境で
運用した後、端末をスペックのいいものにしたいと思って移行した後
で発生しました。

Application.Lock(), Application.Unlock()を使って同時アクセスも
保護したシステムです。

発生するタイミングが3時間ぐらい大丈夫なときもあれば、
30分くらいで発生する場合もあり原因を特定できませんでした。

機種を替えたら、上記環境で今でも安定して運用できています。
AYANO
会議室デビュー日: 2004/08/03
投稿数: 11
投稿日時: 2006-05-24 16:02
冬寂さん
渋木宏明さん

コメントありがとうございます!

同時接続ですか。
定義ファイルでなく、ソースコードを変更するとなると
PGM変更の申請やらなにやらで厳しい現状があります。
社員が1000人を超える親会社でも同じイントラネットを使用していますが、
Win2000環境では全くそういったことがありません。

Win2003になって厳しくなったということでしょうかねぇ。
とりあえず変更して様子を見てみることにします。
前述の通り親会社等いろいろな制約でAccess以外は使わない方針なんです・・・

とりあえず対応して様子を見てみることを
検討します。

AYANO
会議室デビュー日: 2004/08/03
投稿数: 11
投稿日時: 2006-05-24 16:14

引用:

機種を替えたら、上記環境で今でも安定して運用できています。



私一人で判断できませんので時間がかかるかも知れませんが、
当面はIISを再起動しながら運用するハメになりそうですね(;;)

詳細なご説明ありがとうございました!!

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