2021년 12월 12일 일요일

오라클서버구조, Shared Server vs Dedicated Server, 오라클 19C PGA, 오라클 커서(Oracle Cursor), 오라클학원/자바학원/ORACLE학원

 http://ojc.asia/bbs/board.php?bo_table=LecOracle&wr_id=301 


오라클서버구조, Shared Server vs Dedicated Server, 오라클 19C PGA, 오라클 커서(Oracle Cursor)

오라클서버구조, Shared Server vs Dedicated Server, 오라클 19C PGA, 오라클 커서(Oracle Cursor)오라클 서버 구조Shared Server vs Dedicated Server오라클 19C PGA오라클 커서(Oracle Cursor)Dedicated Server 방식오라클에서 서

ojc.asia

오라클서버구조, Shared Server vs Dedicated Server, 오라클 19C PGA, 오라클 커서(Oracle Cursor), 오라클학원/자바학원/ORACLE학원

 

Shared Server vs Dedicated Server

오라클 19C PGA

오라클 커서(Oracle Cursor)



https://youtu.be/oR_UKxk_HO4


https://www.youtube.com/watch?v=b-IxbRmwpGE&list=PLxU-iZCqT52DFRbLFQIgGUFp-5En2DYRG&index=29 

Dedicated Server 방식

 

오라클에서 서버 프로세스는 클라이언트의 요청을 받아 SQL문들을 처리하는 프로세스인데, 하나의 서버 프로세스가 하나의 클라이언트 프로세스에 대응되는 구조를 가지는 형태를 Dedicated Server 방식이라 합니다.

 

사용자가 연결을 요청했을 때 서버프로세스를 생성시켜 Connection을 만듦으로 사용자의 접속이 없으면 놀고 있는 서버 프로세스가 생길 수 있습니다. 명령처리가 빠르지만 자원의 낭비가 생길 수 있습니다.

 

DB에 별다른 설정을 하지 않으면 Dedicated Server 방식으로 설정된다.

 



 

Shared Server 방식

 

오라클 리스너를 사용하는 방식이며 N개의 서버 프로세스에 모든 클라이언트의 요청 처리를 할당하는 구조 입니다. 사용자 프로세스의 요청을 리스너가 받아 디스패처에 보내고 이를 SGA의 요청큐(Request Queue)에 넣어두면 오라클의 서버 프로세스가 순서대로 받아서 처리하는 구조 입니다.

 

Dedicated Server 방식과 달리 쉬고 있는 서버 프로세스가 줄어들어 리소스 낭비를 줄일 수 있습니다.

 

서버 프로세스가 작업을 끝내고 사용자 프로세스에 결과를 반환 할 때는 디스패처의 응답큐를 사용하여 보내게 됩니다.

 

 

 

서버방식은 두가지 방식을 병행해서 사용할 수 있는데 Shared Server 방식으로 설정되어 있더라도 빠른 응답이 필요한 특정 작업은 Dedicated Server 방식으로 설정이 가능합니다.

 

사용자의 서버 접속 방식은 다음 쿼리로 확인 할 수 있습니다.


 

SELECT SERVER
  ,SERVICE_NAME 
FROM V$SESSION 
WHERE USERNAME = 'SCOTT';


실행결과
DEDICATED SYS$USERS



 

PGA(Program Global Area)

 

PGA(Program Global Area)는 오라클 서버 프로세스가 시작될 때 생성되며 다른 세션(사용자)과 공유되지 않는 영역으로 “데이터베이스에 접속하는 사용자에 대응되는 오라클서버 프로세스가 사용하는 메모리 영역 입니다.” PGA에 대한 접근은 서버 프로세스에서만 가능하며 각 서버 프로세스에 하나의 PGA가 할당되어 있습니다.

 

사용된 PGA 메모리의 양과 PGA의 내용은 오라클 서버 인스턴스가 전용 서버 모드(Dedicated Server Mode)에서 실행 중인지 공유 서버 모드(Shared Server Mode)에서 실행 중인지에 따라 다릅니다.

