누군가 SQL Server 데이터베이스에서 원격으로 쿼리를 실행하고 있었고 시스템이 다운되었습니다.
해당 쿼리에 대한 백업이 없으며 서버에서 실행 된 내용을 확인하려고합니다.
이 쿼리를 로그 나 기록에서 찾을 수 있습니까?
누군가 SQL Server 데이터베이스에서 원격으로 쿼리를 실행하고 있었고 시스템이 다운되었습니다.
해당 쿼리에 대한 백업이 없으며 서버에서 실행 된 내용을 확인하려고합니다.
이 쿼리를 로그 나 기록에서 찾을 수 있습니까?
답변:
그랜트 프리 치 (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의 블로그 의견에 언급 된 몇 가지 추가 옵션 :
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)
당신은 수 , 캐시 된 쿼리 계획에서 정보를 검색가 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%'
결과를 좁히기 위해.
데이터베이스가 전체 복구 모드 인 경우 일부 데이터를 복구하고 트랜잭션 로그를 읽어서 수행 한 작업에 대한 통찰력을 얻을 수 있습니다.
불행히도 이것은 기본적으로 지원되지 않지만이를 수행하는 방법이 있습니다.
ApexSQL Log 또는 SQL Log Rescue (무료이지만 SQL 2000 만 해당) 와 같은 타사 도구를 사용해 볼 수 있습니다 .
또 다른 옵션은 문서화되지 않은 함수 DBCC LOG 또는 fn_dblog를 사용하는 것입니다. 이것은 더 복잡하지만 무료입니다.
ApexSQL 에는 날짜별로 검색하고 필터링 할 수있는 '실행 쿼리'기능이 있습니다.
SSMS 캐시에서 기록을 가져 오거나 실제로 자체적으로 추적하는지 확실하지 않습니다. 설치를 시도하고 최선을 다할 수 있습니다.