환경 : (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 知彼知己百戰不殆
,

본점 라이센스가 SQL Server 2019라고 해서 부랴부랴 기존 셋팅된 것들을 2019로 그대로 이관해야 했다.

환경 : (local) SQL Server 2019
          (remote) Oracle 11g

기존에는 SQL Server 2022 -> Oracle 이었는데 이번엔 버전이 다운된 2019에서 Oracle이었다.

2019랑 2022는 크게 바뀐 내용이 없어서 별 문제 없겠지 했는데, 또 linked server 설정 시 무한 에러 발생 ㅠㅠㅠ

7302 오류 발생 ㅠㅠ.....

4일간 삽질 후 일단 작년에 Local PC에 Oracle 설치 시 64bit로 설치했는데, 이번 설치는 32bit로 설치가 돼있었다.(당연히 64bit 파일이겠거니....)

SQL Server 7302 Error code 발생 시

1. SQL Server에 설치한 Oracle Client bit 확인

2. SSMS -> Provider -> OraOLEDB.Oracle 속성 -> Allow InProcess 체크 확인

Posted by 知彼知己百戰不殆
,

대고객 문자 발송 시스템 개발 중 트랜잭션 설계를 하며 트랜잭션 전파 속성, DB pessimistic lock 을 테스트 중이다.

삽질 내용 : 로직(Required) 윗단에 for update wait로 lock을 잡아놓고 밑에 DB update 로직을 REQUIRES_NEW로 처리하면 당연히 될거라 생각. 그런데 계속 멈춤 현상이 발생. 왜 그럴까 생각해보니 이미 한 트랜잭션에서 select lock을 잡아놓고 새로운 트랜잭션에서 Update를 하려고 하니 당연히 lock 걸려 있으니 안되는게 정상...

DB pessimistic lock 기능 잘 작동되네...ㅋ

Posted by 知彼知己百戰不殆
,

상황 : local Database임에도 불구하고 sqlplus / as sysdba 접속 시 insufficient privilege 에러가 발생

해결 : 유저&그룹(Users and Groups) 들어가서 Users 폴더의 현재 실행중인 계정 속성창에서 
          Member Of(그룹) 탭에서 Add 버튼 클릭, advanced 클릭, Find Now 클릭, Search results에서 
         ora_dba 추가

Posted by 知彼知己百戰不殆
,

문제 : 스프링프레임워크를 사용 중인 프로젝트에서 오류 발생 시 rollback 처리가 되지 않음

원인 분석:
1. 메소드에 transactional 어노테이션이 추가되어 있으므로 당연히 오류 발생 시 rollback 될거라 생각했으나, 일단 기본 어노테이션 속성은 예기치 못한 오류에 대해서 rollback하므로 어노테이션에 rollback속성 지정
2. rollback 속성을 지정했음에도 rollback이 실행되지 않았고, 그대로 DB update로 이어짐
3. transaction이 생성되지 않고 그냥 처리된단 생각이 들어 application-context.xml 확인

해결 방안 : <tx:annotation-driven transaction-manager="transactionManager"/> 설정이 없어 추가

참고: annotation-driven: 등록된 bean 중 transactional 어노테이션이 붙은 것들에 transaction 적용

Posted by 知彼知己百戰不殆
,

오류 : CLIENT_PLUGIN_AUTH is required

원인 : 원인이 몇 가지 있으나 나는 mysql-connector 버전이 맞지 않는 경우에 해당. 기존에 사용하던 connector는 mysql-connector-8.2버전(최신)이었으나 오래된 현 회사 시스템에는 맞지 않는 connector였음.

해결 : mysqlconnctor-5버전대로 낮추고 진행

Posted by 知彼知己百戰不殆
,

key를 ident 값으로 주는게 있었고, 양쪽 테이블을 동일하게 맞춰났다. 하지만 프로시저에서 로직 오류가 있어서 사용하다 보니 어느 순간 두 테이블의 ident 값이 틀어져 있었고, key값으로 비교 시 이상하게 비교가 되었다.

필요: dbcc checkident(테이블명, noreseed) 는 현재 테이블의 ident 값을 가져오는 것이지만 if문에서 양쪽 값 비교 필요

해결: select IDENT_CURRENT(테이블명) 으로 하면 현재 테이블의 ident 값을 select로 가져올 수 있음

Posted by 知彼知己百戰不殆
,

데이터 양이 매우 많은 테이블들이 여러개 조인되고 그 안에서 조건을 넣어 조인을 하다 보면 SQL 속도가 상당히 느려짐.

이 때 임시 테이블이나 신규로 통계 데이터를 저장하는 테이블을 만들어서 작업 외 시간에 해당 테이블에 저장을 미리 시킨 후 해당 쿼리 결과가 필요할 땐 신규 테이블에서 값을 가져와서 보여주는 형태로 하면 빠름.

단점 : 실시간 확인해야 하는 통계 SQL에는 적용하기 힘듦. 이 땐 SQL 튜닝이나 다른 방법을 찾아야 함

Posted by 知彼知己百戰不殆
,

오류 상황 : mybatis 도입 후 테스트 프로젝트에서는 문제 없이 작동했던 부분이 원본 프로젝트 소스와 merge 하고 나니 오류 발생. 1, 2, 3, 4 쿼리를 순차적으로 타고 결과를 도출해야 하는데 1번 쿼리 실행 후 catch문 로그도 안 찍고 갑자기 finally로 빠져버림.

트러블슈팅 : ① 오류 로그라도 뭔가 확인이 가능해야 버그를 잡아내는데 아무런 로그가 안찍히니 답답했다. 그래서 할 수 없이 디버깅 모드로 실행 후 오류나기 바로 전 메소드에 toggle 걸어주고 한 step씩 넘기면서 모든 변수 값 다 확인.
② log4j 관련 변수였나? 정확한 기억은 안나지만 특정 변수에 java.lang.NoSuchMethodError: org.apache.log4j.Logger.isTraceEnabled()Z 오류 내용이 들어감
③ 지난 번 테스트 프로젝트에서 보고 해결했으나 블로그에 안 적어놔서 다시 구글링
④ log4j 1.2.12 버전 이후로 해당 메소드가 들어가 있다는 내용 확인
⑤ log4j.jar 파일 교체(기존: 1.2.8 버전)

하지만 아직도 왜 catch문을 안 탔는지 이해가 잘 안 간다. 추후 좀 더 확인해볼 필요가 있음.

Posted by 知彼知己百戰不殆
,