달력

11

« 2024/11 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

'System Stored Procedure'에 해당되는 글 1

  1. 2009.09.04 MSSQL system stored procedure...
2009. 9. 4. 10:09

MSSQL system stored procedure... Work/SQL Server2009. 9. 4. 10:09

관리자 혹은 개발자가 필요에 의해서 system stored procedure 라는 것을 만들 때가 있다. 생성은 master에 해두고 현재 사용 DB에서 호출하면 현재 사용 DB의 정보로 결과를 내보내 주는 신기한 기능을 한다. 대부분 Microsoft 에서 설치시에 제공된 형태로 사용하는데, 자신의 목적에 맞게 수정된 stored procedure를 system stored procedure 로 등록하고 싶은 경우가 흔치 않게 발생하기 마련이다. system stored procedure 로 등록되는 조건은 찾아보면 2가지 이다.

1. master에 생성할 것.
2. system stored procedure 이름을 앞에 'sp_' 로 시작해서 만들 것.

테스트 해본 결과 어떤 Server에서는 system stored procedure 로 등록되고, 어떤 Server에서는 user stored procedure 로 등록된다. 둘다 MSSQL 2005 sp3 반영된 Server이고, OS도 Windows 2003 R2.  어디에서 이런 차이가 발생하는지 좀 더 찾아보아야 겠다.
위의 2가지 조건을 만족했음에도 system stored procedure 로 등록이 안되었을 경우 system stored procedure로 등록하는 방법은 아래와 같다.

(www.sqlleader.com 펌)
----------------------------------------------------------------------------------------------------------------
사용자가 만든 시스템 프로시저는 엔터프라이즈 관리자에서 시스템 오브젝트가 아닌 사용자 오브젝트로 표시됩니다. 이는 디폴트로 sysobjects에 있는 프로시저의 status 컬럼의 시스템 비트(0xC0000000)가 설정되지 않기 때문이며, sp_MS_marksystemobject를 호출하면 이 비트를 설정할 수 있습니다.
sp_MS_marksystemobject 구문은 다음과 같으며, 매개 변수로서 시스템 비트를 설정하고자 하는 오브젝트의 이름을 기술해 주면 됩니다.

sp_MS_marksystemobject @objname

이 저장 프로시저는 문서화되지 않은 (Undocumented) 프로시저이며, 매개 변수로 지정한 오브젝트의 시스템 비트(0xC0000000)를 설정해 주는 역할을 합니다. 이 저장 프로시저를 사용하여 오브젝트의 시스템 비트를 설정한 다음에 IsMSShipped 오브젝트 속성을 확인하면 결과가 1이 반환됩니다. 즉, OBJECTPROPERTY()의 IsMSShipped 속성을 점검하면, 해당 오브젝트의 시스템 비트가 설정되어 있는지 확인할 수 있습니다.

모든 경우에 저장 프로시저를 반드시 시스템 오브젝트로 설정해야 하는 것은 아닙니다만, 일부 문서화되지 않은 함수나 DBCC 명령어의 경우에는 시스템 오브젝트에서 호출하지 않으면 제대로 동작하지 않는 경우가 있습니다. 즉, 시스템 프로시저가 아니면 제대로 동작하지 않는 기능들이 있기 때문에, 그런 기능들이 필요한 경우에는 시스템 오브젝트로 설정하는 것이 필요합니다.

참고로, SQL Server 2000 교재를 보면, 예를 들어 시스템 비트가 설정되지 않은 저장 프로시저는 DBCC CALLFULLTEXT()를 통하여 full text를 처리할 수 없다고 설명되어 있습니다.
----------------------------------------------------------------------------------------------------------------

:
Posted by Elick