SQL Serverの管理をまかされたけれど、SQL Serverって難しそうで何だかよく分からない。そんなビギナー管理者に贈るQA連載開始! まずはSQL Serverがインストールされているかどうか確認するところから始めよう。
Q1 ■ SQL Serverがインストールされているかどうかを調べるには?
Q2 ■ SQL Serverがインストールされている場所を調べるには?
Q3 ■ SQL Serverのインスタンスとは?
Q4 ■ 複数のインスタンスがあるかどうか調べるには?
Q5 ■ インストール済みのSQL Serverをレジストリで確認するには?
Q6 ■ インストール済みのSQL ServerをGUIツールで確認するには?
今回から始まるこの連載では、SQL Serverシステムの管理方法について、主にビギナー管理者向けのトピックについて取り上げる。バリバリのSQL Server管理者ではなく、どちらかというとSQL Serverについてはよく知らないし、データベースについてもそれほど造詣の深くないシステム管理者に向けて、SQL Serverシステムを管理するための情報を提供する。
現在ではさまざまなデータをSQL Serverをはじめとするデータベース・システム上に保存することが少なくない。ちょっとした社内の業務用アプリケーションであっても、最近ではデータベース・システムに情報を集約して活用している。この結果、SQL Serverの利用シーンや重要性はますます増加している。SQL Serverシステムが止まったり、パフォーマンスが大幅に低下したりすると、たとえ社内用途であっても、業務に甚大な影響を与えることになる。システム管理者にとっては、SQL Serverシステムの管理も重要な業務の1つである。
SQL Serverもコンピュータ・システムの一部である以上、ある程度のメンテナンスは必要である。常日頃、正常に動作しているか、パフォーマンスは問題ないか確認し、ディスクの空き容量が不足したり、エラー・ログがあふれたりしている場合は、原因を調査して対応したり、必要なら新しいシステムへの移行を考えるなどの対策が必要だ。
とはいえ、SQL Serverはそれ自体が非常に大規模で複雑なシステムである。その性能を最大限発揮させたり、クラスタを組んで信頼性を高めるようなシステムを構築したりしようとすると、SQL Serverやデータベース・システムに対する深い理解が必要となる。Windowsのファイル・サーバなどのように、GUIのツールを使って操作していれば、「それなりに」「なんとなく」うまく動作するというものでもない。SQL Serverを利用するアプリケーションがどのように動作しているかといったことも知っていなければならないし、時にはSQLのコマンド(SQL文)なども使ってシステムを調べるといった対応も必要になるだろう。本来ならばアプリケーションを作成/導入したSEやプログラマなどが対応すべきことでも、ハードウェアの管理者(日常の管理業務を担当する管理者)が対応しないといけないかもしれない。だがSQL Serverを一から全部マスターするには時間も費用もかかるし、特に専任のデータベース技術者でもなければそのような技術を習得するのは困難である。
そこで本連載ではSQL Serverシステムの管理業務について、ビギナー管理者向けに、その内部にはあまり立ち入ることなく、最低限の管理ができるようになることを目標として、Q&A形式で解説する。SQL Serverシステムの状態の把握や設定、稼働状況の確認、パッチなどの適用、バックアップやリストア、新システムへの移行など、システム管理者として最低限の操作ができるようになることを目標としたい。
A:「SQL Server 構成マネージャー」を使うか、管理ツールがインストールされていない場合はSQLという文字列が含まれているサービス名を検索してみる。
SQL Serverがインストールされているシステムを管理するために最初に行うべきことは、そもそもシステムにSQL Serverがインストールされているかどうか、そして稼働しているかどうかを調べることである。SQL Serverがインストールされているかどうかすら分からないと、何も管理できない。例えば10年ほど前、SQL SlammerというSQL Serverに感染するウイルスが爆発的に発生したが(関連記事参照)、そもそもSQL Serverがインストールされているかどうかすら把握されていないシステムが大量に存在したため、被害が拡大した。このような事態を防ぐためにも、システムにSQL Serverがインストールされているか、パッチを当てるにしても、そもそも何が(どのバージョンが)インストールされているかを把握しておくのは重要である。ちなみに、SQL Server 2000やMSDE(SQL Server 2000 Desktop Engine)のサポート期限切れは2013年4月9日である。
SQL Serverがインストール済みかどうかを調べるにはいくつか方法がある。一般的なアプリケーションやWindowsコンポーネントの例などから連想すると、次のような手段が考えられる。
だがSQL Serverの場合は、インストール方法や設定方法などによって、さまざまな異なった状態でインストールされていることがあるので、これらの方法ではインストールされているかどうかを確実に知ることはできない。例えば、SQL Serverをデフォルトとは異なる場所にインストールすることは可能なのでファイル検索では見逃す可能性があるし、SQL Serverのネットワーク機能が無効になっているとリモートから接続して確認することもできない。それに、そもそも管理ツールが同時にインストールされているという保証もない(管理ツールなしでSQL Serverをインストールすることも可能)。
そこでSQL Serverの場合は、これらの方法ではなく、次のような手段でインストールを確認するとよい。
ここでは、まずサービスの状態をチェックしてSQL Serverのインストールを調べてみよう。2.と3.についてはそれぞれの項目を参照していただきたい。サービスやレジストリを調べる方法は、SQL Serverのサービスに(管理ツールやアプリケーションなどで)接続することなく調査できる。
*SQL Serverのコンポーネント
SQL Serverを構成するコンポーネントには、データベース・エンジンのほかに、管理ツールやレポート機能、分析ツールほか、さまざまなものがあるが、ここではデータベース・エンジンの本体(sqlservr.exe)に相当するサービスを調査するものとする。それ以外の関連サービスについては今後解説する。
SQL Serverをインストールすると、データベース・エンジンの本体のほかに、いくつか関連するサービスが必ず登録・実行され、アプリケーションからのサービス呼び出しを待ち受ける状態になる。場合によっては、通常は停止していて、要求があったときにサービスが起動するように設定されていることもあるが、基本的にはサービスとして登録され、サービスが「実行」状態になっている。
SQL Serverサービスの稼働状態を調べるにはいくつか方法があるが、簡単なのがコマンド・プロンプト上で「net start」コマンドか、「sc.exe」コマンドを使って確認するとよい。scコマンドはWindows XP/Windows Server 2003以降で利用できる、サービスの状態を調査したり、その設定を変更するためのコマンドである(関連記事も参照)。scコマンドには複数のサブコマンドがあるが、システムに登録されているサービスの一覧を取得したり、その詳細を表示させたりするには「sc query」や「sc queryex」コマンドを実行すればよい。これらのコマンドを引数なしで実行すると現在実行中のサービスの一覧が表示される。SQLに関するサービスには、名前の一部に「SQL」という文字列が含まれているので、findコマンドと組み合わせて、これだけを検索する。net startコマンドでも同様に利用できるが、得られる情報が少ないので、scコマンドも覚えておくと便利である。
※例1。SQL Server 2008 R2をインストールした、Windows Server 2008 R2上で実行した結果
C:\>sc query | more ……sc queryコマンドを実行
SERVICE_NAME: AeLookupSvc ……サービスの名前
DISPLAY_NAME: Application Experience ……サービスの表示名
TYPE : 20 WIN32_SHARE_PROCESS ……タイプ
STATE : 4 RUNNING ……実行状態
(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
……(非常に大量に出力されるので以下省略)……
C:\>sc query | find /i "sql" ……scの実行結果から「sql」を含む文字列だけを検索
DISPLAY_NAME: SQL Server Integration Services 10.0
SERVICE_NAME: MSSQLFDLauncher
DISPLAY_NAME: SQL Full-text Filter Daemon Launcher (MSSQLSERVER)
SERVICE_NAME: MSSQLSERVER ……これがSQL Serverの本体
DISPLAY_NAME: SQL Server (MSSQLSERVER) ……表示名
SERVICE_NAME: SQLSERVERAGENT
DISPLAY_NAME: SQL Server Agent (MSSQLSERVER)
SERVICE_NAME: SQLWriter
DISPLAY_NAME: SQL Server VSS Writer
C:\>
※例2。別のシステム上での実行例。環境は同じくWindows Server 2008 R2+SQL Server 2008 R2。さきほどよりサービスが多い
C:\>sc query | find /i "sql"
DISPLAY_NAME: SQL Server Integration Services 10.0
SERVICE_NAME: MSSQLFDLauncher
DISPLAY_NAME: SQL Full-text Filter Daemon Launcher (MSSQLSERVER)
SERVICE_NAME: MSSQLSERVER ……これがSQL Serverの本体
DISPLAY_NAME: SQL Server (MSSQLSERVER) ……表示名
SERVICE_NAME: MSSQLServerOLAPService
DISPLAY_NAME: SQL Server Analysis Services (MSSQLSERVER)
DISPLAY_NAME: SQL Server Reporting Services (MSSQLSERVER)
SERVICE_NAME: SQLBrowser
DISPLAY_NAME: SQL Server Browser
SERVICE_NAME: SQLSERVERAGENT
DISPLAY_NAME: SQL Server Agent (MSSQLSERVER)
SERVICE_NAME: SQLWriter
DISPLAY_NAME: SQL Server VSS Writer
※例3。別のシステム上での実行例。環境はWindows Server 2008 R2+SQL Server 2008 R2 Express Edition。
C:\>sc query | find /i "sql"
SERVICE_NAME: MSSQL$SQLEXPRESS ……これがSQL Serverの本体
DISPLAY_NAME: SQL Server (SQLEXPRESS) ……表示名
SERVICE_NAME: MSSQLFDLauncher$SQLEXPRESS
DISPLAY_NAME: SQL Full-text Filter Daemon Launcher (SQLEXPRESS)
SERVICE_NAME: ReportServer$SQLEXPRESS
DISPLAY_NAME: SQL Server Reporting Services (SQLEXPRESS)
SERVICE_NAME: SQLWriter
DISPLAY_NAME: SQL Server VSS Writer
最初の例では大量に出力されるので、検索しづらい。そこで検索結果のうち、findコマンドで「SQL」という文字列を含むものだけを抽出している(「find /i」は大文字/小文字の違いを無視して比較するコマンド)。例1では結果が9行表示されているが(サービス名と表示名がペアになっているので、実際のサービスは5つ)、SQL Serverのデータベース・エンジンの本体は、「MSSQLSERVER」や「MSSQL$SQLEXPRESS」というサービスに相当する(「MSSQL$〜」から始まるサービス名)。「SQL Server Integration Services」や「SQL Full-text Filter Daemon Launcher」「SQL Server Agent」「SQL Server VSS Writer」などはSQL Serverエンジン以外の関連サービスなので、とりあえず気にしないでよい(これらのサービスについては今後解説予定)。
結局、上のシステムの例では、「SQL Server (MSSQLSERVER)」や「SQL Server (SQLEXPRESS)」という表示名のサービスが存在するので、このシステムにはSQL Serverがインストールされていることが分かる。括弧内は「インスタンス名」である(インスタンス名についてはQ3参照)。
もしインストールされていなければ、次のように何も表示されない。
C:\>net stop "mssql$sqlexpress" ……サービスを停止してみる
SQL Server (SQLEXPRESS) サービスを停止中です.
SQL Server (SQLEXPRESS) サービスは正常に停止されました。
C:\>sc query | find /i "sql" ……SQLサービスを探してみる
SERVICE_NAME: ReportServer$SQLEXPRESS
DISPLAY_NAME: SQL Server Reporting Services (SQLEXPRESS)
SERVICE_NAME: SQLWriter
DISPLAY_NAME: SQL Server VSS Writer
……「SQL Server (SQLEXPRESS)」サービスは見つからない。つまりインストールされていない
だが、表示されないからといって、SQL Server(のサービス)がインストールされていないとは限らない。単にサービスが停止しているだけかもしれないからだ。sc queryは、デフォルトでは実行中のサービスしか表示しない(net startコマンドも同様)。そこで停止中のサービスも含めてすべてのサービスを検索するには、「sc query」の代わりに、「sc query state= all」を実行する(「state=」と「all」の間を空白で区切ること)。
C:\>sc query state= all | find /i "sql" ……停止中のサービスも表示させる
SERVICE_NAME: MSSQL$SQLEXPRESS ……見つかったSQLサービス名
DISPLAY_NAME: SQL Server (SQLEXPRESS) ……見つかったSQLサービスの表示名
SERVICE_NAME: MSSQLFDLauncher$SQLEXPRESS ……以下は関連サービス。停止中のものも表示されている
DISPLAY_NAME: SQL Full-text Filter Daemon Launcher (SQLEXPRESS)
SERVICE_NAME: MSSQLServerADHelper100
DISPLAY_NAME: SQL Active Directory Helper Service
SERVICE_NAME: ReportServer$SQLEXPRESS
DISPLAY_NAME: SQL Server Reporting Services (SQLEXPRESS)
SERVICE_NAME: SQLAgent$SQLEXPRESS
DISPLAY_NAME: SQL Server Agent (SQLEXPRESS)
SERVICE_NAME: SQLBrowser
DISPLAY_NAME: SQL Server Browser
SERVICE_NAME: SQLWriter
DISPLAY_NAME: SQL Server VSS Writer
Copyright© Digital Advantage Corp. All Rights Reserved.