사용자 데이터베이스 이동

적용 대상:SQL Server

SQL Server에서 ALTER DATABASE 문의 FILENAME 절에 새 파일 위치를 지정하여 사용자 데이터베이스의 데이터, 로그 및 전체 텍스트 카탈로그 파일을 새 위치로 이동할 수 있습니다. 이 메서드는 동일한 인스턴스 SQL Server 내에서 데이터베이스 파일을 이동하는 데 적용됩니다. 데이터베이스를 SQL Server의 다른 인스턴스 또는 다른 서버로 이동하려면 백업 및 복원 또는 분리 및 연결 작업을 사용합니다.

참고 항목

이 문서에서는 사용자 데이터베이스 파일을 이동하는 방법을 설명합니다. 시스템 데이터베이스 파일 이동에 대해서는 시스템 데이터베이스 이동을 참조하세요.

고려 사항

데이터베이스를 다른 서버 인스턴스로 이동하는 경우 사용자 및 애플리케이션에 일관된 환경을 제공하기 위해 데이터베이스에 대한 일부 또는 모든 메타데이터를 다시 만들어야 할 수 있습니다. 자세한 내용은 다른 서버 인스턴스에서 데이터베이스를 사용할 수 있도록 할 때 메타데이터 관리(SQL Server)를 참조하세요.

SQL Server 데이터베이스 엔진의 일부 기능은 데이터베이스 엔진이 데이터베이스 파일에 정보를 저장하는 방식을 변경합니다. 이러한 기능은 특정 버전의 SQL Server로 제한됩니다. 이러한 기능이 포함된 데이터베이스는 해당 기능을 지원하지 않는 SQL Server 버전으로 이동할 수 없습니다. 현재 데이터베이스에 설정된 모든 버전별 기능 목록을 보려면 sys.dm_db_persisted_sku_features 동적 관리 뷰를 사용합니다.

이 문서의 절차를 사용하려면 데이터베이스 파일의 논리적 이름이 필요합니다. 이름을 가져오려면 sys.master_files 카탈로그 뷰에서 이름 열을 쿼리합니다.

SQL Server 2008 R2(10.50.x)부터 전체 텍스트 카탈로그는 파일 시스템에 저장되지 않고 데이터베이스에 통합됩니다. 이제 데이터베이스를 이동할 때 전체 텍스트 카탈로그가 자동으로 이동합니다.

참고 항목

SQL Server Database Services 서비스의 서비스 계정에 파일 시스템의 새 파일 위치에 대한 권한이 있는지 확인하세요. 자세한 내용은 데이터베이스 엔진 액세스에 대한 파일 시스템 권한 구성을 참조 하세요.

계획된 재배치 절차

계획된 재배치의 일부로 데이터 또는 로그 파일을 이동하려면 다음 단계를 따릅니다.

  1. 이동할 각 파일에 대해 다음 문을 실행합니다.

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' );  
    
  2. 다음 문을 실행하여 데이터베이스를 오프라인 상태로 가져옵니다.

    ALTER DATABASE database_name SET OFFLINE;  
    

    이 작업을 수행하려면 데이터베이스에 대한 단독 액세스 권한이 필요합니다. 데이터베이스에 대한 다른 연결이 열려 있는 경우 모든 연결이 닫힐 때까지 ALTER DATABASE 문이 차단됩니다. 이 동작을 재정의하려면 WITH <termination>을 사용합니다. 예를 들어 데이터베이스에 대한 다른 모든 연결을 자동으로 롤백하고 연결을 끊으려면 다음을 사용합니다.

    ALTER DATABASE database_name SET OFFLINE WITH ROLLBACK IMMEDIATE;  
    
  3. 파일 또는 파일을 새 위치로 이동합니다.

  4. 다음 문을 실행합니다.

    ALTER DATABASE database_name SET ONLINE;  
    
  5. 다음 쿼리를 실행하여 파일 변경을 확인합니다.

    SELECT name, physical_name AS CurrentLocation, state_desc  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'<database_name>');  
    

