sp_detach_db(Transact-SQL)

적용 대상:SQL Server

현재 서버 인스턴스에서 사용되지 않는 데이터베이스를 분리하고 선택적으로 분리하기 전에 모든 테이블에서 UPDATE STATISTICS를 실행합니다.

Important

복제된 데이터베이스를 분리하려면 게시 취소해야 합니다. 자세한 내용은 이 항목의 뒷부분에 나오는 "주의" 섹션을 참조하세요.

Transact-SQL 구문 표기 규칙

구문

  
sp_detach_db [ @dbname= ] 'database_name'   
    [ , [ @skipchecks= ] 'skipchecks' ]   
    [ , [ @keepfulltextindexfile = ] 'KeepFulltextIndexFile' ]   

인수

[ @dbname = ] 'database_name' 분리할 데이터베이스의 이름입니다. database_name 기본값이 NULL인 sysname 값입니다.

[ @skipchecks = ] 'skipchecks' UPDATE STATISTIC을 건너뛰거나 실행할지 여부를 지정합니다. skipchecksnvarchar(10) 값이며 기본값은 NULL입니다. UPDATE STATISTICS를 건너뛰려면 true를 지정합니다. UPDATE STATISTICS를 명시적으로 실행하려면 false를 지정합니다.

기본적으로 UPDATE STATISTICS는 테이블과 인덱스에 있는 데이터에 관한 정보를 업데이트하기 위해 수행됩니다. UPDATE STATISTICS를 수행하는 것은 읽기 전용 미디어로 이동해야 하는 데이터베이스에 유용합니다.

[ @keepfulltextindexfile = ] 'KeepFulltextIndexFile' 분리 중인 데이터베이스와 연결된 전체 텍스트 인덱스 파일이 데이터베이스 분리 작업 중에 삭제되지 않도록 지정합니다. KeepFulltextIndexFile은 기본값이 truenvarchar(10) 값입니다. KeepFulltextIndexFilefalse이면 데이터베이스가 읽기 전용이 아닌 한 데이터베이스와 연결된 모든 전체 텍스트 인덱스 파일과 전체 텍스트 인덱스의 메타데이터가 삭제됩니다. NULL 또는 true이면 전체 텍스트 관련 메타데이터가 유지됩니다.

Important

@keepfulltextindexfile 매개 변수는 이후 버전의 SQL Server에서 제거됩니다. 새 개발 작업에서는 이 매개 변수를 사용하지 말고 현재 이 매개 변수를 사용하는 애플리케이션은 가능한 한 빨리 수정하십시오.

반환 코드 값

0(성공) 또는 1(실패)

결과 집합

아니요

설명

데이터베이스가 분리되면 모든 메타데이터가 삭제됩니다. 데이터베이스가 로그인 계정 의 기본 데이터베이스인 경우 master 는 기본 데이터베이스가 됩니다.

참고 항목

모든 로그인 계정의 기본 데이터베이스를 보는 방법에 대한 자세한 내용은 sp_helplogins(Transact-SQL)를 참조하세요. 필요한 권한이 있는 경우 ALTER LOGIN을 사용하여 로그인에 새 기본 데이터베이스를 할당할 수 있습니다.

제한 사항

