2012-08-05 3 views
0

응용 프로그램에서 SQL Server 관리 객체를 사용하고 있습니다. 응용 프로그램의 SMO 객체에 대한 대부분의 작업은 UI에서 직접 트리거됩니다. 예 : SMO 객체 (표,보기, ...)에서 속성을 읽거나 쓰는 결과를 가져 오는 객체를 조작하는 사용자.다중 스레드의 SMO 사용

이제 일부 객체를 통해 규칙적인 스캔을 수행하는 백그라운드 작업을 소개하고자합니다 (읽기 전용).

내 질문은 이것이 SMO에 문제를 일으킬 수 있는지입니다. 설명서에서 객체의 인스턴스 멤버는 스레드로부터 안전하지 않습니다. 그래서 내 계획은 UI 나 백그라운드 스레드에서 액세스 할 때마다 각각의 SMO 객체에 잠금을 설정하는 것입니다. 그러나 동시에 두 개의 서로 다른 개체 (예 :보기 및 표)에 액세스하면 어떻게됩니까? 비록 내가 단지 물건을 읽었을지라도, 물건은 완전히 초기화되지 않았을 수도 있고 데이타베이스에서 적재되어야 할 수도 있습니다. 따라서 최악의 경우 SMO는 동시에 두 개체를 초기화해야합니다. SMO가 내부적으로 이것을 어떻게 처리하는지 모르기 때문에 SMO가 허용하는지 또는 문제를 일으키는 지 아는 사람이 있는지 궁금합니다.

이 문제를 해결하는 방법에 대한 다른 제안 사항이 있습니까? 전체 SMO 라이브러리에 대한 글로벌 잠금을 피하고 싶습니다 ...

감사!

+0

"일부 개체를 정기적으로 스캔합니다"를보다 잘 정의해야합니다. SMO 객체에서 수행중인 작업 유형은 무엇입니까? – Paparazzi

+0

SQL Server Managment Studio와 같이 사용자에게 데이터베이스 트리를 표시하기 위해 모든 표준 데이터베이스 개체 (데이터베이스, 테이블, 뷰, 저장 프로 시저)의 이름과 스키마를 읽습니다. 그런 다음 ExtendedProperties 안에있는이 개체에 대한 MS_Description 특성을 읽고 쓰고 있습니다. 백그라운드 스레드는 동일한 등록 규칙을 읽습니다. – aKzenT

+0

전역 잠금 객체가 의미하는 바를 모르거나 완전히 초기화하지 않았습니다. 객체가 완전히 초기화 될 때까지는 객체에 액세스 할 수 없습니다. 동시에 두 개의 객체를 초기화하면 두 개의 객체가 생깁니다. 질문은 무엇입니까? – Paparazzi

답변

0

나는 SMO를 사용하고 내가 배우는 것은 일반적인 작업 (스크립팅 ...)을 만들고 싶다면 유용하다는 것입니다. 그러나 데이터베이스 객체를 실제로 관리하려면 시스템 저장 프로 시저를 사용하는 것이 좋습니다 (따라서 SMO는 이해할 수있는 또 다른 계층이 될 수 없습니다.) 저장 프로 시저를 사용하면 데이터를 잠글 수 있으며 가능한 해결책이 될 수 있습니다.

+0

음, 너무 많은 요구 사항이 없습니다. 나는 정말로 많은 데이터베이스 "managment"가 필요하지 않다. 위 내 의견을 참조하십시오. 데이터베이스 트리를 사용자에게 표시하고 일부 속성을 읽고 쓰고 싶을뿐입니다. – aKzenT

+0

안녕하세요, 데이터베이스 개체의 속성을 초기화하려면 서버 개체의 SetDefaultInitFields를 사용할 수 있습니다. –

+0

나는 SetDefaultInitFields에 대해 알고있다. 죄송합니다.하지만이 질문과 어떤 관련이 있습니까? 문제는 동시에 두 개체를 초기화하는 경우 어떻게됩니까? – aKzenT