初めまして。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で高負荷になってしまい、無応答のような状態になってしまうのでは?と思っていますがどうでしょう?

不定期に発生し、かつ再現性が無く、原因が掴めずに本当に困っています。
先輩方、何でも良いのでアドバイスをお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

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もあれば結構時間がかかると思いますが・・・

とりあえず参考程度に・・・
    • good
    • 1
この回答へのお礼

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

お礼日時:2005/04/11 15:29

データベースの構造をどうされているかわかりませんが、ログ領域をたくさんとっていて、ログがいっぱいになったりしていませんか?



そんなときにDBに更新・追加やバックアップ処理等が行われると、ログ領域が足りず、エラーになったりします。14Gというと相当大容量なサイズですが、ログの切捨てを実施する事をお勧めします。

コマンドからでもよいですが、SQLServerでお使いのデータベースを右クリックし、データベースの編集を選べば、ログの切捨てが選べると思いますがどうでしょう?

後コマンドタイムアウトですが、あれって0だか-1だかに設定するとタイムアウトしないようにできませんでしたっけ?フリーズするというのなら、タイムアウトしないようにしたところでしようがないんですが一応。
    • good
    • 2
この回答へのお礼

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

お礼日時:2005/04/11 21:10

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QSQL-Serverで時間切れが発生

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

Aベストアンサー

CommandTimeOutの時間を増やす。
設定していないと、デフォルトで 30 秒だったと思います。

Qストアドから別のストアドを作成できますか?

パラメータ付きストアドから、そのパラメータを展開したSELECT文のストアドを作成する事は可能でしょうか?

アクセスのデータシートビューを表示するにはパラメータがあっても指定出来ないようなんです。
「DoCmd.OpenStoredProcedure」でパラメータ付きのストアドを実行すると、
パラメータ用のインプットボックスが表示されその都度入力しなくてはなりません。

そこで、アクセスから@フィールド名 と @テーブル名 をパラメータとしてストアドを実行し、
ストアドで「SELECT @フィールド名 from @テーブル名」パラメータを展開したSELECT文にして、
別の名前を付けたパラメータ無しのストアドとして登録し、そのストアドを
アクセスの「DoCmd.OpenStoredProcedure」で実行すれば、目的のデータシートビューを表示出来ると考えました。

ストアドからストアドを作成できるのでしょうか、可能であれば方法を教えて下さい。

Aベストアンサー

#1です。老婆心ながら。。

・こういうテーブルを作成する場合は、どちらかというとtempdbに作成した方がいいです。
 おそらく今のデータベースはオンライン更新の掛る業務DBなので、復旧モードがフルになっているはずです。
 したがって、バルクのデータ処理を繰り返し実行すると、トランザクションログが膨らみます。

・前にも書きましたが、動的SQLを使う場合は、どういう方法でもいいのでパラメータは検証してください。
 今回のケースで、パラメータを検証しないと、
 @テーブル varchar (50),@フィールド varchar (max)というパラメータに
 
EXEC ストアド1 'テーブル1; DROP TABLE テーブル1--','*'
EXEC ストアド1 'テーブル1','* FROM 見てほしくないテーブル--'

 という渡し方もできてしまいます。
 このストアドの存在を実行できる人は基本的に何でもできることになりますから、セキュリティ上好ましくないです。
 イントラだからいいだろうと思わないで検証する習慣にした方がおすすめです。
 (アプリケーションとデータベースは別物なので、データベースにしてみれば自分の身は自分で守らないといけません)

・ストアドの先頭に"SET NOCOUNT ON"を切るのも習慣にした方がいいです。
 場合によってはデータセットが受け取れないかもしれません。

#1です。老婆心ながら。。

・こういうテーブルを作成する場合は、どちらかというとtempdbに作成した方がいいです。
 おそらく今のデータベースはオンライン更新の掛る業務DBなので、復旧モードがフルになっているはずです。
 したがって、バルクのデータ処理を繰り返し実行すると、トランザクションログが膨らみます。

・前にも書きましたが、動的SQLを使う場合は、どういう方法でもいいのでパラメータは検証してください。
 今回のケースで、パラメータを検証しないと、
 @テーブル varchar (50),@...続きを読む

Q碁で時間切れを狙う相手は許されるのでしょうか。

