sp_attach_db(Transact-SQL)

적용 대상:SQL Server

데이터베이스를 서버에 연결합니다.

Important

이 기능은 이후 버전의 SQL Server에서 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 애플리케이션은 수정하세요. 대신 사용하는 CREATE DATABASE <database_name> FOR ATTACH 것이 좋습니다. 자세한 내용은 CREATE DATABASE를 참조하세요. 하나 이상의 새 위치가 있는 경우 여러 로그 파일을 다시 빌드 CREATE DATABASE <database_name> FOR ATTACH_REBUILD_LOG하려면 .

알 수 없거나 신뢰할 수 없는 원본에서 데이터베이스를 연결하거나 복원하지 마세요. 이러한 데이터베이스에 포함된 악성 코드가 의도하지 않은 Transact-SQL 코드를 실행하거나 스키마 또는 물리적 데이터베이스 구조를 수정하여 오류가 발생할 수 있습니다. 알 수 없거나 신뢰할 수 없는 소스의 데이터베이스를 사용하기 전에 비프로덕션 서버의 데이터베이스에서 DBCC CHECKDB 를 실행하여 데이터베이스에서 코드(예: 저장 프로시저 또는 다른 사용자 정의 코드)를 시험해 보세요.

구문

sp_attach_db
    [ @dbname = ] N'dbname'
    , [ { @filename1 ... @filename16 } = ] { N'*filename1*' ... N'*filename16*' }
[ ; ]

인수

[ @dbname = ] N'dbname'

서버에 연결할 데이터베이스의 이름입니다. @dbname 기본값이 없는 sysname입니다.

[ { @filename1 ... @filename16 } = ] { N'filename1' ... N'filename16' }

데이터베이스 파일의 경로를 포함한 실제 이름입니다. 이 매개 변수는 nvarchar(260)이며 기본값은 .입니다 NULL. 최대 16개 파일 이름을 지정할 수 있습니다. 매개 변수 이름은 @filename1 시작하여 @filename16 증가합니다. 파일 이름 목록에는 최소한 기본 파일(.mdf)이 포함되어야 합니다. 주 파일에는 데이터베이스의 다른 파일을 가리키는 시스템 테이블이 포함됩니다. 또한 목록은 데이터베이스가 분리된 다음 이동된 모든 파일을 포함해야 합니다.

이 매개 변수는 FILENAME 문의 매개 변수에 매핑됩니다 CREATE DATABASE . 자세한 내용은 CREATE DATABASE를 참조하세요.

참고 항목

전체 텍스트 카탈로그 파일이 포함된 SQL Server 2005(9.x) 데이터베이스를 최신 버전의 SQL Server에 연결하는 경우 카탈로그 파일은 SQL Server 2005(9.x)와 동일한 다른 데이터베이스 파일과 함께 이전 위치에서 연결됩니다. 자세한 내용은 전체 텍스트 검색 업그레이드를 참조하세요.

반환 코드 값

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

결과 집합

없음.

설명

저장 프로시저는 sp_attach_db 명시적 sp_detach_db 작업을 사용하거나 복사한 데이터베이스를 사용하여 이전에 데이터베이스 서버에서 분리된 데이터베이스에서만 실행해야 합니다. 16개 이상의 파일을 지정해야 하는 경우 사용 CREATE DATABASE <database_name> FOR ATTACH 하거나 CREATE DATABASE <database_name> FOR_ATTACH_REBUILD_LOG. 자세한 내용은 CREATE DATABASE를 참조하세요.

지정되지 않은 모든 파일은 마지막으로 알려진 위치에 있는 것으로 가정합니다. 다른 위치에서 파일을 사용하려면 새 위치를 지정해야 합니다.

최신 버전의 SQL Server에서 만든 데이터베이스는 이전 버전에서 연결할 수 없습니다.

참고 항목

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

분리되지 않고 복사된 복제본(replica)ted 데이터베이스를 연결하는 경우 다음 조건을 고려합니다.

  • 데이터베이스를 원래 데이터베이스와 동일한 서버 인스턴스 및 버전에 연결하는 경우 추가 단계가 필요하지 않습니다.

  • 데이터베이스를 동일한 서버 인스턴스의 업그레이드된 버전에 연결하는 경우에는 연결 작업이 완료된 다음, sp_vupgrade_replication을 실행하여 복제를 업그레이드해야 합니다.

  • 데이터베이스를 버전에 관계없이 다른 서버 인스턴스에 연결하는 경우에는 연결 작업이 완료된 다음, sp_removedbreplication을 실행하여 복제를 제거해야 합니다.

데이터베이스가 SQL Server의 새 인스턴스에 처음 연결되거나 복원되면 SMK(서비스 마스터 키)로 암호화된 DMK(데이터베이스 마스터 키)의 복사본이 서버에 아직 저장되지 않습니다. DMK의 OPEN MASTER KEY 암호를 해독하려면 이 문을 사용해야 합니다. DMK가 암호 해독되면 문을 사용하여 ALTER MASTER KEY REGENERATE SMK로 암호화된 DMK 복사본을 서버에 제공하여 나중에 자동 암호 해독을 사용하도록 설정할 수 있습니다. 데이터베이스가 이전 버전에서 업그레이드되면 최신 AES 알고리즘을 사용하도록 DMK를 다시 생성해야 합니다. DMK를 다시 생성하는 방법은 ALTER MASTER KEY(Transact-SQL)를 참조하세요. AES로 업그레이드하기 위해 DMK 키를 다시 생성하는 데 소요되는 시간은 DMK에서 보호하는 개체 수에 따라 달라집니다. AES로 업그레이드하기 위해 DMK 키를 다시 생성하는 것은 한 번만 필요하며 키 회전 전략의 일부로 향후 다시 생성에는 영향을 주지 않습니다.

사용 권한

데이터베이스가 연결될 때 사용 권한을 처리하는 방법에 대한 자세한 내용은 CREATE DATABASE를 참조하세요.

예제

다음 예제에서는 현재 서버에 파일을 AdventureWorks2022 첨부합니다.

EXEC sp_attach_db @dbname = N'AdventureWorks2022',
    @filename1 =
N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks2022_Data.mdf',
    @filename2 =
N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks2022_log.ldf';