다음을 통해 공유


sp_detach_db(Transact-SQL)

서버 인스턴스에서 현재 사용하지 않는 데이터베이스를 분리하고, 필요한 경우 분리하기 전에 모든 테이블에서 UPDATE STATISTICS를 실행합니다.

중요 정보중요

분리할 복제된 데이터베이스는 게시되지 않습니다. 자세한 내용은 이 항목의 뒷부분에 나오는 "주의" 섹션을 참조하십시오.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

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

인수

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

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

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

  • [ @keepfulltextindexfile= ] 'KeepFulltextIndexFile'
    분리되는 데이터베이스와 연결된 전체 텍스트 인덱스 파일이 데이터베이스 분리 작업 동안 삭제되지 않도록 지정합니다. KeepFulltextIndexFile은 nvarchar(10)이며 기본값은 true입니다. KeepFulltextIndexFile이 false이면 데이터베이스가 읽기 전용이 아닐 경우 데이터베이스와 연결된 전체 텍스트 인덱스 파일과 전체 텍스트 인덱스의 메타데이터가 모두 삭제됩니다. NULL 또는 true이면 전체 텍스트 관련 메타데이터가 유지됩니다.

    중요 정보중요

    @keepfulltextindexfile 매개 변수는 SQL Server의 이후 버전에서 제거될 예정입니다. 새 개발 작업에서는 이 매개 변수를 사용하지 말고, 현재 이 매개 변수를 사용하는 응용 프로그램은 가능한 한 빨리 수정하십시오.

반환 코드 값

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

결과 집합

없음

주의

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

[!참고]

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

제한 사항

다음 중 하나라도 해당하는 경우 데이터베이스를 분리할 수 없습니다.

  • 데이터베이스가 현재 사용되고 있는 경우. 자세한 내용은 이 항목의 뒷부분에 나오는 "배타적 액세스 권한 얻기"를 참조하십시오.

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

    데이터베이스를 분리하기 전에 sp_replicationdboption을 실행하여 게시를 해제해야 합니다.

    [!참고]

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

  • 데이터베이스에 데이터베이스 스냅숏이 있는 경우.

    데이터베이스를 분리하려면 먼저 해당 데이터베이스의 모든 스냅숏을 삭제해야 합니다. 자세한 내용은 방법: 데이터베이스 스냅숏 삭제(Transact-SQL)를 참조하십시오.

    [!참고]

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

  • 데이터베이스가 미러링되고 있는 경우.

    데이터베이스는 데이터베이스 미러링 세션이 종료된 후에야 분리할 수 있습니다. 자세한 내용은 데이터베이스 미러링 제거를 참조하십시오.

  • 주의 대상 데이터베이스인 경우.

    SQL Server 2005 이상 버전에서는 주의 대상 데이터베이스를 분리하기 전에 응급 모드로 설정해야 합니다. 데이터베이스를 응급 모드로 설정하는 방법은 ALTER DATABASE(Transact-SQL)를 참조하십시오.

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

배타적 액세스 권한 얻기

데이터베이스를 분리하려면 해당 데이터베이스를 단독으로 사용해야 합니다. 분리할 데이터베이스가 사용되고 있으면 분리하기 전에 데이터베이스를 SINGLE_USER 모드로 설정하여 배타적 액세스 권한을 얻으십시오.

예를 들어 다음 ALTER DATABASE 문을 실행하면 모든 현재 사용자가 데이터베이스에서 연결이 끊어진 후에도 AdventureWorks 데이터베이스를 배타적으로 사용할 수 있습니다.

USE master;
ALTER DATABASE AdventureWorks
SET SINGLE_USER;
GO

[!참고]

현재 사용자를 즉시 또는 지정된 시간(초) 내에 데이터베이스에서 강제로 연결을 끊으려면 ROLLBACK 옵션을 사용하십시오. ALTER DATABASE database_name SET SINGLE_USER WITH ROLLBACK rollback_option. 자세한 내용은 ALTER DATABASE(Transact-SQL)를 참조하십시오.

데이터베이스 다시 연결

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

사용 권한

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

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

EXEC sp_detach_db 'AdventureWorks', 'true';

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

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