SQL Server'de Oracle veritabanına bağlı bir sunucu ayarlama ve sorunlarını giderme

Bu makalede, Microsoft SQL Server çalıştıran bir bilgisayardan Oracle veritabanına bağlı sunucunun nasıl ayarlanacağı açıklanır ve Oracle veritabanına bağlı bir sunucu ayarlarken karşılaşabileceğiniz yaygın hatalar için temel sorun giderme adımları sağlanır.

Orijinal ürün sürümü: Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Sürümü, Microsoft SQL Server 2005 Express Sürüm, Microsoft SQL Server 2005 Workgroup Edition
Özgün KB numarası: 280106

Özet

Bu makalede, Microsoft SQL Server çalıştıran bir bilgisayardan Oracle veritabanına bağlı sunucunun nasıl ayarlanacağı açıklanır ve Oracle'a bağlı bir sunucu ayarlarken karşılaşabileceğiniz yaygın hatalar için temel sorun giderme adımları sağlanır. Bu makaledeki bilgilerin çoğu Oracle için Microsoft OLEDB Sağlayıcısı'nı (MSDAORA) kullanacak şekilde yapılandırılmış ortamlar için geçerlidir. Yeni geliştirme çalışmalarında bu özelliği kullanmaktan kaçının ve şu anda bu özelliği kullanan uygulamaları değiştirmeyi planlayın. Bunun yerine Oracle'ın OLE DB sağlayıcısını kullanın.

Oracle'ın OLEDB sağlayıcısını kullanarak bağlı sunucuyu yapılandırma hakkında daha fazla bilgi için Bkz. Oracle ve Bağlı Sunucularla çalışmaya başlama.

Önemli

Oracle için Microsoft ODBC Sürücüsünün geçerli sürümü ODBC 2.5 belirtimiyle uyumluyken, Oracle için OLE DB Sağlayıcısı yerel bir Oracle 7 OCI API sağlayıcısıdır. Hem sürücü hem de sağlayıcı, Oracle veritabanlarına bağlanmak ve verileri almak için SQL*Net client (veya Oracle 8x için Net8 istemcisi) ve Oracle Çağrı Arabirimi (OCI) kitaplığını ve diğer Oracle istemci bileşenlerini kullanır. Oracle istemci bileşenleri önemlidir ve hem sürücüyü hem de sağlayıcıyı kullanarak Oracle veritabanlarına başarıyla bağlanmak için doğru şekilde yapılandırılmalıdır.

Microsoft Veri Erişim Bileşenleri (MDAC) sürüm 2.5 ve sonraki sürümlerden, hem Microsoft ODBC Sürücüsü hem de OLE DB Sağlayıcısı aşağıdaki sınırlamalarla YALNIZCA Oracle 7 ve Oracle 8i'yi destekler:

  • CLOB, BLOB, BFILE, NCHAR, NCLOB ve NVARCHAR2 gibi Oracle 8.x'e özgü veri türleri desteklenmez.

  • Oracle 7.x ve 8.x sunucularında Unicode özelliği desteklenmez.

  • Birden çok Oracle istemci örneği veya birden çok Oracle evi, SYSTEM PATH değişkeninde Oracle giriş adresinin ilk geçtiği yeri temel aldıkları için desteklenmez.

  • Bir saklı yordamdan veya toplu iş SQL deyiminden birden çok sonuç kümesinin döndürülmesi ADO veya OLEDB kullanılarak desteklenmez.

  • İç içe dış birleşimler desteklenmez.

  • XML kalıcılığı desteklenmez.

  • 8i'den büyük sürümler bu sürücülerin kullanılması desteklenmez.

Not

Bu makalede bahsedilen üçüncü taraf ürünler, Microsoft'tan bağımsız şirketler tarafından üretilmektedir. Microsoft, bu ürünlerin performansı veya güvenilirliği ile ilgili örtük veya başka türlü hiçbir garanti vermez.

