2013年5月21日火曜日

SQL Server 2008 R2 SP2 ExpressへのJDBC接続でハマりかけた件

SQL Serverは有償版しか使ったことなかったのですが、ひょんなことから必要に迫られまして、
Windows 7 (64bit)へ無償のデータベース、SQL Server Expressをインストールしてみました。
JDBCを使って利用することを想定しています。

SQL Server 2012が出てる?
確かにそうなんですが、インストールした結果、DBを使うアプリ側が対応してなかったのです。
という訳で、2008なのです。インストールした感じは、2012も2008もほぼ変わりませんでした。

さて、まずはインストールです。
普通にDLしてインストールしていけば、使えるようになると思っていたのですが、意外と分かり難かったので、備忘録として書いてみます。


①なんか色々あるんだけどどれよ?

  最初見たのが、Microsoft® SQL Server® 2008 Express with Toolsというやつで、
  落としてみたんですがインストーラーが動きませんでした。
  OSの要件を確認したら以下でした。システム要件ちゃんと見ろよって話でしたね。

   Windows Server 2003 Service Pack 2, Windows Server 2008,
   Windows Vista, Windows Vista Service Pack 1,
   Windows XP Service Pack 2, Windows XP Service Pack 3

  サービスパックやら、R2やらが出ていまして、多分 2013.5.21 現在では以下の
  Microsoft® SQL Server® 2008 R2 SP2が最新。こいつはWindows 7もサポート対象のOSでした。
  http://www.microsoft.com/ja-jp/download/details.aspx?id=30438

  というわけでこいつを使うことにしました。

②インストーラーどれ使ったらいいのか分かり難い。
  よし!ダウンロード!ということでボタンを押すと、、、

  「ダウンロードするプログラムを選んでください。」という言葉とともに、
  以下のダウンロードリストが表示されます。

   SQLEXPR_x64_JPN.exe 132.8 MB
   SQLEXPR_x86_JPN.exe 118.2 MB
   SQLEXPR32_x86_JPN.exe 105.0 MB
   SQLEXPRADV_x64_JPN.exe 1.0 GB
   SQLEXPRADV_x86_JPN.exe 950.2 MB
   SQLEXPRWT_x64_JPN.exe 379.0 MB
   SQLEXPRWT_x86_JPN.exe 354.3 MB
   SQLManagementStudio_x64_JPN.exe 186.3 MB
   SQLManagementStudio_x86_JPN.exe 183.4 MB

  SQL Serverを使うのに、DBのサービスだけでよいのであれば、SQLEXPR_x86/64_JPN.exeを選んどけ!
  管理ツールもほしかったら、SQLEXPRWT_x86/64_JPN.exeを選ぶと幸せになれます。
  ちなみに、DBのサービスだけインストール後に、管理ツールが欲しくなったら、
  一番下のSQLManagementStudio_x86/64_JPN.exeをインストールすれば大丈夫です。

  インストール作業は次へ次へ系なので割愛します。
  途中の認証のところで、Windows認証とSQL認証にしたくらいです。

③DBの作成。
  私はインポートしちゃいました。インストールすると、
  「データのインポートおよびエクスポート (64 ビット)」ツールというのが在りますので、
  そちらを利用。ウィザードに従っていけば簡単です。

  

以上でインストールは完了!

さて。アプリ側で使ってみようと、思ったら、、、

The connector could not crawl the URL due to the following error: Could not connect to the database server: Network error IOException: Connection refused: connect.

というエラーが。。。あれ?なんで?ということでネットワークエラーっぽいので、
それ関係を調べてみる。
 ・SQL Serverの既定のポート、1433がちゃんと使えているか?
 ・ファイヤーウォールで塞がれていないか?

ファイヤーウォールは大丈夫でしたが、待ちうけポートが1433でリッスンされていないことが判明。

SQL Serverでは、「既定のインスタンス」でインストールされると、1433固定になるそうなのですが、
Expressの場合、「名前つきインスタンス」でインストールされ、名前つきインスタンスの場合は、
「動的」ポートが指定され、ポート番号が変化します。

そのため、接続できない事態に陥っていました。何番で接続すればよいか分からないということです。

それを解決するためには以下の2つのパターンがあります。
 ・SQL Server Browser(ポート番号:1434)で、ポート番号を聞く。(普通の流れ)
 ・「名前つきインスタンス」のサービスを固定のポート番号にする。

わざわざポート番号を聞く処理を追加するのもダルいので、後者の固定ポートにする方向にしました。

スタートメニューから、「SQL Server 構成マネージャー」を開きます。
ここでもう一つ問題が。。。

TCP/IPが無効になっとるやんけ!!!!


謎仕様過ぎてびっくりしました。ま。。。まぁ、しょうがない。ということで、こいつを有効化。
そして、ポート番号を固定に設定。TCPポートに値を入れて、TCP動的ポートの0を空白に。
これを下まで全部ひっくるめて設定していきます。



設定が終わったらSQL Server(SQLEXPRESS)のサービスを再起動します。
アプリから試してみたら、無事に接続できました。

いやぁ。ハマりかけました。というかハマりました。

なかなか情報が見つからなかったので今回は一通りの流れをメモってみました。
お困りの方がいたら助けになれば幸いでございます。