「トラブル対応」タグアーカイブ

MySQLで「Too many connections」エラーが出たときの原因と対処法

MySQLを運用していると、ある日突然アプリケーション側から「Too many connections」というエラーが返され、データベースに接続できなくなることがあります。これは利用者にとってはサイトやサービスが「停止状態」と同じであり、早急な対応が必要です。本記事では、このエラーの原因と具体的な対処方法を整理します。


「Too many connections」エラーとは?

MySQLには同時に接続できるクライアント数を制御する仕組みがあります。
max_connections というパラメータで上限値が決められており、この数を超える新規接続要求があった場合に 「Too many connections」 エラーが発生します。

  • 初期値:151(バージョンによって異なる)

  • 上限:OSやハードウェアのリソースに依存

つまり、データベースが過負荷状態になったサインと捉えることができます。


主な原因

1. 接続数の急増

一時的にアクセスが集中し、アプリケーションからの同時接続数が急増することで上限を超えてしまいます。

2. 接続のクローズ漏れ

アプリケーション側で 接続プールの管理不備close処理の抜け があると、不要な接続が残り続けます。

3. 長時間実行されるクエリ

重いSQLが大量に実行されると、処理待ちの接続が積み重なり、結果的に接続枠を圧迫します。

4. 不適切な設定

wait_timeoutinteractive_timeout の値が長すぎると、アイドル状態の接続が切断されずに残ってしまうことがあります。


対処法

1. 一時的な応急処置

まずはサービス復旧を優先します。
MySQLに管理者で接続できる場合、現在の接続状況を確認します。

不要な接続が溜まっている場合は、強制的に切断します。
 
KILL 接続ID;

どうしても管理者で接続できない場合は、MySQLサービスの再起動が必要になる場合もあります。
(※ただし根本解決にはならず、緊急回避策に過ぎません。)


2. 根本的な解決策

(1) max_connections を増やす

一時的なアクセス増に備えるために上限値を上げます。

永続化する場合は my.cnf に設定を追記します。
 

(2) 接続プールの導入・見直し

アプリケーションで コネクションプーリング を利用し、使い終わった接続は必ず解放するようにします。
JavaならHikariCP、PHPならPDOやmysqliの接続プールを利用するのが一般的です。

(3) クエリのチューニング

  • インデックスを適切に設定する

  • 不要なJOINやサブクエリを減らす

  • キャッシュを導入する

これにより接続が長時間占有されることを防ぎます。

(4) timeout の調整

不要な接続が残り続けないように、wait_timeout の値を短めに設定します。


再発防止のために

  • アクセスのピーク時を想定して性能テストを行う

  • アプリケーション側で接続管理を徹底する

  • 監視ツール(例:Zabbix, Prometheus, CloudWatchなど)で接続数を常時モニタリングする

これらを実施することで「Too many connections」エラーを未然に防ぐことができます。


まとめ

「Too many connections」エラーは単なる設定値不足ではなく、接続管理やクエリ設計の問題 が隠れていることが多いです。

  • 一時的には接続数の上限を増やす

  • 長期的にはアプリケーション側の接続管理やSQLチューニングを見直す

これらをバランスよく行うことで、安定したMySQL運用が可能になります。

Oracleユーザー作成時にORA-00959エラー発生!指定された表領域が存在しない場合の対処法

はじめに

Oracle Databaseでユーザーを作成する際に、以下のようなエラーが発生することがあります。

ORA-00959: tablespace 'USERS' does not exist

このエラーは、指定した表領域(tablespace)が存在しない場合に発生します。本記事では、原因の解説と実際の解決方法をまとめます。


エラーの原因

ORA-00959「指定した表領域が存在しない」 ことを意味します。

例えば以下のSQLを実行した場合を考えます。

このとき、環境に USERS という表領域が作成されていなければ、ORA-00959 が返されます。

よくある原因

  • インストール時にデフォルトの USERS 表領域が作成されなかった

  • 他の管理者が不要と判断し削除してしまった

  • マルチテナント環境(CDB/PDB)で表領域の有無が異なる


対処法

1. 既存の表領域を確認する

まずは現在存在している表領域を確認します。

 
SELECT tablespace_name FROM dba_tablespaces;

ここで USERS が表示されなければ、エラーの通り存在していないことが確認できます。


