今回は、SQL Serverの名前付きインスタンスへの接続方法についてお話していきたいと思います。
名前付きインスタンスに接続したい境遇の方は。ぜひご参照いただければと思います。
今回は、すでに名前付きインスタンスをサーバーもしくはローカルPCにインストールした状態から話を進めていきたいと思います。
SQL Serverの名前付きインスタンスとは?
SQL Serverは、一つのサーバーに複数のインスタンスをインストールすることが可能です。
SQL Serverのインスタンスは、以下の2種類に分けることができます。
通常であれば、「規定のインスタンス」をインストールすることになると思います。
しかし、場合によっては一つのサーバーに複数のインスタンスをインストールしたい場合もあるかと思います。
その場合は、規定にインスタンスに加えて名前付きインスタンスを別途インストールすることになります。
これから名前付きインスタンスの接続方法について順番にお話していきますが、「MSSQLSERVER01」が名前付きインスタンスの名前ということで話を進めていきます。
ローカルにインストールした名前付きインスタンスへの接続方法
最初はローカルにインストールした名前付きインスタンスへの接続方法についてお話したいと思います。ローカルで検証したりする場合はこの構成を使用していると思います。
実は、ローカルにインストールした名前付きインスタンスに接続する場合には、特別な設定は必要ありません。接続するときに指定するSQL Serverの名前が正しければ、接続することができます。たとえば、以下のように指定します。
このように、[サーバーの名前]\[名前付きインスタンス名]という形式で名前付きインスタンスを指定して接続できます。また、名前の形式は上記以外にもたくさんありますので詳細はMS DOCをご参照いただければと思います。かなり色々な名前の形式が用意されていますので、一度目を通していただければと思います。
TCP/IPでの名前付きインスタンスへの接続方法
ローカルにインストールした名前付きインスタンスは、上記でみた通りSQL Serverの名前を正しく指定してあげることで接続することができます。実は、上記のローカルにインストールした名前付きインスタンスへ接続するときの接続プロトコルは、「共有メモリ」と呼ばれるものを使っていました。既定では、この「共有メモリ」が接続プロトコルで使用されるようです。
この「共有メモリ」を指定して接続する場合には、特別な設定も必要ないので便利ですが、これはローカルのSQL Serverに同じくローカルのクライアントから接続する場合にのみ使用できるものです。
通常は、サーバーとクライアントは別々となることが一般的だと思います。そのときに使用できる接続プロトコルである「TCP/IP」で接続する方法についても触れたいと思います。「TCP/IP」で接続したい場合は、設定変更が必要になりますので以下からお話を進めていきたいと思います。
それでは、まずは「SQL Server構成マネージャー」と呼ばれるツールを開きます。
SQL Server 2019であれば、Ctrl + Rを押下し「ファイル名指定して実行」を開いて以下のコマンドを実行することで開くことができます。
最初に、「SQL Serverネットワークの構成」を見てみます。
以下では、規定のインスタンスである「MSSQLSERVER」と名前付きインスタンスの「MSSQLSERVER01」の二つのインスタンスがあります。
それでは、名前付きインスタンス「MSSQLSERVER01のプロトコル」を選択します。すると、以下の通り接続プロトコルが表示されます。
「TCP/IP」は、DeveloperエディションやExpressエディションではデフォルトでは無効になっているみたいです。そのため、無効になっている場合は「TCP/IP」を選択し、右クリックで「有効にする」を選択します。
上記設定を反映するためには、SQL Serverの再起動が必要なので再起動します。
再度、SQL Serverの構成マネージャーの名前付きインスタンスの接続設定のプロトコル画面を開き「TCP/IP」をダブルクリックします。
プロパティ画面が表示されると思いまので、IPアドレスタブの一番下の「IPALL」欄を確認します。
そこには、TCP動的ポートに番号が記載されています。実はこれが、この名前付きインスタンスへ接続するときに使用するポート番号になります。
以下の画面では、50055ですね。
規定のインスタンスは、デフォルトでサーバーの待ち受けポートはTCP1433が割り振られますが、名前付きインスタンスに関しては動的に決定する機構をSQL Server側で持っているようです。
それでは、SSMSで名前付きインスタンスへ「TCP/IP」で接続してみましょう。
今回は、「接続プロトコル」を明示的に「TCP/IP」を指定して試します。
以下のようにサーバーの名前を指定します。これは、[サーバーの名前]\[名前付きインスタンス名],[ポート番号]という名前の形式になります。先ほどとは異なり、ポート番号をサーバーの名前に指定してあげることで名前付きインスタンスへ「TCP/IP」で接続することができます。
TCP/IPでの名前付きインスタンスへの接続方法②
上記までで、TCP/IPで名前付きインスタンスへ接続することができました。
ただし、先ほどのポート番号指定には問題があります。ポート番号はサーバーが再起動するたびに変更となるため、そのたびにポート番号を調べなければならないためとても面倒です。
実は、この面倒な作業を省略することができます。それが、「SQL Server Browser」サービスの機能です。
SQL Server Browserは、名前付きインスタンスを使う時だけ使用するサービスになります。このサービスを有効化しておけば、名前付きインスタンスへ接続を行うクライアントに対してTCPポート番号を教えてあげることができます。つまり、先ほどのようにポート番号をサーバー名に指定しなくても名前付きインスタンスの名前だけ指定してあげれば接続することができるようになるということです。
SQL Server Browserサービスを有効化して、ポート番号を省略した名前の形式で接続してみましょう。
先ほどのように接続プロトコルは、明示的に「TCP/IP」を指定して以下のような名前の形式で接続できました。
補足(Windowsファイアウォールの設定)
因みに、TCP/IPでローカルではなく別のマシンのSQL Serverに接続するためには通常はWindowsファイアウォールの設定変更も必要になると思いますので、ここで補足で説明してみたいと思います。
デフォルトでは、Windowsファイアウォールが有効化されておりSQL Serverの動的ポートは接続できないようになっていると思います。そのため、これを許可する設定変更をしていきます。
まず、「コントロールパネル」-「システムとセキュリティ」-「Windows Defender ファイアウォール」を選択します。
画面左側の「詳細設定」を選択します。
以下のような画面が開くと思いますので、こちらも画面左側の「受信の規則」を右クリック、「新しい規則」を押下します。
規則の種類では、「ポート」を選択、「次へ」を押下します。
プロトコルおよびポートでは、「UDP」を選択し、「特定のローカルポート」で「1434」を入力します。
このポート番号は、SQL Server Browserで使用するポートのようですね。これを解放してあげます。
操作では、「接続を許可する」を選択します(デフォルトのまま)。
プロファイルでは、任意の適用場所を選択します。今回は、すべてチェックを付けておきました。使用しているネットワークの状況に応じてチェックをしてください。
名前では、この設定の任意の名前を記載してください。
記載が完了しましたら、「完了」をクリックします。これでファイアウォールの設定は完了です。
おわりに
いかがでしたでしょうか。もしかしたら、名前付きインスタンスへ接続する機会はそこまで多くないのかもしれません。ただ、そのような状況になってもすんなり理解できて作業できるように準備しておきたいなぁと思いました。
話は変わりますが、この業界に入った当初は何でもできるようになりたい一心から色々と手を出してましたが、それはそれで浅い知識になることが多く、なんでもできるエンジニアになることはとても大変だなぁと思いました。
狭く深くでやってけばどこかで仕事があるかもなぁとは思いますが、やはり狭すぎても意味がないような気もして、そこらへんの調節はとても難しいです。。。
色々な人たちにそこらへん、どのように考えているか聞いてみたいなぁと漠然ながら最近思います。
それでは最後までお読みいただきありがとうございました。今回はこの辺で失礼いたします。