2015년 3월 11일 수요일

오라클의 개념_3

ㅇ ㅂㅇ

데이터 딕셔너리 및 동적 성능 뷰 사용


내장 데이터베이스 객체
 - 데이터베이스 파일 이외에도 여러 가지 다른 구조가 생성
  * 데이터 딕셔너리 : 데이터베이스의 객체에 대한 설명이 저장
  * 동적 성능 테이블 : 데이터베이스 및 인스턴스를 모니터하고 튜닝하기 위해 데이터베이스 관리자(DBA)가 사용하는 정보를 포함
  * PL/SQL 패키지 : 데이터베이스에 기능을 추가하는 프로그램 단위. 이러한 패키지는 CREATE DATABASE 명령을 실행한 후 catproc.sql 스크립트를 실행할 때 생성됨.
  * 데이터베이스 이벤트 트리거 : 트리거란 테이블이나 뷰를 수정할 때 마다 또는 일부 사용자 작업이나 데이터베이스 시스템 작업이 발생할 때 암시적으로 실행되는 프로시저.


데이터 딕셔너리
 - 오라클 데이터베이스에서 가장 중요한 부분의 하나인 데이터 딕셔너리연관된 데이버터베이스에 대한 정보를 제공하는 테이블 및 뷰의 읽기 전용 집합
 - DDL(Data Definition Language 데이터 정의어) 명령이 실행될 때마다 ORACLE 서버는 데이터 딕셔너리를 갱신하며 또 한 테이블을 확장시키는 명령과 같은 DML(Data Manipulation Language 데이터 조작어) 명령도 데이터 딕셔너리를 갱신 할 수 있음.
 - 데이터 딕셔너리는 모든 오라클 데이터베이스에서 핵심일 뿐만 아니라 일반  사용자에서 응용 프로그램 설계자나 데이터베이스 관리자에 이르기까지 모든 사용자에게 중요한 정보 소스임.
 - 데이터 딕셔너리를 액세스하려면 SQL문을 사용. 데이터베이스는 읽기 전용이므로 데이터 딕셔너리의 테이블 및 뷰에 대해서는 질의만 가능.


기본 테이블 및 데이터 딕셔너리 뷰
 - 데이터 딕셔너리에는 데이터베이스의 객체에 대한 설명이 저장되며 다음 두 가지 유형의 객체가 포함.
 기본 테이블
  - 기본 테이블은 연관된 데이터베이스에 대한 정보를 저장하는 테이블. 기본 테이블은 오라클 데이터베이스에서 생성되는 첫번째 객체로 부터 데이터베이스 생성(CREATE DATABASE) 시 ORACLE 서버가 sql.bsq 스크립트를 실행할 때 자동 생성됨. ORACLE 서버만이 이러한 테이블에 기록할 수 있으며 데이터 대부분이 암호화되어 저장되기 때문에 사용자가 직접 테이블을 액세스하기는 힘듬. ADU# 테이블을 제외하고는 기본 테이블을 직접 갱신하기 위해 DML 명령을 사용하지 말것. 기본 테이블의 한 예로 IND$ 테이블을 들 수 있으며 여기에는 데이터베이스에 있는 인덱스에 관한 정보가 포함 됨.

 데이터 딕셔너리 뷰
 - 데이터 딕셔너리 뷰는 기본 테이블 정보를 보다 효과적으로 표시하는 기본 테이블 요약임. 예를 들어, 데이터 딕셔너리 뷰에서는 객체 번호만 사용하는 대신 객체 이름을 사용함. 데이터 딕셔너리 뷰는 CREATE DATABASE 명령 이후에 실행되는 catelog.sql 스크립트를 사용하여 생성됨.


 데이터 딕셔너리 뷰 생성
 - 데이터 딕셔너리의 기본 테이블은 데이터베이스가 생성될 때 자동 생성 됨. ORACLE Universal Installer를 사용하여 데이터베이스를 생성하는 경우 데이터 딕셔너리 및 동적 성능 뷰를 생성하는 스크립트와 ORACLE 서버 옵션을 위한 스크립트가 자동 실행됨.

 - 새 데이터베이스를 수동으로 생성하는 경우 이러한 스크립트를 수동으로 실행하여야 함. 또한 ORACLE 서버를 새 버전으로 업그레이드 할 때 이 뷰와 스크립트를 다시 실행해야 할 수도 있음. 이러한 스크립트는 SYSDBA 권한을 가진 SYS 사용자로 실행해야 함.
 UNIX : $ORACLE_HOME/rdbms/admin
 NT : %ORACLE_HOME\rdbms\admin


 데이터 딕셔너리 내용
  - 데이터 딕셔너리 내용은 다음과 같음.
  * 데이터 베이스의 모든 스키마 객체(테이블, 뷰, 인덱스, 클러스터, 동의어, 시퀀스, 프로시저, 함수, 패키지, 트리거 등) 정의
  * 스키마 객체에 할당된 영역의 크기 및 스키마 객체가 현재 사용하는 영역의 크기
  * 열의 기본 값
  * 무결성 제약 조건 정보
  * Oracle 사용자 이름
  * 각 사용자에게 부여된 권한 및 롤
  * 누가 여러 스키마 객체를 액세스 또는 갱신했는가와 같은 감사 정보



 데이터 딕셔너리 사용 방법
  Oracle 서버의 데이터 딕셔너리 사용 방법
  - 데이터 딕셔너리의 기본 테이블에 있는 데이터는 Oracle 서버가 기능하는 데 필요하므로 Oracle 서버만이 데이터 딕셔너리 정보를 기록하거나 변경 할 수 있음. 데이터베이스 작업 동안 Oracle 서버는 데이터 딕셔너리를 읽어 스키마 객체가 존재하고 여기에 사용자가 정상적으로 액세스함을 확인. 또한 Oracle 서버는 데이터 딕셔너리를 계속 갱신하여 데이터베이스 구조의 변경 사항을 반영.
  사용자 및 데이터베이스 관리자의 데이터 딕셔너리 사용방법
  - 데이터 딕셔너리 뷰는 모든 데이터베이스 사용자에게 참조를 제공. 일부 뷰는 모든 Oracle 사용자가 액세스 할 수 있지만 기타 뷰는 데이터베이스 관리자만 액세스 할 수 있음.


 데이터 딕셔너리 뷰 범주
  DBA 접두어가 붙는 뷰
  - DBA 접두어가 붙는 뷰는 전체 데이터베이스에 대한 전역적 뷰를 보여줌 따라서 데이터베이스 관리자만이 이러한 뷰를 질의 가능. SELECT ANY TABLE 시스템 권한을 가진 사용자는 데이터 딕셔너리에서 DBA 접두어가 붙는 뷰를 질의 가능.
  - DBA는 다음 명령문을 실행하여 데이터베이스의 모든 객체를 질의함.
  SELECT owner, object_name, object_type
  FROM dba_objects;

 ALL 접두어가 붙는 뷰
 - ALL 접두어가 붙는 뷰는 사용자가 볼 수 있는 데이터베이스의 전반적인 모습을 보여줌. 이러한 뷰는 사용자가 소유하는 스키마 객체 뿐만 아니라 공용이나 명시적인 권한 및 롤을 통해 액세스하는 스키마 객체에 대한 정보를 반환.
 - 예를 들어, 다음 질의는 사용자가 액세스 할 수 있는 모든 객체에 대한 정보를 반환.
  SELECT owner, object_name, object_type
  FROM all_objects;

