사용자 데이터베이스 이동
적용 대상: SQL Server
SQL Server에서는 ALTER DATABASE 문의 FILENAME
절에 새 파일 위치를 지정하여 사용자 데이터베이스의 데이터, 로그 및 전체 텍스트 카탈로그 파일을 새 위치로 이동할 수 있습니다. 이 메서드는 동일한 인스턴스 SQL Server 내에서 데이터베이스 파일을 이동하는 데 적용됩니다. 데이터베이스를 SQL Server의 다른 인스턴스나 다른 서버로 이동하려면 백업 및 복원 또는 분리 및 연결 작업을 사용합니다.
참고 항목
이 문서에서는 사용자 데이터베이스 파일을 이동하는 방법을 설명합니다. 시스템 데이터베이스 파일 이동에 대해서는 시스템 데이터베이스 이동을 참조하세요.
고려 사항
데이터베이스를 다른 서버 인스턴스로 이동하는 경우 사용자와 애플리케이션에 일관된 환경을 제공하려면 데이터베이스의 일부 또는 모든 메타데이터를 다시 만들어야 할 수도 있습니다. 자세한 내용은 다른 서버에서 데이터베이스를 사용할 수 있도록 할 때 메타데이터 관리를 참조하세요.
SQL Server 데이터베이스 엔진의 일부 기능은 데이터베이스 엔진이 데이터베이스 파일에 정보를 저장하는 방식을 변경합니다. 이러한 기능은 특정 버전의 SQL Server로 제한됩니다. 이러한 기능이 포함된 데이터베이스는 해당 기능을 지원하지 않는 SQL Server 버전으로 이동시킬 수 없습니다. 현재 데이터베이스에 설정된 모든 버전별 기능 목록을 보려면 sys.dm_db_persisted_sku_features
동적 관리 뷰를 사용합니다.
이 문서의 절차를 사용하려면 데이터베이스 파일의 논리적 이름이 필요합니다. 이름을 가져오려면 sys.master_files 카탈로그 뷰에서 이름 열을 쿼리합니다.
전체 텍스트 카탈로그는 파일 시스템에 저장되지 않고 데이터베이스에 통합됩니다. 데이터베이스를 이동할 때 전체 텍스트 카탈로그가 자동으로 이동합니다.
참고 항목
Windows 서비스 계정 및 사용 권한 구성에 대한 서비스 계정에 파일 시스템의 새 파일 위치에 대한 권한이 있는지 확인합니다. 자세한 내용은 데이터베이스 엔진 액세스에 대한 파일 시스템 사용 권한 구성을 참조하세요.
계획된 재배치 절차
계획된 재배치의 일부로 데이터 또는 로그 파일을 이동하려면 다음 단계를 따릅니다.
이동할 각 파일에 대해 다음 문을 실행합니다.
ALTER DATABASE database_name MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
다음 문을 실행하여 데이터베이스를 오프라인 상태로 가져옵니다.
ALTER DATABASE database_name SET OFFLINE;
이 작업을 수행하려면 데이터베이스에 대한 단독 액세스 권한이 필요합니다. 데이터베이스에 대한 다른 연결이 열려 있는 경우 모든 연결이 닫힐 때까지
ALTER DATABASE
문이 차단됩니다. 이 동작을 재정의하려면WITH <termination>
절을 사용합니다. 예를 들어 데이터베이스에 대한 다른 모든 연결을 자동으로 롤백하고 연결을 끊으려면 다음을 사용합니다.ALTER DATABASE database_name SET OFFLINE WITH ROLLBACK IMMEDIATE;
파일을 새 위치로 이동합니다.
다음 문을 실행합니다.
ALTER DATABASE database_name SET ONLINE;
다음 쿼리를 실행하여 파일 변경 내용을 확인합니다.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
예약된 디스크 유지 관리를 위한 재배치
예약된 디스크 유지 관리 프로세스의 일부로 파일을 재배치하려면 다음 단계를 따릅니다.
이동할 각 파일에 대해 다음 문을 실행합니다.
ALTER DATABASE database_name MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
유지 관리를 수행하려면 SQL Server 인스턴스를 중지하거나 시스템을 종료합니다. 자세한 내용은 SQL Server 서비스 시작, 중지, 일시 중지, 재개 및 다시 시작을 참조하세요.
파일을 새 위치로 이동합니다.
SQL Server 인스턴스 또는 서버를 다시 시작합니다. 자세한 내용은 SQL Server 서비스 시작, 중지, 일시 중지, 재개 및 다시 시작을 참조하세요.
다음 쿼리를 실행하여 파일 변경 내용을 확인합니다.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
오류 복구 절차
하드웨어 오류로 인해 파일을 이동해야 하는 경우 다음 단계에 따라 파일을 새 위치로 재배치합니다.
Important
데이터베이스가 주의 대상 모드이거나 복구되지 않은 상태여서 시작할 수 없는 경우에는 sysadmin 고정 역할의 구성원만 파일을 이동할 수 있습니다.
SQL Server 인스턴스가 이미 시작되었다면 중지합니다.
명령 프롬프트에서 다음 명령 중 하나를 입력하여
master
전용 복구 모드에서 SQL Server 인스턴스를 시작합니다.기본(MSSQLSERVER) 인스턴스의 경우 다음 명령을 실행합니다.
NET START MSSQLSERVER /f /T3608
명명된 인스턴스의 경우 다음 명령을 실행합니다.
NET START MSSQL$instancename /f /T3608
자세한 내용은 SQL Server 서비스 시작, 중지, 일시 중지, 재개 및 다시 시작을 참조하세요. Linux에 대한 자세한 내용은 Linux에서 SQL Server 서비스 시작, 중지 및 다시 시작을 참조하세요.
이동할 각 파일에 대해 sqlcmd 명령 또는 SQL Server Management Studio 를 사용하여 다음 문을 실행합니다.
ALTER DATABASE database_name MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
sqlcmd 유틸리티를 사용하는 방법에 대한 자세한 내용은 sqlcmd - 유틸리티 사용을 참조하세요.
sqlcmd 유틸리티 또는 SQL Server Management Studio를 종료합니다.
SQL Server 인스턴스를 중지합니다.
파일을 새 위치로 이동합니다.
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>');
예제
다음 예에서는 계획된 재배치의 일부로 AdventureWorks2022
로그 파일을 새 위치로 이동합니다.
master
데이터베이스의 컨텍스트에 있는지 확인합니다.USE master; GO
논리 파일 이름을 반환합니다.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'AdventureWorks2022') AND type_desc = N'LOG'; GO
데이터베이스를 오프라인으로 설정합니다.
ALTER DATABASE AdventureWorks2022 SET OFFLINE; GO
파일을 새 위치로 물리적으로 이동시키세요. 다음 문에서
FILENAME
에 지정된 경로를 서버의 새 파일 위치로 수정합니다.ALTER DATABASE AdventureWorks2022 MODIFY FILE (NAME = AdventureWorks2022_Log, FILENAME = 'C:\NewLoc\AdventureWorks2022_Log.ldf'); GO ALTER DATABASE AdventureWorks2022 SET ONLINE; GO
새 위치를 확인합니다.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'AdventureWorks2022') AND type_desc = N'LOG';