SQL Server에서 데이터베이스를 어떻게 연결합니까?


32

SQL Server에서 데이터베이스 연결과 관련된 몇 가지 일반적인 질문 :

  • 데이터베이스를 연결 또는 분리한다는 것은 무엇을 의미합니까?
  • 데이터베이스를 분리하려면 어떻게합니까?
  • 데이터베이스를 어떻게 첨부합니까?
    • 로그를 첨부하고 다시 작성한다는 것은 무엇을 의미합니까?
  • SQL Server Express에서 어떻게합니까?
  • 언제 분리 및 부착을 고려할 수 있습니까?
  • 위험이나 경고가 있습니까?
  • SQL Server 버전과 버전을 연결하는 것은 어떻습니까? (표준 대 기업? 2000-2008? 2012-2008?)

답변:


33

분리 또는 부착이란 무엇이며 어떻게 작동합니까?

분리부터 시작하겠습니다. SQL Server에서 데이터베이스를 분리하면 데이터베이스가 오프라인 상태가되어 분리하려는 SQL Server 인스턴스에서 데이터베이스가 제거됩니다. 데이터베이스 데이터 및 로그 파일은 그대로 유지되며 일관된 상태로 유지되므로 나중에 데이터베이스를 다른 SQL Server 인스턴스에 연결할 수 있습니다. 연결 은 제대로 분리되었거나 SQL Server의 완전히 종료 된 인스턴스에서 복사 된 데이터베이스에서 SQL Server 인스턴스로 데이터와 로그 파일을 연결하고 데이터베이스를 온라인 상태로 만듭니다.

데이터베이스를 어떻게 분리합니까?

이 작업은 T-SQL 또는 SQL Server Management Studio GUI에서 수행 할 수 있습니다.

GUI에서 분리 할 데이터베이스를 마우스 오른쪽 단추로 클릭하고을 선택 All Tasks하고 클릭하십시오 Detach. 거기에서 분리 대화 상자가 나타납니다. 활성 연결과 실행 중 롤백 작업을 강제로 연결 해제하기 위해 연결을 먼저 끊도록 선택할 수 있습니다. 분리하기 전에 통계를 업데이트하도록 선택할 수도 있습니다. 분리-분리 선택 ...

T-SQL에서 :

-- You don't want to be in the database you are trying to detach
USE Master
GO

-- Optional step to drop all active connections and roll back their work
ALTER DATABASE DatabaseName
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

-- Perform the detach
EXEC sp_detach_db 'DatabaseName'
GO

시스템 저장 프로 시저 sp_detach_db의 경우 선택적으로 전달할 수있는 두 개의 매개 변수가 있습니다.

  • @skipchecks-허용 가능한 입력 'True'또는 인 'False'경우 'True'SQL Server가 분리 전에 통계를 업데이트합니다. '이면 그렇지 False'않습니다. 여기에 아무것도 지정하지 않으면 통계는 SQL Server 2005 이상에서 업데이트됩니다.
    • @keepfulltextindexfile-여기의 기본값 'True'은-true로 설정하면 분리 중에 전체 텍스트 인덱스 메타 데이터가 삭제되지 않습니다.

분리와 나는 아래의 강조 위험에 대한 좀 더 세부 사항에 대해 더 많이 보려면 온라인 문서를 위한이 sp_detach_db시작하기에 좋은 장소입니다.

데이터베이스를 어떻게 연결합니까?

T-SQL 또는 SQL Server Management Studio GUI에서이 작업을 수행 할 수도 있습니다.

( 참고 : 데이터베이스에서 제대로 분리되지 않은 데이터 및 로그 파일이있는 경우 연결이 작동하지 않을 수 있습니다. 분리가 발생하면 데이터베이스가 오프라인 상태가되고 로그 및 데이터 파일이 일관된 상태가됩니다. 서비스가 완전히 종료되면 발생합니다. )

GUI에서 Databases인스턴스의 최상위 폴더를 마우스 오른쪽 버튼으로 클릭하고을 선택 Attach합니다. 다음 대화 상자에서 첨부 할 데이터베이스의 기본 데이터 파일 (.MDF)을 선택하고 다른 파일을 선택하고 해당 위치를 지정했는지 확인한 후 확인을 클릭하여 데이터베이스를 첨부하십시오.

