Saya ingin tahu apakah SQL Server 2008 R2 memiliki skema pencatatan default untuk SELECT
pernyataan (atau T-SQL lainnya).
Jika ya, di mana saya bisa melihatnya? Jika tidak, bagaimana saya bisa mengaturnya?
Saya ingin tahu apakah SQL Server 2008 R2 memiliki skema pencatatan default untuk SELECT
pernyataan (atau T-SQL lainnya).
Jika ya, di mana saya bisa melihatnya? Jika tidak, bagaimana saya bisa mengaturnya?
Jawaban:
Secara default, aktivitas SQL Server tidak dicatat seperti yang Anda harapkan. Beberapa aktivitas penulisan dicatat dalam Log Transaksi , tetapi ini juga tergantung pada bagaimana database Anda diatur.
Ada empat opsi utama untuk melacak aktivitas SELECT di server:
Anda dapat menggunakan SQL Server Profiler untuk terhubung ke server Anda dan menonton aktivitas tertentu saat itu terjadi.
Anda bisa membuat jejak sisi server untuk mencatat aktivitas ke file jejak di server, yang kemudian dapat dibaca oleh SQL Server Profiler, atau dengan menggunakan fn_trace_gettable untuk memuatnya ke dalam tabel untuk analisis lebih lanjut.
Anda bisa menggunakan Peristiwa Diperpanjang , yang menawarkan lebih banyak fungsi daripada jejak sisi-server, dan yang direkomendasikan Microsoft alih-alih jejak sisi-server yang dimulai dengan SQL Server 2012.
Anda dapat menggunakan mode audit C2 .
Anda dapat menggunakan SQL Server Profiler untuk mengatur jejak Anda (pilih peristiwa spesifik, filter, dll. Yang Anda inginkan), kemudian skrip keluar menggunakan menu File dan jalankan di server untuk membuat jejak sisi server, seperti dijelaskan di sini .
Ada beberapa solusi dan teknik SQL Server untuk melacak pernyataan SELECT
Prosedur dan fungsi tersimpan yang dikembangkan secara khusus - Catatan: metode ini membutuhkan pengetahuan lanjutan tentang pemrograman T-SQL dan pemeliharaan tambahan dari prosedur dan fungsi yang tersimpan (misalnya dalam kasus perubahan skema basis data). Anda dapat melihat lebih banyak di artikel ini: http://alstechtips.blogspot.com/2011/02/auditing-select-statements-in-sql.html
Teknologi penelusuran SQL Server - Anda dapat membaca instruksi langkah demi langkah dalam artikel ini: http://solutioncenter.apexsql.com/auditing-select-statements-on-sql-server/
Menggunakan fitur Audit SQL Server - Fitur Audit (diperkenalkan pada SQL Server 2008) dapat melacak peristiwa server dan database, dan menggunakan teknologi Extended Events. Tetapi, audit level basis data hanya didukung oleh SQL Server Developer dan edisi Enterprise.
Menggunakan alat pihak ke-3 seperti ApexSQL Audit atau Idera SQL Compliance Manager
Secara default, ini tidak mencatat pernyataan SELECT. Anda dapat merujuk ke jawaban saya di sini untuk detail lebih lanjut untuk mengaudit pernyataan SELECT.
Juga, secara default ia bahkan tidak mencatat pernyataan T-SQL, melainkan mencatat ACARA seperti Perubahan Memori Server, Gagal Masuk Audit, Acara Addlogin Audit, dll. Dan Anda dapat menemukan info lebih lanjut di sini bersama dengan T-SQL Script untuk mengekstrak informasi dari Jejak bawaan.
Selama Anda tidak peduli siapa yang menjalankan kueri, ada beberapa cara untuk melihat metrik tentang kueri yang sedang dijalankan di sistem Anda. Ini terbatas pada data sejak restart terakhir dan berpotensi oleh tekanan cache rencana (atau memori lain) tergantung pada seberapa jauh Anda memperpanjang kueri.
;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%';
Anda mungkin ingin memperluas pola - misalnya ini akan mengabaikan pertanyaan yang dimulai dengan ;WITH
, ironisnya, dan dapat menangkap SELECT INTO
dan bahkan penugasan variabel yang tidak merujuk tabel aktual.
Namun jika Anda membutuhkan informasi lebih rinci dari itu, jawaban Nathan adalah awal yang baik (kecuali jika Anda akan menggunakan jejak, JANGAN gunakan Profiler). Ingatlah bahwa mencatat setiap permintaan tunggal terhadap sistem Anda tidak akan gratis.