오라클  서버에  접속하기 위해 클라이언트  프로그램(SQL*Developer, SQL*Plus)을 실행하게 되면 내부적으로 클라이언트의 사용자 프로세스가 생성되고 DB에 접속하는 순간 모든 정보를 오라클 서버 프로세스에게 전달합니다. 만약 클라이언트  프로그램에서 SQL을 실행 했다면 해당 SQL구문과 기타 정보를 서버 프로세스에게 전달하고 서버 프로세스에서 작업을 하고 결과를 리턴 합니다. 이때 서버 프로세스 마다 작업을 위한 메모리 공간을 확보하는데 이것이 PGA(Program Global Area) 입니다.

PGA는 SQL 작업 공간으로 메모리 힙에 생성되며 사용자가 접속한 세션에서 사용되는 변수, 데이터, SQL 등에서 정렬을 위한 작업공간으로 사용되며 이 공간이 부족하여 디스크에서 소트가 일어나면 SQL문은 느려지게 된다. 서버 프로세스에 할당되는 것이고 공유 메모리인 SGA에 생성되는 영역은 아닙니다.

 

그림 : 오라클19C PGA 구조 


 

Dedicated Server Mode인 경우 User Global Area영역을 직접 PGA 공간에 저장하며 Shared Server Mode인 경우 User Session Data를 SGA(System Global Area)의 UGA 영역에 저장 합니다. Shared Server Mode의 경우 사용자 프로세스의 주소 정보를 한 개의 서버 프로세스가 가질 수 없기 때문에 SGA가 공유하면서 가지고 있습니다.

 

전용서버인 경우 PGA의 구성

SQL Work Area : Order By, Group By등 정렬을 위한 공간으로 메모리 공간이 부족하면 디스크를 이용하게 됩니다. SQL문의 작업 공간으로 가장 많이 할당되어야 합니다.

 

Session Memory: 사용자 프로세스의 세션 정보로 서버 프로세스가 응답 결과를 전달할 때 필요한 영역 입니다.  SQL문 결과를 사용자 프로세스에게 전달하고자 할 때 사용자의 접속 세션 주소가 필요 합니다.

 

OLAP Pool : OLAP 데이터를 관리를 위해 필요한 공간으로 데이터 블록에 해당하는 페이지입니다.

 

Private SQL Area : 파싱된 SQL문의 정보 또는 SQL처리를 위한 세션 정보(데이터, 변수)등을 가지는데, Server Process가 SQL, PL/SQL코드를 실행할 때 바인드 변수, 쿼리 실행 상태에 관한 정보 등을 저장하거나 쿼리 실행의 작업 영역(Work Area)으로 사용된다.

우리가 흔히 말하는 커서는 Private SQL Area의 특정 영역에 대한 이름 또는 핸들입니다. 커서를 클라이언트 측에서는 포인터로, 서버 측에서는 상태로 생각하면 됩니다.

 

Stack Space : SQL문장에 사용된 바인드 변수등이 저장되는 영역 입니다. 세션 변수와 배열을 보유하기 위해 할당된 메모리입니다.

 

Hash Area : 테이블의 해시 조인을 수행하는 데 사용되는 영역 입니다.

 

Bitmap Merge Area : 여러 비트맵 인덱스의 스캔에서 검색된 데이터를 병합하는 데 사용됩니다.






 

                                                 

                                                    


 


 

커서(Cursor)

Oracle은 SQL 문을 처리하기 위한 모든 정보를 포함하는 컨텍스트 영역, 커서를 생성합니다.

 

커서는 SELECT 또는 DML(Insert/Update/Delete/Merge) 조작시 클라이언트 프로세스에서 참조하는 PGA 또는 SGA의 Library Cache내 전용 SQL 영역(Private SQL Area)을 가리키는 포인터 또는 핸들이다.  Private SQL Area의 특정 영역에 대한 이름 또는 핸들입니다. 커서를 클라이언트 측에서는 포인터로, 서버 측에서는 상태로 생각하면 됩니다.


 

