SQL Server 用のポートを開く

Windows Server 2008/Vista では既定でファイアウォールが ON です。
SQL Server 2005/2008 をインストールした際、外部からの接続がファイアウォールに
よって拒否されてしまいます。
そのため、SQL Server 用のポートを開いておく必要があります。
最低限、以下のポートを開いておけば何とかなると思います。

SQL Server 用のポート

既定のインスタンス用ポート 1433
netsh firewall set portopening TCP 1433 "SQLServer"

管理接続用ポート 1434
netsh firewall set portopening TCP 1434 "SQL Admin Connection"

SQL Server Service Broker 用ポート 4022 
netsh firewall set portopening TCP 4022 "SQL Service Broker"

Transact-SQL Debugger/RPC 用ポート 135
netsh firewall set portopening TCP 135 "SQL Debugger/RPC"

Analysis Services 用のポート

SSAS 既定のインスタンス用ポート 2383
netsh firewall set portopening TCP 2383 "Analysis Services"

SQL Server Browser Service 用ポート 2382
netsh firewall set portopening TCP 2382 "SQL Browser"

以下はオプションで。

SQL Server ブラウザで使うポート
netsh firewall set portopening UDP 1434 "SQL Browser"

SQL Server ブラウザに反応するためのブロードキャスト
netsh firewall set multicastbroadcastresponse ENABLE

広告

SQL Server 2005 ユーザーデータベースをデタッチ/アタッチで移行する

マシンの入れ替えをする際によくあるシナリオです。
私も先日、XP から Vista に移行したのですが、コンピューター名は違えど、ユーザー名は同じにしてしまいがち。
自宅の PC ですし…(といいわけ)

普通に、元 SQL Server からデータベースをデタッチして、新 SQL Server にデータベースをアタッチする。
そして、SQL ログインユーザーを作成して、既定のデータベースを割り当てると

エラー15023:ユーザーまたはロール’XXXXX’はカレントデータベースに既に存在します。

というエラーが発生することがあります。
実は、データベースユーザーは、SQL ログインアカウントの SID にマップされるので、このエラーが発生してしまいます。
この場合には、慌てずに以下の方法で解決しましょう。

KB314546 SQL Server を実行しているコンピュータ間でデータベースを移動する方法
手順4: 不明なユーザーを解決する方法
ここで紹介されている sp_change_users_login を使って不明なユーザーをリストアップします。

USE データベース名
EXEC sp_change_users_login ‘Report’

次に、不明なユーザーのマッピングを修復するには、
KB274188 [SQL]PRB: 対応するログインの存在しないユーザー
のように sp_change_users_login を使い、ユーザーを解決します。

USE データベース名
EXEC sp_change_users_login ‘Update_One’,’DBユーザー名’,’ログイン名’

これでめでたしめでたしです。
異なる SQL Server 間で、同じ SID を持ったSQL Server 認証用ログインアカウントを作成するには、本来は、
「データベース コピー ウィザード」を使用するか、
サポート技術情報(KB)の KB246133 で提供される sp_help_revlogin ストアドプロシージャを使用した方が無難です。

別 SQL Server にデータベースを持っていくときの Tips です。