2007~2011/SQL Server2011. 11. 25. 16:03

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


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.



 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.



작성자 : Lai Go / 작성일자 : 2011.11.25

Posted by Lai Go