Oracle'a bağlı sunucu ayarlama adımları

  1. Bağlı sunucunun ayarlandığı SQL Server çalıştıran bilgisayara Oracle istemci yazılımını yüklemeniz gerekir.

  2. İstediğiniz sürücüyü SQL Server çalıştıran bilgisayara yükleyin. Microsoft yalnızca oracle için Oracle için Microsoft OLE DB Sağlayıcısı ve Microsoft ODBC Sürücüsünü destekler. Oracle'a bağlanmak için üçüncü taraf sağlayıcı veya üçüncü taraf bir sürücü kullanıyorsanız, sağlayıcıyı veya sürücüsünü kullanarak karşılaşabileceğiniz sorunlar için ilgili satıcıya başvurmanız gerekir.

  3. oracle için Oracle için Microsoft OLE DB Sağlayıcısı ve Microsoft ODBC Sürücüsü kullanıyorsanız aşağıdakileri göz önünde bulundurun:

    • Hem OLE DB sağlayıcısı hem de Microsoft Veri Erişim Bileşenleri'ne (MDAC) dahil edilen ODBC sürücüsü için SQL*Net 2.3.x veya sonraki bir sürüm gerekir. Oracle 7.3.x istemci yazılımını veya sonraki bir sürümü istemci bilgisayara yüklemeniz gerekir. İstemci bilgisayar, SQL Server çalıştıran bilgisayardır.

    • SQL Server çalıştıran bilgisayarda MDAC 2.5 veya sonraki bir sürümün yüklü olduğundan emin olun. MDAC 2.1 veya önceki bir sürümle Oracle 8 kullanan veritabanlarına bağlanamazsınız. x veya sonraki bir sürüm.

    • MDAC 2.5 veya sonraki sürümlerin Oracle istemci yazılımıyla çalışmasını sağlamak için, kayıt defterinin aşağıdaki tabloda gösterildiği gibi SQL Server çalıştıran istemci bilgisayarda değiştirilmesi gerekir.

      Oracle
      Client               Microsoft Windows 2000 and later versions
      --------------------------------------------------------------------------
      
      7.x                  [HKEY_LOCAL_MACHINE\SOFTWARE
                           Microsoft\MSDTC\MTxOCI]
                           "OracleXaLib"="xa73.dll"
                           "OracleSqlLib"="SQLLib18.dll"
                           "OracleOciLib"="ociw32.dll"
      
      8.0                  [HKEY_LOCAL_MACHINE\SOFTWARE
                           \Microsoft\MSDTC\MTxOCI]
                           "OracleXaLib"="xa80.dll"
                           "OracleSqlLib"="sqllib80.dll"
                           "OracleOciLib"="oci.dll"
      
      8.1                  [HKEY_LOCAL_MACHINE\SOFTWARE
                           \Microsoft\MSDTC\MTxOCI]
                           "OracleXaLib"="oraclient8.dll"
                           "OracleSqlLib"="orasql8.dll"
                           "OracleOciLib"="oci.dll"
      
  4. Oracle istemci yazılımını yükledikten sonra SQL Server çalıştıran bilgisayarı yeniden başlatın.

  5. SQL Server çalıştıran bilgisayarda aşağıdaki betiği kullanarak bağlı bir sunucu ayarlayın.

    -- Adding linked server (from SQL Server Books Online):
    /* sp_addlinkedserver [@server =] 'server'[, [@srvproduct =] 'product_name']
     [, [@provider =] 'provider_name']
     [, [@datasrc =] 'data_source']
     [, [@location =] 'location'] [, [@provstr =] 'provider_string'] 
     [, [@catalog =] 'catalog']
    */
    
    EXEC sp_addlinkedserver 'Ora817Link', 'Oracle', 'MSDAORA', 'oracle817'
    
    -- Adding linked server login:
    /* sp_addlinkedsrvlogin [@rmtsrvname =] 'rmtsrvname'[,[@useself =] 'useself']
     [,[@locallogin =] 'locallogin']
     [,[@rmtuser =] 'rmtuser']
     [,[@rmtpassword =] 'rmtpassword']
    */
    
    EXEC sp_addlinkedsrvlogin 'Ora817Link', 'FALSE',NULL, 'scott', 'tiger'
    
    -- Help on the linked server:
    EXEC sp_linkedservers
    EXEC sp_helpserver
    select * from sysservers
    

    Not

    Oracle için Microsoft ODBC Sürücüsü kullanıyorsanız parametresini @datasrc kullanarak bir DSN adı belirtebilirsiniz. DSN'siz bağlantı için sağlayıcı dizesi @provstr parametresi aracılığıyla sağlanır. Oracle için Microsoft OLE DB Sağlayıcısı ile, @datasrc parametresi için TNSNames.Ora dosyasında yapılandırılan Oracle sunucu diğer adını kullanın. Daha fazla bilgi için SQL Server Books Online'daki "sp_addlinkedserver" konusuna bakın.

