SQL Server 의 데이터베이스를 분리한 뒤 파일을 복사하고 다른 머신에서 연결을 시도하였으나 읽기 전용 상태가 된다면?
[환경]
SQL Server 2008 R2
[현상]
Sp_detach_db 프로시저를 사용하여 데이터베이스를 정상적으로 분리한 뒤, 다른 머신으로 파일을 복사한 후 sp_attach_db 프로시저를 사용하여 데이터베이스를 연결하였으나 개체탐색기에서 보이는 것과 같이 데이터베이스 상태가 "Read-Only" 로 나타납니다.
[원인]
데이터베이스 데이터 파일인 MDF 파일의 속성이 Read-Only 로 설정되어 있습니다.
[해결방안]
읽기 전용으로 연결된 데이터베이스를 분리한 후 데이터 파일의 속성에서 읽기 전용을 해제한 후 다시 연결합니다.
[분석결과]
1. 데이터베이스 상태 확인
select name,STATUS from sys.sysdatabases WHERE name = 'GAME'
GO
-------------------------------------
GAME 1073808384
GO
-------------------------------------
GAME 1073808384
2. GAME.MDF 파일 속성 : Read-Only
3. 데이터베이스 속성을 Read-Only 상태에서 READ_WRITE 로 변경할 경우 아래와 같은 오류가 발생합니다.
USE [master]
GO
ALTER DATABASE [GAME] SET READ_WRITE
GO
Msg 5120, Level 16, State 101, Line 1
Unable to open the physical file "D:\SQL\DATA\GAME.MDF". Operating system error 5: "5(failed to retrieve text for this error. Reason: 15105)".
Msg 945, Level 14, State 2, Line 1
Database 'GAME' cannot be opened due to inaccessible files or insufficient memory or disk space. See the SQL Server errorlog for details.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.
GO
ALTER DATABASE [GAME] SET READ_WRITE
GO
Msg 5120, Level 16, State 101, Line 1
Unable to open the physical file "D:\SQL\DATA\GAME.MDF". Operating system error 5: "5(failed to retrieve text for this error. Reason: 15105)".
Msg 945, Level 14, State 2, Line 1
Database 'GAME' cannot be opened due to inaccessible files or insufficient memory or disk space. See the SQL Server errorlog for details.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.
4. 만약 LDF 파일에만 Read-Only 가 부여되어 있다면 데이터베이스가 attach 되지 않고 아래와 같은 오류가 발생합니다.
-- LDF 파일만 Read-only 일 경우
Msg 5120, Level 16, State 101, Line 1
Unable to open the physical file "D:\SQL\DATA\GAME_log.LDF". Operating system error 5: "5(failed to retrieve text for this error. Reason: 15105)".
File activation failure. The physical file name "D:\SQL\DATA\GAME_log.LDF" may be incorrect.
Msg 5170, Level 16, State 1, Line 1
Cannot create file 'D:\SQL\DATA\GAME_log.LDF' because it already exists. Change the file path or the file name, and retry the operation.
Msg 1813, Level 16, State 2, Line 1
Could not open new database 'GAME'. CREATE DATABASE is aborted.
Msg 5120, Level 16, State 101, Line 1
Unable to open the physical file "D:\SQL\DATA\GAME_log.LDF". Operating system error 5: "5(failed to retrieve text for this error. Reason: 15105)".
File activation failure. The physical file name "D:\SQL\DATA\GAME_log.LDF" may be incorrect.
Msg 5170, Level 16, State 1, Line 1
Cannot create file 'D:\SQL\DATA\GAME_log.LDF' because it already exists. Change the file path or the file name, and retry the operation.
Msg 1813, Level 16, State 2, Line 1
Could not open new database 'GAME'. CREATE DATABASE is aborted.
작성자 : Lai Go / 작성일자 : 2011.11.25