답변:
기본적으로 SQL Server 활동은 예상 한대로 기록되지 않습니다. 일부 쓰기 활동은 트랜잭션 로그에 기록 되지만 데이터베이스 설정 방법에 따라 다릅니다.
서버에서 SELECT 활동을 추적하기위한 네 가지 기본 옵션이 있습니다.
SQL Server 프로파일 러 를 사용하여 서버에 연결하고 발생하는 특정 활동을 감시 할 수 있습니다 .
서버 측 추적 을 작성하여 활동을 서버의 추적 파일에 기록하면 SQL Server 프로파일 러에서 읽거나 fn_trace_gettable 을 사용하여 추가 분석을 위해 테이블에로드 할 수 있습니다.
서버 쪽 추적보다 더 많은 기능을 제공하고 SQL Server 2012로 시작하는 서버 쪽 추적 대신 Microsoft에서 권장 하는 확장 이벤트 를 사용할 수 있습니다 .
C2 감사 모드를 사용할 수 있습니다 .
당신은 서버 측 추적을 만들려면 추적을 설정 (선택 특정 이벤트, 필터 등 당신이 원하는 것을를) 다음 밖으로 스크립트를 파일 메뉴를 사용하고 서버에서 실행하는 SQL Server 프로파일을 사용할 수 있습니다 설명 여기 .
SELECT 문을 추적하는 몇 가지 SQL Server 솔루션 및 기술이 있습니다.
특별히 개발 된 저장 프로 시저 및 함수 – 참고 :이 방법에는 T-SQL 프로그래밍에 대한 고급 지식과 저장 프로 시저 및 함수의 추가 유지 관리 (예 : 데이터베이스 스키마 변경의 경우)가 필요합니다. 이 기사에서 더 많은 것을 볼 수 있습니다 : http://alstechtips.blogspot.com/2011/02/auditing-select-statements-in-sql.html
SQL Server 추적 기술-이 기사에서 단계별 지침을 읽을 수 있습니다. http://solutioncenter.apexsql.com/auditing-select-statements-on-sql-server/
SQL Server 감사 기능 사용-SQL Server 2008에 도입 된 감사 기능은 서버 및 데이터베이스 이벤트를 모두 추적 할 수 있으며 확장 이벤트 기술을 사용합니다. 그러나 데이터베이스 수준 감사는 SQL Server Developer 및 Enterprise 버전에서만 지원됩니다.
ApexSQL Audit 또는 Idera SQL Compliance Manager와 같은 타사 도구 사용
누가 쿼리를 실행했는지 신경 쓰지 않는 한 시스템에서 실행중인 쿼리에 대한 메트릭을 보는 방법이 있습니다. 이는 마지막 재시작 이후의 데이터로 제한되며 쿼리 확장 정도에 따라 계획 캐시 (또는 기타 메모리) 압력에 의해 발생할 수 있습니다.
;WITH x AS
(
SELECT
[text] = SUBSTRING(t.[text],
(s.statement_start_offset/2)+1,
COALESCE(NULLIF(s.statement_end_offset,-1),DATALENGTH(t.[text])*2)
-(s.statement_start_offset/2)),
s.execution_count, s.last_execution_time,
s.max_logical_reads, s.max_elapsed_time
FROM sys.dm_exec_query_stats AS s
CROSS APPLY sys.dm_exec_sql_text(s.sql_handle) AS t
)
SELECT * FROM x
WHERE LTRIM([text]) LIKE 'SELECT%';
패턴을 확장하고 싶을 수도 있습니다. 예를 들어, 이것은 ;WITH아이러니하게 시작하는 쿼리를 무시 SELECT INTO하고 실제 테이블을 참조하지 않는 변수 할당을 캡처 할 수 있습니다.
그러나 그보다 더 자세한 정보가 필요한 경우 Nathan의 대답은 좋은 시작입니다 (추적을 사용하려는 경우를 제외하고 프로파일 러를 사용하지 마십시오). 시스템에 대한 모든 단일 쿼리를 로깅하는 것은 자유롭지 않다는 것을 기억하십시오.