예약된 디스크 유지 관리를 위한 재배치

예약된 디스크 유지 관리 프로세스의 일부로 파일을 재배치하려면 다음 단계를 수행합니다.

  1. 이동할 각 파일에 대해 다음 문을 실행합니다.

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' );  
    
  2. SQL Server 인스턴스를 중지하거나 시스템을 종료하여 유지 관리를 수행합니다. 자세한 내용은 데이터베이스 엔진, SQL Server 에이전트 또는 SQL Server Browser 서비스의 시작, 중지, 일시 중지, 재개 및 다시 시작을 참조하세요.

  3. 파일 또는 파일을 새 위치로 이동합니다.

  4. SQL Server 또는 서버의 인스턴스를 다시 시작합니다. 자세한 내용은 데이터베이스 엔진, SQL Server 에이전트 또는 SQL Server Browser 서비스 시작, 중지, 일시 중지, 다시 시작, 다시 시작을 참조 하세요.

  5. 다음 쿼리를 실행하여 파일 변경을 확인합니다.

    SELECT name, physical_name AS CurrentLocation, state_desc  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'<database_name>');  
    

오류 복구 절차

하드웨어 오류로 인해 파일을 이동해야 하는 경우 다음 단계를 사용하여 파일을 새 위치로 재배치합니다.

Important

데이터베이스를 시작할 수 없는 경우, 즉 의심 모드이거나 복구되지 않은 상태인 경우 sysadmin 고정 역할의 멤버만 파일을 이동할 수 있습니다.

  1. SQL Server 인스턴스가 시작되면 중지합니다.

  2. 명령 프롬프트에서 다음 명령 중 하나를 입력하여 마스터 전용 복구 모드에서 SQL Server 인스턴스를 시작합니다.

    • 기본값(MSSQLSERVER) 인스턴스의 경우 다음 명령을 실행합니다.

      NET START MSSQLSERVER /f /T3608  
      
    • 명명된 인스턴스의 경우 다음 명령을 실행합니다.

      NET START MSSQL$instancename /f /T3608  
      

    자세한 내용은 데이터베이스 엔진, SQL Server 에이전트 또는 SQL Server Browser 서비스의 시작, 중지, 일시 중지, 재개 및 다시 시작을 참조하세요.

  3. 이동할 각 파일에 대해 sqlcmd 명령 또는 SQL Server Management Studio를 사용하여 다음 문을 실행합니다.

    ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' );  
    

    sqlcmd 유틸리티를 사용하는 방법에 대한 자세한 내용은 sqlcmd 유틸리티 사용을 참조하세요.

  4. sqlcmd 유틸리티 또는 SQL Server Management Studio를 종료합니다.

  5. SQL Server 인스턴스를 중지합니다.

  6. 파일 또는 파일을 새 위치로 이동합니다.

  7. SQL Server 인스턴스를 시작합니다. 예를 들어 NET START MSSQLSERVER을 실행합니다.

  8. 다음 쿼리를 실행하여 파일 변경을 확인합니다.

    SELECT name, physical_name AS CurrentLocation, state_desc  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'<database_name>');  
    

다음 예에서는 계획된 재배치의 일부로 AdventureWorks2022 로그 파일을 새 위치로 이동합니다.

USE master;  
GO  
-- Return the logical file name.  
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  
-- Physically move the file to a new location.  
-- In the following statement, modify the path specified in FILENAME to  
-- the new location of the file on your server.  
ALTER DATABASE AdventureWorks2022   
    MODIFY FILE ( NAME = AdventureWorks2022_Log,   
                  FILENAME = 'C:\NewLoc\AdventureWorks2022_Log.ldf');  
GO  
ALTER DATABASE AdventureWorks2022 SET ONLINE;  
GO  
--Verify the new location.  
SELECT name, physical_name AS CurrentLocation, state_desc  
FROM sys.master_files  
WHERE database_id = DB_ID(N'AdventureWorks2022')  
    AND type_desc = N'LOG';  

참고 항목