Mengapa saya tidak bisa membaca kolom CLUB Oracles melalui server terkait SQL-SERVER 2008?

10

Saya ingin mengakses data dalam database Oracle 11g dari SQL-Server 2008

Saya mengatur server yang terhubung dan ketika saya mengeksekusi

select * from [Link_server_name]..Oracle_schema.Oracle_table

dan Oracle_table berisi kolom Number dan varchar2, semuanya berfungsi sebagai pengecualian.

Tetapi ketika Oracle_table berisi kolom CLOB, saya mendapatkan kesalahan berikut:

Der OLE DB-Anbieter 'MSDAORA' untuk Verbindungsserver 'L_V407SR8T' topi mati Meldung 'Kesalahan tidak ditentukan' zurückgeben.

Der OLE DB-Anbieter 'MSDAORA' für den Verbindungsserver 'L_V407SR8T' hat die Meldung 'Terjadi kesalahan Oracle, tetapi pesan kesalahan tidak dapat diambil dari Oracle.' zurückgeben.

Der OLE DB-Anbieter 'MSDAORA' für den Verbindungsserver 'L_V407SR8T' hat die Meldung 'Tipe data tidak didukung.' zurückgeben.

Msg 7306, Level 16, Negara 2, Baris 1

Die '"MCCAPP". "DOGGRUPPEN"' - Tabelle vom OLE DB-Anbieter 'MSDAORA' untuk Verbindungsserver 'L_V407SR8T' kann nicht geöffnet werden.

Menggunakan OPENQUERY

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

saya mendapat

Der OLE DB-Anbieter 'MSDAORA' für den Verbindungsserver 'L_V407SR8T' hat die Meldung 'Terjadi kesalahan Oracle, tetapi pesan kesalahan tidak dapat diambil dari Oracle.' zurückgeben. Der OLE DB-Anbieter 'MSDAORA' für den Verbindungsserver 'L_V407SR8T' hat die Meldung 'Tipe data tidak didukung.' zurückgeben.

Maafkan pesan kesalahan Jerman.

Pertanyaan saya: Apakah ada cara untuk membaca kolom CLOB melalui Server yang ditautkan?

EDIT:

  • SQL Server Impor dan Ekspor Wisaya tampaknya bergantung pada OLE DB juga dan mengisap tabel yang sama
  • Saya bertanya pada diri sendiri, apakah masalahnya tergantung pada penggunaan set karakter, tapi saya tidak bisa mengubahnya
  • Sebagai kerja praktis, saya menggunakan beberapa skrip PowerShell untuk mendapatkan data, tetapi
bernd_k
sumber
Anda harus dapat membaca CLOB jika Anda setidaknya dapat mengubahnya terlebih dahulu ... msdn.microsoft.com/en-us/library/ms378813.aspx
jcolebrand

Jawaban:

3

Unduh dan instal klien basis data Oracle 11 pada mesin SQL Server 2008 Anda.

Menyiapkan server yang ditautkan menggunakan penyedia Oracle OLE DB (OraOLEDB.Oracle).

Pastikan "Izinkan Proses Dalam" diaktifkan di opsi Penyedia.

Klien Oracle 11 OLE DB mendukung CLOB.

Serge A.
sumber
2

Sebuah komentar untuk jawaban SO pertanyaan Bagaimana membaca kolom CLOB di Oracle menggunakan OleDb?

berisi tautan ke posting Dukungan Microsoft lama dengan pernyataan berikut

Tipe data khusus Oracle 8.x, seperti CLOB, BLOB, BFILE, NCHAR, NCLOB, dan NVARCHAR2, tidak didukung.

Akan menyenangkan untuk menemukan beberapa referensi terbaru.

Saya melakukan riset Google dan hanya menemukan solusi. Saya khawatir tipe datanya masih belum didukung.

Edit 02/05/2011

Saya benar-benar tidak mengerti mengapa Microsoft tidak dapat memperbaiki masalah ini. Skrip PowerShell berikut menggunakan OLE-DB untuk membaca tabel yang berisi kolom CLOB dari database Oracle dan memasukkan data ke dalam tabel serupa yang ada di Sql-Server menggunakan bulkCopy yang merupakan cara yang sangat efisien.

Sesuaikan string koneksi, kueri, dan nama tabel berikut untuk instalasi Anda:

# 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"

Kode berikut menyalin tabel oracle ke dalam tabel 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: kode ini didasarkan pada proyek codeplex Kamus Data Murni Chad Millers

Saat ini menggunakan PowerShell adalah satu-satunya cara saya tahu untuk menyalin data dengan CLOB dari Oracle ke Sql-Server tidak menggunakan C # atau alat pihak ketiga.

Saya tidak berhasil menggunakan Wisaya Impor / Ekspor maupun server tertaut.

bernd_k
sumber
Grrrr yang menyebalkan mengingat sudah ada tiga rilis poin untuk ORA dan setidaknya satu rilis untuk MS sejak saat itu ... AHANo new updates are planned for future releases of these components including their support against versions later than Oracle 8i.
jcolebrand
Saya benar-benar tidak mengerti mengapa Microsoft tidak dapat memperbaiki masalah ini ? Untuk alasan yang sama Microsoft berhenti mendukung framework dotnet, pustaka klien Oracle - "orang lain melakukannya dengan lebih baik", jika saya dengan kejam memparafrasekan tanggapan mereka di masa lalu. Tidak ada cinta yang hilang di antara mereka berdua, saya katakan.
ScottCher