다음을 통해 공유


sp_attach_db(Transact-SQL)

적용 대상: SQL Server

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

복제된 데이터베이스를 분리하려면 게시 취소해야 합니다. 자세한 내용은 이 문서의 뒷부분에 있는 설명 섹션을 참조하세요.

Transact-SQL 구문 표기 규칙

구문

sp_detach_db
    [ [ @dbname = ] N'dbname' ]
    [ , [ @skipchecks = ] N'skipchecks' ]
    [ , [ @keepfulltextindexfile = ] N'keepfulltextindexfile' ]
[ ; ]

인수

[ @dbname = ] N'dbname'

분리할 데이터베이스의 이름입니다. @dbname sysname이며 기본값은 .입니다NULL.

[ @skipchecks = ] N'skipchecks'

건너뛰거나 실행할 UPDATE STATISTICS지 여부를 지정합니다. @skipchecks 기본값NULL인 nvarchar(10)입니다. 건너뛰UPDATE STATISTICS려면 .true 명시적으로 실행 UPDATE STATISTICS하려면 .를 지정합니다 false.

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

[ @keepfulltextindexfile = ] N'keepfulltextindexfile'

분리 중인 데이터베이스와 연결된 전체 텍스트 인덱스 파일이 데이터베이스 분리 작업 중에 삭제되지 않도록 지정합니다. @keepfulltextindexfile 기본값true인 nvarchar(10)입니다.

  • @keepfulltextindexfile 경우 데이터베이스가 false읽기 전용이 아닌 한 데이터베이스와 연결된 모든 전체 텍스트 인덱스 파일과 전체 텍스트 인덱스의 메타데이터가 삭제됩니다.
  • true또는 전체 텍스트 관련 메타데이터가 유지되는 경우 NULL

Important

SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 애플리케이션은 수정하세요.

반환 코드 값

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

결과 집합

없음.

설명

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

참고 항목

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

제한 사항

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

  • 데이터베이스가 현재 사용 중입니다. 자세한 내용은 단독 액세스 가져오기를 참조하세요.

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

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

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

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

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

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

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

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

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

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

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

단독 액세스 가져오기

데이터베이스를 분리하려면 해당 데이터베이스를 단독으로 사용해야 합니다. 분리하려는 데이터베이스를 사용 중인 경우 분리하기 전에 데이터베이스를 모드로 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를 참조하세요.

데이터베이스 다시 연결

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

사용 권한

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

예제

이 문서의 Transact-SQL 코드 샘플은 AdventureWorks2022 또는 AdventureWorksDW2022 샘플 데이터베이스를 사용하며, 이는 Microsoft SQL Server 예시 및 커뮤니티 프로젝트(Microsoft SQL Server Samples and Community Projects) 홈 페이지에서 다운로드할 수 있습니다.

다음 예제에서는 @skipchecks 설정하여 데이터베이스를 분리 AdventureWorks2022 합니다true.

EXEC sp_detach_db 'AdventureWorks2022', 'true';

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

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