'전체 글'에 해당되는 글 104건

  1. 2011.09.14 toad 단축키
  2. 2011.09.07 오라클 XE 세션처리량 확인 및 늘리기
  3. 2011.09.07 JAVA에서 Stored Procedure사용하기 SP

toad 단축키

2011. 9. 14. 20:05 from DB




테이블 정보 상세보기

F4 : Table, View, Proc, Funct, Package DESC(테이블명 위에 커서를 두고 F4)

 

자동완성

Ctrl+. : Table Completion (매칭되는 테이블목록 출력)

Ctrl+T : Columns Dropdown (해당테이블의 컬럼목록 표시)

 

SQL문 실행

F5 : SQL Editor내의 모든 SQL문 실행

Ctrl+Enter : 현재 커서의 SQL문 실행

F9 : SQL문 실행 후 Grid에 출력

 

히스토리(과거 수행SQL문 조회)

F8 : 과거에 실행한SQL HISTORY 목록

Alt+Up : History UP

Alt+Down : History DOWN

 

텍스트 대/소문자 변환

CTRL+L : 텍스트를 소문자로

CTRL+U : 텍스트를 대문자로

 

주석처리

Ctrl+B : 주석처리

Ctrl+Shift+B : 주석해제

 

편집 창 전환(이동)

F6 : SQL Editor와 결과창간의 이동

F2 : SQL Editor창 전체화면 전환

Shift+F2 : Grid Output창 전체화면 전환

 

기타 단축키

F7 : 화면을 모두 CLEAR

Ctrl+Shift+F : 쿼리문을 보기좋게 정렬

Ctrl+F9 : SQL Validate (SQL문을 수행하지 않음)

'DB' 카테고리의 다른 글

테라DB 관련 정보  (0) 2011.09.14
MSSQL TCP/IP 설정  (0) 2011.09.14
오라클 XE 세션처리량 확인 및 늘리기  (0) 2011.09.07
JAVA에서 Stored Procedure사용하기 SP  (0) 2011.09.07
PreparedStatement like 검색시 바인드 방법  (0) 2011.09.07
Posted by 에시드 :
 

java.sql.SQLException: Listener refused the connection with the following error:
ORA-12519, TNS:no appropriate service handler found
The Connection descriptor used by the client was:
localhost:1521:xe

 

 

 

 

oracle db에 자바어플리케이션상의 jdbc드라이버를 이용하든 암튼 oracle클라이언트를 이용하든,