T-SQL에서는 SQL Server 2005 이상에서이를 수행하는 가장 좋은 방법은 CREATE DATABASE명령을 사용하는 것입니다. 이 방법은 SQL Server 2012 이상에서 지원되는 방법입니다. 사용 방법을 sp_attach_db보려면 온라인 설명서 [sp_attach_db][3]또는에서 온라인 문서를 참조하십시오.[sp_attach_single_file_db][4]

사용 가능한 로그 파일과 데이터 파일이 있고 일관성이있는 경우 이것이 T-SQL 방식입니다.

-데이터베이스 작성 및 FOR ATTACH 절을 사용하여 첨부

CREATE DATABASE DatabaseName 
    ON (FILENAME = 'FilePath\FileName.mdf'), -- Main Data File .mdf
    (FILENAME = 'FilePath\LogFileName.ldf'), -- Log file .ldf
     (FILENAME = 'FilePath\SecondaryDataFile.ndf)  -- Optional - any secondary data files
    FOR ATTACH 
GO 

온라인 서적에서도 데이터베이스 작성 명령문에 대한 자세한 내용을 볼 수 있습니다 .

SQL Server Express에서 분리 / 연결하는 방법

실제로 동일합니다. SQL Server Management Studio Express를 사용하는 경우 위에서 설명한 GUI의 분리 / 연결 대화 상자를 사용하거나 위에서 설명한 SSMS Express를 통한 T-SQL 단계도 사용할 수 있습니다. Express와는 아무런 차이가 없습니다.

당신이 SSMS 익스프레스가없는 경우 (다운로드 할 수 있습니다 여기 에서 SQL Server 2012 Express 버전입니다).

SQLCMD세션 중 하나를 입력하고 위에서 설명한 것과 동일한 T-SQL 구문을 사용할 수 있습니다 .

언제 분리 또는 부착을 고려해야합니까?

먼저 분리 및 연결에 사용되지 않는 단어는 다음과 같습니다. 백업 및 복구 분리 및 연결은 일상적인 복구 목적으로 데이터베이스를 백업하는 방법이 아닙니다. 이런 방식으로 트랜잭션 로그 백업이 없으므로 데이터베이스 파일이 실수로 삭제 될 수있는 상태가되고이 목적에는 전혀 적합하지 않습니다.

즉, 분리 및 연결은 몇 가지 유스 케이스에 적합합니다 (완전하지는 않지만 추가로 새 답변을 추가하거나 작성하려면 자유롭게 편집하십시오).

  • 때때로 마이그레이션을 위해 ( 여기서 내 대답 에서 논의 된 것처럼 백업 / 복원을 선호하지만 )
  • 더 이상 적극적으로 사용되지 않지만 필요에 따라 나중에 연결할 수있는 데이터베이스를 제거하려는 경우
  • 특정 문제 해결 상황에서이 문제가 발생할 수 있습니다
  • 데이터와 로그 파일을 모두 백업하거나 다른 환경으로 복원 할 공간이 없습니다 (여기서는 안되지만 때로는 데이터베이스를 환경 주위로 옮기는 데 사용했습니다.) 로그는 로그 파일의 첨부 / 재 구축도 마찬가지입니다)

위험 및 경고

다시, 온라인 서적은 여기서 좋은 자료 이지만 데이터베이스 분리 또는 첨부와 관련하여 염두에 두어야 할 몇 가지 특정 고려 사항을 호출합니다.

