3906: Failed to update database because the database is read-only(データベースが読み取り専用のため更新に失敗)
SQL Server意味
読み取り専用としてマークされたデータベースでデータを変更 (INSERT/UPDATE/DELETE/DDL) しようとした。SQL Server が書き込みを拒否した。
原因
データベースが READ_ONLY に設定された、接続が可用性グループのセカンダリレプリカ (読み取り用) に向かった、スナップショットまたはリストア後にデータベースが読み取り専用のままになっている、またはファイルシステムが読み取り専用。誤ってセカンダリレプリカにルーティングされたアプリケーションが典型的な原因。
対処方法
本当に書き込み可能にする必要がある場合: ALTER DATABASE mydb SET READ_WRITE; 可用性グループでは、アプリケーションをプライマリレプリカにルーティングする (ReadWrite 接続ルーティング / ApplicationIntent を確認)。読み取り専用のスナップショットには書き込めないため、ソースデータベースを対象にする。ファイルの権限とファイルシステムも確認する。
同じデータベースの他の項目
- 102Incorrect syntax near 'token'('token' 付近の構文が正しくない)
- 8114Error converting data type X to Y(データ型 X から Y への変換エラー)
- 1204The instance of the SQL Server Database Engine cannot obtain a LOCK resource(SQL Server データベースエンジンのインスタンスが LOCK リソースを取得できない)
- 15023User already exists in the current database(ユーザーは現在のデータベースに既に存在する)
- 18452Login failed. The login is from an untrusted domain and cannot be used with Windows authentication(ログイン失敗。信頼されていないドメインからのログインで Windows 認証に使用できない)
- 605Attempt to fetch logical page belongs to a different allocation unit(取得しようとした論理ページが別のアロケーションユニットに属する)
- 4922ALTER TABLE ALTER COLUMN failed because one or more objects access this column(1 つ以上のオブジェクトがこの列にアクセスしているため ALTER TABLE ALTER COLUMN が失敗)