client는 oracle listner랑 소켙통신을 하죠.
connection을 만들고 안 닫으면, connection하나마다 session이(이게 오라클이깔린 서버의 램을 잠식하죠.

session하나가 1k가 3k가 그런데요. 메모리 leak현상이 발생하고 먹통인된다나 그렇답니다.
근데 이건 하루아침에 되는게아니라 좀 누적이되야하는데요

혹시 db가 xe아닌가요. process수가 넘적어서 그런것 같아요.
sql플러스에서 다음명령어를 해보시죠.

SQL> SHOW PARAMETER PROCESSES // 기본값은 40

db_writer_processes                    integer  1
gcs_server_processes                 integer  0
job_queue_processes                  integer  4
log_archive_max_processes         integer  2
processes                                  integer  40


SQL> ALTER system SET processes=100 scope=spfile;

System altered.

 


SQL> COMMIT;


 

오라클 xe는 기본적으로 세션처리량이 20미만으로 세팅이 되어 있는것 같다.
즉 동시에 20명 미만의 유저만 처리할 수 있다는 말.

해결하려면 system으로 로그인해서 다음의 명령어를 입력해준다

SQL> alter system set processes=200 scope=spfile;
SQL> alter system set open_cursors=200 scope=both;
SQL> shutdown immediate    
SQL> startup
하거나 /etc/init.d/oracle-xe restart로 데몬 재실행


해당 파라미터 값을 수정하는 것은 $ORACLE_HOME/dbs/init.ora 파일과 spfileXE.ora 파일이 설정파일인데,
spfileXE.ora 는 직접수정해서는 안된다.

 


Posted by 에시드 :

CallableStatement

 

Oracle 에서 입력된 stored procedure 를 java에서 실행해서 결과를 얻고 싶으시다면

Statement 대신에 CallableStatement 라는걸 쓰시면 됩니다.

 

그 뒤에는 어차피 insert, update 같은 것들과 같이 성공 또는 실패, 성공시 몇개가 성공했는지,

query 인 경우에는 ResultSet 받아서 fetch 하면서 값 뽑아서 쓰시면 됩니다.

Connection 까지는 똑같고 그 다음부터가 약간 다른데 대충 아래와 같습니다.

 

              // 위에서 JDBC  드라이버 잡고 Connection 까지 맺은 상태...

      CallableStatement cs = con.prepareCall("{call myStoredProcedure(?,?,?)}");
      cs.setInt(1,2
);
      cs.registerOutParameter(2
, java.sql.Types.VARCHAR);
      cs.registerOutParameter(3
, java.sql.Types.INTEGER);
      cs.execute();
      System.out.println("*name : "+ cs.getString(2) +"*age : "+ cs.getInt(3
));
      cs.close();
      con.close();

 

 

 

 

 

PreparedStatement 

CallableStatement 

 

자바에서 저장프로시져 호출하는건 PreparedStatement  클래스를 사용하는 방법과 CallableStatement  클래스

 

를 사용하는 방법이 있습니다.

 

먼저 CallableStatement 클래스를 사용하여 저장프로시져 호출 방법

 

ResultSet rs = null;

CallableStatement cs = null;

 

cs = conn.prepareCall("{call dbo.comempsearch(?)}");
cs.setString(1,"S");
rs = cs.executeQuery();

 

이렇게 하면 디비에 저장되어있는 comempsearch라는 프로시져를 호출 하는겁니다.

 

?표는 저장프로시져에 받을 파라미터를 넘길수 있습니다.(단점: 저장프로시져에서 선언한 순서대로 파라미터를

 

넘겨야 됩니다.)

 

PreparedStatement 클래스를 사용하는 방법

PreparedStatement pstmt = null;

ResultSet rs = null;

 

String sqlQuery = "exec jaorderprc @pWORKGB ='S', @pUSERID ='"+userID+"', @pFIRSTDATE ='"+firstDate+"'";
sqlQuery += ", @pLASTDATE ='"+lastDate+"', @pPartNo ='"+Sabun+"', @pORDNUM ='"+OrKey+"'";
pstmt = conn.prepareStatement(sqlQuery);
rs = pstmt.executeQuery();

 

이렇게 해서 jaorderprc프로시져를 호출 할수 있습니다. 이건 프로시져에서 선언한 변수들을 수동으로 값을 정

 

해줄수 있습니다.(변수 선언 순서를 신경 안써도 된다는 장점이 있습니다.)

 

이렇게 해서 프로시져를 호출 하면 select문경우 값을 받을때는

 

 

while(rs.next()){
    aaa vo = new aaa();
    vo.ORDNUM = rs.getString("ORDNUM");
    vo.PartNo = rs.getString("PartNo");
    vo.FACTGB = rs.getString("FACTGB");
    vo.ORDATE = rs.getString("ORDATE");
    vo.ORSER = rs.getInt("ORSER"); 
    vo.SABUN = rs.getString("SABUN");
    vo.CUSTCD = rs.getString("CUSTNAME1");
    vo.ORDAN = rs.getInt("ORDAN");
    vo.ORDQTY = rs.getInt("ORDQTY");
    arrList.add( vo );
   } 

 

제가 짠 소스는 변수만 선언해둔 클래스를 사용하여 한것입니다.

 

 

 

 

Posted by 에시드 :