Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.
Microsoft SQL Server 6.5 atau kemudian menyediakan kemampuan untuk memuat dan menjalankan kustom Component Object Model (COM) objek melalui OLE Automation disimpan prosedur atau melalui diperpanjang disimpan prosedur. Secara default, DLL berbasis COM objek dimuat dalam proses server, yang berarti bahwa objek COM tidak hanya dimuat dalam ruang alamat memori proses SQL Server, tetapi mereka juga memiliki akses penuh ke ruang alamat memori ini. Oleh karena itu, sebuah objek COM yang dimuat di ruang proses SQL Server harus mematuhi aturan yang sama sebagai DLL file. Ada potensi objek COM bisa menimpa memori dalam SQL Server proses atau kebocoran sumber daya, menyebabkan ketidakstabilan.
Jika ada dugaan bahwa objek COM dapat mempengaruhi kekokohan SQL Server proses, Anda mungkin ingin menggunakan langkah-langkah dalam artikel ini untuk instantiate objek COM di luar ruang proses SQL Server. Pelaksanaan didistribusikan komponen objek model 's (DCOM) spesifikasi "Lokasi transparansi" ke dalam sistem operasi telah memberikan kemampuan untuk menjalankan sebuah objek COM berbasis DLL di luar ruang proses SQL Server.
Proses menjalankan berbasis DLL COM objek di luar ruang alamat aplikasi utama disebut remoting. Remoting mengharuskan executable lain menjadi pengganti proses di tempat eksekusi SQL Server. Eksekusi default yang digunakan oleh DCOM Service Control Manager (Rpcss.exe) dinamakan Dllhost.exe. Struktur dukungan DCOM menggunakan Dllhost.exe file untuk memuat DLL ke ruang proses dan kemudian menggunakan proxy/rintisan pasangan untuk mengumpulkan antarmuka diminta transparan kembali ke klien, yang dalam kasus ini adalah SQL Server. Eksekusi ini dapat menerima beberapa antarmuka/metode permintaan secara bersamaan. Setelah penggunaan antarmuka selesai, DCOM Service Control Manager (SCM) mengelola atas bersih dan membongkar muatan dari berkas Dllhost.exe. Objek COM tidak diharapkan untuk mempertahankan informasi negara di antara instantiations.
Dalam rangka untuk artikel ini untuk bekerja dengan benar, sistem harus menjalankan DCOM diaktifkan sistem operasi. Ini akan menjadi baik Microsoft Windows NT 4.0 Service Pack 2 atau kemudian, Microsoft Windows 98 atau Microsoft Windows 95 dengan DCOM add-in diinstal. Langkah-langkah berikut dapat mengajukan permohonan untuk setiap objek COM berbasis DLL yang sedang diciptakan di ruang proses SQL Server, apakah itu sedang instantiated melalui sp_OACreate atau diperpanjang disimpan prosedur.
Dengan mengubah cara Anda memohon COM objek, Anda dapat meminta bahwa objek akan dibuat di luar ruang alamat SQL Server.
Jika objek COM dimuat dengan menggunakan sp_OACreate prosedur, secara default yang dimuat dalam proses. Namun, ada parameter opsional ketiga untuk prosedur ini yang mungkin Anda dapat menggunakan untuk menunjukkan konteks di mana untuk membuat objek. Jika parameter ini tidak ditentukan, pengaturan default dari lima (5) digunakan, yang berarti untuk menjalankan objek di dalam atau di luar dari proses. Anda perlu mengubah parameter untuk empat (4), yang menunjukkan untuk DCOM yang komponen ini untuk menjalankan sebagai eksekusi lokal. Gunakan sintaks yang serupa dengan contoh berikut untuk secara eksplisit menginformasikan DCOM untuk menjalankan objek COM "keluar dari proses" menggunakan sp_OACreate disimpan prosedur:
DECLARE @object int
DECLARE @hr int
EXEC @hr = sp_OACreate 'SQLOLE.SQLServer', @object OUT, 4
Jika objek COM dibuat dalam diperpanjang disimpan prosedur parameter ketiga CoCreateInstance atau CoCreateInstanceEx dapat berubah menjadi CLSCTX_LOCAL_SERVER. Hal ini ditunjukkan dalam contoh kode berikut menggunakan CoCreateInstance:
Memodifikasi registri untuk memaksa remoting objek
Jika Anda tidak dapat mengubah klien COM untuk meminta bahwa objek dibuat dari proses, ada dua metode yang berbeda untuk memaksa objek akan dibuat dari proses.
Menggunakan penampil OLE/COM objek (Oleview.exe) yang disertakan dengan Microsoft Visual C++ dan menemukan ProgID dalam bentuk OLEComponent.Object di bawah Semua objek. Pilih objek COM, dan kemudian dari Objek menu, pilih Bendera CoCreateInstance. Pastikan bahwa hanya CLSCTX_LOCAL_SERVER dipilih. Berikutnya, di bawah Implementasi dan Inproc Server Pilih tab Menggunakan proses pengganti dan kosongkan "Jalan untuk Custom pengganti", yang memungkinkan file Dllhost.exe yang dimuat dan COM DLL dibawa dalam itu proses ruang.
Jika Anda tidak memiliki Microsoft Visual C++, utilitas OLE/COM objek Viewer juga tersedia untuk di-download dari Website Microsoft berikut:
Gunakan langkah-langkah berikut untuk memperbarui registri secara manual.
Warning Masalah serius mungkin muncul jika Anda memodifikasi registri secara tidak benar dengan menggunakan Peninjau Suntingan Registri atau metode lainnya. Masalah ini mungkin mengharuskan Anda untuk memasang ulang sistem operasi. Microsoft tidak dapat menjamin bahwa masalah ini dapat diatasi. Ubah registri atas risiko Anda sendiri.
Memperoleh Identifier kelas (CLSID) objek COM. CLSID sejumlah 128-bit dan dianggap secara global Unique Identifier (GUID) yang digunakan untuk secara unik mengidentifikasi komponen, modul atau file yang berisi objek COM ini. Ketika membuat objek COM menggunakan OLE otomatisasi disimpan prosedur, parameter pertama disimpan prosedur adalah pengenal program atau ProgID OLE objek digunakan untuk memperoleh CLSID. String karakter ini menjelaskan kelas OLE objek dan memiliki bentuk sebagai berikut:
OLEComponent.Object
Anda dapat menggunakan pengidentifikasi program untuk menemukan identifier kelas untuk objek COM.
Buka Registry Editor (Regedit.exe) dan di bawah HKEY_CLASSES_ROOT kunci penggunaan Menemukan metode untuk Cari kunci dengan nama Anda <olecomponent.object></olecomponent.object>. Anda akan menemukannya di tingkat lain, tetapi harus terletak di tingkat langsung di bawah HKEY_CLASSES_ROOT. Setelah Anda menemukan kunci, memperluas folder untuk nama kunci dan Anda harus melihat subkunci bernama CLSID. Klik folder itu untuk melihat nilai dalam kunci itu. Di sisi kanan layar adalah judul yang bernama "(Default)". Data untuk kunci yang harus dalam bentuk berikut:
{59F929A0-74D8-11D2-8CBC-08005A390B09}
Membuat catatan dari nilai ini atau Salin ke Notepad. Sertakan tanda kurung.
Menavigasi di bawah kunci HKEY_CLASSES_ROOT\CLSID dan menemukan subkunci dengan nomor GUID ini. Setelah Anda menyorot kunci HKEY_CLASSES_ROOT\CLSID Anda dapat menggunakan Menemukan fungsi dalam Registry Editor (di bawah Mengedit menu) dan paste GUID ke Menemukan kotak dialog. Pastikan bahwa Anda telah menemukan antarmuka tepat dengan memeriksa subkunci InprocServer32 di bawah kunci ini, yang menunjuk ke lokasi file COM DLL. Jika kunci TypeLib, memeriksa nilai GUID ini. Ini harus menjadi berbeda dari apa yang Anda catat di langkah 1. Jika tidak, Anda memiliki TypeLib GUID dan tidak GUID untuk objek COM. Subkunci ProgID akan memiliki nilai 'OLEComponent.Object.1'. Satu di akhir untuk sampel ini hanya dan digunakan untuk informasi versi.
Sementara di bawah GUID InprocServer32 subkunci, pastikan bahwa nilai ThreadingModel ada dan yang mengatur baik kedua atau bebas untuk memastikan marshaling memahami model berjumlah objek COM mengaktifkan pelaksanaan COM keluar dari ruang proses SQL Server. Jika tidak ada nilai ThreadingModel atau diatur ke apartemen, COM objek Instansiasi mungkin tidak konsisten.
Catatan Jika Anda menambahkan ThreadingModel nilai pastikan Anda menguji objek COM Anda sebelum menerapkan.
Sorot GUID nomor/subkunci di bawah kunci HKEY_CLASSES_ROOT\CLSID. Dari Mengedit menu, klik Baru, kemudian pilih Nilai Untai. Di bawah Nama kolom, ketik berikut:
AppID
Tekan MASUKKAN dan kemudian masukkan identifier kelas atau GUID nomor yang Anda catat di langkah 1 sebagai nilai. GUID harus berada di dalam kurung keriting seperti dalam contoh berikut:
{59F929A0-74D8-11D2-8CBC-08005A390B09}
Aplikasi pengenal AppID digunakan oleh DCOM untuk mengasosiasikan DLL dengan file eksekusi.
Menambah subkunci baru di bawah HKEY_CLASSES_ROOT\AppID dan mengatur nama sama identifier kelas atau GUID nomor dengan kurung sebagai dimasukkan di langkah sebelumnya.
Sorot GUID nama. Dari Mengedit menu, klik Baru, kemudian pilih Nilai Untai. Di bawah Nama kolom, ketik berikut:
DllSurrogate
Meninggalkan Data kolom kosong untuk nilai ini. Karena data kolom kosong, ini memberitahu DCOM untuk menjalankan file eksekusi default, Dllhost.exe dan beban objek COM dalam itu proses ruang.
Tutup Penyunting Registri. Klik Mulai, lalu klik Menjalankan. Dalam Menjalankan kotak dialog ketik berikut:
DCOMCNFG
Tekan MASUKKAN kunci untuk membuka Didistribusikan COM konfigurasi properti kotak dialog. Klik Default properti tab, dan memastikan bahwa Mengaktifkan didistribusikan COM di komputer ini dipilih. Jika tidak, pilih, dan kemudian klik Menerapkan.
Pastikan account pengguna Microsoft Windows NT yang SQL Server berjalan di bawah telah "Kontrol penuh" izin pada kunci registri untuk objek ini. Jika izin tidak memadai atau kunci registri masukan salah kesalahan berikut dapat terjadi ketika Anda membuat objek COM:
OLE Automation kesalahan informasi HRESULT: 0X80040154 Sumber: ODSOLE diperpanjang prosedur Keterangan: Kelas tidak terdaftar
OLE Automation kesalahan informasi HRESULT: 0X80070005 Sumber: ODSOLE diperpanjang prosedur Keterangan: Akses ditolak.
OLE Automation kesalahan informasi HRESULT: 0X80080005 Sumber: ODSOLE diperpanjang prosedur Keterangan: Server eksekusi gagal
Tes dan melihat apakah ini adalah menjalankan berkas Dllhost.exe dan memuat objek COM di ruang proses. Ini memerlukan bahwa Resource Kit Microsoft Windows NT adalah pada Windows NT komputer yang menjalankan SQL Server. Buka prompt perintah dan dari prompt perintah yang menjalankan berkas Tlist.exe, yang menunjukkan semua proses dan mereka terkait proses pengidentifikasi, atau pengidentifikasi proses (PID). Dalam Transact-SQL script di mana sp_OACreate menjalankan dan setelah panggilan itu dijalankan, tapi sebelum script berakhir, gunakan menyusul untuk menunda selesai script untuk tambahan 20 detik:
WAITFOR DELAY '000:00:20'
Menjalankan script dan segera menavigasi ke prompt perintah dan jalankan Tlist.exe file. Catatan Dllhost.exe PID. Jalankan kembali Tlist.exe dan lulus PID sebagai parameter. Ini menunjukkan dll yang dimuat dalam ruang proses Dllhost.exe. Objek COM berbasis DLL harus terdaftar sebagai berjalan dalam proses ini. Setelah script kembali, menjalankan Tlist.exe lagi mengungkapkan bahwa proses Dllhost.exe tidak lagi berjalan.
Dalam contoh berikut output ADODB.Objek sambungan dibuat di luar dari ruang proses SQL Server. Snapshot ini menggunakan Tlist.exe dilakukan sementara objek COM yang ada di ruang proses Dllhost.exe. Perhatikan bahwa modul Msado15.dll, yang merupakan modul yang berisi objek COM, dimuat.
Dengan SQL Server versi 7.0 edisi Desktop yang berjalan pada Microsoft Windows 95 atau Microsoft Windows 98 workstation, "32-bit modul Loaded" dalam alat informasi sistem Microsoft aplikasi dapat digunakan selama eksekusi untuk melihat loading\unloading dari Dllhost.exe file dan objek COM DLL selama tes ini. Untuk mengakses alat, klik Mulai, arahkan ke Program, arahkan ke Aksesoris, lalu klik System Tools.
Catatan Karena keterbatasan keamanan, Windows 95 atau Windows 98 tidak mendukung memulai proses DLLSurrogate dan loading DLL COM oleh seorang klien yang jauh. Oleh karena itu, objek COM harus ada dalam menjalankan objek meja (MEMBUSUK) dan akan berjalan/dimuat jika menjadi tersedia untuk digunakan oleh klien remote komputer.
Anda dapat menggunakan langkah-langkah dalam artikel ini untuk membantu mengisolasi objek COM ketika mereka diduga menyebabkan ketidakstabilan dalam SQL Server. Pastikan bahwa setiap komponen diuji benar-benar kehabisan proses untuk memastikan konsisten perilaku. Perbedaan kinerja di instantiating sebuah objek COM dalam proses SQL Server dan di luar ruang proses bervariasi. Juga, beberapa objek COM tidak dibangun untuk menjadi remoted dan dapat bocor sumber daya. Menguji secara menyeluruh sebelum menerapkan langkah-langkah dalam artikel ini untuk sesuatu
Selain langkah pemecahan masalah.
Artikel Basis Pengetahuan Microsoft berikut memiliki contoh bagaimana remoting objek COM dapat menyebabkan kebocoran sumber daya:
197426
(http://support.microsoft.com/kb/197426/
)
FIX: Menangani kebocoran ketika melewati objek ADO antara proses
Catatan Microsoft SQL Server 6.5, secara default, beroperasi dengan satu Thread apartemen (STA) model dan menangani inisialisasi objek COM pada thread internal terpisah. Dalam model ini, satu thread yang dipilih untuk mengontrol penciptaan semua objek OLE dalam proses SQL Server dan untuk proxy kembali untuk semua sambungan klien yang membutuhkan akses ke objek COM ini. Karena ini ditangani secara internal oleh SQL Server, ketekunan objek yang tidak dapat dijamin antara instantiations objek COM.
Untuk informasi lebih lanjut tentang model SQL Server 6,5 COM objek, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
194661
(http://support.microsoft.com/kb/194661/
)
SQL Server COM objek ketekunan model
Untuk informasi lebih lanjut tentang cara Sp_OA disimpan prosedur dilaksanakan, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
180780
(http://support.microsoft.com/kb/180780/
)
Bagaimana Sp_OA prosedur ekstensi untuk SQL Server diimplementasikan
Untuk informasi lebih lanjut tentang menjalankan berbasis DLL COM objek dalam DLL pengganti; Silakan merujuk sebagai berikut:
Eddon, Guy; Eddon Henry, Dalam Com didistribusikan (MP). Microsoft Press, 1998 (ISBN 1-57231-849-X), bab delapan: ' DLL pengganti dan eksekusi komponen
Kotak, Don, COM penting. Addison-Wesley Pub. Co, (ISBN 0-201-63446-5) Bab enam: 'Aplikasi'
Grimes, Richard, Profesional DCOM pemrograman. Wrox Press Inc. (ISBN 1-861000-60-X), bab empat: 'Didistribusikan Model objek komponen'
DCOM Add-In untuk Windows 95 dikirim dengan SQL Server 7.0
Media dan file bernama Dcom95.exe. Anda dapat men-download Dcom95.exe dari situs Web berikut:
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:198891
(http://support.microsoft.com/kb/198891/en-us/
)
Seberapa besar upaya Anda untuk menggunakan artikel ini?
Sangat sedikit
Sedikit
Sedang
Besar
Sangat besar
Berikan saran tentang apa yang dapat kami lakukan untuk menyempurnakan informasi ini
Terima kasih! Masukan Anda akan digunakan untuk membantu kami meningkatkan konten dukungan. Untuk opsi bantuan lainnya, kunjungi Halaman Beranda Bantuan dan Dukungan.