Microsoft SQLServer Ver.7をWin2000上で使用しています。
SQLServer上のデータベースにASPでアクセスしていたところ、今までは正常に動いていたのに、突然「システムの仮想メモリがなくなって来ています」というWindowsメッセージが表示され、システム全体が非常に重くなってしまいました。この重さは、再起動しない限り直りません。

調べてみたところ、ある特定のテーブル(table1とします)に対してSELECT文を実行すると、こうなるようです(SELECT文の結果も返ってきません)。
同じテーブルに対してのINSERTは、特にシステムが重くなることもなく正常に実行できました。
同じデータベース上にある他のテーブルに対しては、普通にアクセスできています。

この現象が発生するようになる前に行ったことといえば、table1と同じデータベース上にある別のテーブルtable2を、一旦削除して作成し直したことくらいです。
仮想メモリのサイズを増やしてみたりもしたのですが、何も変わりません。
テーブルアクセス時にだけこうなるので、テーブルの設定にどこかまずいところがあるような気がするのですが……。
メモリがなくなってしまう理由に、何か心当たりはないでしょうか?

(SQLServerを使い始めて日が浅いので、用語や表現におかしなところがあるかもしれません。できましたら、それも指摘していただけるとうれしいです)

A 回答 (1件)

table1のレコード件数はどのくらいあるのでしょうか?



索引(INDEX)が無いけど件数が多い、等の場合、検索に「時間がかかる」のかな?

この回答への補足

現象が発生していた時点では、件数は1件でした(動作確認段階なので)。
索引はないです。

実は質問をした後、SQLServerに詳しい人が帰ってきたので見てもらおうとしたのですが、なぜか正常に動くようになっていました。
以後、現在まで再発していません。見てもらった人も、話を聞いただけでは原因はわからないと言っていました。

ただ、以前にも同じシステムを別サーバで動かしていて同じ状態になり、他のサーバ利用者に迷惑がかからないよう、サーバを変えたという経緯があります。その時も結局原因は不明でした。
ですから、またいつ同じ現象が発生するか、ちょっと不安です。

補足日時:2001/10/12 18:33
    • good
    • 0
この回答へのお礼

その後同様の現象は発生しておらず、回答もないようなので締め切らせていただきます。
bin-chanさま、アドバイスありがとうございました。
(原因不明のままなので、ポイント発行は見送らせていただきます。ご了承ください)、

お礼日時:2001/10/15 14:31

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

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

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

QSQLServerのあるデータベースの中にあるテーブルの件数をすべて調べたい時どうすれば?

Windows2000 SQLServer2000を使用しています。

あるデータベースの中にテーブルが100つぐらい
あります。

その100ぐらいのテーブルの中にある
それぞれのテーブルの中にある件数が知りたいのですが、
どうすれば分かるでしょうか?

表示をタスクパッドにすれば画面に表示できることは
知っているのですが、次へボタンを押すのが
面倒だし、ファイルに出力したいのであまり使えません。

どなたか何か分かる方、至急教えて下さい。
困っています。

Aベストアンサー

できましたか。よかったです。
何のテーブル名がわからないとのことですが・・・
テーブル名を結果と一緒に出力してはいかがでしょう。
 select "テーブル名" as "TableName" . count(*) as "count" from テーブル名
# 足りないものは出力させればよいのです。(^^)v

######
ファイルに出力させればよいようなので必要ないかもしれませんが、以下のようなテーブルを作成しておいて・・・
 create table RowCountOfTable
 ( TableName char(30) , RowCount int , CheckDate datetime )

以下のSQLを実行すると「テーブル名、件数、時刻」が保存できます.
 insert RowCount select "テーブル名",count(*),getdate() from テーブル名

# insert 文をまとめてストアドプロシジャで作成しておくと実行が楽かもしれません。いろいろ工夫してみてください。(^^)/

できましたか。よかったです。
何のテーブル名がわからないとのことですが・・・
テーブル名を結果と一緒に出力してはいかがでしょう。
 select "テーブル名" as "TableName" . count(*) as "count" from テーブル名
# 足りないものは出力させればよいのです。(^^)v

######
ファイルに出力させればよいようなので必要ないかもしれませんが、以下のようなテーブルを作成しておいて・・・
 create table RowCountOfTable
 ( TableName char(30) , RowCount int , CheckDate datetime )

以下のS...続きを読む

QSQLServer6.5 における、Selectエラー

SQLを実行すると、

メッセージ 702、レベル 20、状態 1
単一ペ-ジのサイズ 2040 バイトを超える 2080 バイトをメモリが要求されました。

のエラーになってしまいます。
解決方法をご存知のかた、ご回答、よろしくお願いします。

Aベストアンサー

