FIX: Fn_get_sql fungsi mengembalikan SQL teks untuk menangani dalam tabel sistem Sysprocesses

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 325607 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Artikel ini membahas fungsional perbaikan terbaru untuk SQL Server 2000 yang menerapkan perubahan berikut:
  • Perbaikan terbaru menciptakan baru fn_get_sql fungsi sistem bernilai meja.
  • Perbaikan terbaru menambahkan ini tiga kolom baru ke ujung Master.sysprocesses sistem tabel:
    • sql_handle(ganda)
    • stmt_start(int)
    • stmt_end(int)

  • Perbaikan terbaru menciptakan bendera jejak baru, jejak bendera 2861.

PEMECAHAN MASALAH

Untuk memecahkan masalah ini, Dapatkan paket layanan terbaru untuk Microsoft SQL Server 2000. Untuk informasi selengkapnya, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:
290211 Cara mendapatkan paket layanan SQL Server 2000
Catatan Perbaikan terbaru berikut dibuat sebelum rilis Microsoft SQL Server 2000 Paket Layanan 3.

Berkas perbaikan terbaru

Ada perbaikan terbaru untuk SQL Server 2000 yang menerapkan fn_get_sql fungsi.

Hubungi layanan dukungan produk Microsoft untuk memperoleh perbaikan. Versi bahasa Inggris dari hotfix ini memiliki atribut berkas (atau atribut berkas yang lebih baru) yang tercantum dalam tabel berikut. Tanggal dan waktu untuk berkas-berkas tersebut dicantumkan dalam Coordinated Universal Time (UTC). Apabila Anda melihat informasi berkas, tanggal akan diubah ke waktu lokal. Untuk menemukan perbedaan waktu UTC dan waktu lokal, gunakan Zona waktu tab pada alat tanggal dan waktu dalam Panel kontrol.
   Date         Time      Version    Size              File name
   -----------------------------------------------------------------

   07/01/2002   4:50 PM   8.00.652   7,285 kilobytes   Sqlservr.exe
				
Catatan File dependensi, perbaikan terbaru yang terbaru atau fitur yang berisi file juga dapat berisi file-file tambahan.

PentingJika Anda ingin fungsionalitas Pembaruan ini, Anda harus menerapkan membangun Sqlservr.exe kemudian dari atau sama dengan 8.00.652, dan, Anda harus menjalankan Sp2_qfe_serv_uni.sql berkas yang disertakan dalam memperbaiki ini. Untuk informasi lebih lanjut, lihat Readme.txt berkas yang disertakan dalam memperbaiki file.

STATUS

Microsoft telah mengkonfirmasi bahwa ini merupakan masalah dalam produk Microsoft yang didaftar pada awal artikel ini.Masalah ini diperbaiki pertama kali pada Microsoft SQL Server 2000 Paket Layanan 3.

INFORMASI LEBIH LANJUT

Di sini adalah definisi dan sintaks untuk fn_get_sql fungsi sistem bernilai meja.

fn_get_sql

Kembali teks SQL yang disebut untuk menangani tertentu.

Sintaks

fn_get_sql ([@ SqlHandle = ]SqlHandle)

Argumen

[@ SqlHandle = ] SqlHandle

Nilai pegangan biner. SqlHandle adalah Binary(20) dengan standar tidak ada.

Tabel kembali

Perkecil tabel iniPerbesar tabel ini
Nama kolomTipe dataDeskripsi
dbidsmallintDatabase ID. NULL dari pernyataan SQL ad-hoc.
objectidintID objek database. NULL dari ad-hoc SQL pernyataan.
nomorsmallintNomor dalam prosedur pengelompokan jika dikelompokkan. 0 entri yang tidak prosedur. NULL dari ad-hoc Pernyataan SQL.
dienkripsibitMenunjukkan jika objek dienkripsi:
0 = Tidak dienkripsi
1 = Encrypted
TeksteksSQL teks. NULL dari benda-benda yang dienkripsi.

Komentar

Fn_get_sql adalah sebuah sistem dihargai tabel fungsi yang mengembalikan teks SQL untuk SQLHANDLE tertentu. Anda dapat memperoleh SQLHANDLE berlaku dari sql_handle kolom sysprocesses sistem meja.

Jika Anda melewatkan pegangan yang tidak lagi ada dalam cache, fn_get_sql akan kembali hasil kosong set. Jika Anda melewatkan menangani tidak sah, bets akan membatalkan, dan Anda menerima galat berikut pesan:
Server: Msg 569, tingkat 16, menyatakan 1, Prosedur fn_get_sql, jalur 12 pegangan dilewatkan ke fn_get_sql tidak sah.
SQL Server tidak bisa cache beberapa pernyataan Transact-SQL, seperti massal operasi pernyataan dan pernyataan dengan string literal lebih dari 8 KB. Pegangan untuk pernyataan-pernyataan tidak dapat melalui fn_get_sql fungsi.

Kolom teks disaring untuk teks yang mungkin berisi password. Meninjau topik "Membatasi jejak" dalam SQL Server buku Online untuk rincian tentang terkait keamanan disimpan prosedur yang tidak dipantau.

