데이터베이스2013. 12. 18. 14:54

[잠금 요청 제한시간이 초과되었습니다. 오류 1222] 라는 문구가 발견되면,

1. 먼저 EXEC SP_LOCK 명령을 실행시켜서 SPID가 중복되어 있는지 확인하고

2. DBCC INPUTBUFFER(SPID)를 실행해서 확인하고

3. KILL SPID로 해당프로시저를 KILL

해결 완료.

Posted by 미랭군
데이터베이스2013. 9. 24. 16:02
ORA-00054:resource busy and acquire with NOWAIT specified



 

이런 에러로 DML DDL명령이 안될때가 있다.

해당 DB가 lock 이 걸린경우 나오므로 해당 DB의 lock을 풀어주어야 한다.

예를 들어, EMP 테이블이라하면

dba 관리자 모드로 들어가서

 

sqlplus 디비접속(시스템계정으로)

쉘에서 -> sqlplus "/as sysdba"

 

이후


SQL> select a.sid, a.serial# 
from v$session a, v$lock b, dba_objects c 
where a.sid=b.sid and 
b.id1=c.object_id and 
b.type='TM' and 
c.object_name='EMP'; 

>>출력

SID SERIAL# 
--- ------- 
5        1 
6        1 

SQL> alter system kill session '5, 1'; 
SQL> alter system kill session '6, 1'; 

이렇게 하면 lock 이 풀리게된다.


Posted by 미랭군
데이터베이스2013. 6. 12. 16:01

★ MY-SQL

CONCAT(m.handPhoneDdd, '-', m.handPhone)  as  handPhone

 

★ MS-SQL

m.handPhoneDdd + '-' + m.handPhone   as  handPhone

 

★ ORACLE

m.saleDate || m.saleTime <= '20061201100000'

[출처] 문자열 합치기|작성자 일하자


Posted by 미랭군
데이터베이스2013. 3. 11. 15:00
언제부터인가 Oracle SQL Developer 의 언어가 OS에 따라 현지화가 되어 실행되기 시작했습니다.
물론 한글이 더 좋긴 하지만 기존 사용자들에게는 혼란스러울 수 도 있을 것 같습니다.

다음과 같이 config 파일을 수정하여 다시 영문으로 변경할 수 있습니다.


sqldeveloper/bin/sqldeveloper.conf에 다음을 추가

AddVMOption -Duser.language=en
AddVMOption -Duser.country=US


수정 후 재실행 하면 적용 됩니다.

 

Posted by 미랭군
데이터베이스2013. 1. 8. 13:27

1.MSSQL JDBC 드라이버 받기.


http://www.microsoft.com/ko-kr/download/details.aspx?id=11774

위 링크에서 exe 파일을 받은 후 풀고싶은데다 압축을 푼다.

 

2. lib에 다운받은 압축파일 추가 하기


압축을 푼 파일을 보면 \sqljdbc_2.0\enu 안에 sqljdbc.jar 과 sqljdbc4.jar이 있는데

얘네를 lib에 추가해줘야 한다.

sqljdbc.jar 과 sqljdbc4.jar의 차이는 jre와 jdk의 버전 차이다.

jre6.0이상이라면 sqljdbc4를 써야한다.

만약 버전이 뭔지 모르겠다면 그냥 아무거나 해본다.

자바가 버전 안맞다고 어떤거 쓰라고 에러 출력해준다.

버전에 맞는 파일을 복사하여 자신의 webapps의 lib에 넣어준다.

 

3. 주의점

- JRE 6.0.29 버젼에서는 커넥션은 맺어지나 sql이 실행되지 않는 오류가 발생한다. 다른 버젼에서는 잘된다.

'데이터베이스' 카테고리의 다른 글

DBMS별 문자열 합치기  (0) 2013.06.12
sql developer 한글판 영문으로 바꾸기  (0) 2013.03.11
초 단위 출력  (0) 2012.11.20
Tomcat DBCP를 사용해야 하는 이유  (0) 2012.09.03
Tomcat DBCP 설정법  (0) 2012.09.03
Posted by 미랭군
데이터베이스2012. 11. 20. 17:32

오라클에서 날짜의 간격을 초단위로 출력하는 방법이다.

코드에서 처리하지 않고 쿼리로 처리하여 간편하게 처리 할 수 있다.

TO_NUMBER((SYSDATE - WORKDATE) * (24 * 60 * 60))