USER 접두어가 붙는 뷰
 - 일반적인 데이터베이스 사용자가 가장 관심을 갖는 뷰는 USER 접두어가 붙는 뷰임.
 이러한 뷰에는 다음 특징이 있음.
  * 데이터베이스에서 사용자 전용 환경을 참조
  * 일반적으로 현재 사용자가 소유하는 객체를 참조
  * OWNER 열이 현재 사용자를 암시하는 것을 제외하면 다른 뷰와 동일한 열을 가짐.
  * ALL 뷰에 있는 정보의 부분 집합을 반환
  * 편의상 축약된 PUBLIC 동의어를 가질 수 있음.
 예를 들어, 다음 질의는 사용자 스키마에 포함된 모든 객체를 반환함.
  SELECT owner, object_name, object_type
  FROM users_objects;

데이터 딕셔너리 뷰
 - 데이터 딕셔너리 뷰는 다음 질문에 대한 답을 제공하는 정적 뷰
  * 객체가 생성되 있는지?
  * 객체는 어디에 속해 있는지?
  * 객체의 소유자는 누구인지?
  * 사용자가 소유한 권한은 무엇인지?
  * 객체에 설정된 제한 사항은 무엇인지?


데이터 딕셔너리 예제
 - 데이터 딕셔너리 뷰에 대한 개요를 보려면 다음과 같이 DICTIONARY 뷰 또는 해당 동의어 DICT를 질의함
  SELECT * FROM dictionary;
 응답 범위를 좁히려면 WHERE 절을 포함시킬 것
  SELECT * FROM dictionary WEHRE table_name LIKE 'dba_seg%'
 뷰에 있는 열 목록을 얻으려면 DESCRIBE 키워드를 사용함
  DESCRIBE dba_users;
 데이터 딕셔너리 뷰에 있는 열에 대한 개요를 보려면 DICT_COLUMNS 뷰를 질의함.
 데이터 딕셔너리 뷰의 내용을 보려면 SELECT 명령을 사용
  SELECT * FROM dba_users;