Yaygın hata iletileri ve bunların sorunlarını giderme

Önemli

Bu bölüm, yöntem veya görev, kayıt defterini nasıl değiştireceğinizin anlatıldığı adımları içermektedir. Ancak kayıt defterini hatalı biçimde değiştirirseniz önemli sorunlar oluşabilir. Bu nedenle bu adımları dikkatle uyguladığınızdan emin olun. Ek koruma için kayıt defterini değiştirmeden önce yedeklemeyi unutmayın. Böylece, bir sorun oluşursa kayıt defterini daha sonra geri yükleyebilirsiniz. Kayıt defterini yedekleme ve geri yükleme hakkında daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın: 322756 Windows'da kayıt defterini yedekleme ve geri yükleme

Dağıtılmış sorguyu yürütürken karşılaştığınız hatalarla ilgili genişletilmiş bilgileri almak için aşağıdaki iki yöntemden birini kullanabilirsiniz.

  • Yöntem 1

    SQL Server Management Studio kullanarak SQL Server bağlanın ve 7300 izleme bayrağını açmak için aşağıdaki kodu çalıştırın.

    DBCC Traceon(7300)
    
  • Yöntem 2

    SQL Profiler'daki "Hatalar ve Uyarılar" olay kategorisinde bulunan "OLEDB Hataları" olayını yakalayın. Hata iletisi biçimi aşağıdaki gibidir:

    Interface::Method onaltılık hata koduyla başarısız oldu.

    MDAC Yazılım Geliştirme Seti'ne (SDK) dahil edilen Oledberr.h dosyasında onaltılık hata kodunu arayabilirsiniz.

Aşağıda, hata iletisinin nasıl giderildiğini gösteren bilgilerle birlikte oluşabilecek yaygın hata iletilerinin listesi yer alır.

Not