Izin

Hanya anggota dari sysadmin peran server tetap dapat menjalankan fn_get_sql fungsi.

Contoh

Informasi yang dikirim oleh fn_get_sql fungsi mirip dengan perintah DBCC INPUTBUFFER. Penggunaan fn_get_sql fungsi dalam situasi di mana DBCC INPUTBUFFER terbatas, seperti sebagai:
  • Ketika peristiwa memiliki lebih dari 255 karakter.
  • Ketika Anda harus kembali saat ini bersarang tertinggi tingkat prosedur yang disimpan. Misalnya, Anda memiliki dua disimpan prosedur yang diberi nama sp_1 dan sp_2. Jika sp_1 disimpan prosedur panggilan sp_2 prosedur yang tersimpan, dan Anda mendapatkan pegangan dari sysprocesses sistem meja sementara sp_2 berjalan, fn_get_sql fungsi akan kembali informasi tentang sp_2. Selain itu, fn_get_sql fungsi mengembalikan prosedur seluruh disimpan pada tertinggi saat ini tingkat bersarang.
Database administrator dapat menggunakan fn_get_sql fungsi untuk membantu mendiagnosa masalah proses. Setelah Administrator mengidentifikasi masalah server proses ID (SPID), administrator dapat mengambil SQLHANDLE untuk SPID itu, dan kemudian memanggil fn_get_sql fungsi dengan menangani dan penggunaan awal dan akhir offset untuk menentukan teks SQL masalah SPID. Misalnya:
DECLARE @Handle binary(20)
SELECT @Handle = sql_handle FROM sysprocesses WHERE spid = 52
SELECT * FROM ::fn_get_sql(@Handle) 
				
Anda juga dapat menggunakan fn_get_sql fungsi untuk terus-menerus memonitor server. Sebagai contoh, klien alat yang secara berkala mengambil SQLHANDLE dan mulai pernyataan dan akhir offset dari sysprocesses sistem meja. Alat memiliki cache SQL teks, dengan SQL menangani sebagai kunci unik dan hasil fn_get_sql berfungsi sebagai nilai. Untuk setiap baris dalam sysprocesses sistem tabel rowset, alat mencari teks di itu cache berdasarkan SQLHANDLE. Jika teks tidak dalam cache alat, alat kemudian panggilan fn_get_sql fungsi untuk mendapatkan teks dan menyimpannya dalam cache.

Jejak bendera 2861

Jejak bendera 2861 memerintahkan SQL Server agar rencana biaya nol cache, yang SQL Server akan biasanya cache (seperti sederhana ad-hoc pertanyaan, menetapkan pernyataan, melakukan transaksi dan lain-lain).
  • Jika jejak bendera 2861 diaktifkan, fn_get_sql fungsi dapat kembali teks SQL untuk kegiatan yang tidak nol biaya rencana. Jika jejak bendera 2861 dimatikan, fn_get_sql fungsi tidak dapat kembali teks SQL untuk kegiatan dengan nol biaya rencana.
  • Secara default, jejak bendera 2861 dimatikan ketika Anda menerapkan perbaikan ini.

Komentar

Jumlah dari objek dalam cache prosedur meningkatkan ketika jejak Bendera 2861 diaktifkan. Karena objek tambahan begitu kecil, Anda akan melihat peningkatan kecil dalam memori, yang diambil oleh prosedur cache.

SQL Server 2000 memiliki algoritma yang efisien untuk menemukan apapun yang ada pelaksanaan rencana untuk pernyataan SQL tertentu. Namun, karena dari peningkatan jumlah objek disimpan dalam cache prosedur, sangat mungkin bahwa waktu yang dibutuhkan untuk mesin relasional untuk mencari rencana yang ada mungkin menurunkan dan dapat mempengaruhi kinerja sistem Anda.

Biasanya, pada sistem di mana besar basis data jauh lebih besar daripada memori ukuran, sistem ini beberapa tekanan diharapkan memori. Jika tekanan memori sedemikian memori diperlukan untuk benda lain, lazywriter proses akan deallocate benda dalam cache prosedur. Ini akan mengikat ukuran prosedur cache dan akan meminimalkan potensi merugikan mempengaruhi perubahan ini.

Namun, pada sistem di mana ukuran memori lebih besar daripada ukuran database, sistem ini umumnya tidak di bawah tekanan memori. Oleh karena itu, objek tidak deallocated dari cache prosedur karena dari memori kebutuhan, dan ukuran cache prosedur dapat tumbuh ke titik di mana itu akan mempengaruhi kinerja.

Jika Anda perhatikan merugikan mempengaruhi kinerja sistem, Ikuti langkah berikut:
  1. Matikan jejak bendera 2861.
  2. Jalankan perintah DBCC FREEPROCCACHE dari Query Analyzer. Anda tidak harus me-restart SQL Server.

Properti

ID Artikel: 325607 - Kajian Terakhir: 26 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft SQL Server 2000 Standard Edition
Kata kunci: 
kbhotfixserver kbqfe kbsqlserv2000sp3fix kbfix kbinfo kbsqlserv2000presp3fix kbmt KB325607 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:325607

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com