#84. 오라클 시퀀스(Oracle Sequence)
시퀀스(Sequence)
다중 사용자 환경에서 사용하는 숫자 자동 생성기.
PK, UK 칼럼의 값을 유일하게 자동으로 생성하는 경우에도 사용된다.
트랜잭션 내에서 시퀀스가 생성되어 사용되다가 롤백 되는 경우에 다음 시퀀스 번호는 SKIP 될 수 있다.
테이블 또는 칼럼과는 독립적으로 생성, 삭제된다.
CURRVAL : 시퀀스의 현재 값을 리턴
NEXTVAL : 시퀀스를 증가시키고 next value를 리턴한다.
[형식]
CREATE SEQUENC sequence_name
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}]
INCREMENT BY n : 생성되는 Sequence번호의 간격을 정수 n으로 정의. 옵션이 생략되면 시퀀스는 1씩 증가한다.
START WITH n : 첫 번째 Sequence 번호를 정의, 옵션이 생략되면 시퀀스는 1부터 시작한다.
MAXVALUE n : Sequence의 최대값을 정의. NOMAXVALUE가 default이며 최대값은 10의 27승이다.
MINVALUE n : 생성 가능한 Sequence의 최소값을 정의, 디폴트가 NOMINVALUE이며 최소값은 1이다.
CACHE n : 서버가 메모리 캐시에 미리 생성해 놓는 시퀀스 개수. 기본갓은 20이다. 캐시하지 않으려면 NOCACHE 옵션을 사용한다.
[시퀀스를 사용할 수 없는 예]
SQL> CREATE TABLE seq_tab ( a NUMBER DEFAULT s1.NEXTVAL);
(* Error 발생)
SQL> SELECT DISTINCT s1.NEXTVAL FROM dual;
(* Error 발생)
SQL> SELECT SUM(salary) FROM s_emp GROUP BY s1.NEXTVAL;
(* Error 발생)
SQL> create sequence seq_e1;
시퀀스가 생성되었습니다.
SQL> select seq_e1.currval from dual;
select seq_e1.currval from dual
*
1행에 오류:
ORA-08002: 시퀀스 SEQ_E1.CURRVAL은 이 세션에서는 정의 되어 있지 않습니다
-- 최초 한번은 NEXTVAL해야 CURRVAL 값을 조회 가능하다.
SQL> create table test4 (n number);
테이블이 생성되었습니다.
SQL> insert into test4 values (seq_e1.nextval);
1 개의 행이 만들어졌습니다.
SQL> insert into test4 values (seq_e1.nextval);
1 개의 행이 만들어졌습니다.
SQL> insert into test4 values (seq_e1.nextval);
1 개의 행이 만들어졌습니다.
SQL> select * from test4;
N
----------
1
2
3
SQL> drop sequence seq_e1;
시퀀스가 삭제되었습니다.
2015년 1월 22일 목요일
[PLSQL 반복문, LOOP, FOR, WHILE 예제]임의의 수입력받아 그수까지의 합을 구하는 예제
[PLSQL 반복문, LOOP, FOR, WHILE 예제]임의의 수입력받아 그수까지의 합을 구하는 예제
Accept를 이용하여 숫자를 입력받고 1부터 그 수까지의 합을 구하세요
- basic loop문
- for loop문
- while loop문
--------------------------------------------------------------------------------------------------
1. BASIC LOOP 이용
SQL>edit a
set serveroutput on
accept p_num prompt 'Enter a number : '
create or replace procedure sum1
is
v_sum number := 0;
i number := 0;
begin
loop
i := i + 1;
v_sum := v_sum + i;
exit when i >= &p_num ;
end loop;
dbms_output.put_line(&p_num || '까지 합은 ' || v_sum);
end;
/
SQL>@a
Enter a number : 10
구 10: exit when i >= &p_num ;
신 10: exit when i >= 10 ;
구 12: dbms_output.put_line(&p_num || '까지 합은 ' || v_sum);
신 12: dbms_output.put_line(10 || '까지 합은 ' || v_sum);
프로시저가 생성되었습니다.
SQL> exec sum1;
10까지 합은 55
PL/SQL 처리가 정상적으로 완료되었습니다.
2. FOR LOOP 이용
SQL>edit a1
set serveroutput on
accept p_num prompt 'Enter a number : '
create or replace procedure sum2
is
v_sum number := 0;
begin
for i in 1..&p_num loop
v_sum := v_sum + i;
end loop;
dbms_output.put_line(&p_num || '까지 합은 ' || v_sum);
end;
/
SQL> @a1
Enter a number : 10
구 6: for i in 1..&p_num loop
신 6: for i in 1..10 loop
구 9: dbms_output.put_line(&p_num || '까지 합은 ' || v_sum);
신 9: dbms_output.put_line(10 || '까지 합은 ' || v_sum);
프로시저가 생성되었습니다.
SQL> exec sum2;
10까지 합은 55
PL/SQL 처리가 정상적으로 완료되었습니다.
3. WHILE LOOP 이용
SQL>edit a2
set serveroutput on
accept p_num prompt 'Enter a number : '
create or replace procedure sum3
is
i number := 0;
v_sum number := 0;
begin
while (i < &p_num) loop
i := i + 1;
v_sum := v_sum + i;
end loop;
dbms_output.put_line(&p_num || '까지 합은 ' || v_sum);
end;
/
SQL>@a2
Enter a number : 10
구 6: while (i < &p_num) loop
신 6: while (i < 10) loop
구 10: dbms_output.put_line(&p_num || '까지 합은 ' || v_sum);
신 10: dbms_output.put_line(10 || '까지 합은 ' || v_sum);
프로시저가 생성되었습니다.
SQL> exec sum3
10까지 합은 55
PL/SQL 처리가 정상적으로 완료되었습니다.
Accept를 이용하여 숫자를 입력받고 1부터 그 수까지의 합을 구하세요
- basic loop문
- for loop문
- while loop문
--------------------------------------------------------------------------------------------------
1. BASIC LOOP 이용
SQL>edit a
set serveroutput on
accept p_num prompt 'Enter a number : '
create or replace procedure sum1
is
v_sum number := 0;
i number := 0;
begin
loop
i := i + 1;
v_sum := v_sum + i;
exit when i >= &p_num ;
end loop;
dbms_output.put_line(&p_num || '까지 합은 ' || v_sum);
end;
/
SQL>@a
Enter a number : 10
구 10: exit when i >= &p_num ;
신 10: exit when i >= 10 ;
구 12: dbms_output.put_line(&p_num || '까지 합은 ' || v_sum);
신 12: dbms_output.put_line(10 || '까지 합은 ' || v_sum);
프로시저가 생성되었습니다.
SQL> exec sum1;
10까지 합은 55
PL/SQL 처리가 정상적으로 완료되었습니다.
2. FOR LOOP 이용
SQL>edit a1
set serveroutput on
accept p_num prompt 'Enter a number : '
create or replace procedure sum2
is
v_sum number := 0;
begin
for i in 1..&p_num loop
v_sum := v_sum + i;
end loop;
dbms_output.put_line(&p_num || '까지 합은 ' || v_sum);
end;
/
SQL> @a1
Enter a number : 10
구 6: for i in 1..&p_num loop
신 6: for i in 1..10 loop
구 9: dbms_output.put_line(&p_num || '까지 합은 ' || v_sum);
신 9: dbms_output.put_line(10 || '까지 합은 ' || v_sum);
프로시저가 생성되었습니다.
SQL> exec sum2;
10까지 합은 55
PL/SQL 처리가 정상적으로 완료되었습니다.
3. WHILE LOOP 이용
SQL>edit a2
set serveroutput on
accept p_num prompt 'Enter a number : '
create or replace procedure sum3
is
i number := 0;
v_sum number := 0;
begin
while (i < &p_num) loop
i := i + 1;
v_sum := v_sum + i;
end loop;
dbms_output.put_line(&p_num || '까지 합은 ' || v_sum);
end;
/
SQL>@a2
Enter a number : 10
구 6: while (i < &p_num) loop
신 6: while (i < 10) loop
구 10: dbms_output.put_line(&p_num || '까지 합은 ' || v_sum);
신 10: dbms_output.put_line(10 || '까지 합은 ' || v_sum);
프로시저가 생성되었습니다.
SQL> exec sum3
10까지 합은 55
PL/SQL 처리가 정상적으로 완료되었습니다.
2013년 8월 8일 목요일
(오라클자바커뮤니티jquery 강좌)jQuery를 통한 키보드 이벤트, keydown, keyup, keypress , ORACLEJAVA CONNUNITY
jQuery를 통한 키보드 이벤트
오라클자바커뮤니티에서 설립한 오엔제이프로그래밍
실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)
keydown : 키 눌러질때, keypress:글자가입력될때
keyup : 키보드가 떨어질 때
<script type="text/javascript">
$(document).ready(function() {
//keydown 이벤트가발생한순간에는글자가입력되어있지않음
//입력한글자수를표시해야하므로keyup 이벤트사용
$("textarea").keyup(function () {
//남은 글자수 구합니다.
var inputLength = $(this).val().length;
var remain = 50 ? inputLength;
//남은 글자수 display
$("h1").html(remain);
//문서객체 색상 변경
if (remain >= 0) {
$("h1").css("color","Blue");
} else {
$("h1").css("color","red")
}
});
});
</script>
<body><div>
<p>지금 내 생각을</p>
<h1>50</h1>
<textarea cols="40" rows="5"></textarea>
</div>
</body>

