本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は、「起動ログ“ERRORLOG”の見方」を解説します。
本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由を理解し、正しく対処するためのノウハウを紹介していきます。今回より数回にわたって、「SQL Serverは、起動時にどんな動きをしているのか」の理解を深めていきましょう。
まず、「ログを確認して、正しく対処する」の基礎を踏まえ、SQL Serverの起動ログ「ERRORLOG」の見方を解説します。
SQL Serverは、規定値のままインストールするとOSの起動と共にサービスが起動し、クライアントから利用可能になります。起動時のトラブルは、ユーザーまたはアプリケーションから見て「つながらない」という1つの現象に見えることがほとんどです。
SQL ServerはWindowsから見ると、「サービスアプリケーション(以下、サービスと呼びます)」として動作します。ここでは「Windowsにおけるサービス」を「Windows上で動作し、ユーザーに対して何らかの機能を長時間提供し続けるプログラム」と定義します。Windowsのサービスの画面からは、以下のようにSQL Serverのサービスが見えています(図1)。
ずらりと並ぶサービスのうち、「SQL Full-text Filter Daemon Launcher」から「SQL Server エージェント(MSSQLSERVER)」までがSQL Serverに関連しています。ただしこの画面は、Windows上でプログラムが実行されている/登録されていることを示すもので、実際にサービスが正しく動作しているかは別の話です。このことを理解すれば、「なぜつながらないのか」の解決策を導けます。
SQL Serverは、起動後におおよそ以下の順序でクライアントから接続できるまでの準備をします。厳密には、複数のスレッドが動作し、平行して処理を進めますが、ここでは、実際に何をしているのかを理解すれば大丈夫です。このときに起動したSQL Serverのプロセスとメモリ空間を、「インスタンス」と呼びます。
(1)Windowsからサービスが起動される
(2)レジストリ(*1)から必要な情報を取得してプロセスを起動する
(3)「masterデータベース」(*2)を起動し、必要な情報を読み取る
(4)クライアント接続できるようにTCP/IPや「名前付きパイプ」(*3)の待ち受けを開始する
(5)一部のシステムデータベースとユーザーデータベースを並列に起動する
(6)データ整合性を保つためにデータベースのリカバリーを行う
(7)TEMPDBデータベースの再作成とMODELデータベースの起動を行う
*1:レジストリは、OSが持つ設定情報を格納する仕組みです。SQL Serverはレジストリから起動に必要なmasterデータベースの場所やインスタンス名などを読み込みます
*2:masterデータベースにはインスタンスに含まれる各データベースの内容や設定値が入っています
*3:TCP/IPや名前付きパイプは、SQL Serverとアプリケーションが通信するためのプロトコルです
SQL Serverには、起動してから停止するまでの動作を記録している「ERRORLOG」というログがあります。そのログの内容と、上記の起動までの流れを見比べてみましょう。
Copyright © ITmedia, Inc. All Rights Reserved.