SYSDATE : 시스템의 시간 초단위까지 나온다.

WORKDATE : 시스템을 날짜를 저장한 컬럼

우선 시스템의 시간으로부터 내가 저장한 시간을 뺀다. 둘다 DATE형이기때문에 형변환 없이 계산이 된다.

그렇게 계산을 하면 0.087263871623 처럼 값이 나오게 된다. 정확히 무슨 계산을 해서 저런 값이 나왔는지 분석은 해보지 않았지만

그 값에 하루를 초로 나타낸 값 (24 * 60 * 60)을 곱해주면 초단위로 출력이 가능하다.


SELECT

TO_NUMBER((SYSDATE - WORKDATE) * (24 * 60 * 60))

FROM

테이블명 . . .

 

'데이터베이스' 카테고리의 다른 글

sql developer 한글판 영문으로 바꾸기  (0) 2013.03.11
MS SQL JDBC 등록 방법  (0) 2013.01.08
Tomcat DBCP를 사용해야 하는 이유  (0) 2012.09.03
Tomcat DBCP 설정법  (0) 2012.09.03
MyBatis 문자열 대체 방법  (0) 2012.08.24
Posted by 미랭군
데이터베이스2012. 9. 3. 11:40

네이버나 구글에서 DBCP 를 검색 해 보면 대부분 commons DBCP 를 많이 사용한다. 나도 그랬다. 내가 보고 있는 교재에서는 commons DBCP 로 설명하고 있다. 그러나 검색을 해보니 tomcat 에서 개발한 tomcat DBCP 가 있는데 이 것은 보다 향상된 connection pool 기능을 제공한다. 그래서 이번 포스트는 이에 대해서 설명을 해보고자 한다.

 

지난번 포스트 JNDI 를 수정하는 것이기 때문에 지난번 포스트인 JNDI 를 이용한 DBCP 를 먼저 읽어보길 바란다.

 

먼저 Tomcat DBCP Connection Pool 이 commons DBCP 보다 좋은 점이 뭔지에 살펴보자.

이 내용은 아파치 홈페이지에 있는 내용 중 몇 가지만 추린 내용이다.

http://people.apache.org/~fhanik/tomcat/jdbc-pool.html

 

- 새로운 dbcp 를 써야하는 이유

: commons dbcp 는 싱글 쓰레드를 사용한다. 그래서 스레드가 안전할 수 있도록 commons dbcp 는 전체 풀(pool) 에 대해서 롹(lock)을 건다.

: commons dbcp 는 느리다. 요즘 하드에워는 cpu 수가 증가하고 있는데 반해서 이를 제대로 활용하고 있지 못해서 퍼포먼스가 떨어진다.

: commons dbcp 는 복잡하다. 클래스 수가 60개나 된다. 반면, tomcat jdbc pool 은 딸랑 8개 이다. 이는 수정이 용의함을 의미한다.

: commons dbcp 는 정적인(static) 인터페이스(interface) 를 사용하기 때문에 구현 되지 않은 모든 메소드들에 대해서 예외(exception) 을 받게 될 수 있다.

: commons dbcp 는 상당히 업데이트 되지 않는다 ..

: tomcat jdbc pool 은 commons dbcp 에서 제공하지 않는 기능을 제공하면서도 빠르다.

: 추가적인 스레드를 더할 필요 없이 connection 을 비동기적(asynchronously) 회수할 수 있도록 구현할 수 있다.

 

- 추가된 기능

: 현재의 높은 멀티코어 환경을 충족시킨다.(혹은 제대로 활용한다??)

: inteface 의 동적인(dynamic) 구현(??)

: validation interval 을 설정해 줄 수 있다.

: 높은 퍼포먼스

: 간단해서 버그잡기가 용의. 핵심 클래스는 8개 뿐

 

- 단점

: 디비가 다운되었을 때, 재 연결을 위해서는 웹서버를 내렸다가 올려야 한다.(아무래도 미리 커넥션을 맺어둬서 그런 듯^^?)

 

 

'데이터베이스' 카테고리의 다른 글

MS SQL JDBC 등록 방법  (0) 2013.01.08
초 단위 출력  (0) 2012.11.20
Tomcat DBCP 설정법  (0) 2012.09.03
MyBatis 문자열 대체 방법  (0) 2012.08.24
Oracle UTF-8로 설정하기  (0) 2012.08.02
Posted by 미랭군
데이터베이스2012. 9. 3. 11:38