2013년 8월 5일 월요일
Struts Action 클래스
Struts Action 클래스
오라클자바커뮤니티에서 설립한 오엔제이프로그래밍
실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)
www.onjprogramming.co.kr org.apache.struts.action.Action 클래스는 컨트롤러 컴포넌트의 연장으로 보시면 되며 클라이언트의 요청과 비즈니스 로직을 연결해 주는 역할을 합니다. Action 클래스에서는 비지니스 로직을 처리하기 전의 인증이나 세션 검증 등의 작업을 수행 합니다.
Action에 대해서는 Model이냐 Controller이냐를 고민 하는 경우가 있는데 아마도 Controller 영역으로 보시는 것이 맞을 것 같습니다, 그 이유 중 하나는 Model 영역은 컨트롤러 영역을 알면 안되지만 Action 클래스는 ActionServlet에 접근 하므로 컨트롤러의 모든 자원에 접근이 가능 하기 때문에 이를 Controller 쪽으로 보는 것 입니다.
만약 Action 클래스 내에 비즈니스 로직을 넣어 둔다면 스트럿츠 프레임워크를 다른 프레임워크로 바꾸는 경우가 발생 한다면 다른 클래스로 대체해야 할지도 모릅니다. 결국 비즈니스 로직을 Action 클래스 안에 두는 것은 다른 타입의 클라이언트에서 재사용하지 못하는 결과를 초래 할 수도 있습니다.
Action 클래스는 여러 메소드를 포함하지만 가장 중요한 메소드는 execute() 입니다.
원형을 살펴보면 다음과 같습니다.
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HtpServletRequest request,
HttpServletResponse response) throws Exception;
클라이언트의 요청을 받으면 execute() 메소드가 호출 됩니다.Controller는 Action 클래스의 인스턴스가 존재하지 않으면 생성하며 있으면 재활용 합니다. 스트럿츠에서는 각 Action 클래스에 대해 하나의 인스턴스만 생성하여 자원을 공유 합니다.
Action 클래스의 execute() 메소드의 기본적인 구현은 null을 return 하므로 새로운 Action 클래스를 작성하여 execute() 메소드를 오버라이드 해야 합니다.
스트럿츠에서 폼액션을 처리하기 위해 여러 개의 Action 클래스를 만들 수 있는데 각 클래스가 org.apache.struts.action.Action 클래스를 상속 받은 후 execute() 메소드를 오버라이드 한다는 이야기 입니다.
그런데 다음처럼 모든 Action 클래스들이 상속 받아서 구현할 추상 클래스를 만들어 둘 수 있는데 … Action클래스들의 공통 기능이 있는 경우 이를 추상클래스에서 처리하고 나머지는 이 추상클래스에서 상속 받은 하위 클래스에서 정의하도록 추상 클래스를 만들어 둘 수 있습니다.
앞의 로그인 예제를 생각 한다면 LoginAction과 LogoffAction이 공통적으로 하는 일은 세션을 확인 하는 일인데 이러한 부분을 추상클래스를 두어 처리가 가능 하다는 이야기 입니다.
Action 클래스를 만들 때 주의할 부분은 execute() 메소드 안에 try/catch 블록이 없다는 것입니다. 아래를 참고 하세요…
<global-exceptions>
<exception
key=”global.error.invalidlogin”
path=”/login.jsp”
scope=”request”
type=”login2.exception.InvalidLoginException”
</global-exceptions>
위와 같이 설정을 해 둔다면 프레임워크에서 어떤 동작으로 인해 InvalidLoginExceptiondl 발생 했을 경우 요청을 login.jsp로 포워드하고 global.error.invalidLogin 이라는 key를 통해 에러 메시지를 구축 하도록 설정을 하는 것 입니다.
Controller가 어떤 요청을 받았을 때 어떤 Action 클래스의 인스턴스를 수행 할지를 어떻게 알 것인가? …… 컨트롤러는 Action 매핑을 조사 함으로서 Action 인스턴스를 결정 하는데 웹 애플리케이션이 시작 될 때 web.xml 파일에 있는 스트럿츠 설정 부분에 struts-config.xml 파일의 위치를 설정 합니다. 이 정보를 바탕으로 이 내용을 메모리에 올려 객체화 해서 웹 애플리케이션에서 보관을 하고 있는데 이 정보 중 Action 매핑 정보를 참고 한다고 생각 하시면 됩니다. (물론 스트럿츠 설정 파일의 이름이 struts-config.xml 일 필요는 없습니다.)
struts-config.xml 파일에 있는 Action과 관련된 매핑 정보는 org.apache.struts.action.ActionMapping 클래스의 인스턴스로 표현 되는데 ActionMapping 객체는 URI와 매칭되는 path 속성을 포함하고 있습니다.
아래는 struts-config.xml 파일에서의 Action 매핑 예 입니다.(로그인 예제의 경우)
<!-- valiedate를 true라고 함으로써 LoginForm의 validate가 호출 됩니다. -->
<action-mappings>
<!-- loginAction에 대한 정의 -->
<action
path="/LoginSubmit"
type="login2.LoginAction"
name="loginForm"
validate="true"
input="/login.jsp"
/>
<!-- logoffAction에 대한 정의 -->
<action
path="/logoff"
type="login2.LogoffAction"
name="logoffForm"
validate="false"
/>
</action-mappings>
로그인과 관련된 액션 매핑을 보면 /LoginSubmit 패스와 login2.LoginAction를 매핑 하고 있는 것을 알 수 있습니다. Controller가 “/LoginSubmit” 문자열이 포함된 요청을 받으면 LoginAction 인스턴스의 execute() 메소드를 실행 하게 되는 것 입니다. 물론 스트럿츠에서는 매핑 정보를 Action 인스턴스의 execute()가 종료 한 후 포워드 할 곳을 인식하는데도 사용 합니다.
2013년 8월 4일 일요일
oracle pga(Oracle Program Global Area)
PGA(프로그램 글로벌영역,프로세스 글로벌영역)
- 단일 프로세스(서버,백그라운드)에 대한 데이터와 제저정보를 저장하는 메모리 영역
- 사용자 프로세스가 접속되고 세션이 형성되면 Oracle이 PGA를 할당한다.
- 각 서버프로세스에 하나의 PGA가 할당되며,PGA는 서버프로세스에 대해 배타적이며
항상 프로세스에 대해 실행되는 Oracle Code만을 읽거나 쓸수있슴
- PGA의 크기는 운영체제마다 정적이며, OPEN_LINKS,DB_FILES,LOG_FILES등의
Parameter는 PGA의 크기에 영향을 준다. 사용자가 일단 접속되면 사용자는 PGA영
역을 초과하여 실행할수 없슴.
1. 스택영역
- PGA는 세션변수,배열 및 다른 정보를 저장하기위해 할당된 메모리인 스택 영역을 포
함
2. 세션정보
- 다중스레드 서버없이 실행되는 인스턴스의 PGA는 전용SQL영역이나 다른 정보와 같
은 사용자 세션에 대한 추가 메모리가 필요하고 인스턴스가 다중스레드 서버를 실행하
는 경우 이추가 메모리는 PGA에 있지 않고 SGA내에 할당된다.
3. 공유SQL영역
- 다중스레드 서버와 함께 수행되는지의 여부에 관계없이 공유 SQL영역은 항상 PGA가
아닌 SGA의 공유 메모리에 존재합니다.
[출처]오라클자바커뮤니티, 오엔제이프로그래밍
www.onjprogramming.co.kr
- 단일 프로세스(서버,백그라운드)에 대한 데이터와 제저정보를 저장하는 메모리 영역
- 사용자 프로세스가 접속되고 세션이 형성되면 Oracle이 PGA를 할당한다.
- 각 서버프로세스에 하나의 PGA가 할당되며,PGA는 서버프로세스에 대해 배타적이며
항상 프로세스에 대해 실행되는 Oracle Code만을 읽거나 쓸수있슴
- PGA의 크기는 운영체제마다 정적이며, OPEN_LINKS,DB_FILES,LOG_FILES등의
Parameter는 PGA의 크기에 영향을 준다. 사용자가 일단 접속되면 사용자는 PGA영
역을 초과하여 실행할수 없슴.
1. 스택영역
- PGA는 세션변수,배열 및 다른 정보를 저장하기위해 할당된 메모리인 스택 영역을 포
함
2. 세션정보
- 다중스레드 서버없이 실행되는 인스턴스의 PGA는 전용SQL영역이나 다른 정보와 같
은 사용자 세션에 대한 추가 메모리가 필요하고 인스턴스가 다중스레드 서버를 실행하
는 경우 이추가 메모리는 PGA에 있지 않고 SGA내에 할당된다.
3. 공유SQL영역
- 다중스레드 서버와 함께 수행되는지의 여부에 관계없이 공유 SQL영역은 항상 PGA가
아닌 SGA의 공유 메모리에 존재합니다.
[출처]오라클자바커뮤니티, 오엔제이프로그래밍
www.onjprogramming.co.kr
2013년 7월 28일 일요일
[오엔제이프로그래밍,오라클,SQL,튜닝 실무교육,오라클마스터과정]오라클 프로세스(Oracle Process)란
Oracle 프로세스 구조는 다중 작업이 발생하는 방법과 다중 작업이 수행되는 방식을 정의 하므로 매우 중요합니다.
오라클자바커뮤니티에서 설립한
오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝,
힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)
A.단일 프로세스 Oracle Instance :단일 사용자 Oracle은 하나의 프로세스가 모든 Oracle Code를
실행하는 시스템입니다. Oracle의 일부분과 Client응용프로그램을 분리하여 실행하는데 다른
프로세스를
사용하지 않습니다.대신 Oracle의 모든 코드와 단일사용자의 데이터베이스 응용 프로그램은 단일
프로세스에 의해 실행됩니다.
B.다중 프로세스 Oracle Instance : 다중사용자 Oracle은 여러 개의 프로세스가 Oracle의 각기
다른 부분을 실행하고 접속한 각사용자들은 개별 프로세스를 실행합니다.
C.다중 사용자 환경에서의 Oracle 프로세스
1. 데이터베이스 기록자(DBWR)
- DataBase Buffer의 내용을 데이터 파일에 기록하는 역할을 하며 DataBase Buffer Cache를
관리하는 Oracle BackGround 프로세스임
- DataBase Buffer Cache에 있는 내용이 수정되면 해당 버퍼는 'Dirty'로 표시되는데 이
Dirty Buffer를 Disk에 기록하여 Buffer Cache를 깨끗한 상태로 유지하는 역할을 함
- LRU 알고리즘에 의해 최근에 사용된 데이터블록을 메모리에 유지합니다.
- Buffer Cache는 Multi Latch를 자지는데 래치는 공유 데이터구조를 보호하는 자동내부
잠금입니다. DB_BLOCK_LRU_LATCHES라는 Parameter는 시스템에 구성되는 래치수
와 기본적으로 CPU에 설정되는 Latch 수를 제어합니다.
- 서버프로세스가 Buffer를 Dirty목록으로 이동시킨후 Dirty목록이 임계길이에 도달했음을
발견하면 Server 프로세스는 DBWR에 신호를 보냅니다.
- 체크포인트가 발생하면 LGWR(로그기록자)는 DBWR에 신호를 보냅니다. 즉 Check Point가
발생하면 LGWR는 디스크에 기록되어야 하는 수정된 Buffer 목록을
지정합니다. DBWR는 디스크에 지정된 Buffer의 내용을 기록합니다.
2. 로그기록자(LGWR)
- Redo Log Buffer를 디스크에 있는 Redo Log File에 등록합니다.
- 사용자 프로세스가 Transaction을 Commit할때의 Commit Record및 매3초 마다의 Redo Log
buffer, DBWR가 수정된 버퍼를 디스크에 기록할때의 Redo Buffer의 내용등을 기록합니다.
- 사용자가 Commit명령을 발생시키면 LGWR는 Commit Record를 즉시 Redo Log Buffer에 넣지만
해당 데이터 버퍼의 변경은 변경사항을 데이터 파일에 기록하는 것이
더 효율적일때까지 지연됩니다.
3 체크포인트(CKPT)
- Check Point가 발생하면 Oracle은 모든 DataFile의 Header를 갱신하여 체크포인트임을
나타내야 합니다. 보통 LGWR가 이러한 작업을 수행하지만 체크포인트가 시스템 Performance를
저하 시킨다면 CKPT를 활성화하여 체크포인트 수행작업을 LGWR가 수행하는 다른 작업과 분리할
수 있습니다.
- 체크포인트가 모든 응용프로그램에 꼭 필요한 것은 아니며 DataFile의 수가 많아 Check
Point중에 LGWR프로세스 성능이 저하되면 CKPT프로세스를 활성화 할수있다.
- 초기화 Parameter CHECK_POINT_PROCESS는 CKPT프로세스를 활성화 하거나 비활성화 합니다.
4. 시스템모니터(SMON)
- 인스턴스 시작시에 인스턴스의 복구를 수행, 더 이상 사용하지 않는 임시 Segment를 삭제하며
사용 가능한 빈영역을 더 큰 블록으로 만들기위해 인법한 빈 확장영역을 하나로 통합합니다.
5. 프로세스모니터(PMON)
- 사용자 프로세스에 장애가 발생하면 프로세스 복구를 수행,Cache를 비우고 해당 프로세스가
사용한 자원을 해제하며,활성 Transaction의 Table상태를 재설정하고 Lock을 해제하며 Active
Process목록에서 ID를 제거한다.
- 주기적으로 Dispatch와 서버 프로세스의 상태를 점검하고 활동중이 아니면 재시작합니다.
6. 복구자(RECO)
- 분산 Transaction을 포함한 장애를 자동으로 해결하는 분산 Option과 함께 사용되는 프로세스,
시스템이 분산 트랜잭션을 허용하고 DISTRIBUTED_TRANSACTIONS가 0보다 클때만 존재합니다.
7. 아카이브(ARCH)
- Online Redo Log File이 꽉차면 이를 지정된 저장장소에 저장,Redo Log가 Archive Mode에서
운영되고 자동 Archiving기능이 활성화 되어 있을 때만 존재합니다.
8. 잠금(LcKn)
- 병렬서버 옵션에서 최대 10개 까지의 잠금Process(LCK0~LCK10)가 인스텀스의 Lock을 제공합니다.
그러나 대부분의 병렬서버 시스템에서는 하나의 LCK프로세스(LCK0)만
으로도 충분합니다.
9. 스냅샷갱신(SNPn)
- 분산 옵션에서 최대 10갸 까지의 스냅샷갱신프로세스(SNP0~SNP10)가 자동으로 Table SnapShot을
화면에 다시 표시합니다.
10. 디스패쳐(Dnnn)
- 디스패쳐 프로세스를 사용하면 사용자 프로세스는 제한된 수의 서버 프로세스를 공유할 수
있습니다. 디스패쳐가 없다면 각 사용자 프로세스는 하나의 전용(Dedicated)서
버 프로세스를 필요로 합니다. 그러나 Multi Thread Server에서는 동일한 수의 사용자에
대해 더 적은 수의 공유서버 프로세스를 필요로 합니다.
- 단일 DataBase Instance에 대해 다중 Dispatcher 프로세스를 생성할 수 있습니다. Oracle을
사용하는 시스템의 Network Protocol에 대해 적어도 하나의 디스페처가 생성되어야 합니다. DBA는
프로세스당 접속수에 대한 OS의 한계에 따라 가장 적합한수의 디스패처를 시작해야 하며
인스턴스가 실행되는 동안 디스패처 프로세스를 추가또는 삭제할수 있다.
- 인스턴스가 시작되면 Listener는 사용자를 Oracle과 접속시키는 통신경로를 설정하며,
각 디스패처는 리스너에 접속 요구사항을 수신할 수 있는 주소를 부여합니다.
사용자 프로세스가 접속을 요구하면 리스너는 요구사항을 점검하고 사용자가 디스패처를 사용할 수
있을지에 대해 결정합니다. 사용할 수 있을 경우 리스너는 로드할 양이 가장적은 디스패처 주소를
돌려주며 사용자 프로세스는 디스패처에 직접 접속됩니다.
라벨:
오라클실무교육,
오라클자바,
오라클SQL,
자바오라클,
자바SQL,
JAVAORACLE,
Oracle교육,
Oracle학원,
ORACLEJAVA,
PLSQL
피드 구독하기:
글 (Atom)