Private SQL Area, Context Area에는, SQL문 처리를 위한 모든 정보(처리된 로우 카운트 등)들을 담고 있는 커서는 SQL 명령으로 리턴되는 하나 또는 그이상의 ROW를 포함하는데 이를 Active Set이라 하고 Active Set의 처음 로우를 기본적으로 가리키고 있다.

 

DML에서 커서 관리는 오라클 서버에서 알아서 하지만 오라클 PL/SQL에서는 SELECT 명령에 대해 커서를 조작하는 몇 가지 방법을 제공합니다.

 

SQL 커서는 오라클 서버 운영모드가 Dedicate Server 환경이면 PGA, Shared Server  환경이면 SGA의 Library Cache에 위치 합니다.

 

묵시적 커서는 오라클 서버의 모든 SQL에 대해 자동으로 만들어지는 커서를 말하고 

명시적 커서는 PL/SQL을 작성하는 개발자가 명시적으로 Declare절에 선언하여 사용하는 커서이며 다중행을 다룰 때 사용합니다. 

 

 

 

#오라클커서, #오라클PGA, #전용서버장식, #공유서버방식, #오라클서버, #오라클교육, #오라클학원, #오라클동영상, #ORACLE교육, #ORACLE학원, #ORACLE동영상, 오라클커서, 오라클PGA, 전용서버, 공유서버, 오라클서버, 오라클교육, 오라클학원, 오라클동영상, ORACLE교육, ORACLE학원, ORACLE동영상, ​ 


2021년 12월 11일 토요일

(자바교육/자바학원교육동영상/JAVA교육)JAVA에서 클래스패스란?(classpath), 부트스트랩 클래스로더, 확장클래스, 환경변수클래스정의, 자바메인,JVM,JAVAC,JDK

 



이미지 썸네일 삭제
(자바교육/자바동영상)JAVA에서 클래스패스란?(classpath), 부트스트랩 클래스로더, 확장클래스, 환경변수클래스정의

(자바교육/자바동영상)JAVA에서 클래스패스란?(classpath), 부트스트랩 클래스로더, 확장클래스, 환경변수클래스정의클래스패스는 클래스를 찾는 경로이다.클래스패스(classpath) 설정 방법classpath는 sdk tool(java, javac)등에서 –classpath option을 줘서 클래스를 찾을 경로를 지정할 수 있다.또는 OS에서 환경설…

ojc.asia





클래스패스는 클래스를 찾는 경로이다.

클래스패스(classpath) 설정 방법

classpath는 sdk tool(java, javac)등에서 –classpath option을 줘서 클래스를 찾을 경로를 지정할 수 있다.

또는 OS에서 환경설정을 함으로서 지정 가능하다. (set classpath=~ 형태 또는 내컴퓨터고급환경변수에서 classpath 지정)

현재 디렉토리에 있는 모든 사용자 클래스 파일들을 지칭할때는 .(dot)을 사용한다.

Java Launcher의 클래스 찾기(클래스 검색 방식)

우선 부트스트랩 클래스에서 기본 자바 플랫폼에 있는 API 클래스들을 찾아 메모리에 로딩하며 여기에서 찾지 못할 경우 확장 클래스에서 찾고 여기서도 찾지 못한다면 사용자가 정의한 클래스패스에서 클래스를 찾아 메모리에 로딩한다.(없다면 ClassNotFound 오류발생!)

Bootstrap classes(부트스트랩 클래스) 찾기

- 자바 플랫폼을 구성하는 클래스들이며 rt.jar(Object.class, String.class)에 포함되어 있는 클래스 이다.

- jar 압축 파일들은 bootstrap class path에 의해 sun.boot.class.path 시스템 프로퍼티에 저장된다.


Java Launcher의 클래스 찾기(클래스 검색 방식)

