Microsoft SQL Serverをシングルユーザモードで起動できないときの対処③

参考にしたMicrosoftのguideは以下です。

https://learn.microsoft.com/ja-jp/sql/relational-databases/backup-restore/restore-the-master-database-transact-sql?view=sql-server-ver16

Could not open a connection to SQL Server [53]

シングルユーザモードで起動出来たので意気揚々とアクセスしようとすると、このエラーに。これの原因判明は結構苦戦しました…。

何が起こってるのか

原因が二つあります。これ、結構気を付けないと危ない気がするポイントがあるので長文になります。ご容赦ください。


まず、1つ目は-Sオプションでインスタンス名を指定するのが間違いです。
そして2つ目はMSSQLSERVERがTCP/IP通信を受け付けてません。

以下に手順やコマンド実行の流れを具体的に書いていきます。

インスタンス名を指定するのが間違い、というのは恐らくMSSQLをシングルユーザモードで起動する際に、オプションsでMSSQLSERVERと書いたので、同じノリだろうと指定したことが良くなかったです。ちゃんとリファレンスを見ましょうね…。(下記参考のこと)

https://learn.microsoft.com/ja-jp/sql/tools/sqlcmd/sqlcmd-connect-database-engine?view=sql-server-ver16

そして、-Sオプションの引数が間違っていたことを理解し、「じゃあ自分のコンピュータ名を入力すればいいのだな」と以下のようなコマンドで無事ログイン出来た方、ちょっと待ってください。
※ちなみに同じループバックアドレスである127.0.0.1ではアクセスできません。何故か、というのはおまけに書いておきます。

SQLCMD -S localhost -E -d master

それ、ホントに対象のインスタンスですか?

localhostだけ入力すると、SQLCMDは1433のポート番号でMSSQLへアクセスするはずです。1433はMSSQLのデフォルトのポートですが、複数インスタンスがあったら…?
上記を考えた場合、コマンドは以下のようにしないといけないはずです。

SQLCMD -S localhost,<対象インスタンスのポート番号> -E -d master

はい、アクセスできませんよね。
これが2つ目の原因です。
デフォルトではMSSQLのTCP/IP通信の設定はオフになっています。
 ※Standard EditionとEnterprise Edtionは除く
なので、ポート指定での通信では繋がらないのです。
MSSQLの構成マネージャを開き、SQL Server Network Configuration ⇒ Protocols for <対象のインスタンス名>
の中にあるTCI/IPを右クリックでEnableにしましょう。
警告が出ますのでOKして進んでください(MSSQLの再起動をしてね、という警告です。案内に従って、設定が終わったら再起動してください)

これでポート指定でも繋がるようになります。

なお、アクセスしたいインスタンスがどのポートを利用しているか、というのは、今有効にしたTCP/IPを再度右クリック ⇒ プロパティ ⇒ IP Addressesタブ
のスクロールを一番下に持って行って、IPALLで指定されているポートを確認することで確認できます。

ちなみに、「言われた通りにやったのに繋がらない!」って方も居るかもしれません。その場合は、MSSQLSERVERがインストールされていないサーバやクライアントからアクセスしていることが想定されます。
FWの穴開けで対象のポートが許可されているかを確認してください。

おまけ

SQLCMDコマンドを実行する際に、「自分のコンピュータ名を指せば良いのか」と127.0.0.1を引数として打ち込んだ方。考えは間違ってないですが、アクセス出来なかったと思います。
何故かというと、2つ目の原因と同じです。通信が許可されてないんです。「え?でもlocalhostだとアクセスできるじゃん」って思った方。正しいです。
localhostと127.0.0.1では使われる通信方法が違うんです。

localhost:ソケットファイルを使用した接続

127.0.01:TCP/IPを使用した接続

ということです。サーバ内部の通信だと、localhostを使ったほうが高速にアクセスできるようですヨ。

今回は以上です。

この記事が気に入ったらサポートをしてみませんか?