Koneksi diagnostik untuk administrator database

Berlaku untuk:Database SQL ServerAzure SQL

SQL Server menyediakan koneksi diagnostik khusus untuk administrator ketika koneksi standar ke server tidak dimungkinkan. Koneksi diagnostik ini memungkinkan administrator untuk mengakses SQL Server untuk menjalankan kueri diagnostik dan memecahkan masalah bahkan ketika SQL Server tidak merespons permintaan koneksi standar.

Koneksi administrator khusus (DAC) ini mendukung enkripsi dan fitur keamanan SQL Server lainnya. DAC hanya memungkinkan perubahan konteks pengguna ke pengguna admin lain.

SQL Server membuat setiap upaya untuk membuat DAC berhasil terhubung, tetapi dalam situasi ekstrem mungkin tidak berhasil.

Menyambungkan dengan DAC

Secara default, koneksi hanya diizinkan dari klien yang berjalan di server. Koneksi jaringan tidak diizinkan kecuali dikonfigurasi dengan menggunakan sp_configure prosedur tersimpan dengan opsi koneksi admin jarak jauh.

Hanya anggota peran sysadmin SQL Server yang dapat terhubung menggunakan DAC.

DAC tersedia dan didukung melalui sqlcmd utilitas prompt perintah menggunakan sakelar administrator khusus (-A). Untuk informasi selengkapnya tentang menggunakan sqlcmd, lihat Menggunakan sqlcmd dengan Variabel Pembuatan Skrip. Anda juga dapat menyambungkan awalan admin: ke nama instans dalam format sqlcmd -S admin:<instance_name>. Anda juga dapat memulai DAC dari SQL Server Management Studio Editor Kueri dengan menyambungkan ke admin:<instance_name>.

Untuk membuat DAC dari SQL Server Management Studio:

  • Putuskan sambungan semua koneksi ke instans SQL Server terkait, termasuk Object Explorer dan semua jendela kueri yang terbuka.

  • Dari menu, pilih File Baru > Kueri Mesin Database

  • Dari kotak dialog koneksi di bidang Nama Server, masukkan admin:<server_name> jika menggunakan instans default atau admin:<server_name>\<instance_name> jika menggunakan instans bernama.

Batasan

Karena DAC hanya ada untuk mendiagnosis masalah server dalam keadaan yang jarang terjadi, ada beberapa batasan pada koneksi:

  • Untuk menjamin bahwa ada sumber daya yang tersedia untuk koneksi, hanya satu DAC yang diizinkan per instans SQL Server. Jika koneksi DAC sudah aktif, setiap permintaan baru untuk terhubung melalui DAC ditolak dengan kesalahan 17810.

  • Untuk menghemat sumber daya, SQL Server Express tidak mendengarkan di port DAC kecuali dimulai dengan bendera pelacakan 7806.

  • DAC awalnya mencoba menyambungkan ke database default yang terkait dengan login. Setelah berhasil tersambung, Anda bisa menyambungkan ke master database. Jika database default offline atau tidak tersedia, koneksi akan mengembalikan kesalahan 4060. Namun, ini akan berhasil jika Anda mengambil alih database default untuk menyambungkan master ke database sebagai gantinya menggunakan perintah berikut:

    sqlcmd -A -d master
    

    Kami menyarankan agar Anda menyambungkan master ke database dengan DAC karena master dijamin tersedia jika instans Mesin Database dimulai.

  • SQL Server melarang menjalankan kueri atau perintah paralel dengan DAC. Misalnya, kesalahan 3637 dihasilkan jika Anda menjalankan salah satu pernyataan berikut dengan DAC:

    • RESTORE...

    • BACKUP...

  • Hanya sumber daya terbatas yang dijamin tersedia dengan DAC. Jangan gunakan DAC untuk menjalankan kueri intensif sumber daya (misalnya. gabungan kompleks pada tabel besar) atau kueri yang mungkin memblokir. Ini membantu mencegah DAC mempermainkan masalah server yang ada. Untuk menghindari potensi skenario pemblokiran, jika Anda harus menjalankan kueri yang dapat memblokir, jalankan kueri di bawah tingkat isolasi berbasis rekam jepret jika memungkinkan; jika tidak, atur tingkat isolasi transaksi ke READ UNCOMMITTED dan atur nilai LOCK_TIMEOUT ke nilai pendek seperti 2000 milidetik, atau keduanya. Ini akan mencegah sesi DAC diblokir. Namun, tergantung pada status tempat SQL Server berada, sesi DAC mungkin diblokir pada kait. Anda mungkin dapat mengakhiri sesi DAC menggunakan CTRL-C tetapi tidak dijamin. Dalam hal ini, satu-satunya opsi Anda mungkin adalah memulai ulang SQL Server.

  • Untuk menjamin konektivitas dan pemecahan masalah dengan DAC, SQL Server mencadangkan sumber daya terbatas untuk memproses perintah yang dijalankan pada DAC. Sumber daya ini biasanya hanya cukup untuk fungsi diagnostik dan pemecahan masalah sederhana, seperti yang tercantum di bawah ini.