ヤフーゲームで碁を打っていると、度々(時間に制限を設けている場合)終盤になってこちらの時間がほとんどなくなってくると、余計な手を打ったり、打つ必要のない箇所に打ったりして、こちらの時間がなくなるのを待って勝とうとする人がいます。明らかに時間切れを狙ってのことです。
こんなことって許されることでしょうか。
私は、卑怯だと思います。
碁打ちの風上にも置けないと思います。恥さらしです。
碁は礼を重んずるゲームのはずです。
本当に腹が立ちます。
それともこんなことで腹を立てる私が間違っているのでしょうか。
時間切れを狙うことは正当なことなんでしょうか。

碁を趣味とする方々にご意見を賜りたいと思います。
宜しくお願いします。

Aベストアンサー

以前 たまに大ポカをやるので有名な藤沢秀行先生の本を読んでいたら次の行がありました。

明らかに勝敗は誰の目でみても明らかなのに私の大ポカを期待して投了しないものが居る。勝負だから相手が打つ間は打つが終局後検討などしないで席を立つ。

と書いてありました。
私は成る程と思いました。何かの参考になれば幸いです。

Qストアドから特定のキーワードを含むストアドを探したい

ストアドから特定のキーワードを含むストアドを探したい

沢山のストアドの中から「union」を使っているストアドをだけを
検索する方法はありますか?
(名称ではなく、ストアドの中身(コード)を検索したい)

Aベストアンサー

多少余計なものも拾うかもしれませんが、

select * from sys.sql_modules
where definition like '%union%'

が手っ取り早いです。

Qミリオンゴッドライジングで連チャン中に閉店で時間切れになって0回転でやめたのですが消しますよね?

ミリオンゴッドライジングで連チャン中に閉店で時間切れになって0回転でやめたのですが消しますよね?

Aベストアンサー

昔の緑ドンがART中にクレジット落としたら、ARTランプが全部消えて、店が気付かないで据え置きありましたよ。でも0回転は無理でしょ。とりあえず朝、走ってみる(笑)

Qストアドから得られるレコードセットを、別のストアドで利用したい

現在、実行するとあるレコードセット(1行1列のみ)を返すストアドプロシージャProc_Aがありますが、このプロシージャを実行して得られる結果を、
別のプロシージャProc_Bで、以下のような形で使用したいと考えています。

ただし、Case文内部でのストアドの実行や、変数へのストアドの実行結果の代入を試しましたが、どちらもうまくいっていません。

なにか、よい解決策があれば、教えていただければ、と思います。

パターンA) Case内部で直接実行

select
case Table_A.param_1
when 0 then Exec Proc_A '***','**'
else ''
end

パターンB)いったんパラメータとして取得
declare @values as char(10)
execute sp_executesql N'@values = Proc_A ''***'',''**''', N'@values char(10) OUTPUT', @values OUTPUT

現在、実行するとあるレコードセット(1行1列のみ)を返すストアドプロシージャProc_Aがありますが、このプロシージャを実行して得られる結果を、
別のプロシージャProc_Bで、以下のような形で使用したいと考えています。

ただし、Case文内部でのストアドの実行や、変数へのストアドの実行結果の代入を試しましたが、どちらもうまくいっていません。

なにか、よい解決策があれば、教えていただければ、と思います。

パターンA) Case内部で直接実行

select
case Table_A.param_1
when 0 t...続きを読む

Aベストアンサー

あまり自信はないのですが、なかなか回答が付かないようですので・・・

私もちょっと試してみたのですが、ストアドプロシージャが返すレコードセットを別のSQL分のパラメータとして使用するのは、普通の方法では無理そうでした。

そこで、「普通の方法では無理」ということを前提にした上で、次の方法はいかがでしょうか。

(1) ストアドプロシージャの構造を変える

Proc_Aがレコードセットを返すのではなく変数に値を返す構造になっていれば、問題はないわけです。

ですので、Proc_Aと同じレコードセット(1行1列)をパラメータとして返す新しいストアドプロシージャProc_A'を作成し、それを使用するのはいかがでしょうか。

なお、現状でProc_Aも必要としているのであれば、Proc_AとProc_A'でほぼ同じクエリが重複してしまうので、Proc_AはProc_A'を使用する形に書き直すほうがより好ましいかと思います。

(2) 超が付くほど強引な方法です

ストアドプロシージャProc_Aの内容(SQL文)を取得することは可能なので、それをそっくり取得して、その中にあるSELECT ...をSELECT @var=...に変更してダイナミック実行し、取得した値をパラメータとして返すのはいかがでしょうか。

