事象
本番稼働しているSQL ServerをDBに使っているシステムで大幅な仕様変更をした時の話です。
切り替え中はユーザーがシステムを一時的に利用できなくしたかったのですが、システムはサービス化されておらず、利用不可にする手段がありませんでした。SQL Serverのサービスを止めるとDBの仕様変更ができなくなるのでデータベースの名前を一時的に変更することで対応することになりました。
このとき、名前を変更するデータベースが既定のデータベースに設定されている場合は、
ログインができなくなってしまいます。
私の場合は、切替前に何回かテスト環境で切替リハーサルをやっていたのですが、テスト環境では,既定のデータベースが[master]となっていたので問題ありませんでした。
いざ、本番環境で切替を行うと・・・ あれ? つながらない・・・・となってかなり焦りました。
これは既定のデータベースが一時的にデータベース名を変更してしまったのでつながらなくなったためでした。しかも私の場合は,データベースをシングルユーザーモードに変更した後にこの作業を行ったので、マルチユーザーモードに戻らなくなってしまい、ログインもできなくなってしまいました。
別の管理者ユーザーも知っていたのでそちらで接続して事なきを得ましたが、別の管理者ユーザーもわからない場合はどうしたらよいか紹介したいと思います。
対応策
DB名を変更する前に必ず既定のデータベースを確認する
DB名を変更するときは、自分が変更する際に接続しているユーザーの既定のデータベースを必ず確認するようにしましょう。確認はSQL Server Management Studioの[セキュリティ]→[ログイン]→[使用するユーザー]のプロパティを開き、既定のデータベースを確認します。もし、今回DB名を変更するデータベースが設定されていた場合は、変更しておきましょう。
SQLCMDなどで既定のデータベースの変更を変更する
もうすでに変更してしまってログインできなくなってしまった場合は、sqlcmdで以下のコマンドを実行して既定のデータベースをmasterに変更します。
sqlcmd -S serverName -d master -U ユーザー -P パスワード
alter login (ログインユーザー) with default_database=master
初めてこの事象に出くわすと焦ると思いますのできをつけましょう!SQLのログインユーザーを新規で作成した場合などは、基本的にユーザーデータベースにせずに[master]にしておいたほうが無難かもしれません。[master]であれば名前を変更することはまずありえないと思います。
コメント