2010-06-02 12 views
6

मुझे एक डेटाबेस लिंक बनाने की आवश्यकता है जो एक ही सर्वर पर स्कीमा का लिंक है। क्या इसके लिए उपयोग करने के लिए कोई विशेष कीवर्ड है? (स्थानीय या लोकहोस्ट की तरह)मैं एक डेटाबेस लिंक कैसे बना सकता हूं जहां दूरस्थ और स्थानीय एक ही सर्वर

मुझे पूरी तरह से यकीन नहीं है कि सर्वर का नाम tnsnames में क्या है और यह मेरी समस्या का हिस्सा हो सकता है।

यह एक जटिल परिस्थिति के लिए है जिसमें एक स्क्रिप्ट शामिल है जिसे जारी रखने के लिए डेटाबेस लिंक की आवश्यकता होती है।

उत्तर

8

डीबी लिंक तंत्र टीएनएस के माध्यम से जाता है, इसलिए बस अपने स्थानीय डेटाबेस के लिए एक टीएनएस प्रविष्टि परिभाषित करें और अपने लिंक में इसका उपयोग करें।

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

यकीन है कि यह प्रविष्टि भी अपने डेटाबेस सर्वर पर TNSNAMES.ORA फाइल में मौजूद है:

आपका क्लाइंट TNSNAMES.ORA फ़ाइलें एक प्रविष्टि कि तरह दिखता शामिल करना चाहिए।

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

यह चाल (आप टीएनएस नामकरण का उपयोग कर रहे कल्पना करते हुए) करना चाहिए:

फिर, डेटाबेस कड़ी के रूप में बना सकते हैं।

ही, यदि आप यकीन है कि क्या अपने टीएनएस नाम एसक्यूएल * में, डेटाबेस के लिए है नहीं कर रहे हैं इसके अलावा आप आदेश जारी कर सकते हैं:

show parameter service_names 

यह आपको नाम (रों) कि दिखाएगा डेटाबेस इसके श्रोता के साथ पंजीकृत है। आपको उस से TNSNAMES.ORA फ़ाइल में संबंधित प्रविष्टि को ढूंढने में सक्षम होना चाहिए।

4

यदि आप TNSNAMES.ORA में संशोधन नहीं कर सकते हैं तो आप डीबी लिंक के लिए भी Easy Connect syntax का उपयोग कर सकते हैं। दोहरी

से || sys_context ('Userenv', 'instance_name'): श्रोता मानते हुए डिफ़ॉल्ट पोर्ट पर है, उसके बाद निम्न एसक्यूएल conneection स्ट्रिंग

चयन utl_inaddr.get_host_address मिल जाएगा || '1521 /'

+0

+1 चालाक समाधान! – DCookie

1

यदि आपको "उसी सर्वर पर स्कीमा" से एक समस्या हो सकती है, तो आप एक ही डेटाबेस में एक स्कीमा का मतलब है। (उदाहरण के लिए, यदि स्क्रिप्ट स्कीमा के बाहर किसी भी चीज का इलाज बाहरी डेटाबेस के रूप में बाद में SQL संचालन को फ़्लैट करने के लिए कर रही थी)।

ओरेकल कुछ हद तक अलग-अलग लूपबैक लिंक का व्यवहार करता है, और यदि आप लिंक के लिए डेटाबेस वैश्विक नाम का उपयोग करते हैं तो आपको ORA-02082 त्रुटियां मिल सकती हैं ("लूपबैक डेटाबेस लिंक में कनेक्शन क्वालीफायर होना चाहिए")। अगर आपको यह त्रुटि मिलती है, तो आपको लिंक को कुछ अलग करना होगा, जैसे कि "लूपबैक", लेकिन यह भी आवश्यक है कि global_names डेटाबेस पैरामीटर गलत पर सेट हो। अन्यथा आपको "ORA-02085: डेटाबेस लिंक कुछ नाम किसी अन्य नाम से कनेक्ट होता है"

संबंधित मुद्दे