SQL-SERVER 2008 연결된 서버를 통해 Oracle CLOB 열을 읽을 수없는 이유는 무엇입니까?


10

SQL-Server 2008에서 Oracle 11g 데이터베이스의 데이터에 액세스하고 싶습니다

연결된 서버를 설정하고 실행할 때

select * from [Link_server_name]..Oracle_schema.Oracle_table

Oracle_table에는 Number 및 varchar2 열이 포함되어 있으며 모두 예외로 작동합니다.

그러나 Oracle_table에 CLOB 열이 포함되어 있으면 다음 오류가 발생합니다.

Verbindungsserver 'L_V407SR8T'에 대한 OLE DB-Anbieter 'MSDAORA'는 Meldung '지정되지 않은 오류'가 발생했습니다.

Verbindungsserver 'L_V407SR8T'에 대한 Der OLE DB-Anbieter 'MSDAORA'모자는 Meldung 'Oracle 오류가 발생했지만 오류 메시지를 Oracle에서 검색 할 수 없습니다.' zurückgeben.

Verbindungsserver에 대한 OLE DB-Anbieter 'MSDAORA'서버 'L_V407SR8T'모자 형 Meldung '데이터 유형이 지원되지 않습니다.' zurückgeben.

메시지 7306, 수준 16, 상태 2, 줄 1

""MCCAPP "."DOGGRUPPEN "-Tabelle vom OLE DB-Anbieter 'MSDAORA'Ververdungsserver 'L_V407SR8T'kann nicht geöffnet werden에서 죽습니다.

OPENQUERY 사용

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

나는 얻다

Verbindungsserver 'L_V407SR8T'에 대한 Der OLE DB-Anbieter 'MSDAORA'모자는 Meldung 'Oracle 오류가 발생했지만 오류 메시지를 Oracle에서 검색 할 수 없습니다.' zurückgeben. Verbindungsserver에 대한 OLE DB-Anbieter 'MSDAORA'서버 'L_V407SR8T'모자 형 Meldung '데이터 유형이 지원되지 않습니다.' zurückgeben.

독일어 오류 메시지를 실례합니다.

내 질문 : 연결된 서버를 통해 CLOB 열을 읽는 방법이 있습니까?

편집하다:

  • SQL Server 가져 오기 및 내보내기 마법사는 OLE DB에도 의존하는 것으로 보이며 동일한 테이블을 빨아들입니다.
  • 문제가 문자 세트 용도에 따라 달라지는 지 스스로에게 물어보고 있지만 변경할 수는 없습니다.
  • 실질적인 해결 방법으로 일부 PowerShell 스크립트를 사용하여 데이터를 얻습니다.

당신은 적어도 처음 ... 변환 할 수있는 경우는 CLOB를 읽을 수 있어야 msdn.microsoft.com/en-us/library/ms378813.aspx
jcolebrand

답변:


3

SQL Server 2008 시스템에 Oracle 11 데이터베이스 클라이언트를 다운로드하여 설치하십시오.

Oracle OLE DB 공급자 (OraOLEDB.Oracle)를 사용하여 연결된 서버를 설정하십시오.

공급자 옵션에서 "InProcess 허용"이 활성화되어 있는지 확인하십시오.

Oracle 11 OLE DB 클라이언트는 CLOB를 지원합니다.


2

답변에 대한 의견 SO 질문 OleDb를 사용하여 Oracle에서 CLOB 열을 읽는 방법은 무엇입니까?

다음 진술과 함께 이전 Microsoft 지원 게시물에 대한 링크를 포함합니다 .

CLOB, BLOB, BFILE, NCHAR, NCLOB 및 NVARCHAR2와 같은 Oracle 8.x 특정 데이터 유형은 지원되지 않습니다.

더 많은 현재 참조를 찾는 것이 좋습니다.

Google에서 조사한 결과 해결 방법 만 발견되었습니다. 데이터 유형이 여전히 지원되지 않을까 걱정됩니다.

2011 년 2 월 5 일 수정

Microsoft가 왜이 문제를 해결할 수 없는지 잘 모르겠습니다. 다음 PowerShell 스크립트는 OLE-DB를 사용하여 Oracle 데이터베이스에서 CLOB 열이 포함 된 테이블을 읽고 bulkCopy를 사용하여 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"

다음 코드는 Oracle 테이블을 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 : 코드는 Chad Millers Really Simple Data Dictionary 코드 플렉스 프로젝트를 기반으로합니다.

현재 PowerShell을 사용하는 것이 C # 또는 타사 도구를 사용하지 않고 CLOB가있는 데이터를 Oracle에서 Sql-Server로 복사하는 유일한 방법입니다.

가져 오기 / 내보내기 마법사 나 연결된 서버를 모두 사용하지 못했습니다.


grrrr는 ORA를위한 3 점 릴리즈와 그 이후로 MS를위한 1 점 이상의 릴리즈를 고려했다는 점에서 짜증나 ... AHANo new updates are planned for future releases of these components including their support against versions later than Oracle 8i.
jcolebrand

Microsoft가 왜이 문제를 해결할 수 없는지 잘 모르겠습니다 . 같은 이유로 Microsoft는 과거에 자신의 응답을 무자비하게 말하면 "다른 사람들이 더 잘하는"닷넷 프레임 워크 Oracle 클라이언트 라이브러리 지원을 중단했습니다. 그 둘 사이에 잃어버린 사랑은 없습니다.
ScottCher
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.