extension classes(확장 클래스) 찾기

- 자바 플랫폼을 확장한 클래스들 이다.

- jre/lib/ext 확장 디렉토리에서 모든 jar 파일들을 자바2 확장 클래스로 가정한다.

user classes(사용자 클래스) 찾기

- 사용자가 환경 변수에서 지정한 경로에서 클래스를 찾는다.

- -cp 또는 –classpath 명령행 옵션은 기본 환경 설정과 클래스 패스 환경변수 설정을 재정의 한다.


주의 : 환경변수에서 클래스패스(classpath)를 별도로 지정하지 않았다면 현재 디렉토리에 있는 클래스는 찾는다. 하지만 c:\classes등으로 지정했다면 기본적으로 현재 디렉토리에 참조할 클래스가 있어도 찾지 못한다. 별도로 클래스패스를 지정하는 경우에는 반드시 쩜(.)도 포함을 해야한다.



#자바, #클래스패스, #classpath, #클래스패스란, #부트스트랩클래스로더, #자바동영상, #자바동영상강의, #자바강의, #자바강좌, #JAVA, #JAVA동영상, #JAVA강의, #JAVA강좌, #자바교육, #JAVA교육, #자바인터프리터, #자바컴파일, #자바실행, #자바소스 , 자바, 클래스패스, classpath, 클래스패스란, 부트스트랩클래스로더, 자바동영상, 자바동영상강의, 자바강의, 자바강좌, JAVA, JAVA동영상, JAVA강의, JAVA강좌, 자바교육, JAVA교육, 자바인터프리터, 자바컴파일, 자바실행, 자바소스



(JAVA동영상교육)자바소스파일 구조 실행을 위한 main() 메소드 , 자바변수, 자바클래스패스, 자바JVM, JAVA학원, 자바학원, JAVA교육, 자바교육

 




(JAVA동영상강의)자바소스파일 구조 실행을 위한 main() 메소드

(JAVA동영상강의)자바소스파일 구조 실행을 위한 main() 메소드자바 소스 파일의 확장자는 .java이다.하나의 자바 파일 안에 여러 클래스가 있는 경우 접근 지정자가 public인 Top Level Class가 있다면 파일명은 그 클래스 이름으로 되어야 한다. 만약 public 클래스가 없다면 파일명은 어떤 class명으로도 관계없다.만약 public…

ojc.asia






자바 소스 파일의 확장자는 .java이다.

하나의 자바 파일 안에 여러 클래스가 있는 경우 접근 지정자가 public인 Top Level Class가 있다면 파일명은 그 클래스 이름으로 되어야 한다. 만약 public 클래스가 없다면 파일명은 어떤 class명으로도 관계없다.

만약 public 클래스가 있고 public이 아닌 다른 클래스가 main 메소드를 가지고 있다면 public 클래스를 파일명으로 하고 main 메소드를 가진 클래스를 호출해야 한다. 대체적으로 public 클래스가 main 메소드를 가진다.

자바파일에 package 구가 있다면, 해당 자바파일은 반드시 패키지명의 폴더에 존재해야 한다.

자바 소스 파일에서 나타나는 순서는 아래와 같다.


package 문

import 문

class 정의



package javatest;


import java.util.ArrayList;


class Emp {

String ename;

public String getEname() {

return ename;

}

public void setEname(String ename) {

this.ename = ename;

}

}

public class Hello {

public static void main(String[] args) {

Emp e = new Emp();

e.setEname("홍길동");

System.out.println(e.getEname());

ArrayList arrayList = new ArrayList();

}

}


•자바 인터프리터에 의해 독립적으로 실행


// HelloWorld.java


class HelloWorld

{

public static void main(String[] args)

{

System.out.println(“오라클자바커뮤니티”);

}

}


•컴파일

•javac HelloWorld.java à HelloWorld.class 파일 생성, 파일 확장자까지 기술해야 한다.

•실행

