Sql Server 2005でデータ抜けについて

このQ&Aのポイント
  • クライアントからのデータ登録時に、Sql Server 2005で1電文目が更新できない現象が発生しています。以前はSql Server 7.0で同様のプログラムで問題なく更新できていました。
  • クライアント側のプログラムやサーバ側のプロファイラを確認した結果、1電文目のデータは正しく残っており、2電文目以降は正常に更新されていることが分かりました。
  • この現象について、対処方法や原因をご存知の方がいらっしゃいましたら、教えていただけないでしょうか。
回答を見る
  • ベストアンサー

Sql Server 2005 でデータ抜けについて

お世話になります。 クラサバを構築しているのですが、クライアントよりデータをサーバに登録する際、VB6 SP4のアプリでバッチ処理を行っております。1電文目(サーバのストアドプロシジャを起動)のみ、サーバ(Sql Server 2005)に更新できません。2電文目からあとは、正しく更新されています。 以前は、クライアント側のプログラムは同じだった状態で、サーバのデータベースは、SqlServer 7.0で運用しておりました。その際は、全く問題なく更新できておりました。 また、SQLSERVER2005でサーバ側のプロファイラを使用すると、1電文目も正しく残っています。 このような現象・対処方法等ご存知の方はいらっしゃいませんでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.4

違うみたいですね。 7.0と2005で違うところは、MDACぐらいでしょうか。 SQL Server2005 では、 Microsoft Data Access Components (MDAC) 2.8 SP1 以上が必要です。 参考URL: http://msdn2.microsoft.com/ja-jp/library/ms143506.aspx また、MDACのバージョン確認方法は、 http://support.microsoft.com/kb/301202 をみて、確認してみてもらえますか? もし、MDACが既定を満たしているようであれば、また別の原因です。 この手の問題は推測しながら、1つずつ潰していくしかないので 根気よくやっていくしかないと思います。 よろしくお願いします。

siotanpapa
質問者

お礼

大変お世話になります。 MDACを最新にアップグレードした結果、現時点で発生しなくなったようです。 今後、様子を見て行きたいと思います。 ありがとうございました。

siotanpapa
質問者

補足

大変お世話になります。 MDACの確認は、現在行っておりますが、まだ完了しておりません。 大変申し訳ございませんが、後日ご連絡させてください。 よろしくお願いします。

その他の回答 (3)

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.3

状況は理解できました。 気になった点として、ローカルDB BeginTransaction です。 ローカルDBの方は、SELECTしかしていないので、 トランザクションを発行しなくても良いのかなと思います。 ローカルDBに対するBeginTransaction と commit transaction(やっているのであれば) をやめたらどうなりますか? また、上記とは別で、3件Commitではなく、1件Commitにした場合、どうなりますか? いろいろとお手数をおかけしますが、ご確認よろしくお願いします。

siotanpapa
質問者

補足

お世話になります。 先日記述しましたロジックにぬけがございまして、ローカルも更新しております。 サーバ側更新と同じタイミングで行っています。二重送信しないようにフラグを立てております。 サーバ側のコミットの件ですが、一件でも駄目でした。 Sqlserverのバージョンにより、このような現象が発生するものなのでしょうか。 大変、混乱させて申し訳ございませんが、よろしくお願いします。

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.2

>トランザクション単位は、VBでコントロールしておりまして、3レコードごとです。 >また、ためしに、SQLをEXCUTEするロジックを2行にすると、Insertされています。(単純に、VB側でEXCUTEコマンドをコピーし、次の行に貼り付けしただけです。) すいません、私の言い方が悪かったみたいなので、言い方を 変えます。 ある程度のレコード件数によって、トランザクションの単位が 決められているということで宜しいでしょうか? また、EXECUTEで呼び出しているのは、生のSQLですか? それとも何かストアドを作って、それを実行してますか? できれば、VB側のソースと、あるのであれば、SQL Serverのストアドの ソースが公開できる範囲(まずい箇所は加工しても良いので)で どんなソースコードとテーブルレイアウトなのか、教えて 頂けますか?よろしくお願いします。

siotanpapa
質問者

補足

