- - PR -
IIS6 + ASP + Access2003で時々DBアクセス不能
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-05-23 17:01
まったく同感なんですが、
イントラネットサイトのテンプレートとして、 ASPなどをUSから提供されており、 これを変更することはなかなか難しい状況なんです。 2000で動いていたわけで、 ユーザや運用部門からすると 「なんでWin2003になって動かなくなるの?」 っていわれてしまうとなかなか・・・ とにかく調べてみます! ありがとうございました! | ||||||||
|
投稿日時: 2006-05-23 18:33
再現性がないが、しばらく使っていると生じる
再起動しないと回復しない マシンを変えたら改善された事例がある 全ての mdb ファイルにアクセスできなくなる 2000の環境では問題なかった。2003から症状がでるようになった。 というところでしょうか。 デバッグページを作ったとのことですから、その結果も見てみたいですよね。 データベースのドライバ関係が何かの弾みで吹っ飛んでいるのかな〜? #JET なだけに・・・ NEC製のサーバー機・2003サーバー・ACCESS C/Sなシステムを運用しているお客さんがいます。サーバー側でAccess読んでデータを提供するシステムなんですが、1ヶ月くらい動きっぱなしでも問題ないんですよね。 なので、ASP固有の問題である可能性は高いですかね。 | ||||||||
|
投稿日時: 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 *************************************************************** | ||||||||
|
投稿日時: 2006-05-24 14:35
もう何年もaccess使っていない&IIS使った事無いなんで大外ししてしまっていたらごめんなさい。
(後、ハードウェア関係で・・・なんて意見も出てるんでハードウェアなんか?って事も・・・) 記憶が薄いのですが、accessって同時接続数に制限ありませんでしたっけ? 複数の人で同時にアクセスしようとしてみると確実に再現するか調べてみてはどうでしょう? | ||||||||
|
投稿日時: 2006-05-24 15:07
既に指摘されていることですが、おそらく原因は同時アクセス(の集中?)にあるはずです。 MDB 読み書きの前後で Application.Lock(), Application.Unlock() を行い、同時アクセスから保護すればきちんと動作するはずです。 ただし、著しく性能を落とす可能性があります。
変更可能なら変更した方がいいと思いますよ。 同時アクセスに対する耐性とパフォーマンスの面で遥かに有利です。 | ||||||||
|
投稿日時: 2006-05-24 15:55
もう少し詳しく説明すると、 私は半年ほどWindows Server 2003+IIS+ASP+Access 2002の環境で 運用した後、端末をスペックのいいものにしたいと思って移行した後 で発生しました。 Application.Lock(), Application.Unlock()を使って同時アクセスも 保護したシステムです。 発生するタイミングが3時間ぐらい大丈夫なときもあれば、 30分くらいで発生する場合もあり原因を特定できませんでした。 機種を替えたら、上記環境で今でも安定して運用できています。 | ||||||||
|
投稿日時: 2006-05-24 16:02
冬寂さん
渋木宏明さん コメントありがとうございます! 同時接続ですか。 定義ファイルでなく、ソースコードを変更するとなると PGM変更の申請やらなにやらで厳しい現状があります。 社員が1000人を超える親会社でも同じイントラネットを使用していますが、 Win2000環境では全くそういったことがありません。 Win2003になって厳しくなったということでしょうかねぇ。 とりあえず変更して様子を見てみることにします。 前述の通り親会社等いろいろな制約でAccess以外は使わない方針なんです・・・ とりあえず対応して様子を見てみることを 検討します。 | ||||||||
|
投稿日時: 2006-05-24 16:14
私一人で判断できませんので時間がかかるかも知れませんが、 当面はIISを再起動しながら運用するハメになりそうですね(;;) 詳細なご説明ありがとうございました!! |