기록 쿼리가 SQL Server 데이터베이스에서 실행되는 것을 볼 수 있습니까?


38

누군가 SQL Server 데이터베이스에서 원격으로 쿼리를 실행하고 있었고 시스템이 다운되었습니다.

해당 쿼리에 대한 백업이 없으며 서버에서 실행 된 내용을 확인하려고합니다.

이 쿼리를 로그 나 기록에서 찾을 수 있습니까?


로그에 없습니다. TFS 또는 SourceSafe 버전 제어 시스템에 체크인 했습니까? 결과를 txt로 설정하여 다시 만들 수 있습니까?
jl01

2
향후 설계를 위해 트리거 및 감사 / 기록 테이블 추가를 고려할 수 있습니다. 그러면 마지막으로 업데이트 된 시간 / 사용자를 활용할 수있을 것입니다.
토마스 스트링거

답변:


39

그랜트 프리 치 (Grant Fritchey)는 SSMS를 닫고 그가 작업했던 쿼리를 잃어버린 문제를 겪었습니다 .

편집하다

이에 대한 답변을 좀 더 자세히 설명하기 위해 위에서 언급 한 Grant 링크는 인스턴스의 캐시로 이동하여 방금 실행 한 쿼리를 꺼내기위한 쿼리를 제공합니다.

SELECT  dest.text
FROM    sys.dm_exec_query_stats AS deqs
        CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
WHERE   deqs.last_execution_time > '5/19/2011 11:00'
        AND dest.text LIKE 'WITH%';

Grant의 블로그 의견에 언급 된 몇 가지 추가 옵션 :


1
좋은 기사입니다! 감사! 또한 Grant의 기사에 따르면 SQL Server Management Studio의 백업 된 쿼리 파일 복구 가 도움이 될 수 있습니다.
Marian

이 답변은 작동하는 sqlserver 버전을 명시한 경우 가져올 수 있습니다. 실행하려고 할 때이 오류가 발생합니다. '.'근처의 구문이 잘못되었습니다. 2008 년에
마이클 포터

가져올 수 있습니까? @MichaelPotter 브라우저와 다른 도구 사이의 복사 및 붙여 넣기는 일반적으로 따옴표와 다른 텍스트를 변경하므로 해당 부분을 제어 할 수 없습니다.
Shawn Melton

죄송합니다, 내 질문을 수정하시기 바랍니다 ... S / 수입 / 개선 /
마이클 포터

16

2005 년, 구조의 기본 추적 .

기본 추적은 20mb에서 롤오버되지만 SQL은 5 개의 추적 기록을 유지합니다. 서버에 액세스하면 MSSQL \ Log 디렉토리에서 * .trc 파일을 검색 할 수 있습니다. 서버에 액세스 할 수 없으면 다음은 현재 기본 추적 파일의 이름을 제공합니다.

SELECT * FROM ::fn_trace_getinfo(default) 

현재 파일이 예를 들어 E : \ MSSQL.1 \ MSSQL \ LOG \ log_200.trc 인 경우 이전 파일은 log_199.trc, log_198.trc 등이어야합니다. 다음을 사용하여 추적 내용을 가져 오십시오.

SELECT * FROM fn_trace_gettable('E:\MSSQL.1\MSSQL\LOG\log_199.trc', default)

13

당신은 , 캐시 된 쿼리 계획에서 정보를 검색가 sys.dm_exec_query_stats에 정보를 원하시면 BOL을 확인하거나 동일한 데이터베이스에 연결 관리 스튜디오에서이 작업을 실행할 수 있습니다 :

SELECT  d.plan_handle ,
        d.sql_handle ,
        e.text

FROM    sys.dm_exec_query_stats d
        CROSS APPLY sys.dm_exec_sql_text(d.plan_handle) AS e

출력을 필터링

WHERE text like '%something%'

결과를 좁히기 위해.


9

데이터베이스가 전체 복구 모드 인 경우 일부 데이터를 복구하고 트랜잭션 로그를 읽어서 수행 한 작업에 대한 통찰력을 얻을 수 있습니다.

불행히도 이것은 기본적으로 지원되지 않지만이를 수행하는 방법이 있습니다.

ApexSQL Log 또는 SQL Log Rescue (무료이지만 SQL 2000 만 해당) 와 같은 타사 도구를 사용해 볼 수 있습니다 .

또 다른 옵션은 문서화되지 않은 함수 DBCC LOG 또는 fn_dblog를 사용하는 것입니다. 이것은 더 복잡하지만 무료입니다.


0

데이터베이스가 전체 복구 모델로 설정된 경우 트랜잭션 로그 백업을 조사 할 수 있습니다. 자세한 내용 fn_dump_dblog은 참조하십시오.


0

ApexSQL 에는 날짜별로 검색하고 필터링 할 수있는 '실행 쿼리'기능이 있습니다.

SSMS 캐시에서 기록을 가져 오거나 실제로 자체적으로 추적하는지 확실하지 않습니다. 설치를 시도하고 최선을 다할 수 있습니다.


이는 쿼리 창에서 직접 실행하는 작업에만 해당되며 저장을 켜야합니다.
Chris Bordeman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.