떼다

  • 데이터베이스를 오프라인 상태로 만듭니다. 더 이상 액세스 할 수 없습니다. 이것은 분명해야하지만 호출 할 가치가 있습니다. 이것이 훌륭한 백업 옵션이 아닌 이유입니다.
  • 데이터베이스가 온라인 상태이면 SQL Server가 파일을 잠급니다. 재생 중에 다른 상황이있을 수 있기 때문에이 문제를 증명하기 위해 이것을 시도하지 않는 것이 좋지만 SQL Server가 온라인 상태 인 동안 일반적으로 데이터베이스 파일 (데이터, 보조 데이터 또는 로그 파일)을 삭제할 수 없습니다. 이것은 좋은 것입니다. 분리하면 그러한 보호 기능이 없습니다. 이것은 나쁜 일이 될 수 있습니다.
  • 데이터베이스 손상을 다루고 있고 Detach의 첫 번째 단계가있는 기사를 찾은 경우- 잘못된 것입니다. 손상된 데이터베이스를 분리하면 문제 가 될 수 있습니다. 해당 데이터베이스를 다시 연결하지 않았을 수 있습니다.
  • 네트워크 전체에서 프로덕션 데이터베이스 파일을 잘라내어 붙여 넣으면 파일 수준이 손상 될 수 있습니다. 마이그레이션을 수행 할 때 백업 / 복원을 선호하는 또 다른 이유입니다.
  • 유지 보수 계획이 실패 할 수 있습니다. 상황은 내가 한 것처럼 모범 사례를 확인하지 않고 모든 데이터베이스를 정기적으로 백업하도록 유지 관리 계획을 설정 한 것입니다. 이것은 잘 작동하므로 생각을 멈추십시오. 그런 다음 다른 사람이 오프라인에서 사용하지 않는 데이터베이스를 사용하기로 결정합니다. "데이터베이스"대화 상자에서 "상태가 온라인이 아닌 데이터베이스 무시"옵션을 선택하여 유지 보수 계획을 수정하기 전까지는 유지 보수 계획이이 시점부터 실패합니다. 오프라인 데이터베이스에 대해서만 실패하지는 않습니다. 오프라인 데이터베이스를 백업하려고 할 때 유지 보수 계획에 오류가 발생하여 일부 온라인 데이터베이스가 백업되지 않을 수 있습니다. (이 시점에 대한 다른 저자이므로 의심으로 다루십시오)

첨부 -인터넷에서 스크립트를 실행하거나 공항에서 낯선 사람의 패키지를 수락하지 않아야하는 것처럼 다른 단계에서 얻은 데이터베이스를 확인하는 단계없이 첨부해서는 안됩니다. 이 데이터베이스에는 환경을 손상시킬 수있는 트리거, 저장 프로 시저 등의 내부에 코드가있을 수 있습니다. 프로덕션 시스템이 아닌 안전한 방화벽 환경에서 연결하려는 데이터베이스를 검토해야합니다.

다른 버전의 SQL Server는 어떻습니까?

버전 간 데이터베이스 복원 규칙과 다르지 않습니다. 일반적으로 다음 3 가지 버전의 다음 버전으로 복원 할 수 있습니다 (예 : SQL Server 2008-SQL Server 2012). SQL Server 2000-SQL Server 2012는 작동하지 않습니다. 백업 / 복원 또는 분리 / 연결을 통해 전혀 거꾸로 이동할 수 없습니다. 개체를 스크립트로 작성하고 삽입물을 스크립트로 작성하여 수동으로 또는이를 수행하는 도구를 사용해야합니다. 에디션의 경우 일반적으로 SQL Server의 기본 SKU간에 이동할 수 있습니다. 예를 들어 추가 작업없이 데이터베이스를 Standard에서 Enterprise로 이동할 수 있습니다. Enterprise 기능 (Say, 압축 또는 파티셔닝)을 사용하는 경우 이동하기 전에 해당 기능을 비활성화해야합니다. 당신은 당신이 기능의 아이디어를 얻을 수 있습니다


@ 마이크-데이터베이스를 정기적으로 분리 및 연결하면 성능에 영향이 있습니까? 버퍼 캐시가 분리 된 (명확하게) 모든 데이터베이스에 대해 무효화되었다고 생각하지만 다른 영향을 알고 있습니까?
Max Vernon

SQL Server 인스턴스를 중지하고 3 개의 파일을 복사 한 다음 다른 인스턴스에 첨부하면 DB가 복구로 이동합니다 (동일한 DB에서 두 번 발생했습니다). 당신의 설명에서, 이것은 일어나지 않아야하므로 DB에 대해 무엇을 의심해야합니까? 어떤 식 으로든 손상 되었습니까? 백업을 생성하고 복원하는 데 많은 시간이 소요되며이 기능은 생명을 구합니다! 개발자 DB 공유를 위해 최소한 ...
NoOne
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.