728x90
반응형

동시성 제어를 위한 의사컬럼 ORA_ROWSCN


1. 의사컬럼 ORA_ROWSCN

  oracle 10g부터 제공되는 동시성 제어를 위한 의사컬럼

 

사용예)

select   a.c2, a.ora_rowscn

into       :c2, :rowscn

from      xxx a

where   key1 = :k1

;

 

update xxx set c2 = 111

where   key1 = :k1 

and      ora_rowscn = :rowscn

;

 

if (sqlca.sqlcode == 1403) {

    printf("다른 사용자에 의해 변경되었습니다...\n");

}

 

2. 추가적으로 scn_to_timestamp(ora_rowscn) 함수

scn_to_timestamp 함수는 ora_rowscn의 타임스템프를 리턴한다.

단, sys.smon_scn_time 테이블을 기반으로 구현 되었으므로

해당 테이블의 삭제 주기인 5일이 경과하면 일시를 알 수 없게 되며

ora-8181오류가 발생한다.

 

3. autonomous 트란잭션 (sub commit)

 

stored procedure 내에서 pragma autonomous_transaction을 사용하여

서브커밋을 구현 할 수 있음.

 

예)

create or replace function xxx (aa number) return number

as

pragma autonomous_transaction;

 

begin

  update ...

  ;

 

  commit;

  return n;

end;

 

위의 펑션을 사용하는 프로그램은 위 스토어드 프로시져 내에서의 커밋에

영향을 받지 아니한다.

 

 

참고 : 오라클 성능 고도화 해법 - 조시형[b2en] 

 

728x90
반응형
728x90
반응형


1. 테이블 권한주기

GRANT [SELECT , INSERT, UPDATE, DELETE 등..] ON [권한 줄 테이블명] TO [권한 받을 사용자 계정]

 

예) 조회권한주기

GRANT SELECT ON TEST TO ADMIN;  //조회권한만 추가됨..

 


2. 함수 실행권한 주기

GRANT EXECUTE ON [권한 줄 함수명] TO [권한 줄 사용자명]

 

 

3. Sequence(시퀀스) 권한주기

GRANT [SELECT, ALTER] ON [소유계정.시퀀스] TO [대상계정]

 

 

4. SYNONYM 생성

먼저..

시노님(SYNONYM)이란 자신의 계정에서 다른 계정의 특정 테이블을 자신의 계정에서 볼 때 Alias(별칭)으로 정해 놓고, 그 테이블을 참조할 때 Alias로 참조한다.

 

CREATE SYNONYM [시노님명] FOR [소유계정.테이블명];

728x90
반응형

'Web Programming > database' 카테고리의 다른 글

오라클 아우터 조인 외부조인  (0) 2021.03.27
ORA-ROWSCN  (0) 2018.09.13
org.apache.ibatis.exceptions.PersistenceException  (0) 2018.09.04
mybatis if else choose  (0) 2018.08.30
ACID란?  (0) 2018.08.29
728x90
반응형

org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database. Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'token' in 'class java.lang.String'
### Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'token' in 'class java.lang.String'
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:107)


리턴타입은 row 하나하나를 보고 적어야 합니다.

결과 값이 1건일 지 100건일지 모르기 때문에

Dao에서 List으로 받을 건지 Map으로 받을건지 결정하는 것이고요.

selectList 또는 selectOne

단, Dao에서 selectOne으로 해 놓고선 결과값이 2건 이상 나올 경우

Mybatis에서 에러를 낸다라는거~

728x90
반응형

'Web Programming > database' 카테고리의 다른 글

ORA-ROWSCN  (0) 2018.09.13
오라클 GRANT SYNONYM 권한주기  (0) 2018.09.06
mybatis if else choose  (0) 2018.08.30
ACID란?  (0) 2018.08.29
queryForObject 와 queryForList  (0) 2014.04.15
728x90
반응형

복잡한 형태의 쿼리를 만들다 보면 로직에따라 if문을 추가해야 한다던지
if else 문을 추가해야할 경우가 있다. 

myBatis는 이를위해 동적 쿼리를 위한 기능을 제공한다.
그중에서도 가장 많이 사용되는 if 문과 choose문을 살펴보자.

동적쿼리는 XML 매퍼에 지정하게 되는데, JSTL을 사용해봤던 사람들이라면 큰 어려움이 없는 문법이다.


1. IF문
단일 IF 문 이라고 보면 된다. 다음은 age라는 속성의 값이 null이나 빈값이 아닐때 검색조건에 추가하는 구문이다.



    <select id="getContentsP" parameterType="hashmap" resultType="com.test.vo.TestVo">
    
        SELECT
            id, name
        FROM
            TB_test a
        WHERE

            type = 'A' 
            
            <if test="age != null AND age != ''">
                AND age = #{age}
            </if>
            
    </select>





