어셈블리 구현

적용 대상: SQL Server

이 문서에서는 데이터베이스에서 어셈블리를 구현하고 작업하는 데 도움이 되는 다음 영역에 대한 정보를 제공합니다.

  • 어셈블리 만들기
  • 어셈블리 수정
  • 어셈블리 삭제, 사용 안 함 및 사용
  • 어셈블리 버전 관리

어셈블리 만들기

어셈블리는 Transact-SQL CREATE ASSEMBLY 문을 사용하거나 어셈블리 지원 편집기를 사용하여 SQL Server Management Studio에서 만들어집니다. 또한 Microsoft Visual Studio에서 SQL Server 프로젝트를 배포하면 프로젝트에 지정된 데이터베이스에 어셈블리가 등록됩니다. 자세한 내용은 CLR 데이터베이스 개체 배포를 참조하세요.

어셈블리 수정

어셈블리는 Transact-SQL ALTER ASSEMBLY 문을 사용하거나 어셈블리 지원 편집기를 사용하여 SQL Server Management Studio에서 수정됩니다.

다음 작업을 수행하려는 경우 어셈블리를 수정할 수 있습니다.

  • 어셈블리의 최신 버전 이진 파일을 업로드하여 어셈블리의 구현을 변경합니다. 자세한 내용은 이 문서의 뒷부분에 있는 어셈블리 버전 관리를 참조하세요.

  • 어셈블리의 권한 집합을 변경합니다. 자세한 내용은 어셈블리 디자인을 참조 하세요.

  • 어셈블리의 표시 유형을 변경합니다. 표시되는 어셈블리는 SQL Server에서 참조할 수 있습니다. 보이지 않는 어셈블리는 데이터베이스에 업로드된 경우에도 사용할 수 없습니다. 기본적으로 SQL Server 인스턴스에 업로드된 어셈블리가 표시됩니다.

  • 해당 어셈블리와 관련된 디버그 또는 원본 파일을 추가하거나 삭제합니다.

어셈블리 삭제, 사용 안 함 및 사용

Transact-SQL 문 또는 SQL DROP ASSEMBLY Server Management Studio를 사용하여 어셈블리를 삭제합니다.

기본적으로 SQL Server에서 만든 모든 어셈블리는 실행되지 않도록 설정됩니다. 시스템 저장 프로시저 옵션을 sp_configure 사용하여 clr enabled SQL Server에 업로드된 모든 어셈블리의 실행을 사용하지 않도록 설정하거나 사용하도록 설정할 수 있습니다. 어셈블리 실행을 사용하지 않도록 설정하면 CLR(공용 언어 런타임) 함수, 저장 프로시저, 트리거, 집계 및 사용자 정의 형식이 실행되지 않고 현재 실행 중인 모든 형식이 중지됩니다. 어셈블리 실행을 사용하지 않도록 설정해도 어셈블리를 만들거나 변경하거나 삭제하는 기능이 비활성화되지는 않습니다. 자세한 내용은 서버 구성: clr enabled를 참조하세요.

자세한 내용은 sp_configure를 참조하세요.

어셈블리 버전 관리

어셈블리가 인스턴스 SQL Server에 업로드되면 어셈블리가 데이터베이스 시스템 카탈로그 내에 저장되고 관리됩니다. Microsoft .NET Framework의 어셈블리 정의에 대한 변경 내용은 데이터베이스 카탈로그에 저장된 어셈블리로 전파되어야 합니다.

어셈블리를 수정해야 하는 경우 문을 실행 ALTER ASSEMBLY 하여 데이터베이스에서 어셈블리를 업데이트해야 합니다. 이 문은 어셈블리를 구현을 보유하는 .NET Framework 모듈의 최신 복사본으로 업데이트합니다.

문의 절은 WITH UNCHECKED DATA SQL Server에 데이터베이스의 ALTER ASSEMBLY 지속형 데이터가 종속된 어셈블리도 새로 고치도록 지시합니다. 특히 다음 중 어느 것이 있는지 지정 WITH UNCHECKED DATA 해야 합니다.

  • Transact-SQL 함수 또는 메서드를 통해 직접 또는 간접적으로 어셈블리의 메서드를 참조하는 지속형 계산 열입니다.

  • 어셈블리에 의존하는 CLR 사용자 정의 형식의 열 및 형식은 (비Native) serialization 형식을 UserDefined 구현합니다.

주의

지정되지 않은 경우 WITH UNCHECKED DATA SQL Server는 새 어셈블리 버전이 테이블, 인덱스 또는 기타 영구 사이트의 기존 데이터에 영향을 미치는 경우 실행을 방지 ALTER ASSEMBLY 하려고 합니다. 그러나 SQL Server는 CLR 어셈블리가 업데이트될 때 계산 열, 인덱스, 인덱싱된 뷰 또는 식이 기본 루틴 및 형식과 일치하도록 보장하지 않습니다. 식 결과와 어셈블리에 저장된 해당 식을 기반으로 하는 값이 일치하지 않도록 실행할 ALTER ASSEMBLY 때는 주의해야 합니다.

db_owner 및 db_ddlowner 고정 데이터베이스 역할의 멤버만 절을 사용하여 WITH UNCHECKED DATA 실행할 ALTER ASSEMBLY 수 있습니다.

SQL Server는 테이블의 선택되지 않은 데이터로 어셈블리가 수정되었다는 메시지를 Windows 애플리케이션 이벤트 로그에 게시합니다. 그런 다음 SQL Server는 어셈블리에 종속된 데이터가 포함된 테이블을 선택하지 않은 데이터가 있는 것으로 표시합니다. has_unchecked_assembly_data 카탈로그 뷰의 sys.tables 열에는 선택되지 않은 데이터가 포함된 테이블과 0 선택되지 않은 데이터가 없는 테이블의 값 1 이 포함됩니다.

확인되지 않은 데이터의 무결성을 확인하려면 선택되지 않은 데이터가 있는 각 테이블에 대해 실행 DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS 합니다. 실패할 경우 DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS 유효하지 않은 테이블 행을 삭제하거나 어셈블리 코드를 수정하여 문제를 해결한 다음 더 많은 ALTER ASSEMBLY 문을 실행해야 합니다.

ALTER ASSEMBLY 어셈블리 버전을 변경합니다. 어셈블리의 culture 및 공개 키 토큰은 동일하게 유지됩니다. SQL Server는 동일한 이름, 문화권 및 공개 키를 사용하여 다른 버전의 어셈블리를 등록하는 것을 허용하지 않습니다.

버전 바인딩에 대한 컴퓨터 전체 정책과의 상호 작용

SQL Server에 저장된 어셈블리에 대한 참조가 게시자 정책 또는 컴퓨터 전체 관리자 정책을 사용하여 특정 버전으로 리디렉션되는 경우 다음 작업 중 하나를 수행해야 합니다.

  • 이 리디렉션이 수행되는 새 버전이 데이터베이스에 있는지 확인합니다.

  • 컴퓨터 또는 게시자 정책의 외부 정책 파일로 문을 수정하여 데이터베이스에 있는 특정 버전을 참조하는지 확인합니다.

그렇지 않으면 SQL Server 인스턴스에 새 어셈블리 버전을 로드하는 시도가 실패합니다.

자세한 내용은 ALTER ASSEMBLY를 참조 하세요.