2. 表領域を作成する

存在しない場合は新たに表領域を作成します。

 
CREATE TABLESPACE USERS DATAFILE '/u01/app/oracle/oradata/ORCL/users01.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;

※ データファイルのパスは環境に応じて修正してください。


3. 既存の表領域を指定してユーザーを作成する

新しく表領域を作成せず、既存の表領域を利用する方法もあります。

 
CREATE USER testuser IDENTIFIED BY password DEFAULT TABLESPACE SYSTEM TEMPORARY TABLESPACE TEMP;

ただし、SYSTEM を業務用に利用するのは推奨されないため、専用の表領域を作成する方がベストです。


4. ユーザー作成後の権限付与

ユーザー作成が成功したら、最低限以下の権限を付与します。

 
GRANT CREATE SESSION TO testuser; GRANT CREATE TABLE TO testuser;

必要に応じて他の権限も付与してください。


まとめ

  • ORA-00959「指定した表領域が存在しない」 ことが原因

  • DBA_TABLESPACES ビューで表領域の存在を確認

  • 必要に応じて新規作成、または既存の表領域を指定する

表領域の存在を確認してからユーザー作成を行うことで、エラーを回避できます。

❓よくある質問(FAQ)

Q1. ORA-00959エラーはなぜ発生するのですか?

A. 指定した表領域(tablespace)が存在しない場合に発生します。ユーザー作成時の DEFAULT TABLESPACE に指定した名前が、データベース内に存在しないことが原因です。


Q2. 表領域が存在するかどうかを確認するには?

A. 以下のSQLで確認できます。

 
SELECT tablespace_name FROM dba_tablespaces;

ここに指定した名前が含まれていなければ、新しく表領域を作成する必要があります。


Q3. SYSTEM表領域を代わりに使っても良いですか?

A. 技術的には可能ですが推奨されません。SYSTEM はOracle内部で利用される表領域であり、業務用のオブジェクトを置くとパフォーマンスや管理に悪影響が出る可能性があります。専用の表領域を作成しましょう。


Q4. 表領域を作成するときのファイルパスはどう決めればいいですか?

A. 通常はOracleデータベースのデータファイル格納ディレクトリ(例:/u01/app/oracle/oradata/ORCL/)に置きます。環境ごとの構成ポリシーに従い、十分な容量のあるディスクを指定してください。


Q5. マルチテナント環境(CDB/PDB)でも同じ対応ですか?

A. はい。ただしCDB直下とPDB配下で表領域の有無が異なることがあります。ユーザーを作成するPDBに接続し直し、そのPDB内で表領域を確認・作成してください。

Oracle:接続時に「ORA-01109:データベースがオープンされていません。」エラーが出た場合の原因と対応方法

DBクライアントソフトなどでOracle DBへ接続時に「ORA-01109:データベースがオープンされていません。」が表示された場合の原因と対応方法についてメモしておきます。

「ORA-01109:データベースがオープンされていません。」の原因

  • 文字通り接続しようとしているDBがオープンされていないのが原因となります。今回接続先を「ORCLPDB」に指定していましたがそこがオープンされていないようです。
  • 念のためSQL Plusを起動して「show pdbs」コマンドでプラガブル・データベース(PDB)のオープン状態を確認するとやはりオープンされていませんでした。

「ORA-01109:データベースがオープンされていません。」の対処方法

  1. SQL Plusで「alter pluggable database ORCLPDB open;」コマンドを実行し、ORCLPDBをオープンします。
  2. 「show pdbs」コマンドでプラガブル・データベース(PDB)のオープン状態を確認します。
  3. これでORCLPDBのオープンだけなら完了していますが、このままPCを再起動するとまた再びクローズ状態に戻ってしまいます。ですので最後に現在オープンされている全てのPDBを自動起動(オープン)するように「alter pluggable database all save state;」コマンドで保存します。

 

補足:よくある注意点と確認ポイント

上記の対応だけで解決しない場合や、環境によっては以下のようなケースもあるので参考にしてください。

PDB が自動で開かない場合

