출처 :  https://kr.forums.oracle.com/forums/thread.jspa?threadID=472033&tstart=180




PURPOSE

db user별로 데이타베이스에 연결되는 session의 수를 제한할 필요가 있는 경우가 있다.
이렇게 db user별로 접속되는 session의 수를 제한하는 방법을 살펴본다.



Explanation & Example

여기에서는 test_user라는 db user가 항상 하나의 session만 연결 가능하도록 하는 방법을 살펴본다.
특정 사용자가 session을 연결하여 사용하는 경우, 다른 사용자는 같은 test_user로는 데이타베이스로
연결을 금지하고자 하는 경우이다.

여기에서는 session의 수를 1로 제한했지만, 이 숫자는 상황에 따라 원하는 대로 지정할 수 있고,
db user명이나 profile의 이름도 상황에 맞게 사용하면 된다.


1. resource_limit 지정

먼저 다음과 같은 parameter를 $ORACLE_HOME/dbs/initSID.ora file에 지정하고,
데이타베이스를 restartup 한다.

resource_limit = true

9i에서 spfile을 사용중이라면 다음과 같이 지정하고, db를 restart 할 필요가 없다.

alter system set resource_limit=true scope=both;


2. 다음과 같이 user당 session 수를 제한하는 profile을 생성한다.

sqlplus system/manager
SQL>create profile single_pro limit sessions_per_user 1;

profile에는 idle_time등 다른 항목도 많지만, 여기에서는 나머지는 모두
default로 두고 sessions_per_user만 제한한다.


3. 새로 생성하는 user 라면 다음과 같이 생성당시에 profile 을 지정하면 된다.

SQL>create user test_user identified by test profile single_pro;
SQL>grant connect, resource to test_user;

이미 생성된 user라면 다음과 같이 alter user명령어를 이용한다.

SQL>alter user test_user profile single_pro;


4. test_user 로 접속하면 다음과 같이 처음 접속은 성공하나, 처음 session 이 끊기지 않은
상태에서 두번째 접속을 시도하는 경우 다음과 같은 오류가 발생한다.

Session 1: connect test_user/test -> Connected
Session 2: Connect test_user/test ->
ORA-02391: exceeded simultaneous SESSIONS_PER_USER limit



Reference Documents

<Note:209702.1>


+ Recent posts