2007~2011/SQL Server2009. 12. 24. 00:01
SQL Server 2008 정책(Policies) 기능을 이용하여 저장 프로시저 이름 명명 조건을 부여하는 방법에 대해서 아래와 같이 정리하였습니다.


[시나리오]
LAIGO 데이터베이스에서 저장 프로시저를 생성할 때, 이름을 'usp_' 형식으로 지정하지 않을 경우 트랜잭션 롤백 정책


[설정방법]
1. SSMS - Management - 정책 관리 - Conditions - New Condition



2. 새 조건 만들기
 가. Name : 저장 프로시저 이름
 나. Facet : Stored Procedure
 다. Expression : @Name / LIKE / 'usp_%'



3. 다시 하나 더 '새 조건 만들기'
 가. Name : 대상 데이터베이스
 나. Facet : Database
 다. Expression : @Name / = / 'LAIGO'
\


4. SSMS - Management - 정책 관리 - Policies - New Policy



5. 새 정책 만들기
 가. Name : 저장 프로시저 이름 규칙
 나. Check condition : 저장 프로시저 이름
 다. Against targets : Every StoredProcedure in 대상 데이터베이스 Database



6. 정책 활성화



[결과확인]
LAIGO 데이터베이스에서 저장 프로시저 이름을 정책에 맞지 않게 get_Version 으로 생성할 경우 아래와 같이 트리거가 발생하여 트랜잭션이 롤백됩니다.

USE LAIGO
GO

CREATE
PROC get_Version

AS

             select @@version

GO
 
[수행결과]

Policy '저장프로시저이름규칙' has been violated by 'SQLSERVER:\SQL\LAIGO-PC\DEFAULT\Databases\LAIGO\StoredProcedures\dbo.get_Version'.

This transaction will be rolled back.

Policy condition: '@Name LIKE 'usp_%''

Policy description: ''

Additional help: '' : ''

Statement: 'CREATE PROC get_Version

AS

             select @@version

'.

Msg 3609, Level 16, State 1, Procedure sp_syspolicy_dispatch_event, Line 65

트리거가발생하여트랜잭션이종료되었습니다. 일괄처리가중단되었습니다.


해당 정책의 View History 메뉴를 사용하면 정책 적용 성공/실패 기록을 조회할 수 있습니다.  


[참고자료]
SQL Server 2008 Policy-Based Management
http://msdn.microsoft.com/en-us/library/dd938891.aspx


작성자 : Lai Go / 작성일자 : 2009.12.23

Posted by Lai Go