SQL Server on Linux のトラブルシューティング
適用対象: SQL Server - Linux
この記事では、Linux 上または Linux コンテナー内で実行する SQL Server のトラブルシューティングを行う方法について説明します。 SQL Server on Linux のトラブルシューティングを行う場合は、サポートされている機能と既知の制限事項を必ず確認してください。
- Linux 上の SQL Server 2022 のリリース ノート
- Linux 上の SQL Server 2019 のリリース ノート
- Linux 上の SQL Server 2017 のリリース ノート
よく寄せられる質問に対する回答については、「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>
。次のように、vim や cat などの 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 システム データを削除する可能性があるため、このプロセスは危険です。
その後、ユーザー データベースをインスタンスにアタッチする必要があります。 また、次のような、システム データベースに格納されているその他の情報も削除されます。
- データベースのマスター キー (DMK) 情報
master
に読み込まれたすべての証明書- SA ログインのパスワードです。
msdb
からのジョブ関連情報msdb
からのデータベース メール情報sp_configure
オプション
証明書と秘密キーもバックアップされていない限り、Transparent Data Encryption (TDE) を使って暗号化されたユーザー データベースを再アタッチすることはできません。
次の手順は、その影響を理解している場合にのみ使用してください。
SQL Server データベース エンジンの停止
sudo systemctl stop mssql-server
force-setup
パラメーターを指定して sqlservr を実行します。sudo -u mssql /opt/mssql/bin/sqlservr --force-setup
起動に関する将来の問題を防ぐため、SQL Server on Linux は常に
mssql
ユーザーで起動する必要があります。"復旧が完了した" というメッセージが表示されたら、Ctrl + C キーを押します。 これにより、SQL Server がシャットダウンされます。
SA パスワードを再構成します。
sudo /opt/mssql/bin/mssql-conf set-sa-password
SQL Server を起動してサーバーを再構成します。これには、ユーザー データベースの復元や再アタッチも含まれます。
sudo systemctl start mssql-server
パフォーマンスの向上
データベースの設計、ハードウェア、ワークロードの要求など、多くの要因がパフォーマンスに影響を与えます。 パフォーマンスを向上させたい場合は、最初に記事「パフォーマンスのベスト プラクティスと SQL Server on Linux の構成ガイドライン」のベスト プラクティスを確認してください。 次に、パフォーマンスの問題のトラブルシューティングに使用できるツールを調べます。
一般的な問題
リモート SQL Server インスタンスに接続できません。
「接続エラーのトラブルシューティング」セクションの説明を参照してください。
次のエラー メッセージが表示されます。
ERROR: Hostname must be 15 characters or less.
これは既知の問題であり、SQL Server パッケージをインストールしようとしているコンピューターの名前が 15 文字を超えている場合に発生します。 現在、コンピューターの名前を変更する以外に、回避策はありません。 これを行うには、
/etc/hostname
と/etc/hosts
の両方を編集し、ホスト名を変更し、各ファイルを保存し、コンピューターを再起動します。システム管理 (SA) のパスワードをリセットする必要があります。リセットすると、SQL Server サービスが一時的に停止します。
システム管理者 (SA) のパスワードを忘れた場合、または何らかの理由でそれをリセットする必要がある場合は、次の手順のようにします。
ホスト ターミナルにログインして、次のコマンドを実行し、画面の指示に従って SA パスワードをリセットします。
sudo systemctl stop mssql-server sudo /opt/mssql/bin/mssql-conf setup
ログイン パスワードに特殊文字が含まれていると、エラーまたはログイン失敗が発生する。
SQL Server のログイン パスワードで一部の文字を使用する場合、それを Linux コマンド ラインで使うときに、円記号でエスケープすることが必要になる場合があります。 たとえば、ドル記号 ($) は、ターミナル コマンド/シェル スクリプトで使うときは常に、エスケープする必要があります。
機能しません:
sudo sqlcmd -S myserver -U sa -P Test$$
次の場合は動作します。
sqlcmd -S myserver -U sa -P Test\$\$
関連するコンテンツ
ヘルプの参照
- SQL に対するご意見:SQL Serverの改善に関するご提案がある場合
- Microsoft Q & A (SQL Server)
- DBA Stack Exchange (tag sql-server):SQL Server に関する質問
- スタック オーバーフロー (tag sql-server):SQL 開発に関する質問とその回答
- Reddit:SQL Server に関する一般的なディスカッション
- MicrosoftSQL Serverライセンス条項および情報
- 法人のお客様向けサポート オプション
- Microsoft へのお問い合わせ
- その他の SQL Serverのヘルプとフィードバック
SQL ドキュメントへの投稿
SQL コンテンツを自分で編集できることはご存じですか。 これにより、ドキュメントが改善されるだけでなく、ページの共同作成者としてもクレジットされます。
詳細については、「SQL Server のドキュメントに投稿する方法」を参照してください。