मैं SQL-SERVER 2008 लिंक किए गए सर्वर के माध्यम से Oracles CLOB कॉलम क्यों नहीं पढ़ सकता हूं?


10

मैं SQL-Server 2008 से Oracle 11g डेटाबेस में डेटा एक्सेस करना चाहता हूं

मैं एक लिंक किए गए सर्वर को सेट करता हूं और जब मैं निष्पादित करता हूं

select * from [Link_server_name]..Oracle_schema.Oracle_table

और Oracle_table में संख्या और varchar2 कॉलम हैं, सभी अपवाद के रूप में काम करते हैं।

लेकिन जब Oracle_table में CLOB कॉलम होता है, तो मुझे निम्नलिखित त्रुटि मिलती है:

डेर OLE DB-Anbieter 'MSDAORA' फर मांद Verbindungsserver 'L_V407SR8T' हैट मेलडंग 'अनिर्दिष्ट त्रुटि' zurückgeben।

डेर OLE DB-Anbieter 'MSDAORA' फर मांद Verbindungsserver 'L_V407SR8T' हैट डाई मेल्डुंग 'Oracle त्रुटि हुई, लेकिन त्रुटि संदेश Oracle से पुनर्प्राप्त नहीं किया जा सका। zurückgeben।

Der OLE DB-Anbieter 'MSDAORA' फर मांद Verbindungsserver 'L_V407SR8T' हैट मेलडंग 'डेटा प्रकार समर्थित नहीं है।' zurückgeben।

Msg 7306, स्तर 16, राज्य 2, पंक्ति 1

डाई '"MCCAPP"। "DOGGRUPPEN" - टैबेल उल्टी OLE DB-Anbieter' MSDAORA 'für den Verbindungsserver' L_V407SR8T 'kann nicht geöffnet werden।

OPENQUERY का उपयोग करना

SELECT * FROM OPENQUERY([L_V407SR8T], 'Select CLOB_COLUMN from Oracle_table'  )

मुझे मिला

डेर OLE DB-Anbieter 'MSDAORA' फर मांद Verbindungsserver 'L_V407SR8T' हैट डाई मेल्डुंग 'Oracle त्रुटि हुई, लेकिन त्रुटि संदेश Oracle से पुनर्प्राप्त नहीं किया जा सका। zurückgeben। Der OLE DB-Anbieter 'MSDAORA' फर मांद Verbindungsserver 'L_V407SR8T' हैट मेलडंग 'डेटा प्रकार समर्थित नहीं है।' zurückgeben।

कृपया जर्मन त्रुटि संदेशों का बहाना करें।

मेरा प्रश्न: क्या लिंक सर्वर के माध्यम से CLOB कॉलम पढ़ने का कोई तरीका है?

संपादित करें:

  • SQL सर्वर आयात और निर्यात विज़ार्ड OLE DB पर भी निर्भर करता है और समान तालिकाओं पर बेकार है
  • मैं खुद से पूछ रहा हूं, अगर समस्या चरित्र सेट के उपयोग पर निर्भर करती है, लेकिन मैं उन्हें बदल नहीं सकता
  • आसपास के व्यावहारिक काम के रूप में, मैं डेटा पर प्राप्त करने के लिए कुछ पॉवरशेल स्क्रिप्ट का उपयोग करता हूं, लेकिन

यदि आप कम से कम यह पहले ... में बदल सकते हैं CLOB को पढ़ने के लिए सक्षम होना चाहिए msdn.microsoft.com/en-us/library/ms378813.aspx
jcolebrand

जवाबों:


3

अपने SQL Server 2008 मशीन पर Oracle 11 डेटाबेस क्लाइंट डाउनलोड और इंस्टॉल करें।

Oracle OLE DB प्रदाता (OraOLEDB.Oracle) का उपयोग करके एक लिंक किए गए सर्वर को सेट करें।

सुनिश्चित करें कि "इनप्रोसेस की अनुमति दें" प्रदाता विकल्पों में सक्षम है।

Oracle 11 OLE DB क्लाइंट CLOBs का समर्थन करता है।


2

उत्तर के लिए एक टिप्पणी एसओ प्रश्न ओलेडब का उपयोग करके ओरेकल में एक CLOB कॉलम कैसे पढ़ें?

निम्नलिखित कथन के साथ पुराने Microsoft समर्थन पोस्ट का लिंक शामिल है

