Oacle SQL Developer에서 SQL Server의 텍스트 형식 데이터를 내보낼 때의주의 사항

소개



Oracle SQL Developer에서는 "jTDS"라는 JDBC Driver를 사용하여 SQL Server에 연결할 수 있습니다.

참고
【Oracle SQL Developer】로 【Microsoft SQL Server 2014】에 접속한다. 전기 통신 주임 기술자 공사 담임자 AI/DD 종합종
htps //w w. 덴-츠. 네 t/sql에서 v/

jTDS를 이용하면 SQL Developer에서 SQL Server 테이블을 내보낼 수도 있습니다.

그러나, text형 데이터에 대해서는 주의가 필요하고, 디폴트 설정인 채로 export하면, CLOB형으로서 취득되어 버려, 값이 늘어서net.sourceforge.jtds.jdbc.ClobImpl@12ab34cd56등이 되어 버립니다.

여기에서는 그 해소 순서를 소개합니다.

환경



SQL Developer 18.1.0.095
SQL Server 2016
jTDS 1.3.1

해결 방법



전제로 jTDS는 타사 JDBC 드라이버에 등록되어 있다고 가정합니다.
도입 순서는 상기 링크를 참고로.

1. SQL Developer에서 SQL Server 연결 만들기



JDBC 데이터 소스를 수정할 때, 접속 정보가 이미 등록되어 있는 쪽이 수정하기 쉽기 때문에 먼저 접속을 작성·저장해 둡니다.


2. JDBC 데이터 소스 수정



SQL Server JDBC 데이터 소스는C:\Users\<ユーザ名>\AppData\Roaming\SQL Developer\systemXX.X.X.XXX.XXXX\o.jdeveloper.db.connection아래에 'connections.xml'로 저장됩니다.

(이번 내 사용한 버전에서는 xml 파일이었지만 새 버전에서는
connections.json 파일에있는 것 같습니다. json 파일이라도 비슷한 방법으로 해결할 수 있습니다. )

connections.xml 파일을 백업한 후 편집기에서 connections.xml 파일을 엽니다.
이전 단계에서 만든 SQL Server 연결 정보가 등록되어 있어야 합니다.

before
   <Reference name="SQLSERVER-TEST" className="oracle.jdeveloper.db.adapter.DatabaseProvider" xmlns="">
      <Factory className="oracle.jdevimpl.db.adapter.DatabaseProviderFactory1212"/>
      <RefAddresses>
         <StringRefAddr addrType="customUrl">
            <Contents>jdbc:jtds:sqlserver://192.168.101.101:1433/</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="hostname">
            <Contents>192.168.101.101</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="driver">
            <Contents>net.sourceforge.jtds.jdbc.Driver</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="port">
            <Contents>1433</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="subtype">
            <Contents>SQLServer</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="SavePassword">
            <Contents>false</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="RaptorConnectionType">
            <Contents>Microsoft SQL Server</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="user">
            <Contents>sa</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="ConnName">
            <Contents>SQLSERVER-TEST</Contents>
         </StringRefAddr>
      </RefAddresses>
   </Reference>

<Contents>jdbc:jtds:sqlserver://192.168.101.101:1433/</Contents>부분에 아래와 같은 수정을 합니다.<Contents>jdbc:jtds:sqlserver://192.168.101.101:1433/;useLOBs=false;</Contents>데이터베이스를 지정한 경우<Contents>jdbc:jtds:sqlserver://192.168.101.101:1433/master;useLOBs=false;</Contents>같아요.

after
   <Reference name="SQLSERVER-TEST" className="oracle.jdeveloper.db.adapter.DatabaseProvider" xmlns="">
      <Factory className="oracle.jdevimpl.db.adapter.DatabaseProviderFactory1212"/>
      <RefAddresses>
         <StringRefAddr addrType="customUrl">
            <Contents>jdbc:jtds:sqlserver://192.168.101.101:1433/;useLOBs=false;</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="hostname">
            <Contents>192.168.101.101</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="driver">
            <Contents>net.sourceforge.jtds.jdbc.Driver</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="port">
            <Contents>1433</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="subtype">
            <Contents>SQLServer</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="SavePassword">
            <Contents>false</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="RaptorConnectionType">
            <Contents>Microsoft SQL Server</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="user">
            <Contents>sa</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="ConnName">
            <Contents>SQLSERVER-TEST</Contents>
         </StringRefAddr>
      </RefAddresses>
   </Reference>

수정이 완료되면 덮어쓰기 저장을 합니다.

3. SQL Developer 재시작



수정 후 데이터 소스를 읽을 수 있도록 SQL Developer를 다시 시작합니다.

올바르게 설정된 경우 연결 시 데이터베이스 가져오기 열에 ;useLOBs=faluse라는 문장이 추가되어 있어야 합니다.

연결 후 다시 내보내고 TEXT 형의 값을 올바르게 얻을 수 있게 된 것을 확인해 봅시다.

결론



SQL Server의 데이터베이스를 Oracle Database로 마이그레이션하는 문제가 있었기 때문에 SSMS를 사용해 보거나, sqlcmd를 사용해 보거나, bcp를 사용해 보거나, 다양한 시행 착오를하고있었습니다.

그 중에서 SQL Developer는 내보낼 때 구분 기호, 둘러싸는 문자, 줄의 끝 문자에 확장 성이 있었기 때문에 본격 조사를 해 보았는데, 이번 문제에 부딪 혔으므로 비망록으로 Qiita에 남겨 보았습니다.

좋은 웹페이지 즐겨찾기