이전 포스트

 

2년 지난 레거시 프로젝트 업데이트 - 02. 프로젝트 실행 (IntelliJ, Tomcat, WAR, Maven)

이전 포스팅 2년 지난 프로젝트 리팩토링 - 01. 프로젝트 버전 및 구조 수정기말이 끝나서 2년 전에 만들었던 web 프로젝트를 리팩토링 해보기로 했습니다.갑자기 하게 된 이유는 포폴을 만들기 위

hya68.tistory.com


1. 프로젝트 내에서 Oracle 및 기타 설정

pom.xml / servlet-content.xml

이전에 xml 디렉터리 위치도 변경했기 때문에 mybatis-config.xml에서 mappers를 추가합니다.

mybatis-config.xml


2. XE, Listener 실행중인지 확인

Oracle이 설치되었다면 작업관리자에서 아래 표시된 2개의 서비스가 실행중인지 확인합니다.

중지됨 상태라면 실행시켜주세요.


3. SqlDeveloper 접속

프로그램을 키고 새 접속을 하면 아래와 같이 나옵니다.

- Name: DB 이름
- 사용자 이름: servlet-content.xml에서 설정한 username
- 비밀번호: servlet-content.xml에서 설정한 password

 

세부정보는 그대로 두고 테스트 후 성공이 뜨면 접속하면 됩니다.

이후 sql문을 통해 필요한 테이블을 생성해주세요.


4. 프로젝트 실행 후 확인

정상적으로 실행되는지 확인합니다.

아래는 DB 연결하는 과정에서 발생한 오류들을 정리했습니다.

 

+) 자주 발생하는 오류

더보기
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLRecoverableException: IO ����: The Network Adapter could not establish the connection

오류 원인: 애플리케이션과 Oracle DB 네트워크 연결 실패
아래 항목들 하나씩 확인

# OracleServiceXE, OracleXETNSListener 실행중이 아님

  •  위의 2번으로 해결

 

# Listener는 떠 있는데 포트번호나 SID가 틀린 경우

SqlDeveloper의 DB 접속 화면 / servlet-content.xml의 DB 로그인 설정 코드
  • servlet-content.xml에서 url 마지막에 포트번호와 SID가 일치하는지 확인
  • 참고로 SID 방식이 아닌 서비스 이름(SERVICE_NAME) 방식이면 ':' → '/' 변경
  • ex) SID: jdbc:oracle:thin:@localhost:1521:xe / SERVICE_NAME: jdbc:oracle:thin:@localhost:1521/xe

 

# JDBC 테스트

  • java 디렉터리 밑에 test 디렉터리 추가 후 아래 코드 작성
  • JdbcTest.java 파일 우클릭 → Run 'JdbcTest.main()' 콘솔 확인
  • 'DB 연결 성공'이 뜨면 JDBC 연결에는 문제 없음
import java.sql.Connection;
import java.sql.DriverManager;

public class JdbcTest {
    public static void main(String[] args) {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");

            Connection conn = DriverManager.getConnection(
                "jdbc:oracle:thin:@localhost:1521:XE",
                "DB 접속할 때 사용한 이름",
                "DB 접속할 때 사용한 비밀번호"
            );

            System.out.println("DB 연결 성공");
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
이 프로젝트에서 나타난 JDBC 연결 오류

java.sql.SQLRecoverableException: IO 오류
The Network Adapter could not establish the connection
Caused by: java.net.ConnectException: Connection refused

오류 원인: DB 연결 자체가 안됨 / 주소 설정 오류 / Listener 실행중 아님
만약 위의 3가지를 모두 확인했는데도 안되면 아래 단계 확인

 

# Listener 등록 문제

  • Listener 상태 확인
    • 관리자 권한 cmd → 'lsnrctl status' 입력
정상적으로 XE가 떠있음
  • Service에 XE 있는지 확인 후 위와 같이 있으면 정상 실행됨, 없으면 추가해줘야 함

Listener에 XE 추가 방법

  • XE 실행 및 확인
    • 관리자 권한 cmd → 'sqlplus / as sysdba' 입력 → 'startup;' 입력 → 'select instance_name, status from v$instance;' 입력
    • 결과가 'XE | OPEN' 뜨면 정상적으로 실행중
  • XE 강제 추가 방법
    • 1) 수동 추가
      • 관리자 권한 cmd → 'sqlplus / as sysdba' 입력 → ' alter system register;' 입력
    • 2) 리스너 재시작
      • 관리자 권한 cmd   'lsnrctl stop' 입력   'lsnrctl start' 입력
    • 3) CMD로 LOCAL_LISTENER 설정
      • 관리자 권한 cmd → 'sqlplus / as sysdba' 입력  'show parameter local_listener;' 입력
      • 결과로 값이 비어있거나 이상하면
      • 'alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope=both;' 입력 'alter system register;' 입력
      정상적으로 값이 보임
    • 4) listener.ora 파일에 강제로 정적 SID 추가
      • C:\oraclexe\app\oracle\product\11.2.0\server\network\admin\listener.ora 열기
      • SID_LIST_LISTENER의 SID_LIST 부분에 XE 있는지 확인 후 없으면 추가
최종 listener.ora 파일의 SID_LIST_LISTENER 내용 (XE 부분이 있으면 됨)

SID_LIST_LISTENER =
    (SID_LIST =
        (SID_DESC =
            (SID_NAME = PLSExtProc)
            (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
            (PROGRAM = extproc)
        )
    (SID_DESC =
        (SID_NAME = CLRExtProc)
        (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
        (PROGRAM = extproc)
    )
    (SID_DESC =
        (GLOBAL_DBNAME = XE)
        (SID_NAME = XE)
        (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
    )
)

 

 

# 최종 정리

DB 연결 오류 시 아래 단계를 실행

  1. OracleServiceXE, OracleXETNSListener 실행중인지 확인
  2. Listener는 떠 있는데 포트번호나 SID가 틀린 경우 수정
  3. JDBC 테스트
  4. Listener에 XE 추가 (CMD 활용, 정적 SID 추가)

결과

  • 작업관리자 OracleServiceXE, OracleXETNSListener 실행중
  • Listener에 Service XE 존재

 

+ Recent posts