SQL Server 2005 veya sonraki sürümleri kullanıyorsanız, bu hata iletileri biraz farklı olabilir. Ancak, bu hata iletilerinin hata kimlikleri, SQL Server eski sürümlerindeki hata kimlikleriyle aynıdır. Bu nedenle, bunları hata kimlikleriyle tanımlayabilirsiniz. Performansla ilgili sorunlar için Çevrimiçi Kitaplar SQL Server Dağıtılmış Sorguları İyileştirme konusunu arayın.

  • İleti 1

    Hata 7399: "%ls" bağlı sunucusu için OLE DB sağlayıcısı "%ls" bir hata bildirdi. %ls

    genişletilmiş OLEDB hata bilgilerini almak üzere OLEDB Hataları olayını yakalamak için izleme bayrağı 7300'i açın veya SQL Profiler'ı kullanın.

  • İleti 2a

    "ORA-12154: TNS:hizmet adı çözümlenemedi"

  • İleti 2b

    "Oracle(tm) istemcisi ve ağ bileşenleri bulunamadı. Bu bileşenler Oracle Corporation tarafından sağlanır ve Oracle Sürüm 7.3.3 (veya üzeri) istemci yazılımı yüklemesinin bir parçasıdır"

    Oracle sunucusuna bağlantı sorunu olduğunda bu hatalar oluşur. Ek sorun giderme için aşağıdaki Oracle sunucusuna bağlantı sorunlarını giderme teknikleri bölümünü gözden geçirin.

  • İleti 3

    Hata 7302: "%ls" bağlı sunucusu için OLE DB sağlayıcısı 'MSDAORA' örneği oluşturulamıyor.

    MSDAORA.dll dosyasının doğru kaydedildiğinden emin olun. (MSDAORA.dll dosyası Oracle dosyası için Microsoft OLE DB sağlayıcısıdır.) Oracle için Microsoft OLE DB Sağlayıcısı kaydetmek için RegSvr32.exe kullanın.

    Not

    Üçüncü taraf bir Oracle sağlayıcısı kullanıyorsanız ve Oracle sağlayıcınız SQL Server bir işlem dışında çalışamıyorsa sağlayıcı seçeneklerini değiştirerek bu sağlayıcının işlem sırasında çalışmasını etkinleştirin. Sağlayıcı seçeneklerini değiştirmek için aşağıdaki yöntemlerden birini kullanın:

    • Yöntem 1 Aşağıdaki kayıt defteri anahtarını bulun. Ardından AllowInProcess (DWORD) girişinin değerini 1 olarak değiştirin. Bu kayıt defteri anahtarı ilgili sağlayıcı adının altında bulunur: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\ProviderName.

    • Yöntem 2 SQL Server Management Studio (SSMS) kullanan sağlayıcılar için İşlemeye izin ver seçeneğini ayarlamak için bu adımları izleyin.

    1. SSMS'yi açın ve SQL Server örneğine bağlanın.
    2. Nesne Gezgini'daSunucu Nesneleri>Bağlı Sunucu>Sağlayıcıları'na gidin.
    3. Yapılandırmak istediğiniz sağlayıcıya sağ tıklayın ve Özellikler'i seçin.
    4. Sağlayıcı Seçenekleri penceresinde, İşlemeye izin ver seçeneği için Etkinleştir kutusunu işaretleyin.
  • İleti 4

    Hata 7303: "%ls" bağlı sunucusu için 'MSDAORA' OLE DB sağlayıcısının veri kaynağı nesnesi başlatılamıyor. [OLE/DB sağlayıcısı ileti döndürdü: ORA-01017: geçersiz kullanıcı adı/parola; oturum açma reddedildi] OLE DB hata izleme [OLE/DB Sağlayıcısı 'MSDAORA' IDBInitialize::Döndürülen 0x80040e4d başlatma].

    Bu hata iletisi, bağlı sunucunun doğru oturum açma eşlemesine sahip olmadığını gösterir. Oturum açma bilgilerini doğru ayarlamak için saklı yordamı yürütebilirsiniz sp_helplinkedsrvlogin . Ayrıca, bağlı sunucu yapılandırması için doğru parametreleri belirttiğinizden emin olun.

  • İleti 5

    Hata 7306: "%ls" bağlı sunucusu için 'MSDAORA' OLE DB sağlayıcısından '%ls' tablosu açılamıyor. Belirtilen tablo yok. [OLE/DB sağlayıcısı döndürülen ileti: Tablo yok.] [OLE/DB sağlayıcısı döndürülen ileti: ORA-00942: tablo veya görünüm yok] OLE DB hata izleme [OLE/DB Sağlayıcısı 'MSDAORA' IOpenRowset::OpenRowset döndürülen 0x80040e37: Belirtilen tablo yok.].

    Hata 7312: "%ls" bağlı sunucusu için '%ls' OLE DB sağlayıcısı için şema ve/veya katalog geçersiz kullanımı. Dört parçalı bir ad sağlandı, ancak sağlayıcı katalog ve/veya şema kullanmak için gerekli arabirimleri kullanıma sunmaz.

    Hata 7313: "%ls" bağlı sunucusu için "%ls" sağlayıcısı için geçersiz bir şema veya katalog belirtildi.

    Hata 7314: "%ls" bağlı sunucusu için OLE DB sağlayıcısı "%ls" "%ls" tablosunu içermiyor. Tablo yok veya geçerli kullanıcının bu tabloda izinleri yok.

    Bu hata iletilerini alırsanız, Oracle şemasında bir tablo eksik olabilir veya bu tabloda izinleriniz olmayabilir. Şema adının büyük harf kullanılarak yazıldığını doğrulayın. Tablo ve sütunların alfabetik durumu Oracle sistem tablolarında belirtildiği gibi olmalıdır.

    Oracle tarafında, çift tırnak işareti olmadan oluşturulan bir tablo veya sütun büyük harfle depolanır. Tablo veya sütun çift tırnak içine alınmışsa, tablo veya sütun olduğu gibi depolanır.

    Aşağıdaki çağrı, tablonun Oracle şemasında mevcut olup olmadığını gösterir. Bu çağrı tam tablo adını da gösterir.

    sp_tables_ex @table_server=Ora817Link, @table_schema='your_schema_name'
    
  • İleti 6

    Hata 7413: '%ls' bağlı sunucusuna bağlanılamadı (OLE DB Sağlayıcısı '%ls'). Temsilci seçmeyi etkinleştirin veya geçerli kullanıcı için uzak SQL Server oturum açma bilgilerini kullanın. Msg 18456, Düzey 14, Durum 1, Satır 1 '' kullanıcısı için oturum açılamadı.

    Bu hata iletisi, açık oturum açma eşlemesi olmadan Microsoft Windows kimliği doğrulanmış oturum açma için dağıtılmış bir sorgu denendiğini gösterir. Güvenlik temsilcisinin desteklenmediği bir işletim sistemi ortamında, Windows NT kimliği doğrulanmış oturum açma işlemleri kullanılarak sp_addlinkedsrvloginoluşturulan bir uzak oturum açma ve parolayla açık bir eşlemeye ihtiyaç duyar.

  • İleti 7

    Hata 7391: "%ls" bağlı sunucusu için OLE DB sağlayıcısı 'MSDAORA' dağıtılmış işlem başlatamadığından işlem gerçekleştirilemedi. OLE DB hata izleme [OLE/DB Sağlayıcısı 'MSDAORA' ITransactionJoin::JoinTransaction döndürülen 0x8004d01b]

    Bu makalenin önceki bölümlerinde açıklandığı gibi OCI sürümlerinin doğru kaydedildiğini doğrulayın.

    Not

    Kayıt defteri girdilerinin tümü doğruysa, MtxOCI.dll dosyası yüklenir. MtxOCI.dll dosyası yüklenmezse, Oracle için Microsoft OLE DB Sağlayıcısı veya Oracle için Microsoft ODBC Sürücüsü kullanarak Oracle'a karşı dağıtılmış işlemler gerçekleştiremezsiniz. Üçüncü taraf sağlayıcı kullanıyorsanız ve Hata 7391 alırsanız, kullandığınız OLE DB sağlayıcısının dağıtılmış işlemleri desteklediğini doğrulayın. OLE DB sağlayıcısı dağıtılmış işlemleri destekliyorsa, Microsoft Dağıtılmış İşlem Düzenleyicisi'nin (MSDTC) çalıştığını ve ağ erişiminin etkinleştirildiğini doğrulayın.

  • İleti 8

    Hata 7392: "%ls" bağlı sunucusu için OLE DB sağlayıcısı 'MSDAORA' için işlem başlatılamıyor. OLE DB hata izleme [OLE/DB Sağlayıcısı 'MSDAORA' ITransactionLocal::StartTransaction 0x8004d013 döndürdü: ISOLEVEL=4096].

    Bu oturum için yalnızca bir işlem etkin olabileceğinden OLE DB sağlayıcısı 7392 hatasını döndürdü. Bu hata, bağlantı açık veya örtük bir işlemde olduğunda ve OLE DB sağlayıcısı iç içe işlemleri desteklemediğinde OLE DB sağlayıcısına karşı bir veri değiştirme deyiminin denendiğini gösterir. SQL Server, belirli hata koşullarında işleme devam ederken veri değiştirme deyiminin etkilerini sonlandırabilmesi için bu desteği gerektirir.

    AÇıKsaSET XACT_ABORT, SQL Server OLE DB sağlayıcısından iç içe işlem desteği gerektirmez. Bu nedenle, örtük veya açık bir işlemde uzak tablolarda veri değişiklik deyimlerini yürütmeden önce yürütebilirsiniz SET XACT_ABORT ON . Kullandığınız OLE DB sağlayıcısının iç içe işlemleri desteklememesi durumunda bunu yapın.

