SQLServer

【SQLServer】バックアップ復元後、DBにアクセスできない

SQLServer バックアップ復元後、DBにアクセスできない問題の対処法

DBサーバーが古くなり、別サーバーへ移行するため、SQLServerのデータベースの

バックアップを別のサーバーにリストアしました。

スクリプトの検証中にデータベースへのアクセスエラーが発生する問題あったので、

その時の原因と対処法をメモとして残しておきたいと思います。

事象

「BACKUP DATABASE」コマンドでデータベースへのアクセスに失敗しました。

set AA=HSTEDI
sqlcmd -Q "BACKUP DATABASE [%AA%] TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\Backup\%AA%.bak' WITH NOFORMAT, INIT,  NAME = N'%AA%-完全 データベース バックアップ', SKIP, NOREWIND, NOUNLOAD,  STATS = 10" -d master -S localhost,1433 -U ユーザー名 -P パスワード

エラーメッセージ

メッセージ 916、レベル 14、状態 2、サーバー HSTEDI02T\SQLEXPRESS、行 1
現在のセキュリティ コンテキストでは、サーバー プリンシパル “ユーザー名” はデータベース “DB名” にアクセスできません。
メッセージ 3013、レベル 16、状態 1、サーバー HSTEDI02T\SQLEXPRESS、行 1
BACKUP DATABASE が異常終了しています。

原因

データベースユーザーとログインユーザーがマッピングされていない。

名称が同じでも内部的にSIDが異なり不整合な状態になっていることが原因。

対処法

次のSQLを発行してユーザーマッピングを行うことで解消します。

EXEC sp_change_users_login 'Update_One','データベースユーザー名','ログインユーザー名'