ALTER PLUGGABLE DATABASE ALL SAVE STATE; を実行しても、再起動後に PDB が自動的にオープンされないことがあります。
その際は以下を確認してみてください。

  • PDB の AUTO_STARTUP が有効になっているか
  • 初期化パラメータ ENABLE_PLUGGABLE_DATABASE が設定されているか
  • OS 側の起動スクリプトに PDB オープン処理が含まれているか

権限不足でエラーになる場合

PDB を開こうとしたときに ORA-01031: insufficient privileges が出る場合は、権限不足の可能性があります。
SYSDBA 権限を持つユーザーで接続して実行する必要があります。

PDB の状態確認

今の状態を確認したいときは、次のコマンドを使うと便利です。

READ WRITE であればオープン済み、MOUNTED ならまだ開いていない状態です。

ログのチェック

もし原因が分からない場合は、アラートログ(alert log)や trace ファイルを確認してみてください。
「ファイルが読み込めない」「整合性が取れていない」といったエラーが記録されていることもあります。

冗長構成を利用している場合

Data Guard や RAC のような構成では、PDB のオープン状態が自動で引き継がれないことがあります。
フェイルオーバー後に PDB が閉じたままになるケースもあるので注意が必要です。

関連するエラーメッセージ

今回の ORA-01109 以外にも、以下のエラーが一緒に出ることがあります。

  • ORA-01110

  • ORA-01113

これらも「データベースがオープンされていない」状態に関係するため、併せて確認してみてください。

WordPressで記事の更新時に「更新が失敗しました。返答が正しいJSONレスポンスではありません。」と表示されたり新規投稿画面を開こうとしても「Security check failed」と表示された原因

本日WordPressで作業していたら以下のような事象が発生しました。

  • WordPressで記事を更新しようとしても以下のように「更新が失敗しました。返答が正しいJSONレスポンスではありません。」と表示されて更新出来ない
  • 新規で投稿や固定ページを追加しようとしても「Security check failed」と表示されて新規投稿用の画面が表示されない

先日まで投稿できてたのに何故!?

と思いエラーメッセージでググっても「クラシックエディタに変更してみる」とか「パーマリンク設定を基本にする」などは見つかりましたが今ひとつ根本的な解決手段じゃないなあと本日行った作業を思い出してみるとそういばプラグインいくつか更新したな。。と思い出し本日更新したプラグインを一つずつ無効化して確かめてたら。。

プラグイン「WP to Twitter」の更新が原因でした!!

これを無効化したら全て正常に動作したので私の場合は「プラグインの更新で不具合があった」というのが根本原因でした。。

やっぱりプラグイン更新時は動作確認必須だなあと再認識(^_^;)

WP to Twitterのページを見るとバージョン「3.6.0」に更新すると発生します。

サポートフォーラムを見てもまだこの件については何も記載されてないようなのでもう少し対応待つ必要ありそうです。

Wp to Twitterのプラグインページへ

 

今回は更新したプラグインで不具合があったのが原因でしたが、調べていると他の原因でも「更新が失敗しました。返答が正しいJSONレスポンスではありません。」のメッセージが表示されることがあるようです。まずは正常に更新出来ていた時期~エラーが発生した時期までに更新したことを思い出して一つずつ原因を潰すのが一番近道かなあと思います。あと定期的なバックアップも大事!

他に考えられる原因や対処方法

  • レンタルサーバー側でなんらかのセキュリティなどの機能が追加されたのが影響した
  • 「.htaccees」の編集で記載ミスがあった。もしくは自動で中身がクリアされてしまっていた。
  • ブラウザのキャッシュをクリアしたら直った
  • サーバーのWAFをOFFにしたら直った

 

【0x81000204】復元ポイントからの復元ができない場合の対処方法

システムの復元ポイントからの復元を実行しても以下のようにエラーコード「0x81000204」が表示されて復元に失敗した場合の対処方法です。

対処方法

システム ファイルの破損を検出・修復する以下コマンドを実行する手順です。

  1. コマンド プロンプトを管理者権限で実行
  2. コマンドプロンプト画面で「dism /online /cleanup-image /restorehealth」と入力して Enter
  3. 上記の処理が終わったら、引き続き「sfc /scannow」と入力して Enter
  4. 再度システムの復元を実施

コマンドプロンプト実行時に「管理者として実行」が表示されない場合の対処方法

スタートメニューからコマンドプロンプトのアイコンを右クリックしても「管理者として実行」が表示されない場合の対処方法をメモしておきます。

