2010-06-02 19 views
6

Aynı sunucudaki bir şemaya bağlantı olan bir veritabanı bağlantısı oluşturmam gerekiyor. Bunun için kullanılacak özel bir anahtar kelime var mı? (local veya localhost gibi)Uzak ve yerel aynı sunucu olan bir Veritabanı Bağlantısı nasıl oluşturabilirim?

Sunucunun adının tnsnames'te ne olduğundan ve sorunumun bir parçası olabileceğinden emin değilim.

Bu, devam etmek için bir veritabanı bağlantısına ihtiyaç duyan bir komut dosyası içeren karmaşık bir durum içindir.

cevap

8

DB bağlantı mekanizması TNS'den geçer, bu nedenle yerel veritabanınız için bir TNS girdisi tanımlayın ve bu bağlantıyı kullanın.

YourDBAlias = 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
     (ADDRESS = (PROTOCOL = TCP)(HOST = yourHOST)(PORT = 1521)) 
    ) 
    (CONNECT_DATA = 
     (SERVICE_NAME = YourDB) 
    ) 
) 

bu girişin de veritabanı sunucusu üzerinde TNSNAMES.ORA dosyasında bulunduğundan emin olun:

Müşteriniz TNSNAMES.ORA dosyaları gibi görünür bir girdi içermelidir. Bu hile (Eğer TNS adlandırma kullandığınız varsayılarak) yapmalıdır

CREATE [PUBLIC] DATABASE LINK yourLinkName 
     CONNECT TO theSchema IDENTIFIED BY thePW 
     USING 'YourDBAlias'; 

:

Ardından, veritabanı bağlantı oluşturmak. Eğer TNS Adı SQL * daki, veritabanı için ne olduğundan emin değiliz Artı komutu eğer

Ayrıca,:

show parameter service_names 

Bu, adı (ler) gösterecektir veritabanı olarak dinleyici olarak kayıtlı. TNSNAMES.ORA dosyasındaki ilgili girişi bundan bulabilmeniz gerekir.

4

TNSNAMES.ORA'yı değiştiremezseniz, DB Bağlantıları için bile Easy Connect syntax'u kullanabilirsiniz. dinleyici varsayarsak varsayılan bağlantı noktası üzerinde, daha sonra aşağıdaki SQL conneection dize

seçme utl_inaddr.get_host_address alacak || ': 1521 /' || sys_context ('USERENV', 'INSTANCE_NAME') çift

dan
+0

+1 akıllı çözümünü alırsınız! – DCookie

1

"Aynı sunucuda şema" ile aynı veritabanında bir şema kastediyorsanız, bir sorun olabilir. (Örneğin, komut dosyası şemanın dışındaki herhangi bir şeyi, sonraki SQL işlemlerini düzleştirmek için harici bir veritabanı gibi davranıyorsa).

Oracle, geridöngü bağlantılarını biraz farklı bir şekilde ele alır ve bağlantı için genel veritabanının adını kullanırsa ORA-02082 hatalarını ("bir geri döngü veritabanı bağlantısının bağlantı niteleyicisi olmalıdır") alabilirsiniz. Bu hatayı alırsanız, "loopback" gibi farklı bir bağlantıyı adlandırmanız gerekir, ancak bu aynı zamanda global_names veritabanı parametresinin false değerine ayarlanmasını gerektirir. Aksi takdirde "ORA-02085: veritabanı bağlantısı someName, bazı DiğerAdı'na bağlanır"