**DBCP**

DBCP (Database ConnectionPool) 

미리 컨넥션을 생성하여 컨넥션 풀에 저장한 다음

개별 클라이언트의 요청시 컨넥션을 빌려주고 

반납받는 형식으로 성능을 향상시키기 위한 프로그래밍 기법 

 

***********  Tomcat, Oracle Datasource 설정법  ********************

* 설정할때 이전에 설정된 tomcat 을 지우고 설정 후 server tab 에서 

새로 생성 하여야 한다.


1.conf/server.xml파일을 열고 <GlobalNamingResources>엘리먼트 안에 다음 내용 추가.

 <Resource name="jdbc/myoracle" auth="Container"

              type="javax.sql.DataSource" 

              driverClassName="oracle.jdbc.OracleDriver"

              url="jdbc:oracle:thin:@localhost:1521:xe"

              username="scott" password="tiger" 

               maxActive="20"

/>


2. conf/context.xml에 추가


  <ResourceLink global="jdbc/myoracle" name="jdbc/myoracle" type="javax.sql.DataSource"/>


3. 위와 같이 설정이 완료되었으면 이 파일을 실행하여 결과가 출력되는지 확인한다.

<%!

  private DataSource ds;

  public void jspInit(){

   try{

   InitialContext initCtx = new InitialContext();

   ds=(DataSource)initCtx.lookup("java:comp/env/jdbc/myoracle");

   System.out.println("dbcp lookup..");

   }catch(Exception e){

     e.printStackTrace();

   }

  }

%>


참고) JNDI(Java Naming and Directory Interface)는 디렉터리 서비스에서 제공하는 데이터 및 객체를 발견(discover)하고 참고(lookup)하기 위한 자바 API다. (위키백과)

'데이터베이스' 카테고리의 다른 글

초 단위 출력  (0) 2012.11.20
Tomcat DBCP를 사용해야 하는 이유  (0) 2012.09.03
MyBatis 문자열 대체 방법  (0) 2012.08.24
Oracle UTF-8로 설정하기  (0) 2012.08.02
SQL Developer 실행시 오류  (0) 2012.08.01
Posted by 미랭군
데이터베이스2012. 8. 24. 16:19

문자열 대체(String Substitution)

#{} 문법은 MyBatis 로 하여금 PreparedStatement 프로퍼티를 만들어서 PreparedStatement 파라미터(예를 들면, ?)에 값을 셋팅하도록 할 것이다. 이 방법이 안전하기는 하지만, 좀더 빠른 방법이 선호되기도 한다. 가끔은 SQL 구문에 변하지 않는 값으로 삽입하길 원하기도 한다. 예를 들면, ORDER BY 와 같은 구문들이다.

ORDER BY ${columnName}

여기서 MyBatis 는 문자열을 변경하거나 이스케이프 처리하지 않는다.

 중요 : 사용자로부터 받은 값을 이 방법으로 변경하지 않고 구문에 전달하는 건 안전하지 않다. 이건 잠재적으로 SQL 주입 공격에 노출된다. 그러므로 사용자 입력값에 대해서는 이 방법을 사용하면 안된다. 사용자 입력값에 대해서는 언제나 자체적으로 이스케이프 처리하고 체크해야 한다.

'데이터베이스' 카테고리의 다른 글

Tomcat DBCP를 사용해야 하는 이유  (0) 2012.09.03
Tomcat DBCP 설정법  (0) 2012.09.03
Oracle UTF-8로 설정하기  (0) 2012.08.02
SQL Developer 실행시 오류  (0) 2012.08.01
두 날짜 사이 날짜 구하기  (0) 2012.05.24
Posted by 미랭군
데이터베이스2012. 8. 2. 16:50

환경
centos 5.5
oracle 10g


SELECT * FROM sys.props$ where name='NLS_CHARACTERSET'; //캐릭터셋 확인


C:\>sqlplus /nolog;
sql>conn /as sysdba;

변경하고자하는 캐릭터셋을 수정
sql>update sys.props$ set value$='UTF8' where name='NLS_CHARACTERSET';
sql>update sys.props$ set value$='UTF8' where name='NLS_NCHAR_CHARACTERSET';
sql>update sys.props$ set value$='KOREAN_KOREA.UTF8' where name='NLS_LANGUAGE';
sql>commit;

오라클 재시작 해야함

Posted by 미랭군