Meskipun Anda dapat secara teoritis menjalankan pernyataan Transact-SQL apa pun yang tidak harus dijalankan secara paralel pada DAC, kami sangat menyarankan Anda membatasi penggunaan ke perintah diagnostik dan pemecahan masalah berikut:

  • Mengkueri tampilan manajemen dinamis untuk diagnostik dasar seperti sys.dm_tran_locks untuk status penguncian, sys.dm_os_memory_cache_counters untuk memeriksa kesehatan cache, dan sys.dm_exec_requests dan sys.dm_exec_sessions untuk sesi dan permintaan aktif. Hindari tampilan manajemen dinamis yang intensif sumber daya (misalnya, sys.dm_tran_version_store memindai penyimpanan versi lengkap dan dapat menyebabkan I/O yang luas) atau yang menggunakan gabungan kompleks. Untuk informasi tentang implikasi performa, lihat dokumentasi untuk tampilan manajemen dinamis tertentu.

  • Mengkueri tampilan katalog.

  • Perintah DBCC dasar seperti DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE, DBCC DROPCLEANBUFFERS, dan DBCC SQLPERF. Hindari perintah intensif sumber daya seperti DBCC CHECKDB, DBCC DBREINDEX, atau DBCC SHRINKDATABASE.

  • Perintah T-SQL KILL <spid> . Tergantung pada status SQL Server, perintah KILL mungkin tidak selalu berhasil; maka satu-satunya opsi mungkin adalah memulai ulang SQL Server. Berikut ini adalah beberapa panduan umum:

    • Verifikasi bahwa SPID dimatikan dengan mengkueri SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>. Jika tidak mengembalikan baris, itu berarti sesi dimatikan.

    • Jika sesi masih ada, verifikasi apakah ada tugas yang ditetapkan untuk sesi ini dengan menjalankan kueri SELECT * FROM sys.dm_os_tasks WHERE session_id = <spid>. Jika Anda melihat tugas di sana, kemungkinan besar sesi Anda saat ini sedang dimatikan. Ini mungkin memakan waktu yang cukup lama dan mungkin tidak berhasil sama sekali.

    • Jika tidak ada tugas dalam sys.dm_os_tasks yang terkait dengan sesi ini, tetapi sesi tetap sys.dm_exec_sessions setelah menjalankan perintah KILL, itu berarti Anda tidak memiliki pekerja yang tersedia. Pilih salah satu tugas yang sedang berjalan (tugas yang tercantum dalam tampilan sys.dm_os_tasks dengan sessions_id <> NULL), dan matikan sesi yang terkait dengannya untuk membebaskan pekerja. Mungkin tidak cukup untuk membunuh satu sesi: Anda mungkin harus membunuh beberapa sesi.

Port DAC

SQL Server mendengarkan DAC pada port TCP 1434 jika tersedia atau port TCP ditetapkan secara dinamis saat startup Mesin Database. Log kesalahan berisi nomor port yang didengarkan DAC. Secara default pendengar DAC hanya menerima koneksi pada port lokal. Untuk sampel kode yang mengaktifkan koneksi administrasi jarak jauh, lihat Opsi Konfigurasi Server koneksi admin jarak jauh.

Setelah koneksi administrasi jarak jauh dikonfigurasi, pendengar DAC diaktifkan tanpa memulai ulang SQL Server dan klien sekarang dapat terhubung ke DAC dari jarak jauh. Anda dapat mengaktifkan pendengar DAC untuk menerima koneksi dari jarak jauh meskipun SQL Server tidak responsif dengan terlebih dahulu menyambungkan ke SQL Server menggunakan DAC secara lokal, lalu menjalankan prosedur tersimpan sp_configure untuk menerima koneksi dari koneksi jarak jauh.

Pada konfigurasi kluster, DAC akan nonaktif secara default. Pengguna dapat menjalankan opsi sp_configure koneksi admin jarak jauh untuk mengaktifkan pendengar DAC untuk mengakses koneksi jarak jauh. Jika SQL Server tidak responsif dan pendengar DAC tidak diaktifkan, Anda mungkin harus memulai ulang SQL Server untuk terhubung dengan DAC. Oleh karena itu, kami sarankan Anda mengaktifkan opsi konfigurasi koneksi admin jarak jauh pada sistem terkluster.

Port DAC ditetapkan secara dinamis oleh SQL Server selama startup. Saat menyambungkan ke instans default, DAC menghindari penggunaan permintaan SQL Server Resolution Protocol (SSRP) ke SQL Server Browser Service saat menyambungkan. Ini pertama kali terhubung melalui port TCP 1434. Jika gagal, itu membuat panggilan SSRP untuk mendapatkan port. Jika browser SQL Server tidak mendengarkan permintaan SSRP, permintaan koneksi mengembalikan kesalahan. Lihat log kesalahan untuk menemukan nomor port yang didengarkan DAC. Jika SQL Server dikonfigurasi untuk menerima koneksi administrasi jarak jauh, DAC harus dimulai dengan nomor port eksplisit:

sqlcmd -S tcp:<server>,<port>

Log kesalahan SQL Server mencantumkan nomor port untuk DAC, yaitu 1434 secara default. Jika SQL Server dikonfigurasi untuk menerima koneksi DAC lokal saja, sambungkan menggunakan adaptor loopback menggunakan perintah berikut:

sqlcmd -S 127.0.0.1,1434

Tip

Saat menyambungkan ke Database Azure SQL dengan DAC, Anda juga harus menentukan nama database dalam string koneksi dengan menggunakan -d opsi .

Contoh

Dalam contoh ini, administrator melihat bahwa server URAN123 tidak merespons dan ingin mendiagnosis masalah. Untuk melakukan ini, pengguna mengaktifkan sqlcmd utilitas prompt perintah dan terhubung ke server URAN123 menggunakan -A untuk menunjukkan DAC.

sqlcmd -S URAN123 -U sa -P <StrongPassword> -A

Administrator sekarang dapat menjalankan kueri untuk mendiagnosis masalah dan mungkin mengakhiri sesi yang tidak responsif.

Contoh serupa yang menyambungkan ke SQL Database akan menggunakan perintah berikut termasuk parameter -d untuk menentukan database:

sqlcmd -S serverName.database.windows.net,1434 -U sa -P <StrongPassword> -d AdventureWorks

Lihat juga