ID Artikel: 198891 - Kajian Terakhir: 19 September 2011 - Revisi: 2.0

Bagaimana menjalankan berbasis DLL COM objek di luar proses SQL Server

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.

Pada Halaman ini

Perbesar semua | Perkecil semua

RINGKASAN

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.

INFORMASI LEBIH LANJUT

Informasi tentang dua metode dasar yang dapat Anda gunakan untuk instantiate objek COM dari proses berikut.

COM klien permintaan remoting objek

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:
       HRESULT hr = CoCreateInstance(CLSID_Test, NULL, CLSCTX_LOCAL_SERVER,
         IID_IUnknown, (void**)&piunknown);
    						

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:
    http://www.Microsoft.com/downloads/details.aspx?FamilyID=5233b70d-d9b2-4cb5-aeb6-45664be858b6&DisplayLang=en (http://www.microsoft.com/downloads/details.aspx?familyid=5233b70d-d9b2-4cb5-aeb6-45664be858b6&displaylang=en)
  • 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.
    1. 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.
    2. 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.
    3. 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.
    4. 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
    5. 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.
    6. 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.
    7. 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.
    8. 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.
    9. 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
    10. 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.
      C:\>tlist dllhost
       275 dllhost.exe
         CWD:     C:\NT40\system32\ 
         CmdLine: C:\NT40\System32\dllhost.exe {00000514-0000-0010-8000-00AA006D2EA4}
      -Embedding
         VirtualSize:    19180 KB   PeakVirtualSize:    19180 KB
         WorkingSetSize:  1780 KB   PeakWorkingSetSize:  1780 KB
         NumberOfThreads: 3
          278 Win32StartAddr:0x01001920 LastErr:0x00000000 State:Waiting
          215 Win32StartAddr:0x00001b5e LastErr:0x00000000 State:Waiting
          253 Win32StartAddr:0x00001b60 LastErr:0x000000cb State:Waiting
         4.0.1381.105 shp  0x01000000  dllhost.exe
         4.0.1381.130 shp  0x77f60000  ntdll.dll
         4.0.1381.121 shp  0x77dc0000  ADVAPI32.dll
         4.0.1381.133 shp  0x77f00000  KERNEL32.dll
         4.0.1381.133 shp  0x77e70000  USER32.dll
         4.0.1381.115 shp  0x77ed0000  GDI32.dll
         4.0.1381.131 shp  0x77e10000  RPCRT4.dll
         4.0.1381.117 shp  0x77b20000  ole32.dll
           6.0.8267.0 shp  0x78000000  MSVCRT.dll
                           0x1f310000  msado15.dll
          2.30.4265.1 shp  0x766f0000  OLEAUT32.dll
          4.0.1381.72 shp  0x77bf0000  rpcltc1.dll
      								
      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.

REFERENSI

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:
http://www.Microsoft.com/com (http://www.microsoft.com/com)

Berlaku bagi:
  • Microsoft SQL Server 6.5 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Kata kunci: 
kbinfo kbmt KB198891 KbMtid
Penerjemahan MesinPenerjemahan 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:198891  (http://support.microsoft.com/kb/198891/en-us/ )