개발 환경 : 
  -SpringFramework 3.1.1. Release

1. applicationContext.xml 파일 설정(굵은/붉은 글씨들은 각자의 상황에 맞게 변경 가능한 변수명 개념)

<bean id ="dataSource1" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
  <property name="driverClass" vlaue="oracle.jdbc.OracleDriver"/>
  < property name="url" vlaue="jdbc:oracle:thin:@IP:PORT:SID"/>
  <property name="username" vlaue="아이디"/>
  <property name="password" vlaue="비밀번호"/>
</bean>

<bean id="dataSource2" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
  <property name="driverClass" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
  <property name="url" value="jdbc:sqlserver://IP:PORT;databaseName=데이터베이스명;trustServerCertificate=true"/>
  <property name="username" value="아이디"/>
  <property name="password" value="비밀번호"/>  
</bean>
 

<bean id="sqlSessionFactory1" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource1"/>
  <property name="mapperLocations" value="classpath*:매퍼가 들어가 있는 패키지명/*.xml"/>
</bean>
<bean id="sqlSessionFactory2" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource2"/>
  <property name="mapperLocations" value="classpath*:2번째DB를 연결할 매퍼가 들어가 있는 패키지명/*.xml"/>
</bean>

<bean id="sqlSessionTemplate1" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg ref="sqlSessionFactory1"></constructor-arg>
</bean>
<bean id="sqlSessionTemplate2" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg ref="sqlSessionFactory2"></constructor-arg>
</bean>

<bean id="1MapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  <property name="basePackage" value="1번 database연결할 패키지위치"/>
  <property name="sqlSessionTemplateBeanName" value="sqlSessionTemplate1"/>
</bean>
<bean id="2MapperScannerConfigurer" class="~~~>
  ~~~~
</bean>

<bean id="transactionManager1" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource1"/>
</bean>
<bean id="transactionManager2" class="~~나머지는 동일>
</bean>

<tx:annotation-driven transaction-manager="transactionManager1"/>
<tx:annotation-driven ~~동일/>

발생했던 오류 상황

1. 2번째 Database를 사용하는 mapper bean injection 시 2개의 sessionFactory가 발견되어 매칭 불가 상황

  => mapper에 2번째 DB sessionFactory를 강제 주입(Qualifier 어노테이션 이용)
<bean id="Mapper bean명" class="org.mybatis.spring.mapper.MapperFactoryBean">
  <property name="mapperInterface" value="dataSource2를 사용하는 Mapper 인터페이스 위치"/>
  <property name="sqlSessionFactory" ref=sqlSessionFactory2"/>
</bean>
 그리고 mapper interface위에 Qualifier("Mapper bean명") 설정하여 해결 완료

Posted by 知彼知己百戰不殆
,

환경 : (Local) Oracle 11g,  (Remote) SQL Server 2019

 ORA-28545 : NET8 오류

ORA-28513 : 이기종 원격 대리 프로세스 내부에 오류가 발생

모두 내 실수였다.

1. tnsnames.ora에 IP와 PORT 정확한지 반드시 확인
    tnsnames.ora파일에서 HOST와 PORT는 remote SQL Server의 IP와 PORT가 아니라 자신(Oracle, Local) IP와 PORT

2. db_home/hs/admin/init{TNS명}.ora 파일의 확장자 확인
    (initdg4odbc.ora)파일을 그대로 복붙 했더니 오류났을 때의 파일명은 .ora.ora로 확장자가 2개가 들어가서 문제 발생.ㅠㅠ 정말 찾기 힘들었다.

Posted by 知彼知己百戰不殆
,

환경 : Oracle 11g (local),   SQL Server 2019(Remote),   Springfamework

필요사항 : Oracle에 입력된 데이터를 SQL Server로 insert

오류 : db link를 이용한 insert 시 ORA-02025 오류 발생

해결 : 1. SQL developer에서 db link를 이용하여 하드 코딩 후 단건 insert 시도 -> 성공
           2. SQL developer에서 db link를 이용하여 하드 코딩 후 Oracle DB에서 데이터 select 후 insert 시도 -> ORA-02025 오류 발생 
           3. " SQL 문의 모든 데이터베이스가 Oracle 서버인 경우에만 원격 업데이트를 수행할 수 있습니다. "라는 Oracle 홈페이지 내용 확인. https://docs.oracle.com/en/error-help/db/ora-02025/?r=23ai

 

ORA-02025 - Database Error Messages

The user's SQL statement references tables from multiple databases. The remote database is not Oracle V7 or above, and can perform updates only if it can reference all tables in the SQL statement.

docs.oracle.com

           4. table select 후 건건이 insert.... (일단 사용자 요구가 급해서 서비스 오픈 후 추후 수정해야 할 것 같다 ㅠㅠ)

Posted by 知彼知己百戰不殆
,