sp_attach_db(Transact-SQL)
적용 대상: SQL Server
현재 서버 인스턴스에서 사용되지 않는 데이터베이스를 분리하고 선택적으로 분리하기 전에 모든 테이블에서 실행됩니다 UPDATE STATISTICS
.
복제된 데이터베이스를 분리하려면 게시 취소해야 합니다. 자세한 내용은 이 문서의 뒷부분에 있는 설명 섹션을 참조하세요.
구문
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';