336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

퍼옴글 : https://jun7222.tistory.com/310


스프링 프레임워크 + tomcat 8.0 + oracle 11g 에서 혼자 로컬로 DB를 사용할 때는 아무 문제가

없다가 여러 인원이 DB서버 하나를 사용하게 될 때 발생했던 오류

close()를 해줘야 하는데 안하는게 쌓이다 보니 결국 오류가 뿜음..


ORA-12519, Error preloading the connection pool, no appropriate service handler found 보인다.



경고: Unexpected exception resolving reference

java.sql.SQLException: Error preloading the connection pool

at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2084)

Caused by: java.sql.SQLException: Listener refused the connection with the following error:

ORA-12519, TNS:no appropriate service handler found

at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:419)

org.apache.tomcat.dbcp.dbcp2.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)

... 22 more

Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:

ORA-12519, TNS:no appropriate service handler found

 

at oracle.net.ns.NSProtocol.connect(NSProtocol.java:386)

at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1054)

at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:308)

... 31 more

경고: Unexpected exception resolving reference

java.sql.SQLException: Error preloading the connection pool

at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2084)

at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getLogWriter(BasicDataSource.java:1587)

Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:

ORA-12519, TNS:no appropriate service handler found

 

at oracle.net.ns.NSProtocol.connect(NSProtocol.java:386)

at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1054)

at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:308)

... 79 more



오류 해결방법

1. close()를 해준다.


2. SELECT * FROM V$SESSION WHERE OSUSER != 'SYSTEM';  으로 점유하는 것을

확인하여 이상이 있는지 체크





이 글에서 소개할 방법은 3번

3. processes의 할당량을 늘려준다.


select * from v$resource_limit where resource_name = 'processes';

위 내용을 입력하여 현재 사용중인 수가 할당보다 많으면 위 오류를 나온다.


현재 32 최대 36 할당 100 




먼저, cmd를 실행한다.

sqlplus /nolog

SQL> conn /as sysdba


SQL>alter system set processes=200 scope=spfile;

               값은 적당하게~


SQL> shutdown immediate;

SQL> startup;




재시작까지 완료되고 다시 확인을 하면




위처럼 allocation, limit 값이 늘어난 걸 확인할 수 있다.



출처: https://jun7222.tistory.com/310 [leverage 블로그]

'DATABASE > ORACLE' 카테고리의 다른 글

ORACLE PROCEDURE 쿼리 COMMIT 또는 ROLLBACK  (0) 2017.02.16
ORACLE FOR LOOP구문  (0) 2017.02.16
ORACLE WHILE문과 LOOP문  (0) 2017.02.16
ORACLE 프로시저 IF문과 EXCEPTION처리방법  (0) 2017.02.16
ORACLE PLSQL  (0) 2017.02.12
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 

 

//테스트용 테이블생성

CREATE TABLE testTable(
    NUM NUMBER PRIMARY KEY,
    NAME VARCHAR2(30) NOT NULL
);

 

select * from testTable

 

INSERT INTO testTable VALUES(2, 'test2')

 

//밑에 있는 함수 호출

SELECT numadd() FROM DUAL

 

//함수 구문 (into를 이용해서 쿼리에 있는 것을 변수에 넣었습니다

CREATE OR REPLACE FUNCTION numAdd
RETURN NUMBER IS //NUMBER형식 리턴
MAXNUM testTable.NUM%TYPE; //testTable의 NUM칼럼 형식 변수
F_NUM NUMBER(4);                 //숫자4자리
F_NAME VARCHAR(30);            //문자 30(한글2, 영어1)
CURSOR C1                          //커서를 넣습니다. 넣는 기준은 밑에 쿼리이고, F_NUM, F_NAME형식입니다.
IS
    SELECT NUM, NAME INTO F_NUM, F_NAME FROM testTable;

BEGIN
    SELECT NULLIF(MAX(NUM)+1, 1) INTO MAXNUM FROM testTable;  //NULLIF( MYSQL 에서는 IFNULL입니다.)
    
    DBMS_OUTPUT.PUT_LINE(MAXNUM||'check'); //문자열
    OPEN C1; //CURSOR 사용준비
    LOOP  //돌립니다.
        FETCH C1 INTO F_NUM, F_NAME; //1개씩 가져옵니다 각각 F_NUM, F_NAME에 넣습니다.
        EXIT WHEN C1%NOTFOUND;  //나오는 조건은 C1을 찾을수 없으면 나옵니다.
        DBMS_OUTPUT.PUT_LINE(F_NUM || F_NAME||'dasdfasdf');
    END LOOP;  //루프문의 끝입니다.
    return MAXNUM;  //리턴
END numAdd;  //함수끝
/

 

---------------------------------------------------------------------- 

//해당 쪽에 문자열을 붙여주는 프로시저

CREATE OR REPLACE PROCEDURE testA

IS
BEGIN
    UPDATE testTable
    SET name = name || '2';

COMMIT;

END testA;
/

 

//프로시저 호출하기

EXECUTE testA();

 

----------------------------------------------------------------------

//dbms_output.put_line주석 보여주기

SET SERVEROUTPUT ON;

 

//간단한 block

begin
    dbms_output.put_line('확인');
end;
/

+ Recent posts