• ベストアンサー

SQL Server時間切れについて

初めまして。SQL初心者です。 あるシステムにおいて、SQLサーバが無応答?になり、システムがダウンしてしまい、困っています。 Windows2000Server、SQL Server2000、VB6を用いてDBに定期的にRead&Write、及び各種のデータ表示を行っています。 ADOを使用して、接続や各コマンドを実行しているのですが、ごくたまに以下のエラーが出てしまいます。 Code:-2147217871,Description:時間切れになりました。Source:Microsoft OLE DB Provider for SQL Server,SQL State:HYT00,NativeError:0 過去ログや他サイトを調べた結果、コネクションのCommandTimeoutの秒数を延長させる、とあったので60秒に変更しました。 が、不定期(大体1週間~10日前後で夜中や朝方などにもあり)にこのエラーが出てしまい、約1時間~1時間半もダウンしています(この間のエラーをOn Errorではじいてログファイルに保存しています)。 毎分必ず実行しているストアド(20装置分のデータをUPDATEするので1分に20回実行する)があるのですが、必ずと言っていいほどこのストアド実行中に落ちています。 このストアドに5~6個のパラメータを渡し、複数のテーブルに対してUPDATE処理を行っています。 正常に動作している時は、数日間全く問題無いので、ストアドやVBのコードに間違いは無いと思います。 そこで、SQL Serverの設定等を見直したところ、1つ気になったところが。データベースファイル \Microsoft SQL Server\MSSQL\Data\aaa.MDF のサイズが14Gになっていました・・・。 このファイルにアクセスする時にSQL Serverで高負荷になってしまい、無応答のような状態になってしまうのでは?と思っていますがどうでしょう? 不定期に発生し、かつ再現性が無く、原因が掴めずに本当に困っています。 先輩方、何でも良いのでアドバイスをお願い致します。

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

  • ベストアンサー
noname#11722
noname#11722
回答No.1

14Gですか・・・大きいですね。 データの構造がどうなのか解らないので、 容量的に妥当かどうかはわかりませんが、 一度インデックスの再構築と圧縮を掛けてはどうでしょうか CREATE PROCEDURE SP_COMPRESS AS DECLARE @name varchar(30) DECLARE tnames_cursor CURSOR FOR SELECT name FROM sysobjects WHERE type = 'U' OPEN tnames_cursor FETCH NEXT FROM tnames_cursor INTO @name WHILE (@@fetch_status <> -1) BEGIN PRINT @name + 'のDBREINDEX...' EXEC ('DBCC DBREINDEX ('+ @name + ')' ) FETCH NEXT FROM tnames_cursor INTO @name END DEALLOCATE tnames_cursor dbcc SHRINKFILE("SampleDb_Log",1) DBCC SHRINKDATABASE("SampleDb",1) GO データベース名は自分の環境に合わせてください。 また、バックアップは必ず取っておいてください。 14Gもあれば結構時間がかかると思いますが・・・ とりあえず参考程度に・・・

aruaru555
質問者

お礼

misty7666さん 早速のご回答、ありがとうございます。 試してみます。

その他の回答 (1)

noname#10771
noname#10771
回答No.2

データベースの構造をどうされているかわかりませんが、ログ領域をたくさんとっていて、ログがいっぱいになったりしていませんか? そんなときにDBに更新・追加やバックアップ処理等が行われると、ログ領域が足りず、エラーになったりします。14Gというと相当大容量なサイズですが、ログの切捨てを実施する事をお勧めします。 コマンドからでもよいですが、SQLServerでお使いのデータベースを右クリックし、データベースの編集を選べば、ログの切捨てが選べると思いますがどうでしょう? 後コマンドタイムアウトですが、あれって0だか-1だかに設定するとタイムアウトしないようにできませんでしたっけ?フリーズするというのなら、タイムアウトしないようにしたところでしようがないんですが一応。

aruaru555
質問者

お礼

sekiguchi-dさん ご回答ありがとうございます。 私の方でもソースコードの方ではなく、SQL Serverの設定自体に問題があるのでは、、、と疑っています。 ログ切捨てですね。 試してみます。 それで連続運転してみるしかないですかね・・・。 コマンドタイムアウトは0(無制限)だったと思います。

