attach(연결)한 DB의 읽기전용 상태 해결
SQL Server 2014를 페일오버 클러스터링 환경 상태
다른 곳에서 복사해온 DB를 attach(연결) 했는데 읽기전용상태로 되는 현상이 발생
01. attach DB하기
USE [master]
GO
CREATE DATABASE [dbtest] ON
( FILENAME = N'J:\DBData\dbtest.mdf' ),
( FILENAME = N'L:\DBLog\dbtest_log.ldf' )
FOR ATTACH
GO
02. DB를 attach(연결)
읽기전용상태로 되는 현상이 발생
03. 읽기전용 해제 시도
ALTER DATABASE DBTEST SET READ_WRITE <- 이렇게 하면
다음과 같은 오류가 나온다.
메시지 5120, 수준 16, 상태 101, 줄 11
물리적 파일 "J:\DBData\DBTEST.mdf"을(를) 열 수 없습니다. 운영 체제 오류 5: "5(액세스가 거부되었습니다.)".
메시지 5120, 수준 16, 상태 101, 줄 11
물리적 파일 "L:\DBLog\DBTEST_log.ldf"을(를) 열 수 없습니다. 운영 체제 오류 5: "5(액세스가 거부되었습니다.)".
메시지 5181, 수준 16, 상태 5, 줄 11
데이터베이스 "dbtest"을(를) 다시 시작할 수 없습니다. 이전 상태로 돌아갑니다.
메시지 5069, 수준 16, 상태 1, 줄 11
ALTER DATABASE 문이 실패했습니다.
04. SQL Server 시작계정 확인
05. 문제점 & 해결 방법
OS 권한정책은 파일을 복사하면 그 해당 폴더의 권한을 상속받는것 같다.
그래서 SQL Server 시작계정이 그 파일에 쓰기권한이 없기 때문이다.
읽기전용 된 db를 detach 먼저하고 그 파일에 권한을 추가하면 될것이다.
그렇다면 어찌해야 하느냐? 두가지 방법을 생각해볼수 있다.
하나. SQL Server 시작계정이 mdf파일과 ldf파일에 읽고 쓰고 할수 있게 모든 권한을 준다
둘. MSSQLSERVER 라는 내부 서비스 계정이 존재한다. 이 계정은 db create시 sql server 가 자동으로 이 계정을 mdf와 ldf에 모든 권한을 주게 되어있다.
위 두가지 방법 모두 절차는 같다.
나는는 좀더 어려운 두번째 방법을 설명한다.
mdf파일과 ldf파일에 모든 권한을 주는 방법을 따라해보자
이 계정의 원래 이름은 'NT SERVICE\MSSQLSERVER' 이다.
해당 파일을 오른쪽 클릭 / 속성 / 보안 / 편집 / 추가 하면 화면이 열린다.
위치 버튼을 눌러 해당 컴퓨터로 하시고 다음과 같이 입력하고 이름 확인 버튼을 누른다.
그럼 이름이 자동으로 MSSQLSERVER로 바뀐다. 확인 버튼 클릭
권한 선택하는 화면이 나오는데 MSSQLSERVER 라는 계정에 모든권한을 선택하고 확인버튼 눌러 창을 닫음
이제 다시 ATTATCH하면 읽기전용 문제가 해결된 DB가 보일것이다.
다른 블로그에서 시작계정을 로컬시스템 계정으로 바꾸라고 하는곳도 있는데 그렇게 하면 administrator 권한을 가지는것이기에 당연 해결된다.
하지만 보안상 문제로 SQL Server 의 시작계정을 제한된 권한것으로 사용할 필요가 있을경우 이 절차에 따르면 될것이다.