次の方法で共有


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

適用対象:SQL Server - Linux

この記事では、Linux 上または Linux コンテナー内で実行する SQL Server のトラブルシューティングを行う方法について説明します。 SQL Server 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 Linux コンテナーの実行を管理する方法を示します。 Linux 用のサービスを管理するには、「Linux で SQL Server サービスを開始、停止、再起動する」を参照してください。

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

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

sudo docker ps -l

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

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

ヒント

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

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

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

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

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

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

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

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

警告

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

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

  • データベースのマスター キー (DMK) 情報
  • master に読み込まれたすべての証明書
  • sa アカウントのパスワード
  • msdb からのジョブ関連情報
  • msdb からのデータベース メール情報
  • sp_configure オプション

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

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

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

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

    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
    

    注意事項

    パスワードは、SQL Server 既定のパスワード ポリシーに従う必要があります。 既定では、パスワードの長さは少なくとも 8 文字で、大文字、小文字、10 進数の数字、記号の 4 種類のうち 3 種類を含んでいる必要があります。 パスワードには最大 128 文字まで使用できます。 パスワードはできるだけ長く、複雑にします。

  5. SQL Server を起動してサーバーを再構成します。これには、ユーザー データベースの復元や再アタッチも含まれます。

    sudo systemctl start mssql-server
    

パフォーマンスの向上

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

一般的な問題

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

    記事「Linux で 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
    

    注意事項

    パスワードは、SQL Server 既定のパスワード ポリシーに従う必要があります。 既定では、パスワードの長さは少なくとも 8 文字で、大文字、小文字、10 進数の数字、記号の 4 種類のうち 3 種類を含んでいる必要があります。 パスワードには最大 128 文字まで使用できます。 パスワードはできるだけ長く、複雑にします。

  4. パスワードの中の特殊文字により、エラーまたはログイン失敗が発生する場合があります。

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

    • 機能しません:

      sudo sqlcmd -S myserver -U sa -P Test$$
      
    • 次の場合は動作します。

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

ヘルプを受ける

SQL ドキュメントへの投稿

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

詳細については、「Microsoft Learn ドキュメントを編集する」を参照してください。