Oracle sunucusuna bağlantı sorunlarını giderme teknikleri

Oracle için Microsoft ODBC sürücüsü veya Oracle için Microsoft OLE DB Sağlayıcısı oracle bağlantı sorunlarını ayıklamak için şu adımları izleyin:

  1. Oracle'a bağlanıp veri alabildiğinizi doğrulamak için Oracle SQL Plus yardımcı programını (komut satırı tabanlı sorgu yardımcı programı) kullanın.

    Not

    Oracle'a bağlanamıyor ve veri alamıyorsanız, Oracle İstemci Bileşenleri'nin hatalı bir yüklemesine veya yapılandırmasına sahipsinizdir veya SQL*Net Kolay Yapılandırma veya Oracle Net8 Kolay Yapılandırma yardımcı programını kullanırken Oracle sunucusu için doğru bir Saydam Ağ Alt Yapısı (TNS) hizmet diğer adı oluşturmamış olursunuz. Sahip olmanız gereken Oracle bileşenlerinin doğru yüklendiğini ve yapılandırıldığını doğrulamak için Oracle veritabanı yöneticinize (DBA) başvurun.

  2. Bilgisayarda yüklü oracle istemcisinin (SQL*Net sürümü) sürümünü doğrulayın. Hem Oracle için Microsoft ODBC sürücüsü hem de Oracle için Microsoft OLE DB Sağlayıcısı, istemci bilgisayara SQL*Net sürüm 2.3 veya üzerinin yüklenmesini gerektirir.

    SQL Plus bağlantısı (Oracle istemci sorgu aracı) çalışıyor gibi görünebilir, ancak ODBC/OLE DB bağlantısının düzgün çalışması için bilgisayarınızı yeniden başlatmanız gerekir.

    Not

    Oracle 8i kullandığınızda.rgs dosyası boş olur.

  3. Oracle istemcisi yüklüyse ve oracle client components 7.3 veya üzerinin bilgisayara yüklenmesi gerektiğini belirten bir hata alırsanız, istemci bilgisayardaki PATH ortam değişkeninin Oracle istemcisinin yüklendiği klasörü ( Oracle_Root\Bin gibi) içerdiğini doğrulayın. Bu klasörü bulamazsanız, hatayı çözmek için klasörü PATH değişkenine ekleyin.

  4. Ociw32.dll dosyasının Oracle_Root\bin klasöründe olduğunu doğrulayın. Bu .dll dosyası istemci bilgisayardaki başka bir konumda bulunamaz. Oracle İstemci Bileşeni DLL'lerinin (örneğin, Core40.dll dosyası ve Ora*.dll dosyası) Oracle_Root klasörünün veya alt klasörlerin dışında olmadığından emin olun.

  5. Bilgisayarda tek bir Oracle istemci sürümünün yüklü olduğunu doğrulayın. Sql*Net'in birden çok sürümü aynı istemci bilgisayarda müdahalelerle ve kritik işlemlerle (örneğin, TNS ve diğer ad aramaları) bulunamaz.

  6. Microsoft, Oracle istemcisinin yerel bir yüklemesine sahip olduğunuzu ve bunu bilgisayarınızdaki uzak bir Oracle istemcisini eşleyip ODBC/OLE DB aracılığıyla Oracle'a bağlanmak için sistemin yoluna eklemeyerek yapmanızı önerir. Ancak sağlayıcı ve sürücü, ağ paylaşımında değil yerel olarak yüklenmiş bir Oracle istemcisiyle test edilir.

Ayrıca Bkz