Mengakses Informasi Diagnostik Klien Asli SQL Server di Log Peristiwa yang Diperluas

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Penting

SQL Server Native Client (sering disingkat SNAC) telah dihapus dari SQL Server 2022 (16.x) dan SQL Server Management Studio 19 (SSMS). SQL Server Native Client (SQLNCLI atau SQLNCLI11) dan Penyedia Microsoft OLE DB warisan untuk SQL Server (SQLOLEDB) tidak direkomendasikan untuk pengembangan aplikasi baru. Beralih ke Microsoft OLE DB Driver (MSOLEDBSQL) baru untuk SQL Server atau Microsoft ODBC Driver terbaru untuk SQL Server ke depannya. Untuk SQLNCLI yang dikirim sebagai komponen SQL Server Database Engine (versi 2012 hingga 2019), lihat pengecualian Siklus Hidup Dukungan ini.

Mulai SQL Server 2012 (11.x), SQL Server Native Client dan pelacakan akses data (Data Access Tracing) telah diperbarui untuk memudahkan mendapatkan informasi diagnostik tentang kegagalan koneksi dari buffer cincin konektivitas dan informasi performa aplikasi dari log peristiwa yang diperluas.

Untuk mengetahui informasi tentang cara membaca log kejadian yang diperluas, lihat Menampilkan Data Sesi Kejadian.

Catatan

Fitur ini hanya ditujukan untuk tujuan pemecahan masalah dan diagnostik dan mungkin tidak cocok untuk tujuan audit atau keamanan.

Keterangan

Untuk operasi koneksi, SQL Server Native Client akan mengirim ID koneksi klien. Jika koneksi gagal, Anda dapat mengakses buffer cincin konektivitas (Pemecahan masalah konektivitas di SQL Server 2008 dengan Buffer Cincin Konektivitas) dan menemukan bidang ClientConnectionID dan mendapatkan informasi diagnostik tentang kegagalan koneksi. ID koneksi klien akan dicatat di buffer ring hanya jika terjadi kesalahan. (Jika koneksi gagal sebelum mengirim paket prelogin, ID koneksi klien tidak akan dihasilkan.) ID koneksi klien adalah GUID 16-byte. Anda juga dapat menemukan ID koneksi klien di target output peristiwa yang diperluas, jika tindakan client_connection_id ditambahkan ke peristiwa dalam sesi peristiwa yang diperluas. Anda dapat mengaktifkan pelacakan akses data dan menjalankan kembali perintah koneksi dan mengamati bidang ClientConnectionID di jejak akses data untuk operasi yang gagal, jika Anda memerlukan bantuan diagnostik lebih lanjut.

Jika Anda menggunakan ODBC di SQL Server Native Client dan koneksi berhasil, Anda bisa mendapatkan ID koneksi klien dengan menggunakan atribut SQL_COPT_SS_CLIENT_CONNECTION_ID dengan SQLGetConnectAttr.

SQL Server Native Client juga mengirim ID aktivitas khusus utas. ID aktivitas diambil dalam sesi peristiwa yang diperluas jika sesi dimulai dengan opsi TRACK_CAUSAILITY diaktifkan. Untuk masalah performa dengan koneksi aktif, Anda bisa mendapatkan ID aktivitas dari jejak akses data klien (bidang ActivityID ) lalu menemukan ID aktivitas dalam output peristiwa yang diperluas. ID aktivitas dalam peristiwa yang diperluas adalah GUID 16 byte (tidak sama dengan GUID untuk ID koneksi klien) ditambahkan dengan nomor urutan empat byte. Nomor urut mewakili urutan permintaan dalam alur dan menunjukkan pemesanan relatif pernyataan batch dan RPC untuk alur. ActivityID secara opsional dikirim untuk pernyataan batch SQL dan permintaan RPC saat pelacakan akses data diaktifkan dan bit ke-18 dalam kata konfigurasi pelacakan akses data diaktifkan.

Berikut ini adalah contoh yang menggunakan Transact-SQL untuk memulai sesi kejadian yang diperluas yang akan disimpan dalam buffer ring dan akan merekam ID aktivitas yang dikirim dari klien pada RPC dan operasi batch.

create event session MySession on server   
add event connectivity_ring_buffer_recorded,   
add event sql_statement_starting (action (client_connection_id)),   
add event sql_statement_completed (action (client_connection_id)),   
add event rpc_starting (action (client_connection_id)),   
add event rpc_completed (action (client_connection_id))  
add target ring_buffer with (track_causality=on)  
  

File Kontrol

Di SQL Server 2012 (11.x), konten file kontrol Klien Asli SQL Server (ctrl.guid.snac11) adalah:

{8B98D3F2-3CC6-0B9C-6651-9649CCE5C752}  0x00000000  0   MSDADIAG.ETW  
{2DA81B52-908E-7DB6-EF81-76856BB47C4F}  0xFFFFFFFF  0   SQLNCLI11.1  

MOF File

Dalam SQL Server 2012 (11.x), konten file mof Klien Asli SQL Server adalah:

#pragma classflags("forceupdate")  
#pragma namespace ("\\\\.\\Root\\WMI")  
  
/////////////////////////////////////////////////////////////////////////////  
//  
//  MSDADIAG.ETW  
  
[  
 dynamic: ToInstance,  
 Description("MSDADIAG.ETW"),  
 Guid("{8B98D3F2-3CC6-0B9C-6651-9649CCE5C752}"),  
 locale("MS\\0x409")  
]  
class Bid2Etw_MSDADIAG_ETW : EventTrace  
{  
};  
  
[  
 dynamic: ToInstance,  
 Description("MSDADIAG.ETW"),  
 Guid("{8B98D3F3-3CC6-0B9C-6651-9649CCE5C752}"),  
 DisplayName("msdadiag"),  
 locale("MS\\0x409")  
]  
class Bid2Etw_MSDADIAG_ETW_Trace : Bid2Etw_MSDADIAG_ETW  
{  
};  
  
[  
 dynamic: ToInstance,  
 Description("MSDADIAG.ETW formatted output (A)"),  
 EventType(17),  
 EventTypeName("TextA"),  
 locale("MS\\0x409")  
]  
class Bid2Etw_MSDADIAG_ETW_Trace_TextA : Bid2Etw_MSDADIAG_ETW_Trace  
{  
    [  
     WmiDataId(1),  
     Description("Module ID"),  
     read  
    ]  
    uint32 ModID;  
  
    [  
     WmiDataId(2),  
     Description("Text StringA"),  
     extension("RString"),  
     read  
    ]  
    object msgStr;  
};  
  
[  
 dynamic: ToInstance,  
 Description("MSDADIAG.ETW formatted output (W)"),  
 EventType(18),  
 EventTypeName("TextW"),  
 locale("MS\\0x409")  
]  
class Bid2Etw_MSDADIAG_ETW_Trace_TextW : Bid2Etw_MSDADIAG_ETW_Trace  
{  
    [  
     WmiDataId(1),  
     Description("Module ID"),  
     read  
    ]  
    uint32 ModID;  
  
    [  
     WmiDataId(2),  
     Description("Text StringW"),  
     extension("RWString"),  
     read  
    ]  
    object msgStr;  
};  
  
/////////////////////////////////////////////////////////////////////////////  
//  
//  SQLNCLI11.1  
  
[  
 dynamic: ToInstance,  
 Description("SQLNCLI11.1"),  
 Guid("{2DA81B52-908E-7DB6-EF81-76856BB47C4F}"),  
 locale("MS\\0x409")  
]  
class Bid2Etw_SQLNCLI11_1 : EventTrace  
{  
};  
  
[  
 dynamic: ToInstance,  
 Description("SQLNCLI11.1"),  
 Guid("{2DA81B53-908E-7DB6-EF81-76856BB47C4F}"),  
 DisplayName("SQLNCLI11.1"),  
 locale("MS\\0x409")  
]  
class Bid2Etw_SQLNCLI11_1_Trace : Bid2Etw_SQLNCLI11_1  
{  
};  
  
[  
 dynamic: ToInstance,  
 Description("SQLNCLI11.1 formatted output (A)"),  
 EventType(17),  
 EventTypeName("TextA"),  
 locale("MS\\0x409")  
]  
class Bid2Etw_SQLNCLI11_1_Trace_TextA : Bid2Etw_SQLNCLI11_1_Trace  
{  
    [  
     WmiDataId(1),  
     Description("Module ID"),  
     read  
    ]  
    uint32 ModID;  
  
    [  
     WmiDataId(2),  
     Description("Text StringA"),  
     extension("RString"),  
     read  
    ]  
    object msgStr;  
};  
  
[  
 dynamic: ToInstance,  
 Description("SQLNCLI11.1 formatted output (W)"),  
 EventType(18),  
 EventTypeName("TextW"),  
 locale("MS\\0x409")  
]  
class Bid2Etw_SQLNCLI11_1_Trace_TextW : Bid2Etw_SQLNCLI11_1_Trace  
{  
    [  
     WmiDataId(1),  
     Description("Module ID"),  
     read  
    ]  
    uint32 ModID;  
  
    [  
     WmiDataId(2),  
     Description("Text StringW"),  
     extension("RWString"),  
     read  
    ]  
    object msgStr;  
};  

Lihat Juga

Menangani Kesalahan dan Pesan