다음 중 어느 것이라도 true이면 데이터베이스를 분리할 수 없습니다.

  • 데이터베이스가 현재 사용 중입니다. 자세한 내용은 이 항목의 뒷부분에 있는 "단독 액세스 가져오기"를 참조하세요.

  • 데이터베이스가 복제된 경우 해당 데이터베이스가 게시됩니다.

    데이터베이스를 분리하려면 먼저 sp_replicationdboption 실행하여 게시를 사용하지 않도록 설정해야 합니다.

    참고 항목

    sp_replicationdboption을 사용할 수 없는 경우 sp_removedbreplication을 실행하여 복제를 제거할 수 있습니다.

  • 데이터베이스 스냅샷이 데이터베이스에 있습니다.

    데이터베이스를 분리하려면 먼저 모든 스냅샷을 삭제해야 합니다. 자세한 내용은 데이터베이스 스냅샷 삭제(Transact-SQL)를 참조하세요.

    참고 항목

    데이터베이스 스냅샷은 분리하거나 연결할 수 없습니다.

  • 데이터베이스가 미러링되고 있습니다.

    데이터베이스 미러링 세션이 종료될 때까지 데이터베이스를 분리할 수 없습니다. 자세한 내용은 데이터베이스 미러링 제거(SQL Server)를 참조하세요.

  • 데이터베이스가 의심스럽다.

    주의 대상 데이터베이스를 분리하기 전에 응급 모드로 설정해야 합니다. 데이터베이스를 긴급 모드로 전환하는 방법에 대한 자세한 내용은 ALTER DATABASE(Transact-SQL)를 참조하세요.

  • 데이터베이스는 시스템 데이터베이스입니다.

단독 액세스 가져오기

데이터베이스를 분리하려면 해당 데이터베이스를 단독으로 사용해야 합니다. 분리하려는 데이터베이스가 사용 중인 경우 데이터베이스를 분리하기 전에 데이터베이스를 SINGLE_USER 모드로 설정하여 단독 액세스 권한을 얻습니다.

데이터베이스를 SINGLE_USER로 설정하기 전에 AUTO_UPDATE_STATISTICS_ASYNC 옵션이 OFF로 설정되어 있는지 확인합니다. 이 옵션을 ON으로 설정하면 통계를 업데이트하는 데 사용되는 백그라운드 스레드가 데이터베이스에 대한 연결을 사용하므로 단일 사용자 모드에서 데이터베이스에 액세스할 수 없습니다. 자세한 내용은 데이터베이스를 단일 사용자 모드로 설정하는 방법을 참조하세요.

예를 들어 다음 문은 ALTER DATABASE 모든 현재 사용자가 데이터베이스에서 연결을 끊은 후 AdventureWorks2022 데이터베이스에 대한 단독 액세스 권한을 얻습니다.

USE master;  
ALTER DATABASE AdventureWorks2022  
SET SINGLE_USER;  
GO  

참고 항목

현재 사용자가 즉시 또는 지정된 시간(초) 내에 데이터베이스에서 강제로 나가도록 하려면 ROLLBACK 옵션인 ALTER DATABASE database_name SET SINGLE_USER WITH ROLLBACK rollback_option 사용합니다. 자세한 내용은 ALTER DATABASE(Transact-SQL)를 참조하세요.

데이터베이스 다시 연결

분리된 파일은 그대로 유지되며 CREATE DATABASE(FOR ATTACH 또는 FOR ATTACH_REBUILD_LOG 옵션 포함)를 사용하여 다시 연결할 수 있습니다. 또한 파일을 다른 서버로 이동하거나 첨부할 수 있습니다.

사용 권한

sysadmin 고정 서버 역할의 멤버 자격 또는 데이터베이스의 db_owner 역할의 멤버 자격이 필요합니다.

다음 예제에서는 skipchecks가 true로 설정된 AdventureWorks2022 데이터베이스를 분리합니다 .

EXEC sp_detach_db 'AdventureWorks2022', 'true';  

다음 예제에서는 AdventureWorks2022 데이터베이스를 분리하고 전체 텍스트 인덱스 파일과 전체 텍스트 인덱스의 메타데이터를 유지합니다. 이 명령은 기본 동작인 UPDATE STATISTICS를 실행합니다.

exec sp_detach_db @dbname='AdventureWorks2022'  
    , @keepfulltextindexfile='true';  

참고 항목

ALTER DATABASE(Transact-SQL)
데이터베이스 분리 및 연결(SQL Server)
CREATE DATABASE(SQL Server Transact-SQL)
데이터베이스 분리