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 です。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。