sp_detach_db(Transact-SQL)

업데이트: 2006년 12월 12일

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

ms188031.note(ko-kr,SQL.90).gif중요:
분리할 복제된 데이터베이스는 게시되지 않습니다. 자세한 내용은 이 항목의 뒷부분에 나오는 "주의" 섹션을 참조하십시오.

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

구문

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

인수

  • [ @dbname=] 'database_name'
    분리할 데이터베이스의 이름입니다. database_namesysname이며 기본값은 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입니다. KeepFulltextIndexFilefalse이면 데이터베이스가 읽기 전용이 아닐 경우 데이터베이스와 연결된 전체 텍스트 인덱스 파일과 전체 텍스트 인덱스의 메타데이터가 모두 삭제됩니다. NULL 또는 true이면 전체 텍스트 관련 메타데이터가 유지됩니다.

반환 코드 값

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

결과 집합

없음

주의

제한 사항

다음이 True인 경우에는 데이터베이스를 분리할 수 없습니다.

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

  • 데이터베이스가 복제된 경우 해당 데이터베이스가 게시됩니다.
    데이터베이스를 분리하기 전에 sp_replicationdboption을 실행하여 게시를 해제해야 합니다.

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

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

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

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

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

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

데이터베이스를 분리하면 SQL Server의 인스턴스에 대한 계획 캐시가 삭제됩니다. 계획 캐시를 삭제하면 모든 후속 실행 계획이 다시 컴파일되며 일시적으로 갑자기 쿼리 성능이 저하됩니다. SQL Server 2005 서비스 팩 2에서는 계획 캐시의 삭제된 각 캐시스토어에 대해 SQL Server 오류 로그에 "데이터베이스 유지 관리 또는 재구성 작업으로 인해 '%s' 캐시스토어(계획 캐시의 일부)에 대한 캐시스토어 플러시가 SQL Server에서 %d번 발견되었습니다"라는 정보 메시지가 있습니다. 이 메시지는 캐시가 해당 시간 간격 내에 플러시되는 동안 5분마다 기록됩니다.

배타적 액세스 권한 얻기

데이터베이스를 분리하려면 해당 데이터베이스를 배타적으로 사용해야 합니다. 분리할 데이터베이스가 사용되고 있으면 분리하기 전에 데이터베이스를 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';

참고 항목

참조

ALTER DATABASE(Transact-SQL)
CREATE DATABASE(Transact-SQL)

관련 자료

데이터베이스 분리 및 연결
데이터 및 로그 파일 보안
방법: 데이터베이스 분리(SQL Server Management Studio)

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2006년 12월 12일

새로운 내용
  • 계획 캐시 삭제에 대한 섹션을 주의에 추가했습니다.
변경된 내용
  • @keepfulltextindexfile 매개 변수의 설정에 대한 자세한 설명을 추가했습니다.

2006년 7월 17일

새로운 내용
  • 시스템 데이터베이스 분리에 대한 제한 사항을 추가했습니다.

2006년 4월 14일

새로운 내용
  • @keepfulltextindexfile을 사용하는 예를 추가했습니다.
변경된 내용
  • @KeepFulltextIndexFile@keepfulltextindexfile로 변경했습니다.

2005년 12월 5일

새로운 내용
  • 데이터베이스가 사용되고 있으면 안 된다는 제한 사항과 sp_detach_db를 실행하기 전에 배타적 액세스 권한을 얻는 방법에 대한 섹션을 추가했습니다.