SQLserver環境周りで躓いたところメモ。
SQLserverちゃんはちょっとのことで
すぐログイン出来なくなったりするので
とても気難しいなぁと感じる今日この頃。
他端末で作成したバックアップファイルを復元した場合のエラー
ユーザーが既に存在しますと言われる場合
Microsoft SQL-DMO (ODBC SQLState: 42000)
エラー 15023: ユーザーまたはロール [ユーザー名] は現在のデータベースに既に存在します。
SQLserverで、他端末で作成したバックアップファイルを復元したところ
ユーザーが作れない。
ユーザー作成をしてもそのユーザーはもういます!って言われるし、
createユーザーSQLも上手くいかない。
自分の端末上は、いないんですけど…。
復元したDB内に存在するユーザーは、ユーザー名で紐づいているのではなく
実はIDで紐づいているらしい。(同じユーザーを作成してもエラーになる原因はこれ。)
その場合は、こちらのコマンドをSQLserver上から実施。
復元ファイルに入っていたユーザー情報を、自端末のユーザー情報に紐づけ直すコマンド。
Use [DB名]
ALTER USER DBのユーザー名 WITH LOGIN = ログインユーザー名
既定データベースを開けなくなった場合
他の端末で取得したバックアップを復元した場合、SQL server 4064エラーが出ました。
前回はユーザーいなかったけど、今回はいるんですけどねー。
同じユーザーに見えますが、異なるIDに紐づいているから入れなくなってしまったのかなぁ。
こちらもALTER USERで解決。
Use [DB名]
ALTER USER DBのユーザー名 WITH LOGIN = ログインユーザー名
batで実行したSQLが上手く実行されない場合
データ ソース名および指定された既定のドライバーが見つかりません
使用している環境の都合上、32bitのODBCを用意しているし、
インスタンスも消えてないし、環境面は問題なさそうなのに
環境面エラーっぽいエラー文が出る。
調べたら、bat内のコマンドが「osql」で作成されていた事が原因。
osqlコマンドをsqlcmdに記載を変更したら、うまく行きました。
sqlcmd -S サーバー名 -U ユーザー名 -P パスワード
SQLサーバーに突如として入れなくなった場合
ポート絡みがダメだった時の対処
ODBCをいじって再起動した直後、ログインできなくなりました。
これは、SQLserverの「TCP/IP」が外部からの接続を無効化していた事が原因。
SQL Server 構成マネージャ>SQL Server ネットワークの構成から対象のプロトコルを選択し、TCP/IPを有効化にしたら再度ログインできるようになりました。
これで2時間くらい無駄にした…。
サービスがダメだった時の対処
そして後日再発。
またログイン出来なくなった。度々ログインできなくなるのなんでなのー。
SQL Server への接続を確立しているときにネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、およびSQL Serverがリモート接続を許可するように構成されていることを確認してください。(provider:Named pipes Provider,error:40 -SQL Server への接続を開けませんでした)(Microsoft SQL Server 、エラー:2)
また、ポート絡みかな、とSQLserver構成マネージャーを確認したら全て有効になっている。
どうやら、今回は違うらしい。
前回は問題なかったサービスを念のため確認。
なんのことはない「SQL server」のサービスが開始になっていない…!
なんでや。いつも使っているのは下のサービスなんですけど…。
インスタンスが複数あるのがいけないのかな。
上のサービスが開始になっていたので、停止。下のサービスを開始しました。
別インスタンスの「SQL Server」サービスを停止して、起動したいインスタンスの「SQL Server」を起動。
無事に入れるようになりました。
夏期休暇あけに起動したらまた再発したので使用しないインスタンスのサービスを無効にしました…。