시스템 데이터베이스 이동
적용 대상: SQL Server
이 문서에서는 SQL Server에서 시스템 데이터베이스를 이동하는 방법에 대해 설명합니다. 시스템 데이터베이스 이동은 다음과 같은 경우에 유용할 수 있습니다.
오류 복구. 예를 들어, 데이터베이스가 의심 모드에 있거나 하드웨어 오류로 인해 종료된 경우입니다.
계획된 재배치
예약된 디스크 유지 관리를 위한 재배치
다음 절차는 SQL Server의 동일한 인스턴스 내에서 데이터베이스 파일을 이동하는 데 적용됩니다. 데이터베이스를 다른 SQL Server 인스턴스나 다른 서버로 이동하려면 백업 및 복원 작업을 사용합니다.
이 문서의 절차를 사용하려면 데이터베이스 파일의 논리적 이름이 필요합니다. 이름을 가져오려면 sys.master_files 카탈로그 뷰에서 이름 열을 쿼리합니다.
Important
시스템 데이터베이스를 이동한 다음 나중에 master
데이터베이스를 다시 빌드하는 경우 다시 빌드 작업에서 모든 시스템 데이터베이스를 기본 위치에 설치하기 때문에 시스템 데이터베이스를 다시 이동해야 합니다.
시스템 데이터베이스 이동
계획된 재배치 또는 예약된 유지 관리 작업의 일부로 시스템 데이터베이스 데이터나 로그 파일을 이동하려면 다음 단계를 따릅니다. 여기에는 model
, msdb
및 tempdb
시스템 데이터베이스가 포함됩니다.
Important
이 절차는 master
및 Resource
데이터베이스를 제외한 모든 시스템 데이터베이스에 적용됩니다. master
데이터베이스를 이동하는 단계는 이 문서의 뒷부분을 참조하세요. Resource
데이터베이스는 이동할 수 없습니다.
sys.master_files 카탈로그 뷰를 검토하여 이동하려는 데이터베이스 파일의 기존 위치를 기록합니다.
SQL Server 데이터베이스 엔진 서비스 계정에 파일의 새 위치에 대한 전체 권한이 있는지 확인합니다. 자세한 내용은 Windows 서비스 계정 및 권한 구성을 참조하세요. 데이터베이스 엔진 서비스 계정이 새 위치에서 파일을 제어할 수 없는 경우 SQL Server 인스턴스가 시작되지 않습니다.
이동할 각 데이터베이스 파일에 대해 다음 문을 실행합니다.
ALTER DATABASE database_name MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
서비스를 다시 시작할 때까지는 데이터베이스에서 계속 기존 위치의 데이터와 로그 파일을 사용합니다.
SQL Server 인스턴스를 중지하여 유지 관리를 수행합니다. 자세한 내용은 SQL Server 서비스 시작, 중지, 일시 중지, 재개 및 다시 시작을 참조하세요.
데이터베이스 파일을 새 위치에 복사합니다. 이 작업은
tempdb
시스템 데이터베이스에 필요한 단계는 아니며 해당 파일은 새 위치에 자동으로 만들어집니다.SQL Server 인스턴스 또는 서버를 다시 시작합니다. 자세한 내용은 SQL Server 서비스 시작, 중지, 일시 중지, 재개 및 다시 시작을 참조하세요.
다음 쿼리를 실행하여 파일 변경 내용을 확인합니다. 시스템 데이터베이스가 새 물리적 파일 위치를 보고할 것입니다.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
5단계에서 데이터베이스 파일을 이동하는 대신 복사했으므로 이제 이전 위치에서 사용하지 않는 데이터베이스 파일을 안전하게 삭제할 수 있습니다.
후속 작업: msdb
시스템 데이터베이스를 이동한 후
msdb
데이터베이스를 이동하고 데이터베이스 메일을 구성했으면 다음 추가 단계를 완료합니다.
다음 쿼리를 실행하여 Service Broker가
msdb
데이터베이스에 사용하도록 설정되어 있는지 확인합니다.SELECT is_broker_enabled FROM sys.databases WHERE name = N'msdb';
Service Broker가
msdb
에 사용하도록 설정되지 않은 경우 다시 사용하도록 설정해야 데이터베이스 메일이 작동합니다. 자세한 내용은 ALTER DATABASE ... SET ENABLE_BROKER를 참조하세요.ALTER DATABASE msdb SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE;
is_broker_enabled
의 값이 이제 1인지 확인합니다.테스트 메일을 보내 데이터베이스 메일이 작동하는지 확인합니다.
오류 복구 절차
하드웨어 오류로 인해 파일을 이동해야 하는 경우 다음 단계에 따라 파일을 새 위치로 재배치합니다. 이 절차는 master
및 Resource
데이터베이스를 제외한 모든 시스템 데이터베이스에 적용됩니다. 다음 예제에서는 Windows 명령줄 프롬프트 및 sqlcmd 유틸리티를 사용합니다.
Important
데이터베이스가 주의 대상 모드이거나 복구되지 않은 상태여서 시작할 수 없는 경우에는 sysadmin 고정 역할의 멤버만 파일을 이동할 수 있습니다.
SQL Server 데이터베이스 엔진 서비스 계정에 파일의 새 위치에 대한 전체 권한이 있는지 확인합니다. 자세한 내용은 Windows 서비스 계정 및 권한 구성을 참조하세요. 데이터베이스 엔진 서비스 계정이 새 위치에서 파일을 제어할 수 없는 경우 SQL Server 인스턴스가 시작되지 않습니다.
SQL Server 인스턴스가 시작되었다면 중지합니다.
명령 프롬프트에서 다음 명령 중 하나를 입력하여
master
전용 복구 모드에서 SQL Server 인스턴스를 시작합니다. 시작 매개 변수 3608을 사용하면 SQL Server가master
데이터베이스를 제외한 모든 데이터베이스를 자동으로 시작하고 복구할 수 없습니다. 자세한 내용은 시작 매개 변수 및 TF3608을 참조하세요.이러한 명령에 지정된 매개 변수는 대/소문자를 구분합니다. 표시된 대로 매개 변수를 지정하지 않으면 명령이 실패합니다.
기본(MSSQLSERVER) 인스턴스의 경우 다음 명령을 실행합니다.
NET START MSSQLSERVER /f /T3608
명명된 인스턴스의 경우 다음 명령을 실행합니다.
NET START MSSQL$instancename /f /T3608
자세한 내용은 SQL Server 서비스 시작, 중지, 일시 중지, 재개 및 다시 시작을 참조하세요.
추적 플래그 3608
/f
를 사용하여 서비스를 시작한 후 즉시 서버에 대한 sqlcmd 연결을 시작하여 사용 가능한 단일 연결을 클레임합니다. 예를 들어 기본(MSSQLSERVER) 인스턴스와 동일한 서버에서 sqlcmd를 로컬로 실행하고 Active Directory 통합 인증을 사용하여 연결하려면 다음 명령을 실행합니다.sqlcmd
로컬 서버에서 Active Directory 통합 인증을 사용하여 명명된 인스턴스에 연결하려면
sqlcmd -S localhost\instancename
sqlcmd 구문에 대한 자세한 내용은 sqlcmd 유틸리티를 참조하세요.
이동할 각 파일에 대해 sqlcmd 명령 또는 SQL Server Management Studio 를 사용하여 다음 문을 실행합니다. sqlcmd 유틸리티에 대한 자세한 내용은 sqlcmd 유틸리티 사용을 참조하세요. sqlcmd 세션이 열리면 이동할 파일마다 다음 문을 한 번 실행합니다.
ALTER DATABASE database_name MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name'); GO
sqlcmd 유틸리티 또는 SQL Server Management Studio를 종료합니다.
SQL Server 인스턴스를 중지합니다. 예를 들어 명령줄 프롬프트에서
NET STOP MSSQLSERVER
를 실행합니다.파일을 새 위치로 복사합니다.
SQL Server인스턴스를 다시 시작합니다. 예를 들어 명령줄 프롬프트에서
NET START MSSQLSERVER
를 실행합니다.다음 쿼리를 실행하여 파일 변경 내용을 확인합니다.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
7단계에서 데이터베이스 파일을 이동하는 대신 복사했으므로 이제 이전 위치에서 사용하지 않는 데이터베이스 파일을 안전하게 삭제할 수 있습니다.
master
데이터베이스 이동
master
데이터베이스를 이동하려면 다음 단계를 수행합니다.
SQL Server 데이터베이스 엔진 서비스 계정에 파일의 새 위치에 대한 전체 권한이 있는지 확인합니다. 자세한 내용은 Windows 서비스 계정 및 권한 구성을 참조하세요. 데이터베이스 엔진 서비스 계정이 새 위치에서 파일을 제어할 수 없는 경우 SQL Server 인스턴스가 시작되지 않습니다.
시작 메뉴에서 SQL Server 구성 관리자를 찾아 시작합니다. 예상 위치는 SQL Server 구성 관리자를 참조하세요.
SQL Server 서비스 노드에서 SQL Server 인스턴스(예: SQL Server(MSSQLSERVER))를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.
SQL Server(instance_name) 속성 대화 상자에서 시작 매개 변수 탭을 선택합니다.
기존 매개 변수 상자에서
-d
매개 변수를 선택합니다. 시작 매개 변수 지정 상자에서 매개 변수를master
데이터 파일의 새 경로로 변경합니다. 업데이트를 선택하여 변경 내용을 저장합니다.기존 매개 변수 상자에서
-l
매개 변수를 선택합니다. 시작 매개 변수 지정 상자에서 매개 변수를master
로그 파일의 새 경로로 변경합니다. 업데이트를 선택하여 변경 내용을 저장합니다.데이터 파일의 매개 변수 값은
-d
매개 변수를 따라야 하며 로그 파일의 값은-l
매개 변수를 따라야 합니다. 다음 예에서는master
데이터 파일의 기본 위치에 대한 매개 변수 값을 보여 줍니다.-dC:\Program Files\Microsoft SQL Server\MSSQL<version>.MSSQLSERVER\MSSQL\DATA\master.mdf -lC:\Program Files\Microsoft SQL Server\MSSQL<version>.MSSQLSERVER\MSSQL\DATA\mastlog.ldf
master
데이터 파일의 계획된 재배치가E:\SQLData
인 경우 매개 변수 값은 다음과 같이 변경됩니다.-dE:\SQLData\master.mdf -lE:\SQLData\mastlog.ldf
확인을 선택하여 변경 내용을 영구적으로 저장하고 SQL Server(instance_name) 속성 대화 상자를 닫습니다.
SQL Server 인스턴스 이름을 마우스 오른쪽 단추로 클릭하고 중지를 선택하여인스턴스를 중지합니다.
master.mdf
및mastlog.ldf
파일을 새 위치로 복사합니다.SQL Server인스턴스를 다시 시작합니다.
다음 쿼리를 실행하여
master
데이터베이스에 대한 파일 변경 내용을 확인합니다.SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID('master');
이 시점에서 SQL Server가 정상적으로 실행되어야 합니다. 그러나 Instance_ID가
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\instance_ID\Setup
인 것 같은 위치에서MSSQL13.MSSQLSERVER
레지스트리 항목을 조정하는 것이 좋습니다. 해당 하이브에서SQLDataRoot
값을master
데이터베이스 파일의 새 위치의 새 경로로 변경 합니다. 레지스트리를 업데이트하지 못하면 패치 및 업그레이드가 실패할 수 있습니다.9단계에서 데이터베이스 파일을 이동하는 대신 복사했으므로 이제 이전 위치에서 사용하지 않는 데이터베이스 파일을 안전하게 삭제할 수 있습니다.
리소스 데이터베이스 이동
Resource
데이터베이스의 위치는 \<drive>:\Program Files\Microsoft SQL Server\MSSQL\<version>.<instance_name>\MSSQL\Binn\
입니다. 데이터베이스는 이동할 수 없습니다.
후속 작업: 모든 시스템 데이터베이스를 이동한 후
모든 시스템 데이터베이스를 새 드라이브나 볼륨 또는 다른 드라이브 문자가 있는 다른 서버로 이동한 경우 다음을 업데이트합니다.
SQL Server 에이전트 로그 경로를 변경합니다. 이 경로를 업데이트하지 않으면 SQL Server 에이전트가 시작되지 않습니다.
데이터베이스 기본 위치를 변경합니다. 기본 위치로 지정된 드라이브 문자와 경로가 없으면 새 데이터베이스를 만들지 못할 수 있습니다.
SQL Server 에이전트 로그 경로를 변경합니다.
모든 시스템 데이터베이스를 새 볼륨으로 이동했거나 다른 드라이브 문자가 있는 다른 서버로 마이그레이션했으며 SQL 에이전트 오류 로그 파일 SQLAGENT.OUT
의 경로가 더 이상 존재하지 않는 경우 다음을 업데이트합니다.
SQL Server Management Studio의 개체 탐색기에서 SQL Server 에이전트를 확장합니다.
오류 로그를 마우스 오른쪽 단추로 클릭한 다음 구성을 선택합니다.
SQL Server 에이전트 오류 로그 구성 대화 상자에서 SQLAGENT.OUT 파일의 새 위치를 지정합니다. 기본 위치는
C:\Program Files\Microsoft SQL Server\MSSQL\<version>.<instance_name>\MSSQL\Log\
입니다.
데이터베이스 기본 위치를 변경합니다.
SQL Server Management Studio의 개체 탐색기에서 원하는 SQL Server 인스턴스에 연결합니다. 인스턴스를 마우스 오른쪽 단추로 클릭한 다음, 속성을 선택합니다.
서버 속성 대화 상자에서 데이터베이스 설정을 선택합니다.
데이터베이스 기본 위치 아래에서 데이터 및 로그 파일 모두에 대한 새 위치를 찾습니다.
변경을 완료하려면 SQL Server 서비스를 중지한 후 시작합니다.
예제
A. tempdb
데이터베이스 이동
다음 예에서는 계획된 재배치의 일부로 tempdb
데이터와 로그 파일을 새 위치로 이동합니다.
팁
이 기회를 통해 tempdb
파일의 최적 크기 및 배치를 검토하세요. 자세한 내용은 SQL Server에서 tempdb 성능 최적화를 참조하세요.
SQL Server 인스턴스를 시작할 때마다 tempdb
이(가) 다시 생성되므로 데이터와 로그 파일을 물리적으로 이동할 필요는 없습니다. 4단계에서 서비스를 다시 시작할 때 새 위치에 파일이 생성됩니다. 서비스를 다시 시작할 때까지는 tempdb
가 기존 위치의 데이터 및 로그 파일을 계속 사용합니다.
tempdb
데이터베이스의 논리적 파일 이름 및 디스크에서 현재 위치를 결정합니다.SELECT name, physical_name AS CurrentLocation FROM sys.master_files WHERE database_id = DB_ID(N'tempdb'); GO
SQL Server 데이터베이스 엔진 서비스 계정에 파일의 새 위치에 대한 전체 권한이 있는지 확인합니다. 자세한 내용은 Windows 서비스 계정 및 권한 구성을 참조하세요. 데이터베이스 엔진 서비스 계정이 새 위치에서 파일을 제어할 수 없는 경우 SQL Server 인스턴스가 시작되지 않습니다.
ALTER DATABASE
를 사용하여 각 파일의 위치를 변경합니다.USE master; GO ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLData\tempdb.mdf'); GO ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'F:\SQLLog\templog.ldf'); GO
서비스를 다시 시작할 때까지는
tempdb
가 기존 위치의 데이터 및 로그 파일을 계속 사용합니다.SQL Server인스턴스를 중지한 후 다시 시작합니다.
파일 변경 내용을 확인합니다.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'tempdb');
원래 위치에서
tempdb
파일을 삭제합니다.