2. Choose문
우리가 흔히 개발할때 사용하는 if else와 같다고 보면 된다


 

    <select id="getContentsP" parameterType="hashmap" resultType="com.test.vo.TestVo">
    
        SELECT
            id, name
        FROM
            TB_test a
        WHERE

            type = 'A'
            
            <choose>
                
                <when test="age > 20 ">
                    AND age > #{age}
                </when>
                
                <when test="age < 20 ">
                    AND age < #{age}
                </when>
                
                <otherwise>
                    AND age is not null
                </otherwise>
                
            </choose>
            
            
            
    </select>




출처: http://fruitdev.tistory.com/34 [과일가게 개발자]

728x90
반응형

'Web Programming > database' 카테고리의 다른 글

ORA-ROWSCN  (0) 2018.09.13
오라클 GRANT SYNONYM 권한주기  (0) 2018.09.06
org.apache.ibatis.exceptions.PersistenceException  (0) 2018.09.04
ACID란?  (0) 2018.08.29
queryForObject 와 queryForList  (0) 2014.04.15
728x90
반응형

ACID란?




데이터베이스 영역에서 ACID란 Atomicity(원자성), Consistency(일관성), Isolation(고립성) 그리고 Durabiliy(지속성)의 약어로 데이터베이스 트랜젝션의 가장 중요한 특성들을 나타내는 말로 데이터베이스 시스템에서 기본적으로 제공해야할 가장 중요한 특성들입니다.
각각의 특성들에 대한 설명은 아래와 같습니다. 
  • Atomicity (원자성): 하나의 데이터베이스 트랜젝션에 여러 개의 데이터를 변환 (수정/삭제/입력 등과 같은)하는 도중에 문제가 발생했을 때 문제가 발생한 시점과 상관없이 그 트랜젝션에 포함된 모든 데이터의 변환이 이루어지지 않도록 보장하는 것이 원자성의 중요한 특징입니다. 쉽게 이야기하면 데이터를 변환할 때 문제가 발생하면 트랜젝션에 포함된 내용의 어떠한 데이터의 변환이 이루어지지 않으며 많약 아무 문제가 없을 때는 트랜젝션에 포함된 내용의 모든 데이터의 변환이 이루어 지는 것을 의미합니다. (All or nothing)
  • Consistency (일관성): 일관성은 어떠한 트랜젝션 전후에도 데이터베이스가 valid 상태를 유지함을 보장하는 특성으로 쉽게 이야기해서 트랜젝션 동안 데이트베이스에서 지정된 Rule에 부합된 데이터들만 데이터베이스에 유지가 되어서 트렌젝션이 끝난 후에도 데이터베이스가 사용가능한 상태를 유지할 수 있도록 보장하는 특성입니다.
  • Isolation (독립성): 독립성이란 만약 한 데이터베이스 시스템에 여러 개의 트랜젝션이 발생했을 때 각각의 트랜젝션이 서로 독립적으로 (또는 서로 영향을 끼치지 않게) 데이터를 변환할 수 있게 보장하는 특성을 이야기합니다. 만약 독립성이 지원 않는 데이터베이스에서 동시에 두 개의 트랜잭션에서 같은 데이터를 변환한다면 그 값이 어떻게 변환될 지 (어떤 트랜젝션이 먼저 실행되는지에 따라) 예측 불가능하기 때문에 많은 문제들을 발생 시킬 수 있습니다.
  • Durability (지속성): 한 번 데이터베이스에 저장된 데이터는 그 데이터의 변환에 대한 다른 트랜젝션 요청이 없을 때까지 항상 같은 값을 유지함을 보장하는 특성을 데이터베이스에서의 지속성이라고하며 갑작스럽게 전원이 꺼졌을 때나 시스템 오류 같은 문제가 발생했을 때 자동으로 데이터베이스에 저장된 데이터의 복구도 이 특성에 포함됩니다.

References
  • https://en.wikipedia.org/wiki/ACID
  • http://terms.naver.com/entry.nhn?docId=860356&cid=42346&categoryId=42346
  • http://www.service-architecture.com/articles/database/acid_properties.html
  • http://searchsqlserver.techtarget.com/definition/ACID
  • https://vladmihalcea.com/2014/01/05/a-beginners-guide-to-acid-and-database-transactions/


728x90
반응형

'Web Programming > database' 카테고리의 다른 글

ORA-ROWSCN  (0) 2018.09.13
오라클 GRANT SYNONYM 권한주기  (0) 2018.09.06
org.apache.ibatis.exceptions.PersistenceException  (0) 2018.09.04
mybatis if else choose  (0) 2018.08.30
queryForObject 와 queryForList  (0) 2014.04.15

+ Recent posts