2009-06-12 8 views
5

द्वारा डाटाबेस लिंक स्वामित्व बनाने के लिए एक डाटाबेस लिंक बनाने के लिए विशिष्ट वाक्य रचना के रूप में:इस प्रकार ओरेकल सिंटेक्स एक अन्य उपयोगकर्ता

create database link remote_db_link 
connect to remote_user 
identified by remote_password 
using 'remote_db' 

लेकिन मैं अपने DB एक और खाते के स्वामित्व वाले लिंक करना चाहते हैं के बाद यह बनाई गई है। क्या इसे करने का कोई तरीका है?

निम्नलिखित काम नहीं करता है:

create database link anotheruser.remote_db_link 
connect to remote_user 
identified by remote_password 
using 'remote_db' 
+0

"चयनित" उत्तर कहता है "आप किसी अन्य उपयोगकर्ता की स्कीमा में डेटाबेस लिंक नहीं बना सकते"। यह बिल्कुल सही नहीं है। "ओरेकल वाक्यविन्यास" है जो इसे पूरा कर सकता है। मेरा जवाब देखें – spencer7593

उत्तर

8

Restrictions on DBLinks - आप किसी अन्य उपयोगकर्ता के स्कीमा में एक डेटाबेस लिंक नहीं बनाया जा सकता है, और आप एक स्कीमा के नाम के साथ dblink अर्हता प्राप्त नहीं कर सकते।

+0

:-(मुझे इससे डर था। आपके समय के लिए धन्यवाद। – Jeff

+0

असल में, किसी अन्य उपयोगकर्ता की स्कीमा में डेटाबेस लिंक बनाना संभव है। – spencer7593

13

सत्य सही है, CREATE DATABASE LINK वाक्यविन्यास किसी अन्य स्कीमा में डेटाबेस लिंक बनाने की अनुमति नहीं देता है। हालांकि ...

कारगर युक्तियाँ

यह , किसी अन्य उपयोगकर्ता के स्कीमा में एक डेटाबेस लिंक बनाने के लिए जब तक anotheruserCREATE DATABASE LINK विशेषाधिकार के रूप में संभव है, और उपयोगकर्ता आप के रूप में जुड़े हुए हैं CREATE ANY PROCEDURE विशेषाधिकार है।

यहाँ वैकल्पिक हल मैं का उपयोग करें:

 
    create procedure anotheruser."tmp_doit_200906121431" 
    is 
    begin 
     execute immediate ' 
     create database link remote_db_link 
     connect to remote_user 
     identified by remote_password 
     using ''remote_db'' '; 
    end; 
    /
    begin 
     anotheruser."tmp_doit_200906121431"; 
    end; 
    /
    drop procedure anotheruser."tmp_doit_200906121431" 
    /

की है कि तनाव कम करते हैं। सबसे पहले, मैं anotherusers की स्कीमा में एक प्रक्रिया बनाता हूं; इस प्रक्रिया में CREATE DATABASE LINK कथन शामिल है जिसे मैं चलाने के लिए चाहता हूं।

जब प्रक्रिया निष्पादित की जाती है, तो यह प्रक्रिया के मालिक के रूप में चलता है, जैसे CREATE DATABASE LINK कथन anotheruser द्वारा निष्पादित किया जाता है।

प्रक्रिया का नाम महत्वपूर्ण नहीं है, सिवाय इसके कि मुझे यह सुनिश्चित करने की ज़रूरत है कि यह किसी मौजूदा ऑब्जेक्ट नाम से संघर्ष न करे। मैं इस ऑब्जेक्ट को "अस्थायी" के रूप में चिह्नित करने के लिए "tmp" का उपयोग करके, लोअरकेस अक्षरों (डबल कोट्स में प्रक्रिया का नाम संलग्न करना) का उपयोग करता हूं, और वर्तमान yyyymmddhh24miss का उपयोग प्रक्रिया नाम के हिस्से के रूप में करता हूं। (मैं आम तौर पर यह जांचने के लिए DBA_OBJECTS की एक क्वेरी चलाता हूं कि एक मिलान करने वाला ऑब्जेक्ट_नाम मौजूद नहीं है।)

"एक-ऑफ" प्रकार के व्यवस्थापक फ़ंक्शन के लिए, यह एक व्यवहार्य कामकाज है। मैं इसे अन्य विकल्प के लिए पसंद करता हूं: किसी अन्य उपयोगकर्ता के पासवर्ड को सहेजना, पासवर्ड बदलना, उपयोगकर्ता के रूप में कनेक्ट करना, और सहेजे गए किसी अन्य उपयोगकर्ता के पासवर्ड को रीसेट करना।)

+0

वाह, बहुत अच्छा समाधान ... बहुत बहुत धन्यवाद !!! – kupa

+0

आप बॉस! –

-2

एक sys उपयोगकर्ता के रूप में आप SYS.DBA_DB_LINKS में सभी डीबी लिंक देख सकते हैं राय। वह दृश्य लिंक $ और उपयोगकर्ता $ तालिका का उपयोग करें। आप आमतौर पर नई dblink बना सकते हैं और यह लिंक $ तालिका पर दिखाया गया है। फिर मालिक बदलें (उपयोगकर्ता $ से आईडी का उपयोग करें)। प्रतिबद्ध। किया हुआ।

+0

उत्तर देने के लिए धन्यवाद लेकिन इस प्रश्न का पहले से ही स्वीकार्य उत्तर है। – alestanis

+0

ध्यान दें कि इस उत्तर में वर्णित दृष्टिकोण * ओरेकल द्वारा समर्थित नहीं है *।ओरेकल समर्थन की दिशा के अलावा, ओरेकल दृढ़ता से एसआईएस स्कीमा में तालिकाओं की सामग्री को संशोधित करने के लिए डीएमएल जारी करने के खिलाफ चेतावनी देता है। – spencer7593

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