SQL Server on Linux のトラブルシューティング

適用対象:SQL Server - Linux

この記事では、Linux 上または Linux コンテナー内で実行する SQL Server のトラブルシューティングを行う方法について説明します。 SQL Server on Linux のトラブルシューティングを行う場合は、 SQL Server 2017 on Linux のリリース ノートで、サポートされている機能と既知の制限事項を必ず確認してください。

よく寄せられる質問に対する回答については、「SQL Server on Linux に関する FAQ」を参照してください。

## 接続に関するエラーのトラブルシューティング

Linux SQL Server インスタンスに接続するのが困難な場合は、いくつかの点を確認する必要があります。

  • localhost を使ってローカルに接続できない場合は、代わりに IP アドレス 127.0.0.1 を使ってみてください。 localhost がこのアドレスに適切にマップされていない可能性があります。

  • クライアント コンピューターからサーバー名または IP アドレスに到達できることを確認します。

    ヒント

    Ubuntu コンピューターの IP アドレスを確認するには、次の例のように ifconfig コマンドを実行します。

    sudo ifconfig eth0 | grep 'inet addr'
    

    Red Hat では、次の例のように ip addr コマンドを使用できます。

    sudo ip addr show eth0 | grep "inet"
    

    この手法の 1 つの例外は、Azure VM に関するものです。 Azure VM の場合は、Azure portal で VM のパブリック IP アドレスを検索します。

  • 該当する場合は、ファイアウォールで SQL Server ポート (既定値は 1433) が開かれていることを確認します。

  • Azure VM の場合は、既定の SQL Server ポートに対するネットワーク セキュリティ グループ規則があることを確認します。

  • ユーザー名とパスワードで、入力ミス、余分なスペース、または大文字と小文字の間違いがないことを確認します。

  • 次の例のように、サーバー名と共にプロトコルとポート番号を明示的に設定してみます (例: tcp:servername,1433)。

  • ネットワーク接続の問題により、接続エラーとタイムアウトが発生することもあります。 接続情報とネットワーク接続を確認してから、再度接続してみます。

SQL Server サービスを管理する

次のセクションでは、SQL Server Docker コンテナーの実行を管理する方法を示します。 Linux 用のサービスを管理するには、「Linux で SQL Server サービスを開始、停止、再起動する」を参照してください。

SQL Server Docker コンテナーの実行を管理する

次のコマンドを実行して、作成された最新の SQL Server Docker コンテナーの状態とコンテナー ID を取得できます (ID は CONTAINER ID 列にあります)。

sudo docker ps -l

必要に応じて、次のコマンドを使って、SQL Server サービスを停止または再起動することができます。

sudo docker stop <container ID>
sudo docker restart <container ID>

ヒント

Docker のトラブルシューティングのヒントについては、「SQL Server Docker コンテナーのトラブルシューティングを行う」を参照してください。

ログ ファイルにアクセスする

Linux とコンテナーのどちらのインストールでも、SQL Server データベース エンジンは /var/opt/mssql/log/errorlog ファイルにログします。 このディレクトリを参照するには、スーパーユーザー モードである必要があります。

インストーラーのログは次の場所にあります: /var/opt/mssql/setup-<time stamp representing time of install>。次のように、vimcat などの UTF-16 互換ツールを使って、errorlog ファイルを参照できます。

sudo cat errorlog

好みに応じて、次のコマンドでファイルを UTF-8 に変換して、more または less で読むこともできます。

sudo iconv -f UTF-16LE -t UTF-8 <errorlog> -o <output errorlog file>

拡張イベント

拡張イベントのクエリは、SQL コマンドを使用して実行できます。 詳細については、拡張イベントに関する記事を参照してください。

クラッシュ ダンプ

Linux のログ ディレクトリでダンプを探します。 /var/opt/mssql/log ディレクトリで、Linux コア ダンプ (.tar.gz2 拡張子) または SQL ミニダンプ (.mdmp 拡張子) を調べます。

たとえば、コア ダンプを表示する場合:

sudo ls /var/opt/mssql/log | grep .tar.gz2

SQL ダンプの場合は、次のスクリプトを使用します。

sudo ls /var/opt/mssql/log | grep .mdmp

最小構成またはングル ユーザー モードで SQL Server を起動する

最小構成モードで SQL Server を起動する

このモードは、構成値によりサーバーが起動できないとき (たとえば使用できるメモリが不足している場合) などに便利です。

sudo -u mssql /opt/mssql/bin/sqlservr -f

シングル ユーザー モードで SQL Server を起動する

時には、起動オプション -m を使用して、SQL Server のインスタンスをシングル ユーザー モードで起動しなければならない場合があります。 詳細については、起動パラメーターに関する記事を参照してください。 たとえば、サーバーの構成オプションを変更したり、破損した master データベースやその他のシステム データベースを復旧したりする必要がある場合があります。

たとえば、シングル ユーザー モードで SQL Server を起動するには、次のスクリプトを使用します。