環境設定でメモリ設定を増加させてみてはどうでしょうか?
サーバーを展開して、右クリック、「環境設定」で変更できます。
一時領域に関する設定を増やしてみましょう。

Qユーザーテーブルとシステムテーブルを区別したい

カテゴリーが違ったらすみません。

VC++のプログラムで
SQLTables,SQLBindCol関数を使ってDB上のテーブル名の一覧を取得しています。
この時、システムテーブル(例えば、AccessならMSys_...,Oracle9なら_ALL_INSTANTIATION_DDL等)も取得してしまいます。
ユーザーが生成したテーブルだけの一覧を作りたいので困っています。
ユーザーが生成したテーブルとシステムテーブルを区別する方法があったら教えて下さい。

Aベストアンサー

SQLBindCol(hstmt,3,SQL_C_CHAR,tableName

てな事をしていると思いますが、

SQLBindCol(hstmt,4,SQL_C_CHAR,tableType

みたいにして、テーブルタイプが取れます。

後はループの中で "SYSTEM TABLE"(だったかな)をオミット。

ここよか、言語系カテで。

QSQLServer7.0で、SELECT文で列を抽出する ※Nullと0の条件について

SQLServer7.0で、SELECT文で列を抽出する際なんですが、

列A 列B
---------
1  Null
2  Null
3  1

↑のテーブルから、列Aの1、2だけを抽出するSELECT文を

SELECT * FROM XXX WHERE 列B <> 1

と作成したのですが、うまく動作しません(汗)
データが一件も取れないのです。(列B:tinyint型、Null許容)
テーブル内のデータをNull→0にして、同SELECT文で抽出すればうまくいったのですが。。
Nullデータを、<>XX という条件で取得することはできないんですかねえ・・・。
それとも、テーブルの設定か、条件の記述方法がまずいんでしょうか。
どなたか、ご存知あればアドバイスをお願いします。

Aベストアンサー

再びNo.1です。
>Null値を抽出したいわけではなく、1以外のデータを抽出したいのです。
>そのデータにNullが含まれてるので・・・、

Prynneさんのおっしゃる通り、

>NULLを含める1以外のもの、という条件にするのであれば、
>WHERE (B列 <> 1) OR (B列 IS NULL)

とのことですが、(NO.1のPS(追伸)にもありますが、)

WHERE (B列 <> 1) AND (B列 IS NOTNULL)

でもできますので、蛇足ながら一応補足させていただきす。m(__)m

QSQLSERVERのテーブルにデータをロードする方法を教えてください

SQLSERVER2000のテーブルにデータをロードする方法を教えてください。

<環境>
マシンA・・・OS WINDOWS2000SERVER
マシンB・・・OS WINDOWS2000SERVER SQLSERVER2000

質問1
マシンA上で作成したCSVファイルを使用して、マシンBのSQLSERVERにデータをロードする方法を教えてください。
リモートから直接データがロードできるのであれば、各マシンにインストールする必要がある製品と、方法、サンプルスクリプトがあると助かります。
おそらくマシンBにデータを転送した後、DTSか、バルクローダをリモートからキックすることになると思うのですが、詳しい方法が分かりません。

質問2.

マシンA上で作成したUPDATE文を使用して、マシンBのSQLSERVERにデータを更新する方法を教えてください。
リモートから直接データが更新できるのであれば、各マシンにインストールする必要がある製品と、方法、サンプルスクリプトがあると助かります。

以上、2点になります。よろしくお願い致します。

SQLSERVER2000のテーブルにデータをロードする方法を教えてください。

<環境>
マシンA・・・OS WINDOWS2000SERVER
マシンB・・・OS WINDOWS2000SERVER SQLSERVER2000

質問1
マシンA上で作成したCSVファイルを使用して、マシンBのSQLSERVERにデータをロードする方法を教えてください。
リモートから直接データがロードできるのであれば、各マシンにインストールする必要がある製品と、方法、サンプルスクリプトがあると助かります。
おそらくマシンBにデータを転送した後、DTSか、バルクローダを...続きを読む

Aベストアンサー

いくつか方法があると思います。ただ、shocQさん自身「答えられそうだと登録しているカテゴリー」に「データベース」を登録されてますよね?そういう方の質問とはとても思えません・・・。

質問1
手動ならEnterpriseManagerでインポートすればいいと思います。
自動ならADOなりADO.NETなりを使うと効率的にプログラム作成ができると思います。

質問2
手動ならマシンAにSQLServerのクライアントコンポーネントをインストールしてEnterpriseManagerでUPDATE文を実行してください。
自動ならADOなりADO.NETなりを使うと効率的にプログラム作成ができると思います。

プログラム開発環境がないのであれば、VBスクリプトあるいはExcel等のVBAを利用されるのがいいと思います。ADOの呼び出しも可能です。


人気Q&Aランキング

おすすめ情報