お世話になります。 ソースの内容について、説明します。 なお、ローカルDBとサーバDBのレコードフォーマットは同一です。 VBの内容 ストアドを宣言する。 cmM.CommandText = "{? = call ストアド名(?,?,・・・・・)}" ローカルDB(MSDE)オープン サーバDB(Sqlserver2005)オープン ローカルDB BeginTransaction サーバDB BeginTransaction ローカルDBへSELECT分発行(条件(日付 及び、未送信データ)で抜き出す。) 以下を繰り返し。 SELECTした結果をストアドの引数に各項目をセット。 cmM.Executeを行い、サーバへ送信する。    ・・・・・(1) 3件送信毎に commit transaction begin transaction move next ここまでを繰り返す。 全データ送信したら、 Commit Transactionを発行する。 ローカル・サーバのデータベースを切断する。 ストアドの内容 ストアドの内容に対して、重複データが無いか存在チェックを行う。 存在した場合、  引数で渡された内容を使用して、Updateを行う。 存在しない場合、  引数の内容で、Insertする。 上記(1)の後に、(1)をコピーして貼り付けた状態(cmM.Executeを2行連続で発行)だと、ぬけは発生しません。(1)が1行の場合は、ぬけが発生します。 但し、2件目以降送信している内容は、(1)1回のみで正しく送信できております。 以上のような状況です。上記内容で分かりますでしょうか。 大変申し訳ございませんが、よろしくお願いします。

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.1

何か更新エラー等は発生しておりましたでしょうか? また、その更新用のSQLはどんなテーブルに対して、 どんなSQLを実行しているのか、 またVB側で制御しているトランザクションの単位などが わかれば、詳しく教えて頂けると助かります。 よろしくお願いします。

siotanpapa
質問者

補足

ご回答ありがとうございます。 エラーは発生しておりません。 更新SQLについては、 insertしています。 トランザクション単位は、VBでコントロールしておりまして、3レコードごとです。 また、ためしに、SQLをEXCUTEするロジックを2行にすると、Insertされています。(単純に、VB側でEXCUTEコマンドをコピーし、次の行に貼り付けしただけです。)