タスクバーから管理者として実行する方法

タスクマネージャー経由でアプリケーションを管理者として実行する方法です。

  1. 「Windowsマーク」を右クリックして「タスクマネージャー」を選択します。
  2. 「ファイル」→「新しいタスクの実行」を選択します。
  3. コマンドプロンプトを管理者として実行したい場合は「cmd」と入力します。
  4. 「タスクに管理者特権を付与して作成します。」をチェックを入れて「OK」ボタンを選択します。
  5. 以下の様に管理者としてコマンドプロンプトが実行されます。

WordPressで「現在メンテナンス中のため、しばらくの間ご利用いただけません」と表示される原因について

WordPressを操作していてサイトを表示するといきなり「現在メンテナンス中のため、しばらくの間ご利用いただけません」と表示されて管理画面も表示出来ずかなり焦ったので対処方法をメモしておきます。

事象

    WordPressで作成したサイトを表示すると「現在メンテナンス中のため、しばらくの間ご利用いただけません」と表示される

原因

    プラグイン等の更新中にF5などで再表示した場合に発生するようです

対応策

  • 該当サイトのリポジトリへアクセスし、「.maintenance」ファイルを削除します。

「PC SpeedScan Pro」の削除(アンインストール)方法

普段から不要ソフトのインストールには気をつけていたつもりですがそれでもいつの間にか「PC SpeedScan Pro」なるスキャンソフトがPCにインストールされていました。
結論から言ってしまうとこのソフトはPCを起動すると勝手にスキャンを開始し始めてキャンセルして終了しようとするとあたかも問題があるように表示して不安を煽り有償版を購入させようとする詐欺ソフトです。見つけたら即刻削除しましょう!

PC SpeedScan Proの起動画面

  1. PC起動直後に以下の様に勝手にスキャンを開始します。起動を確認したら即刻「スキャンを停止」ボタンを選択して終了させて下さい。
  2. スキャンを停止して閉じようとするとしつこく確認してくるので右上の「x」ボタンで閉じます。
  3. PC SpeedScan Proが起動されていると右下のタスクバーに以下のアイコンが表示されます。

PC SpeedScan Proの削除手順

  1. 右下のタスクバーに表示されているアイコンを右クリックして「終了」を選択します。
  2. 「コントロールパネル」⇒「プログラムと機能」を選択し、「PC SpeedScan Pro」を選択してアンイストールを選択します。
  3. アンインストールウィザードが表示されたら右下にある「アンインストール」ボタンを選択します。
  4. アンインストールが終了したら「完了」ボタンを選択して削除完了となります。

Eclipse:デフォルトのVM引数を設定する方法

EclipseでJUnitやDjUnitを実行すると「junit java.lang.OutOfMemoryError: Java heap space」とメモリエラーが表示された場合は「デフォルトのVM引数」を設定する事でこの事象を回避する事が出来るのでその設定方法をご紹介します。

環境

  • Eclipse 4.2
  • Windows7 professional 64bit版

対処方法

  1. Eclipseメニューの「ウィンドウ」⇒「設定」を選択します。
  2. 設定画面で「Java」⇒「インストール済みのJRE」⇒使用しているjdkを選択して「編集」ボタンを選択します。
  3. JREの編集画面で「デフォルトのVM引数」へ以下の様に設定します。

ttlファイルを実行すると「無効なホスト」と表示される場合の対処方法

TeraTerm用のマクロファイル「**.ttl」ファイルを実行すると「無効なホスト」と表示された場合の対処方法についてメモしておきます。

事象

    「**.ttl」ファイルをダブルクリックして実行する以下の様に「無効なホスト」と表示される。

原因

    ttlファイルに紐付いている実行ファイルへTeraTerm起動用の「ttermpro.exe」が指定されている。

対応方法

ttlファイル用の実行ファイルを「ttpmacro.exe」へ変更します。

  1. 実行したいttlを右クリックして「プログラムから開く」⇒「既定のプラグラムを選択」を選択します。
  2. 「参照」ボタンを選択してTeraTermのインストールフォルダ内にある「ttpmacro.exe」を選択します。
  3. 後は「OK」ボタンを選択すれば「ttpmacro.exe」でttlファイルが実行されるようになります。