2009-10-20 4 views
1

나는 실행시 데이터베이스에 my_report_user username으로 연결되는 보고서를 가지고 있습니다. 보고서의 많은 최종 사용자가있을 수 있습니다. 각 실행마다 데이터베이스에 대한 새로운 연결이 my_report_user (연결 풀링이 없음)으로 이루어집니다. 연결 풀링이 없습니다.로컬 대 전역 임시 테이블 - 무엇을 사용해야합니까?

나는 한 번만 만들 수있는 결과 세트가 있습니다 (보고서의 첫 번째 실행 일 수 있음) 다른 보고서 실행은 그 물건을 재사용 할 수 있습니다. 기본적으로 각 보고서 실행은이 결과 집합 (임시 테이블로 저장 됨)이 존재하는지 여부를 확인해야합니다. 존재하지 않는다면 그 결과 집합을 만든다.

local 임시 테이블 (#) 또는 global 임시 테이블 (##)을 사용해야합니까?

누구나 그런 것들을 시도 했습니까? 그렇다면 모든 것이 무엇에 관한 것인지 알려주세요. 당신이 당신의 자신의 통제하에 결과 결과 집합을 캐시하려면 나는 SQL-Server를 사용하고 2005 년

+0

어떤 버전의 SQL Server입니까? 2005 년 이상이면 CTE (및 재귀 CTE)가 또 다른 옵션입니다. 당신이 그들과 함께해야 할 일에 대해 더 많이 알지 못한다면 나는 글로벌 임시 테이블에 대한 로컬을 권고한다. ... –

+0

최악의 가정하기 : 연결이 여전히 존재하기 때문에 글로벌 temp 테이블이 삭제되지 않는다. 해당 테이블의 데이터가 유효하지 않게됩니까? 즉, 보고서의 불량 데이터를 방지하기 위해 데이터를 절대적으로 새로 고쳐야하는 시점을 정의합니다. –

+0

its sql-server 2005. 로컬 임시 테이블을 사용하면 재사용이 가능합니까? 나는 로컬 임시 테이블이 다중 보고서 실행에서 재사용 가능성을 허용하지 않을 것이라고 생각했다. 버전을 아는 지금 뭐라하니? – peakit

답변

4

어느

, 당신은 사용할 수 없습니다

EDIT (거의 동시 보고서는 등, 실행) 임시 테이블. tempdb에 저장된 일반 사용자 테이블을 사용하거나 자체 결과 집합 캐시 데이터베이스를 사용해야합니다.

임시 테이블, bot #local 및 ## shared는 연결에 의해 제어되는 수명을가집니다. 응용 프로그램의 연결이 끊어지면 임시 테이블이 삭제되고 사용자가 설명하는 것과 잘 작동하지 않습니다.

실제 어려운 문제는 결과를 섞지 않고 동시 실행에서 캐시 된 결과 집합을 채우는 것입니다 (둘 다 '첫 번째'실행이라고 생각되는 동시 보고서 실행에서 중복 항목이 포함 된 결과 집합으로 끝남).

보조 노트 SQL Server Reporting Services는 이미이 기능을 사용하고 있습니다. 데이터 세트를 캐시하고 공유 할 수 있으며, 보고서를 캐시하고 공유 할 수 있습니다. 이미 작동하며 테스트되었습니다.

+0

"진짜 어려운 프로 렘 (prolem)은 상황을 뒤섞이는 일없이 캐시 된 결과 세트를 채우는 것입니다."또한 나는이 문제에 대해 걱정하고 있습니다. 도움을 주셔서 감사합니다, btw. – peakit

+2

앱 잠금을 사용할 수 있습니다. 보고있는 보고서를 식별하는 리소스를 사용하십시오 (예 : "2009 년 10 월 북쪽 서쪽 판매 보고서"또는 "report id 42" 1. sp_getapplock 'shared', 'session'. 2. 데이터 세트가 있으면 보고서를 사용하여 확인한 다음 앱 잠금을 해제하고 종료합니다. 3. 존재하지 않으면 응용 프로그램 loc을 해제하고, 그것을 다시 얻습니다. X sp_getapplock 'exclusive', 'session'. 4. 보고서가 존재하는지 다시 확인하고, 보고서를 작성하지 않고 사용하고, 다시 제출하고, 잠금 및 종료하십시오. 5. X 잠금을 획득 한 후 보고서가 존재하면 x 잠금을 해제하고 1 단계로 돌아갑니다. –

+0

감사합니다. 그러나 결과 집합이 엔진에 의해 지워지는 기회가 있습니다 (## temp 테이블에 대한 활성 연결이 없을 때). 이것은 내 캐싱과 같은 목적을 이깁니다. 뭐라구? 비록 당신이 준 잠금 메커니즘이 동시성을 해결하기 위해 좋을지라도 ... – peakit

0

이제 OLTP 모드로 들리는 것 같습니다. 데이터베이스웨어 하우징에 대한 정보는 확실히 도움이 될 것입니다.

3

#temp 테이블은 특정 시나리오에서 유용 할 수 있지만 우수 사례는 아닙니다. 필자는 내 자신의 작업이나 자신에 대해 작성한 다른 사람의 작업에서 global ## temp 테이블에 대한 유효한 사용을 아직 찾지 못했습니다. 내가 생각할 수있는 유일한 경우는 BCP 또는 임시 데이터 저장소를 작성한 후 일부 후속 단계에서 검색해야하는 기타 외부 프로세스입니다. 이 경우 나는 일종의 키와 배경 프로세스를 가진 영구 테이블을 사용하여 정리를 처리하는 것을 선호합니다.

관련 문제