関連するQ&A

  • RAID構成時のSQL Server の復旧

    質問させていただきます。 例えば、RAID1が組んであるHDDにSQL Server をインストールして データベースを運用している際、片方のドライブが壊れた場合 復旧するにはSQL Server の再インストールから行うのでしょうか? それとも、SQL Server そのものもミラーリングされていて、 データベースを操作するアプリケーション側で接続先を変更すれば すぐに復旧できるのでしょうか? その場合、データベースは壊れる直前まで情報は更新されているのでしょうか? 宜しくお願い致します。

  • SQLの実行場所について

    現在Oracle9iを、oo4oを使用しVB6.0で運用しています。 そこで、SQLを実行しているのはサーバ側かクライアント側か、とフと気になってしまいました。 クライアントからのSQL文をサーバで実行して結果を出すのか、それともサーバのデータを一時的に持ち出してクライアントで実行するのか。 または、もう少し違った処理が行われているのか・・・どなたか、ぜひご教授下さい。

  • SQLサーバの使い方について。

    SQLサーバの使い方について。 起動させた際に、Windows認証やSQLサーバ認証などが出てくるのはなぜでしょうか。 また、上手く起動した後にも細かな設定などがあり、どのように使用していくのかがいまいち分かりませんでした。まずは、簡単な正規化などから取り組んでみたいのですが・・・。 単に、データベースを用いるだけならばACCESSなどでも可能でしょうが、会社側からはSQLサーバを使用して欲しいと言われています。 SQLサーバを使用されている方がいましたらお願い致します。

  • SQL2008と2005の互換性について

    現在会社でSQLServer2005 (Workgroup 5クライアント)を使用しているのですがもう一台サーバーが必要になりました。 そこでSQLServer2008(Workgroup 5クライアント)を購入しようと思うのですがこの2つのソフトに互換性はありますでしょうか? (1)サーバー(SQL2005)→クライアント(SQL2008) (2)サーバー(SQL2008)→クライアント(SQL2005) この2つのパターンが接続可能かどうか教えてください よろしくお願いします。

  • SQL Serverのメモリ設定

    現在MS SQL Server7.0を使用したDBサーバを運用しています。 CPU4ユニット、物理メモリ1GBを搭載しているのですが、先日 テーブル更新バッチ(8万件処理)を実行中に異常終了してしまいました。 タスクマネージャに表示されていた利用可能メモリが9MBしかなく、 SQLServerのメモリ使用量が883MBになっていたため、メモリ不足の ためバッチがダウンしたという判断をしました。実際のところ SQL Serverのメモリ設定(動的設定)が4MB~885MBの間で設定して ありました。これはおそらく、SQLServerインストール時に自動設定 されたものだと思われますが、他アプリケーションのパフォーマンスを 著しく劣化させているためメモリ設定の最大値を支障が出ない程度に 下げたいのですが、どの程度下げればよいのか数値がなかなか導き出せ ません。何かよい方法(計算方法など)をご存知の方がいらっしゃれば ば教えていただけないでしょうか。 よろしくお願いいたします。 サーバ構成 Fujitsu Primergy CPU P(3)866 ×4 メモリ:1024MB HDD:40×4 OS:WINDOWS NT Enterprise Edition SQL:Microsoft SQL Server 7.0

  • SQL Server 6.5と2005を比べてみて

    現在、SQL Server 6.5でデータベース管理、 VB6.0でシステム開発をしております。 SQL Serverを2005にした場合、 SQL文等の違い、注意すべき点はありますか? 以前6.5を使用していて現在2005での管理をしておられる方、 その他お詳しい方、是非ご教授下さい。

  • VBでSQLサーバーへ接続できない

    WVD2008ではSQLサーバーへ接続できて、データも表示できるのに、 VB2008からは最初の設定画面がわかりません。 添付の図は 右:WVD 左:VB です。 WVDは データソース:Microsoft SQL Server (SqlClient) サーバー名:○○○\SQLEXPRESS データベース名:master と入力しテスト接続すると「成功」します。 しかしVBは データソース:Microsoft SQL Server Compact 3.5 データベースファイル名:○○○\SQLEXPRESS もしくは データソース:Microsoft SQL Server データベース ファイル (SqlClient) データベース:○○○\SQLEXPRESS と入力しテスト接続すると「見つかりません」となります。 アクセスへなら データソース:Microsoft Access データベース ファイル (OLE DB) データベースファイル名:C:\\Desktop\Documents\○○○.mdb として接続できます。 接続できないというよりもVBにおいてのSQLサーバーへの設定方法がわかりません。 VBにて サーバー名:○○○\SQLEXPRESS データベース名:master へ接続したい場合はどうすればいいでしょうか? ご教授よろしくお願い致します。

  • 初めて触るSQL

    SQLについてはまったくの初心者なのですが、奮起して始めてみようと考えています。 ひとまずMySQLを導入し、入門書を読みながら付属クライアントで操作して「お~追加できた~」とかやってるレベルなのですが、いくつか確認したいことがあるので教えてください。以下、私の脳内での認識です。 1) SQLは問い合わせの仕様であり、クライアントから見ればぜんぶ同じだが、基本的に各エンジンの持っているデータベースの中身に互換性はない。 2) SQLサーバは、クライアントがなければ意味がなく、運用時には自分で用意しないといけない。 3) MySQL,、PostgreSQLなどのフリーに比べ、商用エンジンは機能が段違いである。 4) MS-AccessはSQLクライアントとして使える。 5) ↑そのためには、自分でコーディングをしなくてはいけない。 6) ODBCとはなんですか?いつ使うと嬉しいんですか? 7) ↑自作ソフトにコレを組み込むとデータベースへのアクセスが容易になる。 8) SQLとは、エンジンに対する質問と応答のインタフェースやフォーマットを定義したものであり、クライアント側のソフトではこれを実装すればよい。 豪快に勘違いしてるかもしれませんが、正誤を含めてよろしくお願いします。

  • SQL Serverへの接続について教えてください。

    いつも初歩的な質問ばかりで済みません。 VB.NET2003+Access2000で開発していたアプリをSQL SERVER 2005 に移そうと作業しています。 まずMSDE2000Aをインストールし、同じマシンにあるMDBからコンバートしたMDFファイルにはアクセス 出来ました。 SQL server 2005 Express に変更しましたが、これもうまく接続・更新が出来ていました。 そして今度は別のマシンにWindows SERVER 2003 R2評価版をインストール、次いで SQL SERVER 2005 Express をインストールしてそのサーバーへデータベースファイルをデタッチして移しました。 クライアントからマイネットワークをたどっていくと共通ディレクトリはちゃんと見え、 MDF以外のファイル(XLSやMDB等)はちゃんと読み書きが出来ます。 ただ肝心のMDFファイルにアクセス出来ません。 接続しにいくと「サーバーが見つからない」とか「接続が拒否されました」等々無情なメッセージばかり返ってきます。 どこをチェックしたらいいのか、ご教示に従って補足していきますのでどうぞよろしくお願いいたします。

  • VBでSQL-serverをプログラムする

    VBでmdbファイルを操作するプログラムを勉強していますが、データベースをサーバー管理するならば、AccessではなくSQL-serverなどを使った方が良いと聞きました。 質問なんですが、 SQL-serverには、Accessと同じようにユーザーフォームを使ってデータベースシステムを構築するような機能が付いているのでしょうか? そもそもOracle、dBase、SQL-serverといったデータベースソフトは、DBそのものを作成するソフトであって、DBシステムを構築するにはVBなどによるプログラム開発が必要なのでしょうか? 分かりにくい質問ですみません。