•java HelloWorld

•main 함수를 가진 주 클래스의 이름을 지정해야 한다. 파일 확장자는 생략해야 한다.


[main() 메소드]

public : 클래스 외부에 있는 JVM의 자바인터프리터가 main 메소드를 처음 시작해야 하므로 접근을 허용하기 위해 public으로 선언한다.

static : 객체 생성 없이 main을 실행 하기 위해, 프로그램 시작 시 먼저 메모리에 올라가게 해서 main 함수를 실행하기 위해서이다.

void : main 메소드는 return 값이 없다.

String[] args : main 메소드를 실행 시키면서 인자(매개변수)를 넣어줄 때 이용, 매개변수는 문자열 배열로 main 메소드에 전달된다.


위에서 개발자가 바꿀 수 있는 부분은 args 뿐이다.


#자바, #자바동영상, #자바동영상강의, #자바강의, #자바강좌, #JAVA, #JAVA동영상, #JAVA강의, #JAVA강좌, #자바교육, #JAVA교육, #자바인터프리터, #자바Interpreter, #자바컴파일, #자바실행, #자바main, #자바메인, #자바소스, 자바, 자바동영상, 자바동영상강의, 자바강의, 자바강좌, JAVA, JAVA동영상, JAVA강의, JAVA강좌, 자바교육, JAVA교육, 자바인터프리터, 자바Interpreter, 자바컴파일, 자바실행, 자바main, 자바메인, 자바소스



(JAVA동영상학원교육)자바프로그램 실행과정, 자바인터프리터, Java, javac, 자바메인, 클래스패스, 자바학원교육, JAVA학원교육

 

(JAVA동영상학원교육)자바프로그램 실행과정, 자바인터프리터, Java, javac, 자바메인, 클래스패스, 자바학원교육, JAVA학원교육


http://ojc.asia/bbs/board.php?bo_table=LecJava&wr_id=743 


(JAVA동영상강좌)자바프로그램 실행과정, 자바인터프리터, Java, javac 명령 실습 ,자바동영상강의

(JAVA동영상강좌)자바프로그램 실행과정, 자바인터프리터, Java, javac 명령 실습 ,자바동영상강의package javatest; public class Hello { public static void main(String[] args) { System.out.println('Hello World!'); } } 1.이클립

ojc.asia



https://www.youtube.com/watch?v=ZlrsnSlTdQs&list=PLxU-iZCqT52BVt5HycCd6CULukiARAl6S&index=3 

https://www.youtube.com/watch?v=7BU-bmW8r_E&list=PLxU-iZCqT52BVt5HycCd6CULukiARAl6S&index=1 

https://www.youtube.com/watch?v=ZkeRldv4VgQ&list=PLxU-iZCqT52BVt5HycCd6CULukiARAl6S&index=2 

https://www.youtube.com/watch?v=5CyNDCnruy4&list=PLxU-iZCqT52BVt5HycCd6CULukiARAl6S&index=5 



 



package javatest;


public class Hello {

   public static void main(String[] args) {

      System.out.println("Hello World!");

   }

}


1.이클립스에서 javatest 라는 java project 생성
2.javatest 패키지에 Hello.java 생성


Eclipse workspace : c:\dev\workspace

Project 경로 c:\dev\workspace\javatest


소스경로 c:\dev\workspace\javatest\src

클래스파일경로 c:\dev\workspace\javatest\bin




#자바, #자바동영상, #자바동영상강의, #자바강의, #자바강좌, #JAVA, #JAVA동영상, #JAVA강의, #JAVA강좌, #자바교육, #JAVA교육, #자바인터프리터, #자바Interpreter, #자바컴파일, #자바실행, 자바, 자바동영상, 자바동영상강의, 자바강의, 자바강좌, JAVA, JAVA동영상, JAVA강의, JAVA강좌, 자바교육, JAVA교육, 자바인터프리터, 자바Interpreter, 자바컴파일, 자바실행

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...