동적 성능 테이블
 - Oracle 서버는 전체 작업 과정 동안 현재 데이터베이스 작업을 동적 성능 뷰라고하는 가상 테이블 집합에 기록함. 이러한 가상 테이블은 데이터베이스가 실행되는 동안에만 메모리에 존재하며 데이터베이스 작업의 실시간 상태를 반영함. 가상 테이블은 메모리와 제어 파일에 있는 정보의 실제 소스를 나타냄.

 - 이러한 테이블은 실제 테이블이 아니며 대부분의 사용자는 액세스 할 수 없지만 데이터베이스 관리자는 질의할 수 있고 SELECT 권한을 부여할 수있으며 이 뷰에 대한 뷰를 생성할 수 있음. 이러한 뷰는 데이터베이스 관리자가 변경하거나 제거 할 수 없기 때문에 고정 뷰 라고도 함.

 - 동적 성능 테이블은 SYS의 소유이며 이름은 모두 V_$로 시작함. 뷰는 이러한 테이블에 대해 생성되고 뷰에 대한 공용 동의어가 생성됨. 동의어 이름도 V$로 시작함. 예를 들어, ㅍ$DATAFILE 뷰에는 데이터베이스의 데이터 파일에 대한 정보가 포함되고 V$FIXED_TABLE 뷰에는 데이터베이스에 있는 모든 동적 성능 테이블 및 뷰에 대한 정보가 포함됨.
 동적 성능 테이블은 다음 질문에 대한 답을 제공
  * 객체가 온라인이고 사용 할 수 있는 가?
  * 객체가 열려 있는가 ?
  * 설정된 잠금은 무엇인가?
  * 활성 세션인가?


동적 성능 예제
 - 동적 성능 뷰에 대한 개요를 보려면 다음과 같이 DICTIONARY 뷰 또는 동의어 DICT를 질의함.
  SELECT * FROM dictionary;
 응답 범위를 좁히려면 where 절을 포함시킴.
  SELECT * FROM dictionary WHERE table_name like 'V$data%'
 V$FIXED_TABLE 뷰를 질의하여 동적 성능 뷰의 목록을 얻을 수도 있음.
  SELECT * FROM V$FIXED_TABLE;
 뷰 내에서 열 목록을 얻으려면 DESCRIBE 키워드를 사용함.
  DESCRIBE V$INSTANCE;
 동적 성능 뷰의 열에 대한 개요를 보려면 DICT_COLUMNS 뷰를 질의함.
 해당 뷰의 내용을 보려며 SELECT 명령을 사용함.
  SELECT * from V$INSTANCE;
예제:
• V$CONTROLFILE: 제어 파일의 이름을 나열.
• V$DATABASE: 제어 파일의 데이터베이스 정보를 포함함.
• V$DATAFILE: 제어 파일의 데이터 파일 정보를 포함함.
• V$INSTANCE: 현재 인스턴스 상태를 표시.
• V$PARAMETER: 현재 세션에 대해 유효한 매개변수 및 값을 나열.
• V$SESSION: 각 현재 세션에 대한 세션 정보를 나열.
• V$SGA: SGA(시스템 글로벌 영역)의 요약 정보를 포함함.
• V$SPPARAMETER: SPFILE 내용을 나열.
• V$TABLESPACE: 제어 파일의 테이블스페이스 정보를 표시.
• V$THREAD: 제어 파일의 스레드 정보를 포함함.
• V$VERSION: Oracle 서버에 있는 핵심 라이브러리 구성 요소의 버전 번호임.


관리 스크립트 이름 지정 규칙
 - 관리 스크립트는 해당 파일 이름에 따라 여러 범주로 구분 할 수 있음.
 cat*.sql : 이 스크립트는 데이터 딕셔너리 뷰를 생성. catalog.sql 과 catproc.sql 스크립트 외에 Oracle 유틸리티에 대한 정보를 생성하는 스크립트가 있음. 예를 들어, catadt.sql 스크립트는 ORDBMS에서 유형 및 기타 객체 기능에 대한 메타 데이터 정보를 보여주는 데이터 딕셔너리 뷰를 생성하며 catnoadt,sql 스크립트는 이러한 테이블과 뷰를 삭제함.

 dbms*.sql 및 prvt*plb : 이 스크립트는 Oracle 서버 기능을 확장하는 미리 정의된 Oracle 패키지에 대한 객체를 생성하며 이러한 프로그램은 데이터베이스 관리 작업을 단순화함. 대부분의 SQL 스크립트는 catproc.sql 스크립트가 실행되는 동안 실행되며 일부 추가 스크립트는 데이터베이스 관리자가 실행해야 함. 한 예로 dbmspool.sql 스크립트가 있는데 이 스크립트는 공유 풀의 단편화를 줄이기 위해 공유 풀에 있는 객체의 크기를 보여주고 SGA에서 유지 또는 제거 될 객체를 표시 할 수 있도록 함.

 utl*.sql : 데이터베이스에 추가 뷰와 테이블이 필요 할 때 이 스크립트를 실행해야 함. 예를 들어, utlxplan.sql 스크립트는 SQL 문의 실행 계획을 보는 데 사용되는 테이블을 생성함.

 대부분의 이러한 스크립트는 SYSDBA 권한을 가진 SYS 사용자로 실행되어야 함. 데이터베이스 관리자는 스크립트를 검사하여 스크립트 실행에 사용할 사용자 계정을 찾아야 함.

































댓글 없음:

댓글 쓰기