Proc_Aが自前のストアドプロシージャであれば(1)のように書き換えてしまえばいいわけですが、ヨソのストアドプロシージャであって内容がいつどのように変わるか定かではないという場合には、こんな方法を取るのもやむを得ないのかなと思います。

あまり自信はないのですが、なかなか回答が付かないようですので・・・

私もちょっと試してみたのですが、ストアドプロシージャが返すレコードセットを別のSQL分のパラメータとして使用するのは、普通の方法では無理そうでした。

そこで、「普通の方法では無理」ということを前提にした上で、次の方法はいかがでしょうか。

(1) ストアドプロシージャの構造を変える

Proc_Aがレコードセットを返すのではなく変数に値を返す構造になっていれば、問題はないわけです。

ですので、Proc_Aと同じレコード...続きを読む

Qこの回答じゃ不満だなぁ、という時にBAを保留、放置しておくと時間切れに

この回答じゃ不満だなぁ、という時にBAを保留、放置しておくと時間切れになり、解決済みになりますか?

Aベストアンサー

なりませんよ、質問者が退会するまで自動締め切りはないです。
退会すると自動締め切りになり、どうしてもベストのアンサーが現れなければ、いったん退会して同じIDまたは別のIDで再登録します。
手続き的にはさほど面倒ではないですが、普通にしめきるのよりは手間なので、困ったシステムです。
しめきらないと2週間目に確認メールが来ますが、無視します。

Q今、何のストアドを実行しているか知りたい

タイトルの通り、現在実行中のストアドが何なのか知りたいです。

稼動しているのSQLServerでは、複数のストアドを実行しています。
その中で現在、どのストアドが実行されているのか確認したいのですが、
確認方法がわかりません。たぶん、、プロファイラ??を使いそうな・・・ぐらいだけ、予想していますが、よくわかってないです。
SQLServerのプロファイラの知識レベルですが、私、一度も使ったことがなく、知識に乏しい状態です。

そのためご存知の方、ご教示頂けると嬉しいです。

Aベストアンサー

推察通り「Profiler」を利用すると簡単に確認可能です。
 ※起動して「新規追加」→「トレース」を選びます。

参考URL:
http://technet.microsoft.com/ja-jp/library/ms173757.aspx
http://www.sqlpassj.org/tokushu/dba/01.aspx

Q質問の締め切りのやり方。時間切れ意外に締め切る方法があるのでしょうか?

よく質問を見ているとすぐに締め切りがされてしまうのがありますが。

これって時間切れ以外に故意に締め切りにする方法があるのでしょうか?

Aベストアンサー

厳密に言えば、「ベストアンサーを選ばずに質問を締め切る」というボタンがあります。
これの事ですか?

QSQLSERVERエージェントからのストアド実行方法について

いつもお世話になります。
表題の件ですが、当方オラクル育ちの為四苦八苦しながらの開発です。

とりあえずストアドの作成、登録、クエリアナライザーからの実行、デバックまでは完了しており
最終的にSQLSERVERエージェントのジョブ登録にて毎日設定した時間に作成したストアドを実行したいと思っているのですがエージェントからストアドを起動させるステップのコマンド記述が良く分からないのです。

exec aaa (パラメータ無しです)
と書いて実行しても
”ジョブは失敗しました。 ジョブは ユーザー sa が起動しました。最終実行ステップはステップ 1 (ステップ 1) でした。”
というメッセージが表示されます。

エージェントから起動する場合、どのようにコーディングすればいいのでしょうか?

開発環境はsqlserver2000です。

申し訳ありませんが宜しくお願いします。

Aベストアンサー

「exec aaa」とクエリアナライザで実行した場合はうまくゆくのですよね?

以下、手元にSQL Serverがあるわけでないので、細かい操作は違うかも・・・

Enterprise Manager 上でジョブ名を右クリック→履歴の表示で実行履歴が出ます。
そこで詳細の表示にチェックを入れ、展開された部分を参照してみてください。エラー原因が出ているかもしれません。

確認点としては、
・[種類]が[Transact-SQL スクリプト (TSQL)]になっているか?
・[データベース]でストアドプロシージャを作成したデータベースが指定されているか?
といったところでしょうか。

参考URL:http://www.microsoft.com/japan/msdn/library/ja/adminsql/ad_automate_3v5f.asp?frame=true#


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報