본문 바로가기

프로그래밍/Spring

Oracle DB환경 구축한 후 Spring과 연동해보기

Oracle에 대한 TableSpace생성하기

  • OracleDB 설치를 완료했을 경우 sql plus를 실행해 접속을 완료한다.

 

  • Oracle 12c의 경우 11g와의 호환을 위해 cmd에서 아래 명령어를 우선 입력해야 한다.
    * 만일 11g환경에서 작업한다면 필요없는 부분이다.
alter session set "_ORACLE_SCRIPT"=true;

SQL Plus


 

  • 이후 아래의 명령을 차례로 진행해 TableSpace를 생성한다.
    - 이때 datafile의 위치는 c의 루트 디렉토리로 지정하면 보안상의 문제때문에 정상적으로 지정되지 않는다.
create tablespace spring
datafile 'c:/SpringConfig/spring.dbf' size 50m
autoextend on
next 10m
maxsize unlimited;

- autoextend는 자동으로 용량이 증가한다는 것으로 기본 50mb로 시작 후 용량이 다 차게 되면 10mb씩 추가적으로 용량을 할당시키며 최대 용량 제한은 없다는 의미를 가지고 있다.

- Oracle DB는 값이 비싸기 때문에 보통 마지막 옵션인 unlimited는 걸어놓지 않는 편이다.

정상적으로 TableSpace가 생성된 모습


 

  • TableSpace가 생성되었다면 이후 사용자 계정을 만들게 된다.
create user spring identified by 1234
default tablespace spring;

- 첫 줄에는 아이디 & 비밀번호를 지정해주며, 두번째 줄에는 기본 TableSpace의 이름을 지정해준다.

- 실제로 생성하고자 할 때 "ORA-65096: 공통 사용자 또는 롤 이름이 부적합합니다."라는 오류가 발생하게 된다. 확인 결과 사용자명 앞에 c##을 붙이게 되면 정상적으로 사용자가 생성된다는 것을 알 수 있었다.

- 이러한 c##을 붙이고 싶지 않다면 system계정으로 로그인 후 아래의 명령을 실행해 세션을 변경하면 해결된다.

alter session set "_ORACLE_SCRIPT"=true;

- 이보다는 더 중요한 오류가 발생했는데 "ORA-00959: 테이블스페이스 'SPRING'이(가) 존재하지 않습니다."라는 오류였다. 알아보니 그냥 tablespace를 불러오려고 한다면 system 테이블스페이스를 사용하게 되며, 단편화를 비롯한 성능상 문제가 발생한다는 것이었다.

- 이 문제 또한 해결하기 위해서 추가적으로 default temporary tablespace를 지정해주면 된다는 것을 알 수 있었다.

- ORA-00959문제를 해결하기 위해 적용했던 방식은 나에게 듣지 않았으며 결국 가장 큰 문제는 12c로 넘어오면서 c##을 계정명 앞에 붙여야 한다는 사실이었던 것을 알게 되었다. 위의 세션 변경 명령을 통해 설정을 변경하자 정상적으로 TableSpace가 설정되었다.

우여곡절끝에 설정 완료


 

  • 이후 grant키워드를 활용해 해당 계정에 주고자 하는 사용 권한을 부여하게 된다.
grant connect,resource,dba to spring;

- 접속, 리소스 사용, DB관리 권한을 부여한다는 의미를 가지고 있다.

정상적으로 사용자가 생성됨


 

  • SQL Developer에서도 정상적으로 접속이 가능한지 확인작업을 거쳤다.


- ORA-12505오류가 발생한 모습. 알아보니 SID값이 현재 컴퓨터에서와 접속하고자 하는 값이 틀렸기 때문이었다는 것을 알 수 있었다.

xe와는 다른 SID값


- 정확하게 어떤 과정을 거쳐 SID가 sy2tema가 되었는지는 잘 기억이 나지 않았다. 하지만 어렴풋이 추측해보아 위에서의 TableSpace에 대한 오류를 해결해보고자 여러 유저 아이디값을 생성하는 과정에서 미쳐 지우지 못한 값인 것으로 추측되었다.

- 전역 데이터베이스명을 설치 당시에 위 이름으로 설정했던 것으로 확인되었다.

생성 완료


 

Oracle과 Spring간의 연동

  • 배치가 완료된 후에는 CMD에서 mvn명령을 인식하도록 만들기 위해 환경변수를 설정해준다.

설치에 성공했을 때의 CMD화면

  • Maven을 PC에 설치하는 과정에서 mvn -v명령이 인식되지 않는 것을 발견했다. 이 원인을 찾다보니 위 사진처럼 JDK를 설치하지 않은 상태에서 maven을 설치하고 있었기 때문이라는 것을 알 수 있었다.
  • 설치가 완료된 후에는 아래의 명령을 입력해 위에서 미리 다운로드받아둔 ojdbc6을 maven을 통해 설치한다.