Oracle 8.x- विशिष्ट डेटा प्रकार, जैसे CLOB, BLOB, BFILE, NCHAR, NCLOB और NVARCHAR2 समर्थित नहीं हैं।

कुछ और वर्तमान संदर्भों को खोजना अच्छा होगा।

मैंने कुछ Google शोध किए और केवल वर्कअराउंड पाया। मुझे डर है कि डेटा प्रकार अभी भी समर्थित नहीं है।

संपादित करें 02/05/2011

मैं वास्तव में यह नहीं समझता कि Microsoft इस समस्या को ठीक करने में सक्षम क्यों नहीं है। निम्न PowerShell स्क्रिप्ट Oracle डेटाबेस से CLOB कॉलम वाली तालिका को पढ़ने के लिए OLE-DB का उपयोग करता है और बल्ककॉपी का उपयोग करके Sql-Server पर मौजूदा समान तालिका में डेटा सम्मिलित करता है जो एक बहुत ही कुशल तरीका है।

अपनी स्थापना के लिए निम्नलिखित कनेक्शन स्ट्रिंग्स, क्वेरी और टेबल का नाम समायोजित करें:

# Here I use OLE-DB to read the Oracle database
$ConnectionString ="Server=ignore;User Id=myUser;Password=myPassword;Data Source=myTns;Provider=OraOLEDB.Oracle;"

# Here I use .NET SqlClient
$SqlClientConnString = "Data Source=localhost;Initial Catalog=myDestinationDB;Integrated Security=True"

$sql = "select int_col, clob_col from TABLE_WITH_CLOB"
$tableName = "COPY_OF_CLOB_TABLE"

निम्नलिखित कोड ओरेकल टेबल को एक sql-server टेबल में कॉपी करता है

$OLEDBConn = New-Object System.Data.OleDb.OleDbConnection($ConnectionString)
$OLEDBConn.open()
$readcmd = New-Object system.Data.OleDb.OleDbCommand($sql,$OLEDBConn)
$readcmd.CommandTimeout = '300'
$da = New-Object system.Data.OleDb.OleDbDataAdapter($readcmd)
$dt = New-Object system.Data.datatable
[void]$da.fill($dt)
$OLEDBConn.close()
#Write-Output $dt


if ($dt)
{
    try
    {
        $bulkCopy = new-object ("Data.SqlClient.SqlBulkCopy") $SqlClientConnString
        $bulkCopy.DestinationTableName = $tableName
        $bulkCopy.BatchSize = 50000
        $bulkCopy.BulkCopyTimeout = 0
        $bulkCopy.WriteToServer($dt)
    }
    catch
    {
        $ex = $_.Exception
        #Write-LogMessage -Source 'Write-DataTable' -Message "$($connectionName):$ex.Message"
        Write-Error "Write-DataTable$($connectionName):$ex.Message"
        continue
    }
}

BTW: कोड चाड मिलर्स वास्तव में सरल डेटा शब्दकोश कोडप्लेक्स परियोजना पर आधारित है

वर्तमान में PowerShell का उपयोग करना एकमात्र तरीका है जो मुझे पता है कि Oracle से Sql-Server में CLOBs के साथ डेटा की प्रतिलिपि C # या किसी तीसरे पक्ष के टूल का उपयोग नहीं करता है।

मैं न तो आयात / निर्यात विज़ार्ड और न ही जुड़े सर्वर का उपयोग करने में सफल रहा।


grrrr यह देखते हुए कि यह बेकार ORA के लिए तीन बिंदु रिलीज किया गया और उसके बाद से एमएस के लिए कम से कम एक बिंदु रिलीज है ... अहाNo new updates are planned for future releases of these components including their support against versions later than Oracle 8i.
jcolebrand

मैं वास्तव में यह नहीं समझता कि Microsoft इस समस्या को ठीक करने में सक्षम क्यों नहीं है ? उसी कारण से Microsoft ने डॉटनेट फ्रेमवर्क ओरेकल क्लाइंट लाइब्रेरी का समर्थन करना बंद कर दिया - "अन्य लोग इसे बेहतर करते हैं", अगर मैं अतीत में उनकी प्रतिक्रियाओं को बेरहमी से विरोधाभास करता हूं। उन दोनों के बीच कोई प्यार नहीं खोया, मैं आपको बताता हूं।
स्कॉटिश
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.