関連するQ&A

  • SQLサーバ2000へのインポート方法とその他

    こんにちは。 SQLサーバはまったくよく分からないですが、いくつか教えていただく助かります。 業務では下記のように、メインフレームから生データ(CSVファイル)をWindows2000へFTPし、SQLサーバへインポートし、その後ストアドプロシージャを実行します。 条件としては、メインフレームから不定期にFTPがおこなわれ、つづいてFTPが終了したことを通知するためのREXEC処理がコールされます。 メインフレーム ↓ Windows2000 ↓ SQLサーバ この時の具体的なテクニックを教えてほしいのですが、経験のない私のイメージはVBなどでADOを使ってファイルをインポートし、SQLサーバ内のストアドを実行するという感じです。 ↓ (1)メインフレームからファイルFTP(PUT) (2)メインフレームからVBで作成したモジュールを起動。 (3)VBはCSVファイルをDBにインポート (4)そしてVBからストアドプロシージャを実行(これは可能?) 現在はどのような仕組やツールが一般的なのでしょうか? 詳細に教えていただけると助かります。 よろしくお願いします。

  • VB6 SQLサーバー 2005 

    お世話になります。 今まではVB6 + SQLサーバー 2000 に ADO を用いて接続できたいたのですが、 今回 DBをSQL サーバー 2005 Express Edition に替えたところ上手く接続 できません。 「実行時エラー 2147467259  データーソース名および指定されたドライバが見つかりません。」 とエラー表示されます。  

  • 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 Server 2005 レプリケーションについて

    SQL Server2005 から SQL Server7.0 SP4 へレプリケーションを設定したいと思うのですが、上手くできません。 パブリケーション:SQL Server 2005 ディストリビューション:SQL Server 2005 サブスクリプション:SQL Server 7.0 SP4 自動起動 文献を調べると、ストアドを実行すれば設定できるようですが、 どのストアドを実行すればよいのかわかりません。 ご存知の方、そのストアドと引数をお教えください。 またアドバイス等ございましたらお教えいただきたくお願い致します。

  • SQL Serverのエラーについて

    サーバーの環境 OS:MS Windows NT Server 4.0 DB:MS SQL Server6.5 SQL Server 6.5 Service Pack 5a Windows NT 4.0 Service Pack 6a Internet Information Server 4.0 Internet Explorer 5.5 SQL Serverにクエリーを実行すると以下のエラーが発生します。 解決方法をご存知の方いましたらご教授願います。 Microsoft OLE DB Provider for ODBC Drivers エラー '80040e14' [Microsoft][ODBC SQL Server Driver][SQL Server]行のサイズが 2107 になり、作業テ-ブルの作成に失敗しました。テ-ブル 2014 内の 1 行の許容サイズを超えます。

  • SQL-Serverで時間切れが発生

    ノートパソコンにSQL-Server7.0とVB6.0をインストールしてVBアプリシステムを運用しています。月8万件のデータを半年溜めて、月に一回六ヶ月以上たったデータを削除しています。この削除処理で毎月時間切れエラーがでて異常終了してしまいます。時間切れを回避する方法を教えてください。

  • エクセルからSQLサーバー 時間切れになるようになった

    cn.Open "Provider=SQLOLEDB;Data Source=NASTUN-PC\SQLEXPRESS; " & _ "Initial Catalog=" & サーバー名 & ";" & _ "Integrated Security=SSPI" cn.Execute "UPDATE Tbl SET チェック = 0" エクセルからSQLサーバーへ更新クエリを実行しています。 今までこのコードで問題なく作業できていたのですが 昨日から エラーNo:-2147217871 「時間切れになりました。」 というエラーになります。 cn.CommandTimeout = 120 と長くしても同じです。 何もいじってないのにできなくなるなんてあるのでしょうか? SQLサーバーにはテーブルのみおいています。 よろしくお願いします。

  • SQL Server へのデータ追加について

    現在a、b、cの店舗でそれぞれAccessをDBとして活用しているのですが、それとは別に 3店舗分のデータを一つにまとめた統合用DBとしてSQL Serverを利用したいと考えています。その際、それぞれ各店舗分のデータをSQL Serverへと追加していきたいのですが、どういった処理が最適で効率が良いのか分からず困っています。 希望する処理的には何らかのexeファイルを作成し、そのexeファイルを叩くとAccessからデータを吸い上げ、SQL Serverへとデータを追加するということを行いたいです。 私が考えられる処理としては以下の2点でした。 1、Accessから吸い上げたデータをストアドを使い、データを追加していく。 2、Accessから吸い上げたデータをCSVに変換し外部ファイルとし、ローダーを使用して   データを追加する。 それぞれの店舗データが3万件程あります。 なるべくDBに負担をかけないで以上の様な事を行いたいです。 DBまわりにお詳しい方、ご教授よろしくお願い致します。

  • SQLサーバー接続について

    DB初心者です。 ODBCからSQLサーバーへのアクセスを設定したく、奮闘しておりますが うまくいかず困っております。 先方から支給されたのは、 DB名、ID、パスワード、ホスト名、ポート番号、MySQLのバージョン5.0.90で、 その通り設定したつもりが、以下のようなエラーが出てソース作成できません。 --- 接続できませんでした。: SQLState: '01000' SQL Server エラー: 11001 [Microsoft][ODBC SQL Server Driver][TCP/IP Sockets]ConnectionOpen(Connect()). 接続できませんでした。: SQLState: '08001' SQL Server エラー: 6 [Microsoft][ODBC SQL Server Driver][TCP/IPSockets]指定された SQL Server が見つかりません。 --- エラー番号で検索してみても原因がわからず・・・ 詳しい方いらっしゃいましたらお願いいたしますm(__)m

  • SQL Serverについて

    WIN NTのSQL Server 6.5を使っているのですが ストアドプロシージャの中からDOSのコマンドを 実行する事はできるのでしょうか、もしできるのであれば やり方を教えてください。 ストアドプロシージャの中からDOS バッチを起動する 方法でもかまいません。 お願いします。