다음을 통해 공유


사용자 데이터베이스 이동

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부터 전체 텍스트 카탈로그는 파일 시스템에 저장되지 않고 데이터베이스에 통합됩니다. 이제 데이터베이스를 이동할 때 전체 텍스트 카탈로그가 자동으로 이동합니다.

계획된 재배치 절차

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

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

    ALTER DATABASE database_name SET OFFLINE;  
    
  2. 파일을 새 위치로 이동합니다.

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

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' );  
    
  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>');  
    

오류 복구 절차

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

중요합니다

데이터베이스를 시작할 수 없는 경우, 즉 의심 모드이거나 복구되지 않은 상태인 경우 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>');  
    

예시

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

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'AdventureWorks2012')  
    AND type_desc = N'LOG';  
GO  
ALTER DATABASE AdventureWorks2012 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 AdventureWorks2012   
    MODIFY FILE ( NAME = AdventureWorks2012_Log,   
                  FILENAME = 'C:\NewLoc\AdventureWorks2012_Log.ldf');  
GO  
ALTER DATABASE AdventureWorks2012 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'AdventureWorks2012')  
    AND type_desc = N'LOG';  

또한 참조하십시오

ALTER DATABASE(Transact-SQL)
CREATE DATABASE(SQL Server Transact-SQL)
데이터베이스 분리 및 연결(SQL Server)
시스템 데이터베이스 이동
데이터베이스 파일 이동
BACKUP(Transact-SQL)
RESTORE(Transact-SQL)
데이터베이스 엔진, SQL Server 에이전트 또는 SQL Server Browser 서비스 시작, 중지, 일시 중지, 재개 및 다시 시작