Saturday, May 12, 2007

CPU 使用率 100% になって Windows がフリーズしてしまう件

タスクマネージャ で見ると、svchost.exe というプロセスが CPU リソースをバカ食いしている。これを思い切って終了させてみると正常に戻った。が、オーディオデバイスが使えなくなってしまう。

svchost.exe というのは重要なシステムプロセスだそうで、いくつかある同じ名前のプロセスを終了させるとシステムがシャットダウンしてしまう場合もある(他の svchost.exe を強制終了したら実際そうなった)。

そこで

http://gigazine.net/index.php?/news/comments/20061009_svchost/
http://www.microsoft.com/technet/sysinternals/utilities/ProcessExplorer.mspx

Process Explorer なるものをインストールして詳しく調べると、100% 近くなっている svchost.exe のプロセスツリーの下には、wuauclt.exe というのがある。これは、Windows の自動更新を司るプロセスだ。どうやら、これが原因らしい。

したがって、コントロールパネルから自動更新を OFF にすると問題は解決したが、この自動更新の不具合を修正するための更新プログラムが(いまごろ)発表されていたのでそれをインストールした。

http://gigazine.net/index.php?/news/comments/20070511_windows_update_patch/
http://support.microsoft.com/kb/937383/ja

これでこの問題は完全に解決。ただ、svchost が短い間 CPU 使用率100% になることはあるということで実際そうなっている。

この件、ググってみたら結構ヒットして、オーディオデバイスが使用不能になるなど、まさに同じ目にあっている人もいた。

Tuesday, May 08, 2007

Oracle SQL*Plus メモ


SELECT
'INSERT INTO tbl_alert_cond(user_id, meigara_code, alert_type, last_update)
values (''' || b.user_id || ''', ''' || a.meigara_code || ''', ' || to_char(a.alert_type) || ', SYSDATE);'
FROM tbl_alert_cond a, tbl_users b
where a.user_seq_no = b.user_seq_no;


この SQL は、テーブルから SELECT した結果を組み合わせて SQL 文を作成している。文字列はシングルクォートで囲むのだが、文字列中でシングルクォートを使いたいときは、シングルクォートをシングルクォート自身でエスケープする。つまり、シングルクォートを2つ並べるということ。

また、文字列連結演算子 || を使っているが、これに渡すために整数カラムは、to_char 関数でいったん変換してから渡しているのがわかる。