mvn install:install-file -Dfile="C:\SpringConfig\ojdbc6.jar" -DgroupId=com.oracle.jdbc -DartifactId=ojdbc6 -Dversion=11.1.0.6.0 -Dpackaging=jar

 

  • 이 때 -Dfile의 경로는 자신이 해당 jar파일을 저장해놓은 디렉토리가 되어야 한다.

OJDBC 설치


  • 이후 Spring프로젝트 내 pom.xml에 아래 코드를 등록해주어 드라이버들을 설치한다.
<!-- jdbc driver -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${org.springframework-version}</version>
</dependency>
<!-- oracle driver -->
<dependency>
    <groupId>com.oracle.jdbc</groupId>
    <artifactId>ojdbc6</artifactId>
    <version>11.1.0.6.0</version>
</dependency>
<!-- mybatis driver -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.3</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.3</version>
</dependency>

JUnit을 이용한 Spring과 오라클 연결 확인


 

ORA-12560오류 발생 시 처리 방법


  • Oracle을 정상적으로 설치했음에도 TNS: 프로토콜 어댑터 오류가 발생할 수 있다.

listener와 tnsnames.ora가 없다.


  • 위 사진처럼 listener와 tnsnames가 없으며 서비스를 확인해보더라도 OracleService가 없어 SID값을 확인해볼 수도 없는 상태가 된다.
  • 여러 방면으로 해결 방법을 찾아보던 중 리스너 자체가 없으니 리스너를 새로 생성시켜주면 문제가 해결될 것이라는 생각이 들었다.


  • Net Configuration Assistant를 실행 후 위 사진을 따라 진행하면 새로운 리스너가 생성된다.
  • 그 후 명령 프롬프트를 관리자 권한으로 실행한 다음 lsnctl stop과 lsnctl start가 정상적으로 작동되면 정상적으로 리스너가 생성되었음을 확인할 수 있게 된다.


  • 추가적으로 자신의 SID와 ORACLE_HOME을 찾고 싶지만 데이터베이스에 접속할 수 없는 경우 regedit를 들어가는 방법으로 해결할 수 있다.
  • 경로는 \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB12Home1를 찾아 들어가면 된다.

SID와 ORACLE_HOME찾기


  • 리스너 뿐만 아니라 서비스도 존재하지 않는 경우 위의 방법을 통해 서비스를 새로 생성시켜줄 수도 있다.
  • 이 때는 로컬 네트 서비스 이름 구성을 선택한 후 진행한다.
  • 또한 서비스 이름을 정해줄 때는 자신의 SID값과 일치시켜야 정상적으로 서비스를 생성할 수 있다.
  • 이들 방법을 사용했음에도 여전히 서비스에 OracleService(SID이름)의 이름으로 된 서비스가 생성되지 않아 답답했던 차에 명령프롬프트에 dbca를 입력한 후 데이터베이스를 생성하면 될 수도 있다는 것을 알게 되었다.
  • 마지막 방법이라는 생각으로 해당 방식을 이용해 데이터베이스를 생성해보자 정상적으로 SID로 된 서비스가 생성되어 오라클이 제대로 설치되지 않았기 때문에 발생했던 것이었음을 알 수 있었다.

dbca를 통해 들어간 후 데이터베이스를 생성하자


  • OracleService가 서비스 내에 존재하지 않을 경우 명령 프롬프트를 관리자 권한으로 실행한 후 dbca명령을 통해 새로 데이터베이스를 생성하면 해결할 수 있다는 사실을 알 수 있었다. 

 

Getter와 Setter빠르게 작성하기

  • 코드 중 아무 부분이나 선택 후 위 사진과 같이 들어간 다음 원하는 변수들을 선택해 generate해주면 빠르게 Getter와 Setter가 정의되게 된다.

 

 

참고 1 : https://ngg3319.tistory.com/74 (ORA-65096오류 해결법 탐색)

참고 2 : https://m.blog.naver.com/kin412/220463830991 (TableSpace에 대한 결정적인 해결법 발견)

참고 3 : https://hunit.tistory.com/211 (ORA-12505오류 해결법 탐색)

참고 4 : https://m.blog.naver.com/PostView.nhn?blogId=reinstate10&logNo=220167004823&proxyReferer=https%3A%2F%2Fwww.google.com%2F (ORA-12560오류 해결법 탐색 1)

참고 5 : https://blog.naver.com/reinstate10/220165970551 (ORA-12560오류 해결법 탐색 2)

참고 6 : https://javaiyagi.tistory.com/175 (ORA-12560오류 해결법 탐색 3)

참고 7 : https://m.blog.naver.com/PostView.nhn?blogId=lbiryu&logNo=30056638229&proxyReferer=https%3A%2F%2Fwww.google.com%2F (ORA-12560 해결)