सत्य सही है, CREATE DATABASE LINK
वाक्यविन्यास किसी अन्य स्कीमा में डेटाबेस लिंक बनाने की अनुमति नहीं देता है। हालांकि ...
कारगर युक्तियाँ
यह , किसी अन्य उपयोगकर्ता के स्कीमा में एक डेटाबेस लिंक बनाने के लिए जब तक anotheruser
CREATE 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 की एक क्वेरी चलाता हूं कि एक मिलान करने वाला ऑब्जेक्ट_नाम मौजूद नहीं है।)
"एक-ऑफ" प्रकार के व्यवस्थापक फ़ंक्शन के लिए, यह एक व्यवहार्य कामकाज है। मैं इसे अन्य विकल्प के लिए पसंद करता हूं: किसी अन्य उपयोगकर्ता के पासवर्ड को सहेजना, पासवर्ड बदलना, उपयोगकर्ता के रूप में कनेक्ट करना, और सहेजे गए किसी अन्य उपयोगकर्ता के पासवर्ड को रीसेट करना।)
"चयनित" उत्तर कहता है "आप किसी अन्य उपयोगकर्ता की स्कीमा में डेटाबेस लिंक नहीं बना सकते"। यह बिल्कुल सही नहीं है। "ओरेकल वाक्यविन्यास" है जो इसे पूरा कर सकता है। मेरा जवाब देखें – spencer7593