sudo -u mssql /opt/mssql/bin/sqlservr -m

次のスクリプトは、sqlcmd を使用してシングル ユーザー モードで SQL Server を起動します。

sudo -u mssql /opt/mssql/bin/sqlservr -m sqlcmd

起動に関する将来の問題を防ぐため、SQL Server on Linux は常に mssql ユーザーで起動する必要があります。 例: sudo -u mssql /opt/mssql/bin/sqlservr [STARTUP OPTIONS]

誤って別のユーザーで SQL Server を起動した場合は、systemd を使用して SQL Server を起動する前に、SQL Server データベース ファイルの所有権をmssql ユーザーに変更する必要があります。 たとえば、/var/opt/mssql にあるすべてのデータベース ファイルの所有権を mssql ユーザーに変更するには、次のコマンドを実行します。

chown -R mssql:mssql /var/opt/mssql/

システム データベースを再構築する

最後の手段として、master および model データベースを既定のバージョンに再構築することもできます。

警告

ユーザー データベースに関する情報を含めて (ただし、ユーザー データベース自体は除く)、構成したすべての SQL Server システム データを削除する可能性があるため、このプロセスは危険です。

その後、ユーザー データベースをインスタンスにアタッチする必要があります。 また、次のような、システム データベースに格納されているその他の情報も削除されます。

  • データベースのマスター キー情報
  • master に読み込まれたすべての証明書
  • SA ログインのパスワードです。
  • msdb からのジョブ関連情報
  • msdb からのデータベース メール情報
  • sp_configure オプション

証明書と秘密キーもバックアップされていない限り、Transparent Data Encryption (TDE) を使って暗号化されたユーザー データベースを再アタッチすることはできません。

次の手順は、その影響を理解している場合にのみ使用してください。

  1. SQL Server データベース エンジンの停止

    sudo systemctl stop mssql-server
    
  2. force-setup パラメーターを指定して sqlservr を実行します。

    sudo -u mssql /opt/mssql/bin/sqlservr --force-setup
    

    起動に関する将来の問題を防ぐため、SQL Server on Linux は常に mssql ユーザーで起動する必要があります。

  3. "復旧が完了した" というメッセージが表示されたら、Ctrl + C キーを押します。 これにより、SQL Server がシャットダウンされます。

  4. SA パスワードを再構成します。

    sudo /opt/mssql/bin/mssql-conf set-sa-password
    
  5. SQL Server を起動してサーバーを再構成します。これには、ユーザー データベースの復元や再アタッチも含まれます。

    sudo systemctl start mssql-server
    

パフォーマンスの向上

データベースの設計、ハードウェア、ワークロードの要求など、多くの要因がパフォーマンスに影響を与えます。 パフォーマンスを向上させたい場合は、最初に記事「パフォーマンスのベスト プラクティスと SQL Server on Linux の構成ガイドライン」のベスト プラクティスを確認してください。 次に、パフォーマンスの問題のトラブルシューティングに使用できるツールを調べます。

一般的な問題

  1. リモート SQL Server インスタンスに接続できません。

    接続エラーのトラブルシューティング」セクションの説明を参照してください。

  2. 次のエラー メッセージが表示されます。 ERROR: Hostname must be 15 characters or less.

    これは既知の問題であり、SQL Server パッケージをインストールしようとしているコンピューターの名前が 15 文字を超えている場合に発生します。 現在、コンピューターの名前を変更する以外に、回避策はありません。 これを行うには、/etc/hostname/etc/hosts の両方を編集し、ホスト名を変更し、各ファイルを保存し、コンピューターを再起動します。

  3. システム管理 (SA) のパスワードをリセットする必要があります。リセットすると、SQL Server サービスが一時的に停止します。

    システム管理者 (SA) のパスワードを忘れた場合、または何らかの理由でそれをリセットする必要がある場合は、次の手順のようにします。

    ホスト ターミナルにログインして、次のコマンドを実行し、画面の指示に従って SA パスワードをリセットします。

    sudo systemctl stop mssql-server
    sudo /opt/mssql/bin/mssql-conf setup
    
  4. ログイン パスワードに特殊文字が含まれていると、エラーまたはログイン失敗が発生する。

    SQL Server のログイン パスワードで一部の文字を使用する場合、それを Linux コマンド ラインで使うときに、円記号でエスケープすることが必要になる場合があります。 たとえば、ドル記号 ($) は、ターミナル コマンド/シェル スクリプトで使うときは常に、エスケープする必要があります。

    機能しません:

    sudo sqlcmd -S myserver -U sa -P Test$$
    

    次の場合は動作します。

    sqlcmd -S myserver -U sa -P Test\$\$
    

ヘルプの参照

SQL ドキュメントへの投稿

SQL コンテンツを自分で編集できることはご存じですか。 これにより、ドキュメントが改善されるだけでなく、ページの共同作成者としてもクレジットされます。

詳細については、「SQL Server のドキュメントに投稿する方法」を参照してください。