• autoextent : 1~16개의 블록은 64K, 17번째부터 1M
  • uniform : 사이즈를 지정하여 사용
  • Index Search
  • root : 정렬된 값들 중 가운데의 값
  • branch : root와 가장 작은 값 사이의 중간, 가장 큰 값 사이의 중간 -> 계속 찾아갈수록 branch가 많아짐
  • leaf : 찾고자하는 값
  • 위의 과정을 반복하며 찾다 보면 B*Tree 구조가 생김
  • 인덱스는 업데이트의 개념이 없음
  • insert시 해당되는 Tree 범위 중 가장 위에 넣어줌
  • 밸런스가 맞지 않는 경우 rebuild
  • 시간의 흐름에 따라 많이 증가되는 데이터를 효율적으로 관리하기 위해 인덱스를 파티션 화하여 저장
  • 테이블을 복제하여 생성시 인덱스 x
  • explain plan for select * from... -> 실제로 검색하지 않고 parsing 까지만
    1. select * from table(dbms_xplan.display);
    2. 테이블 형식으로 확인 가능

  • set autotrace on 
    1. select * ...
    2. select * from channels;
    3. select 한 결과를 보여줌
    4. 통계 결과도 같이 보여줌
    5. sort 작업이 발생 -> 
    6. 재실행할 경우 실행계획이 존재하므로 액세스 한 블록 등 사용 자원이 줄어듦

  • set autotrace on explain - 실행 계획만 확인
  • set autotrace traceonly - 실행의 결과는 제외 실행 통계와 실행 계획은 확인
  • rowid 확인
  1. 원하는 테이블에서 rowid를 확인 후 복사
  2. where절에 rowid를 넣고 1개의 결과를 출력
  3. 실행 계획 확인

  • select * from channels sample(20);
  1. 실행할 때마다 다른 결과가 발생
  2. 실행계획 확인 시 tableaccess
  3. 임의로 데이터를 추출 - 20%(전체 블록의 20%)
  • 인덱스 후보 키 칼럼
  1. where절에서 가장 많이 사용하는 칼럼
  2. select절에서 자주 사용되는 칼럼 - index만 찾아도 내가 원하는 결과를 가져올 수 있음
  • Index scan의 다양한 형태
  • table full scan : where 절에 조건이 있더라도 매우 광범위한 조건이라면 fullscan 할 수 있음
  • optimizer_mode
  1. RBO(Rule Based Optimizer) : 무조건 가장 빠른 실행계획을 사용(더 느려질 수 있음) -> rule
  2. CBO(Cost Based Optimizer) : 비용을 계산하여 실행계획 선택 -> all_rows, first_rows
  • index range scan : 적은 범위의 조건을 검색할 경우 인덱스를 사용하는 것이 이득
  • index unique scan : 하나의 값을 찾는 경우 사용
  • index full scan : 정렬된 순서대로 리턴하는 경우 index 순서대로 읽으면 sort작업 없이 결과 출력 가능
  • index fast full scan : table full scan을 하는 경우 index full scan 하는 것이 더 빠름(index에서 데이터를 가져옴) -> 1번의 I/O로 여러 블록을 읽을 수 있기 때문
  • index join : 여러 인덱스를 사용하는 경우 두 인덱스를 조인하여 사용할 수도 있음
  • index Skip scan 
  • 인덱스 스캔 불가
  1. <>,!=,^=
  2. 인덱스 칼럼의 변형이 발생한 경우 -> 변형된 값을 이용한 index 제작
  3. is null
  4. like '%문자열'

'Oracle > DataBase 개념' 카테고리의 다른 글

SQL*Loader  (0) 2020.03.11
데이터 이동 - data pump  (0) 2020.03.10
DataBase 핵심내용  (0) 2020.03.09
backup & recovery - RMAN  (0) 2020.03.09
메모리 구성 요소 관리  (0) 2020.02.26
  • 데이터 펌프는 여러 단위로 옮길 수 있음 - 스키마, 테이블, 테이블 스페이스, Transportable 테이블 스페이스, 전체
  • Transportable 테이블 스페이스는 테이블이 생성될 때의 오브젝트, 메타 정보만을 가져와서 그대로 실행하는 것으로 데이터를 가져오는 것보다 더 빠름 - 생성 과정을 저장
  1. 메타 데이터와 데이터 파일 두 가지가 필요
  • SQL*Loader

  • 로그 파일 : 오류가 난 이유(원인) 기록
  • Discard file : 거부된 폐기 파일들의 정보들이 기록
  • Bad file : 부적합하여 거부된 데이터 파일
  • 입력 데이터 파일 : 저장할 데이터 파일
  • ctl 파일 : 어떤 유저의 어떤 테이블에 데이터를 작성하는지

  1. 어떤 테이블에 쓸 것이고 어떤 유저에서 쓸 것인지 
  2. , 단위로 나눔
  3. 기본 포맷과는 다른 데이터가 들어올 경우 포맷을 정해두면 정해진 대로 들어옴 - 날짜 데이터 포맷
  4. NULLCOLS : 널 값으로 채움
  5. 이 파일을 그대로 복사하고 조금 수정하여 sql문장을 만들 수 있음

  • 컨트롤 파일 예제

  1. 57번째 문자가  . 인경우 데이터 가져옴
  2. 글자 개수 단위로 쪼개서 저장
  • 로드 방식

  1. 로드하고자 하는 유저에서 ctl 파일에 쓰여있는 테이블을 빈 테이블로 생성
  2. ctl 파일에 원하는 유저로 변경해줌
  3. sqlldr hr/hr control=lab_17_02_01.ctl 
  • External Table

  1. DB 내부에 테이블 테이터가 있음
  2. external table은 메타 데이터만 존재
  • ORACLE_LOADER로 External Table 정의

  • external table 예제
  1. 테이블에 삽입하고자 하는 데이터를 txt 형식으로 저장
  2. sql문 작성

   3. scott 유저에 접속하여 sql문 실행

'Oracle > DataBase 개념' 카테고리의 다른 글

Index  (0) 2020.03.11
데이터 이동 - data pump  (0) 2020.03.10
DataBase 핵심내용  (0) 2020.03.09
backup & recovery - RMAN  (0) 2020.03.09
메모리 구성 요소 관리  (0) 2020.02.26
  • 언두, 시스템 테이블 스페이스에 문제가 생긴 경우는 DB를 shutdown 시킨 후 recover 해야 함
  • 데이터 이동 : 일반적 구조

  • Oracle Data Pump
  • 한 DB의 데이터를 다른 DB에 옮기고자 할 때 사용
  • expdp : 옮기려는 데이터를 추출
  • impdp : 추출한 데이터를 다른 DB에 loading
  • datapump는 system 유저만 사용할 수 있음
  • 예제

  1. prod - prod 폴더 아래 datapump와 export 폴더 생성
  2. exp hr/hr file=/home/oracle/prod/export/hr.exp tables=emp_new, dept_new
  3. expdp hr/hr dumpfile=/home/oracle/prod/datapump/hr.pump tables=emp_new,dept_new -> 디렉토리 오브젝트가 필요
  4. create directory prod_dir as '/home/oracle/prod/datapump';
  5. grant read, write on directory prod_dir to hr;
  6. expdp hr/hr dumpfile=hr.pump directory=prod_dir tables=emp_new, dept_new
  7. orcl - orcl 폴더 아래 datapump 폴더 생성
  8. sql에서 create directory orcl_dir as '/home/oracle/orcl/datapump';
  9. grant read on directory orcl_dir to hr;
  10. prod 폴더의 datapump 폴더에서 scp hr.pump edydr1p0:/home/oracle/orcl/datapump
  11. impdp hr/hr dumpfile=hr.pump directory=orcl_dir tables=dept_new remap_table=dept_new:dept_sample
  • TTS
  • create directory prod_dir as '/home/oracle/prod/datapump';
  • 일반 데이터 유저에게 권한을 주면 디렉토리 오브젝트 사용 가능 - grant read, write on directory prod_dir to hr, sh, scott;
  • create tablespace sales_tbs datafile '/u01/app/oracle/oradata/prod/sales01.dbf' size 10m;
  • emp와 dept 테이블을 복사하여 새로운 테이블을 sales_tbs에 생성
  • data pump가 일어나는 시점의 데이터만을 다룸
  • read only로 바꿔야 메타 데이터와 데이터 파일의 정보가 일치 - alter tablespace sales_tbs read only;
  • prod -- expdp system/oracle_4U dumpfile=tts.exp directory=prod_dir transport_tablespaces=sales_tbs

  1. 메타 정보를 가지고 있는 tts.exp를 prod의 폴더에서 orcl의 폴더로 옮김 - cp /home/oracle/prod/datapump/tts.exp /home/oracle/orcl/datapump
  2. 데이터 파일을 prod에서 orcl로 옮김 - cp /u01/app/oracle/oradata/prod/sales01.dbf /u01/app/oracle/oradata/orcl/sales_tbs01.dbf
  3. impdp system/oracle_4U dumpfile=tts.exp directory=prod_dir transport_datafiles=/u01/app...
  • begin
  • dbms_stats.gather_table_stats(ownname=>'hr',
  • tabname=>'employees');
  • end;
  • /

'Oracle > DataBase 개념' 카테고리의 다른 글

Index  (0) 2020.03.11
SQL*Loader  (0) 2020.03.11
DataBase 핵심내용  (0) 2020.03.09
backup & recovery - RMAN  (0) 2020.03.09
메모리 구성 요소 관리  (0) 2020.02.26
  • PMON
  • Process Monitor의 약자로 오라클 서버에서 사용되는 각 프로세스들을 감시하는 프로세스
  • 비정상 종료된 데이터베이스의 접속을 정리
  • 정상적으로 작동하지 않는 프로세스들을 감시하여 종료시키며, 비정상적으로 종료된 프로세스들에게 할당된 SGA 리소스를 재사용 가능하게 함
  • SMON
  • System Monitor의 약자로 오라클 인스턴스를 관리하는 프로세스
  • 오라클 인스턴스 fail시 인스턴스를 복구하는 역할
  • 데이터 파일의 빈 공간을 연결하여 하나의 큰 빈공간으로 만듦
  • 더 이상 사용하지 않는 임시 블록 세그먼트들을 재사용할 수 있게 함
  • Shared pool
  • 하나의 데이터베이스에 행해지는 모든 SQL 문을 처리하기 위하여 사용
  • 문장을 실행하기 위해 그 문장과 관련된 실행 계획과 구문분석 정보가 들어있음
  • shared_pool_size 파라미터 값에 의해 결정 - 32bit flatform에서 8MB, 64bit 환경에서는 64MB
  • 라이브러리 캐시(Library Cache) : Shared SQL 영역과 PL/SQl 영역으로 나누어 볼 수 있음
  1. 사용자가 요청한 SQL 문장을 Server Process가 여러 단계를 거쳐 작업할 때 사용하는 작업 공간
  2. 오라클의 모든 SQL은 Shared SQL 영역과 Private SQL 영역에서 수행 된다.
  3. 두 명의 사용자가 같은 SQL문을 사용할 경우 Shared SQL 영역을 재사용하여 자원을 절약
  4. 사용자는 Private SQL 영역에 복사본을 보유
  5. 공유 SQL 영역에는 SQL문에 대한 텍스트, 파스 트리, 실행 계획 등을 저장하고 있음
    동일한 문장이 다음 번에 실행되면 저장되어 있는 실행계획과 파스 트리를 그대로 이용하기 때문에 SQL 문장의 처리 속도 향상 
  6. 공유 PL/SQL 영역에서는 가장 최근에 실행한 PL/SQL 문장을 저장하고 공유
    파싱 및 컴파일 된 프로그램 및 프로시져(함수, 패키지, 트리거)가 저장
  • Dictionary Cache : 데이터베이스 테이블과 뷰에 대한 정보, 구조, 사용자등에 대한 정보가 저장
  1. 오라클은 SQL문을 parsing하는 과정에서 Data Dictionary를 빈번하게 Access
  2. 자주 Access되는 Data Dictionary 정보를 Dictionary Cache에 저장하여 관리
  3. Dictionary Cache는 모든 Oracle User Process에 의해 공유
  • Large pool
  • SGA를 구성하는 Option 성격의 메모리이며 대용량 메모리를 할당할 때 사용
  • Oracle 백업 및 복원 작업에 대한 대용량 메모리 할당
  • large_pool_size 파라미터로 Large pool의 크기 설정
  • Java pool
  • Oracle JVM에 접속해 있는 모든 세션에서 자바코드가 사용하는 메모리 영역
  • java_pool_size 파라미터로 크기를 설정할 수 있음
  • Streams pool
  • Oracle 10g 부터 지원
  • 오라클 스트림(다른 DB로 데이터 전달)에서 사용하는 메모리 영역
  • stream_pool_size 파라미터로 크기를 설정
  • Size of the Database Buffer Cache
  • db_cache_size : 디폴트 버퍼 캐시의 크기를 설정하는 파라미터로 반드시 존재해야 하며 0으로 설정할 수 없음
  • 블록크기 - 2K, 4K, 8K(디폴트), 16K, 32K의 블록 크기를 지원
  • 이러한 블록 크기로 각각 버퍼 캐시의 크기를 지정하려면 db_nk_cache_size 파라미터를 사용 -> 디폴트로 지정한 블록 사이즈는 올 수 없음
    각 크기의 데이터 블록에 따라 Database Buffer Cache의 할당 크기도 지정가능
  • Multiple Buffer Pools
  • 버퍼 캐시의 공간을 나누어 사용
  • DB_KEEP_CACHE_SIZE : Keep Buffer Cache의 크기, 재활용될 가능성이 높은 블록을 고정적으로 저장
  • DB_RECYCLE_CACHE_SIZE : 재활용 버퍼 캐시 크기, 재활용될 가능성이 낮은 블록을 Access직후 바로 메모리에서 제거하도록 관리
  • Default : 일반적인 버퍼캐시 영역

 

http://www.gurubee.net/lecture/1888

 

Redo log buffer, Shared pool, Large pool

Redo log buffer   리두 로그 버퍼는 데이터베이스에서 일어난 모든 변화를 저장하는 메모리 공간 입니다.   리두 로그 버퍼에 저장된 리..

www.gurubee.net

  • Commit
  • 모든 작업을 정상적으로 처리하겠다고 확정하는 명령어
  • 트랜젝션의 처리 과정을 데이터베이스에 반영하기 위해서, 변경된 내용을 모두 영구 저장
  • commit을 수행하면, 하나의 트랜잭션 과정을 종료하게 된다.
  • 트랜잭션 작업 내용을 실제 DB에 저장한다.
  • 이전 데이터가 완전히 UPDATE 된다.
  • 모든 사용자가 변경한 데이터의 결과를 볼 수 있다.
  • ROLLBACK
  • 작업중 문제가 발생했을 때, 트랜잭션의 처리 과정에서 발생한 변경 사항을 취소하고, 트랜잭션 과정을 종료시킨다.
  • 트랜잭션으로 인한 하나의 묶음 처리가 시작되기 이전의 상태로 되돌린다.
  • 트랜잭션 작업 내용을 취소한다.
  • 이전 COMMIT한 곳까지만 복구한다.
  • RMAN(Recover Manager)
  • 오라클 데이터베이스에 대해 백업과 복구를 관리하는 유틸리티 프로그램
  • Backup and copy files, Restore files, Recover datafiles 등을 server session에서 통합 관리
  • Incremental Backup을 지원하여 매번 전체를 백업 받을 필요없이 추가 변경된 부분만 백업
  • 테이블스페이스를 백업모드로 변경하지 않고 백업이 가능
  • 백업을 받는동안 데이터블록의 충돌을 감지
  • I/O 병렬화하여 처리
  • 백업파일을 압축해서 저장
  • 백업과 리스토어 작업을 병렬로 수행하여 시간단축
  • 백업되지 않은 데이터 파일에 대한 복구기능 제공
  • ASM(Automatic Storage Management)을 사용할 경우 DB 백업은 반드시 RMAN으로 수행해야 함
  • Flashback
  • rollback을 해야하는 상황에서 commit을 사용한 경우 commit 이전 상황으로 되돌릴 때 사용됨
  • 특정한 시간 또는 특정 시점으로 되돌릴 수 있는 기능
  • dump file 없이 논리적 장애를 빠르게 복구
  • 물리적인 장애(파일 손상, 디스크 손상)에 대해서는 복구 불가
  • row level, table level, database level 3개 분류
  • row level과 table level은 oracle 에서 기본 권한 사용 가능
  • database level은 system 권한 필요, system down 후 진행

https://m.blog.naver.com/PostView.nhn?blogId=youngram2&logNo=221131914746&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

[DB관리] - Oracle FlashBack / RecycleBin (복원/복구)

Oracle Flashback 기능이란? DB관리중에 실수로 데이터를 삭제하거나 데이터값을 잘못 변경하는 실수가...

blog.naver.com

  • Flashback recovery
  • Database Level 의 Flashback
  • 장애가 발생한 데이터 파일에 flashback log를 적용하여 복구
  • flashback log 설정이 되어 있어야 하고 DB도 archive mode이어야 하며 flashback database mode로 설정되어야 함
  • flashback log가 가득 차면 db가 죽어버림
  • mount 상태에서 실행하고 dba 권한을 가지고 수행
  • resetlogs로 초기화하여 open해주어야 함
  • 언두(Undo)
  • 실행한 결과를 이전 상태로 되돌림
  • 잘못된 작업(update, insert 등)을 실행한 경우 이전 상태로 되돌릴 때 사용
  • 리두(Redo)
  • 실행 했던 작업을 다시 실행
  • database가 비정상적으로 종료된 경우 commit(DB에 기록) 이후부터 다시 실행할 때 사용
  • 인덱스가 필요한 칼럼
  • where절이나 join조건 안에서 자주 사용되는 칼럼
  • null 값이 많이 포함되어 있는 칼럼
  • where 절이나 join조건에서 자주 사용되는 두 개 이상의 칼럼
  • 데이터가 매우 많은 테이블
  • OWI(Oracle Wait Interface)
  • 프로세스가 작업을 수행할 때 원하는 리소스가 사용 중인 경우 그 리소스에 대한 점유가 해제될 때까지 리소스와 관련된 이벤트를 대기
  • 프로세스가 겪는 대기현상을 기록하고 관찰하는 일련의 기능과 인터페이스
  • Lock & Latch
  • 동시작업에 의해 공유 자원이 손상되지 않도록 4개의 메커니즘 제공 - lock, latch, pin, mutax
구분 래치 뮤텍스
동작방식 순서대로 순서 무관 순서대로 순서 무관
보호대상 오브젝트 공유 메모리    
지속시간 길다 짧다    
  1. 락 모드가 호환 가능하면 다수의 프로세스가 동일한 리소스를 공유하는 것을 허용
  2. 호환 가능하지 않으면 리소스에 대한 배타적인 접근만 허용
  3. 테이블, 데이터 블록 및 state object와 같은 오브젝트를 보호
  4. 데이터베이스의 데이터 또는 메타데이터 접근 제어
  5. 트랜잭션 단위
  6. 데이터베이스 내부에 정보가 존재, 모든 인스턴스에서 볼 수 있음 - 데이터베이스 레벨에서 작동
  7. 문맥 교환을 포함한 일련의 명령어들을 사용하여 구현 - 구현이 복잡함
  8. 트랜잭션 동안 지속
  9. 획득하지 못한 요청은 큐로 관리됨, 요청한 순서대로 서비스
  10. 데드락이 발생될 가능성이 높음 - 데드락이 발생될 때마다 트레이스 파일 생성
  • 래치
  1. 메모리 구조에 대한 배타적인 접근을 위함
  2. SGA 내의 메모리 위치와 해당 위치의 값을 확인하고 변경하기 위해서 사용할 수 있는 atomic CPU 연산(한 번에 단 하나의 CPU만 메모리의 특정 위치를 액세스 하도록 메모리 버스에 락킹을 설정)의 조합
  3. 메모리 오브젝트를 임시적으로 보호
  4. 단일 오퍼레이션으로 메모리 구조에 대한 접근 제어
  5. 트랜잭션 단위가 아님
  6. SGA 내부에 정보가 존재, 로컬 인스턴스에서만 볼 수 있음 - 인스턴스 레벨에서 작동
  7. 단순한 명령어를 사용하여 구현 - 구현이 쉬움
  8. microsecond 단위로 지속
  9. 큐로 관리되지 않으며, 요청한 순서대로 서비스되지 않음
  10. 데드락이 발생되지 않도록 구현

http://wiki.gurubee.net/pages/viewpage.action?pageId=28606823

 

4장 락과 래치 - [종료]구루비 DB 스터디 - 개발자, DBA가 함께 만들어가는 구루비 지식창고!

4장 락과 래치 개요 오라클은 경합에 의해 공유 자원이 손상되지 않도록 4개의 메커니즘 제공: 1) 락(lock), 2) 래치(latch), 3)핀(pin), 4)뮤텍스(mutax) 구분 락 래치 핀 뮤텍스 동작방식 순서대로 순서 무관 순서대로 순서

wiki.gurubee.net

https://aboutdb.tistory.com/241

 

02 래치 (Latch) 와 락 (Lock)

1. 오라클의 동기화 매커니즘 오라클은 거대한 동기화 (Synchronization) 머신이다. 래치와 락의 존재 이유는 동시 작업으로부터 오라클의 자원을 보호하는 것이다. 분류 래치 (latch) 락 (lock) 목적 메모리 구조..

aboutdb.tistory.com

  • 옵티마이저
  • SQL을 가장 빠르고 효율적으로 수행할 최적(최저비용)의 처리경로를 생성해 주는 DBMS 내부의 핵심엔진

http://www.dbguide.net/db.db?cmd=view&boardUid=148218&boardConfigUid=9&boardIdx=139&boardStep=1

 

데이터 전문가 지식포털 DBGuide.net

옵티마이저 쿼리변환 1. 옵티마이저 소개 가. 옵티마이저란? 옵티마이저(Optimizer)는 SQL을 가장 빠르고 효율적으로 수행할 최적(최저비용)의 처리경로를 생성해 주는 DBMS 내부의 핵심엔진이다. 사용자가 구조화된 질의언어(SQL)로 결과집합을 요구하면, 이를 생성하는데 필요한 처리경로는 DBMS에 내장된 옵티마이저가 자동으로 생성해준다. 옵티마이저가 생성한 SQL 처리경로를 실행계획(Execution Plan)이라고 부른다. 옵티마이저의 SQL

www.dbguide.net

  • SQL 최적화 과정
  1. 쿼리 수행을 위해 여러 가지 실행계획을 찾음
  2. 오브젝트 통계 및 시스템 통계정보를 이용해 각 실행계획의 예상비용을 산정
  3. 각 실행계획을 비교해서 최저비용을 갖는 하나를 선택
  • 옵티마이저 종류
  1. 규칙기반 옵티마이저 : 미리 정해 놓은 규칙(액세스 결로별 우선순위 - 인덱스 구조, 연산자, 조건절 형태가 순위를 결정)에 따라 액세스 경로를 평가하고 실행계획을 선택
  2. 비용기반 옵티마이저 : 테이블과 인덱스에 대한 여러 통계정보를 기초로 각 오퍼레이션 단계별 예상 비용을 산정하고, 이를 합산한 총 비용(쿼리를 수행하는데 소요되는 일량 또는 시간)이 가장 낮은 실행계획을 선택
  3. 스스로 학습하는 옵티마이저 : 예상치와 런타임 수행 결과를 비교하고, 예상치가 빗나갔을 때 실행계획을 조정하는 옵티마이저로 발전할 것
  • 최적화 목표
  1. 전체 처리속도 최적화
  2. 최초 응답속도 최적화
  • 옵티마이저 통계유형
  1. 테이블 통계 : 전체 레코드 수, 총 블록 수, 빈 블록 수, 한 행당 평균 크기 등
  2. 인덱스 통계 : 인덱스 높이, 리프 블록 수, 클러스터링 팩터, 인덱스 레코드 수 등
  3. 칼럼 통계 : 값의 수, 최저 값, 최고 값, 밀도, null 값 개수, 칼럼 히스토그램 등
  4. 시스템 통계 : CPU 속도, 평균적인 I/O 속도, 초당 I/O 처리량 등
  • 선택도 : 특정 조건에 의해 선택될 것으로 예상되는 레코드 비율
  • 실행계획 수립 절차 : 선택도 -> 카디널리티 -> 비용 -> 액세스 방식, 조인 순서, 조인 방법 등 결정
    히스토그램이 있으면 그것으로 선택도를 산정하며, 단일 컬럼에 대해서는 비교적 정확한 값을 구한다.
  • 카디널리티 : 특정 액세스 단계를 거치고 난 후 출력될 것으로 예상되는 결과 건수
    총 low 수 * 선택도 = num_rows/num_distinct

http://www.gurubee.net/lecture/2400

 

옵티마이저

제 1절 옵티마이지1. 옵티마지어 소개옵티마이저란?SQL을 가장 빠르고 효율적으로 수행할 최적(최저비용)의 처리경로를 생성해 주는 DBMS 내부의 핵심..

www.gurubee.net

  • 드라이빙 테이블
  • 테이블에 대한 조인 시 첫 번째로 access 돼서 access path를 주도하는 테이블
  • Driving table로 결정되는 것은 index의 존재 및 우선순위 혹은 from절에서의 table지정 순서에 영향을 받으며 어느 테이블이 먼저 access 되느냐에 따라 속도의 차이가 크게 날 수 있으므로 매우 중요
  • 기본적으로 대상 테이블의 행 중 작업 대상이 되는 행의 수가 적은 쪽이 먼저 access 되어야 전체 일 양이 줄어듦
  • join 되는 칼럼의 한쪽에만 index가 있는 경우는 index가 지정된 테이블이 드라이빙 테이블
  • 드라이빙 테이블을 정할 때는 테이블의 사이즈나 데이터의 양에 상관없이 무조건 가장 적은 data를 추출할 것으로 예상되는 테이블을 먼저 드라이빙
  • full table scan 시 무조건 적은 사이즈의 테이블이 드라이빙

http://egloos.zum.com/ultteky/v/3945897

 

DRIVING TABLE 이란?

드라이빙 테이블이란?===================TABLE에 대한 JOIN시 먼저 ACCESS되서 ACCESS PATH를 주도하는TABLE을 DRIVING TABLE이라 한다.DRIVING TABLE로 결정되는 것은 INDEX의 존재 및 우선순위 혹은FROM절에서의 TABLE지정순서에 영향을 받으며 어느 TABLE이 먼저ACCESS되느냐에 따라 속도의

egloos.zum.com

https://blankdouble.tistory.com/entry/%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B9%99-%ED%85%8C%EC%9D%B4%EB%B8%94%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%96%B4%EB%96%A4-%ED%85%8C%EC%9D%B4%EB%B8%94%EC%9D%84-%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B9%99-%EC%8B%9C%EC%BC%9C%EC%95%BC-%ED%95%98%EB%8A%94%EC%A7%80

 

드라이빙 테이블이 무엇이고 어떤 테이블을 드라이빙 시켜야 하는지?

드라이빙 테이블이란 조인이 발생할 때 첫번째로 엑세스하는 테이블을 말합니다. 이 드라이빙 테이블의 순서에 따라서 데이터를 엑세스 하는 양이 대폭 늘어나거나 줄어들 수 있기 때문에 어떤 테이블을 먼저 드라..

blankdouble.tistory.com

  • Join의 종류
  • JOIN이란 2개 이상의 테이블을 연결하여 데이터를 검색하는 방법
  • 테이블 간의 PK, FK를 사용하여 조인
  • INNER JOIN(내부 조인)
  1. 키 값이 있는 테이블의 컬럼 값을 비교 후 조건에 맞는 값을 가져오는 것
  2. 서로 연관된 내용만 검색하는 조인 방법
  3. EQUI JOIN(동등 조인) - EQUAL 연산자(=)를 사용
    WHERE 절에 기술되는 JOIN 조건을 검사해서 양쪽 테이블에 같은 조건의 값이 존재할 경우 해당 데이터를 가져오는 조인 방법
    Natural Join : where절에 조인조건을 사용하지 않아도 두 테이블 사이에 동일한 이름과 타입의 컬럼 값이 딱 하나 존재한다면 EQUI JOIN과 동일한 결과가 나타난다.
    동일한 이름과 타입의 컬럼이 두 개 이상이면 using절에 조인할 컬럼을 써주면 된다.
  4. NON EQUI JOIN(비등가 조인) - 같은 조건이 아닌 크거나 작거나 하는 경우 JOIN을 수행
  • CROSS JOIN(교차 조인)
  1. 카디션 곱이라고도 하며 조인되는 두 테이블에서 곱집합을 반환
  2. 첫 번째 테이블의 한 열에 두 번째 테이블의 모든 열이 한 번씩 결합된 열을 만들어 모두 생성
  3. M * N 개의 열을 생성
  • OUTER JOIN
  1. 여러 테이블에서 한 쪽에는 데이터가 있고 다른 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽 테이블의 내용을 전부 출력하는 방법
  2. 조인 조건에 만족하지 않아도 해당 행을 출력하고 싶을 때 사용
  3. LEFT OUTER JOIN - 조인문의 왼쪽에 있는 테이블의 모든 결과를 가져온 후 오른쪽 테이블의 데이터를 매칭하고, 매칭되는 데이터가 없는 경우 NULL을 표시
  4. RIGHT OUTER JOIN - 조인문의 오른쪽에 있는 테이블의 모든 결과를 가져온 후 왼쪽 테이블의 데이터를 매칭하고, 매칭되는 데이터가 없는 경우 NULL을 표시
  5. FULL OUTER JOIN - 양쪽 모두 조건이 일치하지 않는 것들까지 모두 결합하여 출력하고 빈칸은 NULL로 표시
  • SELF JOIN - 테이블에서 자기 자신을 조인시키는 것

https://clairdelunes.tistory.com/22

 

[SQL] Join(조인)

Join(조인) - 조인이란 여러 테이이블에 흩어져 있는 정보 중 사용자가 필요한 정보만 가져와서 가상의 테이블처럼 만들어서 결과를 보여주는 것으로 2개의 테이블을 조합하여 하나의 열로 표현하는 것이다. 조인..

clairdelunes.tistory.com

 

  • Join의 방식
  • Nested Loops join - 중첩반복 조인
  1. 중첩 루프문과 동일한 원리
  2. outer 테이블에서 일치하는 컬럼을 찾으면 그 값과 inner 테이블에서 일치하는 모든 컬럼들을 비교, 확인
  3. 이 과정을 outer 테이블에 일치하는 값이 없을 때까지 반복
  4. 좁은 범위에 유리
  5. 순차적으로 처리
  6. 후행 테이블에는 조인을 위한 인덱스 생성 필요
  7. 데이터를 랜덤으로 액세스하기 때문에 결과 집합이 많으면 느려짐
  8. 선행 테이블 사이즈 * 후행 테이블 접근횟수 = 실행속도
  • Sort Merge Join
  1. 조인의 대상범위가 넓을 경우 발생하는 랜덤 엑세스를 줄이기 위한 경우나 연결고리에 마땅한 인덱스가 존재하지 않을 경우 해결하기 위한 조인 방안
  2. 양쪽 테이블의 처리범위를 각자 Access하여 정렬한 결과를 차례로 Scan하면서 연결고리의 조건으로 Merge하는 방식
  3. 연결을 위해 랜덤 액세스를 하지 않고 스캔을 하면서 수행
  4. Nested Loop Join처럼 선행집합 개념이 없음
  5. Sort Area Size에 따라 효율에 큰 차이 발생
  6. 조인 연산자가 '='이 아닌 경우 nested loop 조인보다 유리한 경우가 많음
  7. 두 결과 집합의 크기 차이가 많이 나는 경우에는 비효율적
  • Hash Join
  1. hashing function 기법을 활용하여 조인을 수행하는 방식
  2. 해싱 함수는 직접적인 연결을 담당하는 것이 아니라 연결될 대상을 특정 지역에 모아두는 역할
  3. 해시값을 이용하여 테이블을 조인하는 방식
  4. 소트의 부하가 많이 발생하는 Sort-Merge 조인을 보완하기 위한 방법으로 sort 대신 해시값을 이용하는 조인
  5. 병렬 프로세싱을 이용한 해시 조인은 대용량 데이터를 처리하기 위한 최적의 솔루션
  6. hash_area_size에 지정된 메모리 내에서 hash table 생성
  7. Hash table 생성 후 순차적인 처리 형태로 수행
  8. 대용량 데이터 처리에서는 상당히 큰 hash area를 필요로 하므로, 메모리의 지나친 사용으로 오버헤드 발생 가능성
  9. 연결조건 연산자가 '='일 경우에만 가능
  10. 조건을 만족하는 선행 테이블의 조인 키를 해시 함수에 적용하여 해시 테이블을 생성
  11. 조건을 만족하는 후행 테이블의 조인 키를 해시 함수에 적용하여 일치하는 해시 테이블의 버킷을 찾음
  12. 조인에 성공하면 추출버퍼에 넣음

https://needjarvis.tistory.com/162

 

Nested Loop, Sort-Merge, Hash Join 조인연산

조인연산(Join Operation) 이란? - SQL 명령문에 의해서 여러 테이블에 저장된 데이터를 한번에 조회할 수 있게 하는 DBMS의 기능 - 두 집합(테이블) 간의 곱으로 데이터를 연결하는 가장 대표적인 데이터 연결 방..

needjarvis.tistory.com

  • Histogram
  • 테이블의 빈도를 표현한 것
  • 옵티마이저가 검색 방식을 결정하는데 많은 도움이 됨
  • 풀 스캔을 할 것인지, 인덱스 스캔을 할 건지 도와주는 것
  • 빈도 히스토그램 = 도수 분포 히스토그램(Frequency number)
  1. 버킷 갯수 내에 구분 값들이 모두 들어감
  2. 도수 분포표와 같음
  3. 누적된 값이 표시됨 - 각 값이 몇개나 있는지 count한 값
  • high balanced histogram(높이 균형 히스토그램)
  1. 데이터 분포도 = 1/(버킷 캐수) * 100
  2. 빈도수 = (총 레코드 개수) / (버킷 개수)
  3. 버킷의 개수가 중복을 제외한 값들의 개수보다 작을 때 만들어짐
  4. 데이터가 한 쪽으로 치우친 경우 사용
  5. 버킷 안에 범위내의 값들이 들어가 있음
  6. 여러 값들이 한 버킷안에 들어있을 수 있음
  7. 많은 값들이 모여있는 부분에서는 두 개 이상의 버킷 사용

http://bysql.net/w201101/12593

 

오라클 성능 고도화 원리와 해법 2 [11-1A] - 6. 히스토그램

6.히스토그램(1) 히스토그램 유형높이균형(Height-Balanced) 히스토그램도수분포(Frequency) 히스토그램히스토그램 생성조건 : 컬럼 통계 수집 시 버킷 개수를 2 이상으로 지정 (ex. for columns SIZE 10, col1, col2, col3)히스토그램 정보 : dba_histograms, dba_tab_histograms 뷰참고10g 이후, dba_tab_columns 뷰의 histogram 컬럼 값을 통해 히스토그램 유형 파

bysql.net

  • 정규화(Normalization)
  • 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라고 한다.
  • 함수적 종속성을 이용해서 연관성 있는 속성들을 분류하고, 각 릴레이션들에서 이상현상이 생기지 않도록 하는 과정
  • 제 1 정규형(1NF; First Normal Form)
  1. 릴레이션에 속한 모든 속성의 도메인이 원자 값으로만 구성되어 있으면 제 1 정규형에 속한다.
  2. 즉 여러 값들이 한 행의 도메인(한 칸)에 들어있지 않고 하나씩만 채워져 있는 테이블을 말한다.
  • 제 2 정규형(2NF; Second Normal Form)
  1. 제 1 정규형에 속하면서, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제 2 정규형이다.
  2. 부분 함수 종속성을 제거하는 작업
  3. 복합키에서 후보키 중 하나를 알면 키가 아닌 속성을 알 수 있는 경우 함수 종속이 존재한다고 말한다.
  4. 이러한 함수 종속을 제거하는 작업
  5. 서로 종속되는 컬럼들을 가지는 테이블을 만든다.
  6. 원래 테이블의 기본키가 아닌 속성이 5번의 테이블에 들어갔다면 원래 테이블에서 그 속성들을 제외한 테이블로 바꿔준다. 
  7. 제 2 정규형을 만족한다 하더라도 삽입이상, 갱신이상, 삭제이상 등의 이상현상이 발생한다.
  8. 이는 이행적 함수 종속이 존재하기 때문이다.
  9. 삽입이상 : 하나의 새로운 값이 삽입될 때, 다른 값에 기본키에 NULL이 들어가는 경우
  10. 갱신이상 : 하나의 값이 수정이 될 때, 연관된 다른 값들도 수정이 되야하는데 수정되지 않아 불일치 하는 경우
  11. 삭제이상 : 하나의 값이 삭제될 때, 삭제를 하지 않아도 되는 값까지 함께 지워지는 경우
  • 제 3 정규형(3NF; Third Normal Form)
  1. 제 2 정규형에 속하면서, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제 3 정규형이다.
  2. 이행적 함수 종속 : X->Y 이고 Y->Z이면 X->Z가 성립하는 경우 Z가 X에 이행적으로 함수 종속되었다고 말한다.
  3. [X,Y], [Y,Z]로 분해
  • BCNF (Boyce-Code Normal Form)
  1. 후보키가 1개 밖에 없고 그 후보키가 테이블의 기본키가 되면서 3NF를 만족하면 항상 BCNF를 만족한다.
  2. 후보키가 여러개인 경우에는 3NF를 만족하지만 이상현상이 발생하는 경우가 있는데, 이를 해결하기 위한 정규형이 보이스-코드 정규형이다.(strong 3NF 라고도 한다.)
  3. 모든 결정자가 KEY인 경우 BCNF 이다.
  4. 만약 후보키가 아닌 다른 컬럼이 결정자(다른 값을 결정)가 된다면 BCNF를 위반한다.(일반 컬럼이 후보키를 결정하는 경우)
  • 제 4 정규형(4NF)
  1. 다중값 종속을 제거하는 과정을 의미
  2. 다가 종속 : 한 컬럼의 값에 대하여 대응하는 다른 컬럼의 값이 여러 개 일 때(x->->y)
  3. 예) 학생 x 는 한 학기에 여러 개의 과목 y 를 수강할 수 있다.
  4. A, B, C 가 주어지고 A ->->B, A ->-> C 일 때
  5. (A, B), (A, C) 로 나눈다.
  • 제 5 정규형(5NF)
  1. 조인 종속을 없앤 것
  2. 하나의 릴레이션을 여러 개의 릴레이션으로 분해 한 후 공통 속성으로 조인하여 데이터 손실 없이 원래의 릴레이션으로 복원할 수 있으면 이를 무손실 조인이라 한다.
  3. 조인한 결과에 원래 릴레이션에 없는 데이터가 존재하지 않으면 이를 비부가적 조인이라고 한다.
  4. 필요한 데이터가 사라지지 않는 무손실 분해가 되고 필요없는 데이터가 생기지 않는 데이터가 생기지 않는 비부가적 분해가 된 릴레이션
  5. X, Y, Z로 이루어진 릴레이션을 {X, Y}, {Y,Z}, {X,Z}로 이루어진 릴레이션들로 분해했을 때, 2개의 릴레이션을 조인하면 분해하기 전의 릴레이션을 만들 수 없고 꼭 3개의 릴레이션을 모두 조인해야 원래의 릴레이션을 만들 수 있을 때 제 5 정규형이라고 말할 수 있다.

https://yaboong.github.io/database/2018/03/09/database-normalization-1/

 

데이터베이스 정규화 - 1NF, 2NF, 3NF

개요 데이터베이스 정규화에서 1NF, 2NF, 3NF 에 대해 알아본다.

yaboong.github.io

http://www.gurubee.net/lecture/3688

 

정규형의 종류

1.정규형의 종류1정규형(First Normal Form)2정규형(Second Normal Form)3정규형(Third Normal Form)보이스코드 정규형(Boyce-Codd Normal Form, 이하..

www.gurubee.net

  • 오라클 파티션 테이블
  • 용량이 매우 큰 table을 보다 효율적으로 관리하기 위해 table을 작은 단위로 나눔으로써 데이터 작업의 성능 향상을 유도하고 데이터 관리를 보다 수월하게 하고자 하는 개념
  • 파티션 테이블을 구성해둔다면, 데이터를 가져올 시 이미 줄어있는 범위에서 액세스를 하기 때문에 액세스 횟수가 적고 빠르다는 장점이 있음
  • Range partition table
  1. 말 그대로 범위의 단위로 나누어진 테이블
  2. ex) 날짜별로 2016년 1월 1일 ~ 2016년 6월 30일 까지의 데이터는 A영역에, 7월 1일 ~ 12월 31일 까지의 데이터는 B에 ...
  3. 영역별로 자동적으로 데이터가 저장되는 일이 가능해진다.
  • List partition
  1. 특정 컬럼 값을 기준으로 파티셔닝을 수행하는 것
  2. 한 테이블의 컬럼 a, b, c를 이용하여 파티셔닝을 해놓고 각각 A, B, C 테이블스페이스에 저장
  3. a->A, b->B, c->C 테이블스페이스에 각각 담기게 된다.
  4. 너무 한쪽으로 몰리지 않기 위해선 컬럼 a, b, c의 빈도가 비슷해야 좋다.
  • Hash partition
  1. 데이터를 해시 알고리즘에 의해 무작위로 분산시켜 집어넣는다.
  2. 많이 사용하지 않는 파티셔닝 기법

https://m.blog.naver.com/PostView.nhn?blogId=whdahek&logNo=220796458477&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

오라클 파티션 테이블

◆파티션 테이블 파티션 테이블=용량이 크고 지속적으로 증가하는 테이블들에 대해, 더 작은 단위로 나누어...

blog.naver.com

  • 데이터마이닝
  • 데이터에서 의미를 추출, 캐내는 작업
  • 데이터 안에서 통계적 규칙이나 패턴 등을 찾는 행위 및 도구, 기법 등을 뜻한다.
  • 제약조건(Constraint)
  • NOT NULL - 컬럼을 정의할 때, NOT NULL 제약조건을 명시하면 해당 컬럼에는 반드시 데이터를 입력해야만 한다.
  • UNIQUE - 해당 컬럼의 각 값은 중복되는 값이 없어야 한다. NOT NULL과 함께 사용할 수 있다.
  • PRIMARY KEY - '기본키' 라고 불리는 UNIQUE + NOT NULL 의 형태를 띄며, 테이블 당 1개의 기본키만 생성할 수 있다. 여러 컬럼을 묶어 하나의 기본키로 만드는 것도 가능하다. (최대 32개 까지)
    기본키는 데이터 무결성을 지켜주는 역할을 한다.
    고유 인덱스가 자동으로 생성된다.
  • FOREIGN KEY - '외래키' 라고 불리는 제약조건이다. 테이블 간의 참조 데이터 무결성을 보장해준다. 참조 데이터 무결성 보장을 통해 참조 관계가 있는 테이블의 데이터 추가, 삭제, 수정을 통제할 수 있다.
  1. 참조하는 테이블이 먼저 생성되어 있어야 함
  2. 외래키가 참조하는 컬럼은 참조하는 테이블의 기본키(PRIMARY KEY) 이어야 함
  3. 여러 컬럼을 외래키로 할 경우, 참조하는 테이블의 기본키와 컬럼 개수 및 순서가 같아야 함
  4. 기본키와 마찬가지로, 최대 32개 컬럼까지 가능하다.
  5. 기본키와는 달리 NULL값이 들어가거나 중복된 값이 들어갈 수 있음
  • CHECK - 이 제약조건이 걸려있는 컬럼에는 조건에 일치하는 값들만 들어갈 수 있다.
  • 트랜잭션
  • 하나의 논리적 작업 단위를 구성하는 하나 이상의 SQL 문장
  • 원자성(Atomicity) - 한 트랜잭션안의 작업들이 부분적으로 수행되다가 중단되지 않는 것을 보장하는 능력 
  1. 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다.
  2. 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.
  • 일관성(Consistency) - 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것
  1. 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.
  2. ex) 트랜잭션을 수행한 후 변경된 정보가 제약조건에 맞지 않는다면 오류가 발생한다.
  • 독립성/격리성(Isolation)
  1. 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 끼어들 수 없다.
  2.  수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.
  3. ex) employees 테이블을 update하고 insert하는 작업의 트랜잭션을 수행하는 도중에는 commit이 완료될 때까지 다른 트랜잭션에서 employees의 변경중인 내용을 확인하거나 동시에 변경할 수 없다.
  • 영속성/지속성(Durability)
  1. 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.
  • commit 연산 - 한 개의 논리적 단위(트랜잭션)에 대한 작업이 성공적으로 끝났고 데이터베이스가 다시 일관된 상태에 있을 때, 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산이다.
  • rollback 연산 - 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소(Undo)하는 연산이다. Rollback 시에는 해당 트랜잭션을 재시작하거나 폐기한다.

https://coding-factory.tistory.com/226

 

[DB기초] 트랜잭션이란 무엇인가?

트랜잭션의 정의 트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다. 트랜잭션의 특징 1...

coding-factory.tistory.com

  • Select 문의 처리 순서
  1. from 절의 테이블 확인
  2. ON
  3. JOIN
  4. where 절의 조건 확인
  5. group by 절의 테이블 확인
  6. having 절의 조건 확인
  7. select 절의 컬럼 확인
  8. order by - 추출된 데이터들을 정렬
  • INDEX
  • 장점 : 테이블에 많은 열이 포함되어 있거나 대량의 데이터가 저장되어 있는 경우, 테이블에서 특정 데이터를 검색하려고 하면 매우 시간이 걸릴 수 있다, 이런 경우에 적절한 컬럼에 인덱스를 생성하면 검색이 빨라질 수 있다.
  • 단점 : 테이블과는 별도로 인덱스의 저장공간이 필요하고 테이블에 데이터가 추가되면 인덱스에도 데이터가 추가된다.
    또한 데이터가 추가될 때마다 인덱스의 정렬이 이루어져 데이터를 추가하는 처리속도가 느려진다.
  • 데이터와 위치주소(ROWID) 쌍으로 저장하고 관리됨
  • 빠르게 쿼리 검색을 하기위함
  • B-TREE 인덱스(Binary, Balance 의 약자)
  1. OLTP(Online Transaction Processing : 실시간 트랜잭션 처리)
  2. 실시간으로 데이터 입력과 수정이 일어나는 환경에 많이 사용
  3. Root block(기준 값보다 작으면 왼쪽, 크면 오른쪽) - Branch block(root block과 같은 형태로 기준점을 잡고있음) - Leaf Block(원하는 값들이 저장되어 있음) 순으로 아래로 내려가는 tree 형태
  4. Unique Index : 인덱스 안에 있는 컬럼 key 값에 중복되는 데이터가 없다.
    -> unique 제약조건과 유사, unique 제약조건을 사용하면 자동으로 unique index가 만들어진다.
    기본키(unique+not null)을 생성해도 자동으로 unique index가 만들어진다.
    이때 UNIQUE나 기본키 객체명과 동일하게 생성된다.
  5. Non Unique Index : 중복되는 데이터가 들어가야 하는 경우(key로 지정한 필드의 중복된 값이 들어갈 수 있다)
  6. FBI(Function Based Index - 함수기반 인덱스) : 인덱스는 where 절에 오는 조건 컬럼이나 조인에 쓰이는 컬럼으로 만들어야 한다.
    인덱스를 사용하기 위해서는 where 절의 조건을 절대로 다른 형태로 가공해서(upper, lower 등) 사용하면 안된다.
    where 절에서 upper나 sal+100 등 함수나 사칙연산 등을 사용하여 비교한 경우 그 함수가 쓰인 인덱스를 만들어야 한다.
  7. Descending Index(내림차순 인덱스) : 내림차순으로 인덱스를 생성
    큰 값을 많이 조회하는 SQL에 생성하는 것이 좋다.
  8. 결합 인덱스(Composite Index) : 인덱스 생성시에 두 개 이상의 컬럼을 합쳐서 인덱스를 생성
    주로 where 절의 조건이 되는 컬럼이 2개 이상으로 and로 연결되는 경우 사용
    컬럼의 순서에 따라 효율에 차이가 있다. -> 보통 자주 사용하는 컬럼을 앞에 위치시키는 것이 좋다.
  • BITMAP 인덱스
  1. OLAP(Online Analytical Processing : 온라인 분석 처리)
  2. 대량의 데이터를 한꺼번에 입력한 뒤 주로 분석이나 통계 정보를 출력할 때 많이 사용함
  3. 데이터 값의 종류가 적고 동일한 데이터가 많을 경우에 많이 사용
  4. Bitmap Index를 생성하려면 데이터의 변경량이 적어야 하고, 값의 종류도 적은 곳이 좋다.
  5. 어떤 데이터가 어디에 있다는 지도정보(MAP)를 Bit로 표기하게 된다.
  6. 데이터가 존재하는 곳은 1로 표시, 데이터가 없는 곳은 0으로 표기
  7. 정보를 찾을 때, 1인 값만 찾게 된다
  8. 비트맵 인덱스를 사용하고 있는 상태에서 컬럼 값이 새로 하나 더 생긴다면 기존의 Bitmap Index를 전부 수정해야 한다.
  • Full Table Scan
  1. High water mark 까지 스캔하는 방법
  2. 인덱스 스캔이 아니고 인덱스가 없는 경우 발생하는 기본 스캔
  3. 인덱스가 없을 경우, full 힌트를 사용, 인덱스를 생성할 때, 테이블의 통계정보를 수집할 때 Full table scan 사용
  • Index Range Scan
  1. 인덱스의 일부분만 범위 스캔해서 data를 엑세스
  • Index Full Scan
  1. index full scan : 인덱스를 full로 스캔
    인덱스 구조에 따라 스캔
    순서가 보장(정렬)
    single block i/o
    병렬 스캔 불가능
  2. index fast full scan : 인덱스를 full로 스캔하는데 더 빠름
    세그먼트 전체를 스캔
    순서가 보장되지 않음(정렬x)
    multi block i/o
    병렬스캔이 가능
  • index skip scan
  1. 인덱스를 full 또는 fast full로 전체를 스캔하는 것이 아니라 중간 중간 skip을 해서 사용
  2. index_ss 힌트 사용
  3. 인덱스의 첫번째 컬럼이 where 조건에 없어도 인덱스를 사용할 수 있게 한다.
  • index merge scan
  1. 두 개의 인덱스를 동시에 사용해서 하나의 인덱스만 사용했을 때보다 더 큰 시너지 효과를 보게하는 스캔 방법
  2. table 엑세스 횟수를 줄이는 효과가 있다.
  • index bitmap merge scan
  1. index merge scan과 스캔방법은 똑같은데 인덱스의 크기를 줄이기 위해서 인덱스를 bitmap으로 변환하는 작업이 추가
  • index join
  1. 인덱스끼리 조인해서 바로 결과를 보고 테이블 엑세스는 따로 하지 않는 스캔 방식
  • index unique scan
  1. primary key나 unique 제약을 걸면 unique 인덱스가 자동으로 생성이 되는데 바로 이 unique 인덱스를 이용해서 데이터를 스캔하는 방법
  2. 해당 컬럼에 unique 제약이 있으면 자동으로 적용
  • AWR(Automatic Workload Repository)
  • 자동으로 DB에 대한 통계 및 성능자료 등을 수집해 스냅샷으로 만들어 일정기간 보관하고, 이를 활용할 수 있게 해주는 기능
  • Buffer, CPU, Pin, Latch, Library 등의 히트율, 자원 사용률, soft/hard parse 정도, 가장 느리게 돌았던 쿼리 등 수집
  • 위 자료들을 토대로 느린 쿼리들에 대해 튜닝을 할 수 있게 됨
  • SGA영역의 값들을 AWR이 추천하는 값으로 변경하여 효율성을 높일 수 있게 됨
  • DB의 문제점들을 파악 가능

https://m.blog.naver.com/PostView.nhn?blogId=whdahek&logNo=220730740118&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

오라클 AWR

◆AWR AWR이란? = Automatic Workload Repository 이다. 자동으로 DB에 대한 통계 및 성능자료 ...

blog.naver.com

  • Cold Backup
  • 서버를 완전히 shutdown 하고 수행하는 백업을 말한다.
  • 가용성을 포기
  • DB를 사용하지 않을 때 사용하는 방법
  • Hot Backup
  • 서버를 내리지 않고 가용성을 지키며 할 수 있는 백업방법
  • 백업받을 Table Space만 부분적으로 상태를 변경시켜서 백업
  • archive log를 사용중이어야 hot backup이 가능
  • hot backup은 백업중에도 DB의 가용성을 지켜야 하기 때문에 변경사항들이 Redo Log에 쌓였다가 Backup이 끝나면 DataFile에 내려쓰는 구조로 동작한다. 그러므로 Archive Log의 사용은 필수다.
  • alter tablespace 이름 begin backup; -> alter tablespace 이름 end backup; -> alter system archive log current;
  • RAC(Real Application Cluster)
  • 하나의 database에 하나의 instance가 할당되는 구조인 single server와는 달리 2개 이상의 instance들을 하나로 묶어 database를 관리하는 서버를 말한다.
  • 작업에 대해 병렬처리를 수행할 수 있어 성능이 좋아질 수 있다.
  • 9i 버전부터는 서로 다른 instance에서 변경된 데이터를 디스크를 거치지 않고 바로 instance로 가져올 수 있는 기능인 cache fusion 기능을 사용 -> instance(memory)1 에서 변경된 데이터가 가장 최근 데이터라면 이 메모리 안의 데이터를 바로 가져와 instance2에서 사용
  • 10g 부터는 ASM 방식으로 RAC를 구성하여 사용
  1. clusterware : 클러스터용 프로그램
  2. 11g에서 ASM 기능이 clusterware에 통합 -> grid라는 명칭으로 변경
  • OCR(Oracle Cluster Repository)
  1. RAC 구성의 전체 정보를 저장하고 있는 디스크로 RAC의 핵심
  2. RAC를 시작할 때 OCR에 저장되어 있는 정보를 보고 RAC를 구성해야 하는데, RAC 시작 후 ASM instance를 시작하기 때문에 OCR을 ASM에 저장할 경우 RAC를 시작할 수 없게 됨
    -> 별도의 raw device에 저장
  • Vote Disk
  1. 각 node들이 장애가 있는지 없는지를 구분하기 위해서 사용
  2. CSSD(node마다 가지고 있는 신호기)가 보내는 Heartbeat에 응답을 보내면서 매초마다 vote disk에도 자신이 정상적으로 동작하고 있다는 표시를 함
  3. CSSD는 vote disk 뿐만 아니라 연결된 가까운 node들에도 heartbeat를 보내며 다른 노드들과 신호를 주고 받았다는 정보를 vote disk에 알려줌
  4. 만약 노드들과 신호를 주고받지 못하고 연결이 끊어진 상태라면 CSSD는 vote disk에서 2차적으로 확인 후, 이상이 있는 node를 cluster에서 분리시키는 작업을 수행

https://12bme.tistory.com/322

 

[오라클] RAC(Real Application Cluster)이란?

일반적인 Oracle Server 구성방식 * Process: A는 작업장1로 복사해와서 작업을 하고, B는 작업장2로 복사를 해와서 작업을 하며, 저장을 database에 합니다. 이렇게 instance와 database 사이를 왔다갔다 하면서..

12bme.tistory.com

  • File System vs Raw device vs ASM
  • File system - 파일과 그 안에 든 자료를 저장하고 찾기 쉽도록 유지, 관리하는 방법
  1. 오라클이 OS를 통해서 디스크에 접근
  2. 디렉토리 구조로 관리하므로 사용자의 편의성이 높다.
  3. OS를 통하므로 속도와 성능이 상대적으로 떨어진다.
  4. OS 의존도가 높다.
  • Raw Device
  1. 오라클이 직접 디스크에 접근하는 방식
  2. 다이렉트로 디스크에 접근하므로 디스크 I/O가 적다.
  3. File system보다 성능, 속도면에서 우수
  4. 관리하는 방식이 까다롭다.
  • ASM(Automatic Storage Management)
  1. File system과 Raw Device의 장점을 모아 스토리지를 관리하는 기술
  2. 데이터를 저장하거나 불러오는 방식에서는 File system과 동일하지만 OS가 아닌 ASM에게 요청하는 부분에서 차이가 있다.
  3. 디스크를 추가하고 삭제하는 작업이 보다 쉽게 가능
  4. 서로 다른 디스크에 균등하고 자동으로 분산 가능
  5. File system에 비해 속도가 빠름
  6. 백업시 RMAN을 사용
  • Dataguard
  • primary DB와 standby DB를 동기화시켜, primary DB가 하드웨어 장애 등의 문제가 생겼을 경우 standby DB로 failover 또는 switchover 시킬 수 있는 시스템 구성을 말한다.
  • Redo apply : Physical Data Guard를 구성할 때 사용하는 방법으로 블록 기반으로 Primary Database와 동일한 on-Disk 데이터베이스 구조를 갖추고 있으며, 오라클 미디어 복구를 사용해 업데이트 된다.
  • SQL apply : Logical Data Guard를 구성할 때 사용하는 방법으로 SQL statement를 사용해 업데이트된다.
  • Oracle Net을 통해서 primary DB의 변경정보를 standby DB로 적용시켜 운영
  • switchover : OS 작업 또는 서버 PM 작업 시 사용(primary와 standby의 역할을 바꿔가며 사용)
  • failover : 디스크 fail 등 긴급상황에서 사용, dataguard 재구성 필요 -> primary가 가동중 디스크의 손실이 일어난 경우 standby DB를 primary로 변경한 후 사용, 이 후 primary가 고쳐진다면 변경사항을 적용하고 다시 dataguard 설정을 한 후 사용 가능
  • Physical standby database : block 대 block 기반으로 primary DB의 redo log를 적용시켜 standby DB를 동기화
  1. LGWR process를 사용
  2. primary DB의 LGWR 프로세스가 standby DB로 redo log를 보내고, standby DB의 RFS(Remote File Server Process)가 redo log를 standby redo log에 적용시킨다.
  3. archiving 되면 archived redo logs가 되고 이것을 MRP(Managed Recovery Process)가 standby DB에 적용
  • Logical standby database : 같은 schema 정의로 공유, primary DB의 sql 문장을 standby DB에 적용
  1. LSP(Logical standby process)가 standby DB에 적용
  2. 공개 읽기-쓰기라는 새로운 유연성을 제공
  3. SQL Apply에 의해 유지되는 데이터를 변경할 수 없으면서 추가 로컬 테이블이 데이터베이스에 더해지고, 로컬 인덱스 구조를 생성해 리포팅을 최적화하거나 Standby DB를 데이터 웨어하우스로 활용하거나 데이터 마트를 로딩하는데 사용하는 정보를 처리할 수 있다.
  • protection mode(보호 모드)
  1. Maximum Protection - primary DB와 standby DB의 redo log를 동기화
    standby DB가 네트워크 이상 등의 이유로 standby로의 전송이 안될 경우 primary DB를 중단
    데이터는 서로 동기화되어 primary DB에서 commit을 하게 되면 standby DB에서 commit이 완료될 때까지 primary DB에서 commit 완료를 하지 않는다.
    성능에 문제를 줄 소지가 있으나 failover 상황이 오더라도 데이터 손실이 없다.
    Physical standby DB에서만 가능
  2. Maximum availability - Maximum Protection과 마찬가지로 primary DB와 standby DB를 동기화시킨다.
    단, standby DB가 네트워크 문제 등의 이유로 전송이 안될지라도 중단되지는 않는다.
    데이터는 maximum protection과 마찬가지로 primary DB에서 commit을 하게 되면 standby DB에서 commit이 안료될 때까지 primary DB에서 commit을 완료하지 않는다.
    Physical standby, logical standby 모두 가능
  3. Maximum Performance - default protect mode이다.
    primary data에 대한 protection이 가장 낮다.
    primary DB에 transaction이 수행되면 이것을 standby DB에 적용 시킬 때, 적용이 끝날 때까지 기다리지 않는다.
    standby DB의 문제로 인해서 primary DB에 성능영향이 가지 않는다.
    그렇지만 failover시 약간의 데이터 손실을 가져올 수 있다.
  4. Maximum Protection과 Maximum availability 모드에서는 primary DB에서 변경된 내용을 standby DB에 적용할 때, standby DB가 정상적으로 적용을 완료했다는 신호를 primary DB가 받아야지만 다음 작업을 수행하지만 Maximum Performance 모드에서는 standby DB의 신호를 받지않고 바로 다음 작업을 수행한다. 
  • Active Data Guard
  1. Physical standby DB를 open한 상태에서도 primary database에서 변경된 내용을 적용 가능
  2. 읽기 전용 접속 모드 - read only with apply
  • snapshot standby
  1. 물리적 스탠바이 데이터베이스로부터 생성되는 새로운 유형의 스탠바이 데이터베이스
  2. 읽기-쓰기가 지원되어 테스트와 다른용도를 위해 Primary Database와 독립적인 트랜잭션을 처리할 수 있음
  3. physical standby database가 snapshot standby database로 변환된 것에 의해 생성된 모든 업데이트가 가능한 standby database
  4. snapshot standby database는 primary database에서 redo data를 받고 archive 하지만 apply는 하지 않음
  5. snapshot standby database에서 발생된 모든 local update를 버림 -> snapshot standby database는 physical standby database로 전환 -> primary database에서 받은 redo data 적용

 

https://ldcc.tistory.com/70

 

Dataguard 구성 방법

PartⅠ. dataguard 개요 및 아키텍처 1) dataguard 란 무엇인가? - primary DB와 standby DB를 동기화시켜, primary DB가 하드웨어 장애 등의 문제가 생겼을 경우 standby DB로 failover 또는 switchover 시킬 수..

ldcc.tistory.com

http://wiki.gurubee.net/display/CORE/19.+DATA+GUARD+11G

 

19. DATA GUARD 11G - [종료]코어 오라클 데이터베이스 스터디 - 개발자, DBA가 함께 만들어가는 구루비 지식창고!

1. 개요 Data Guard 11g의 주요 내용은 다음과 같다. 데이터 보호에 전혀 손상을 일으키지 않고 테스트나 다른 목적으로 공개 쓰기 읽기가 가능한 물리적 스탠바이 데이터베이스 - Snapshot Standby Async 전송 강화로 네트워크 작업량 증가로 인한 영향 제거 Automatic failover for Maximum Performance 지정 이벤트나 오류에 대한 즉각적인 반응을 위한 자동 failover 구성 스토리지 층의 쓰기 손실로

wiki.gurubee.net

  • SQL trace
  • 실행되는 SQL문의 실행통계를 세션별로 모아서 Trace 파일을 만드는 것
  • 세션과 인스턴스 레벨이서 SQL 문장들을 분석할 수 있다.
  • TKPROF 유틸리티를 이용하여 .TRC 파일을 쉽게 분석 가능
  • parse, execute, fetch 작업들이 처리된 횟수 count
  • 수행된 CPU 프로세스 시간과 경과된 질의 시간들
  • 물리적(Disk), 논리적(Memory) 읽기를 수행한 횟수 - 질의의 parse, execute, fetch 부분들에 대해 디스크에 있는 데이터 파일들로부터 읽은 데이터 블록들의 전체 개수 
  • 처리된 row 수 - 결과 set을 생성하기 위해 오라클에 의해 처리된 행의 전체 개수
  • 라이브러리 캐시 miss - 분석된 문장이 사용되기 위해 라이브러리 캐시 안으로 로드되어야 하는 횟수
  • TKPROF
  • Transient Kernel Profiler의 약자
  • SQL Trace를 통해 생성된 Trace 파일을 분석이 가능한 형식으로 전환하여 출력
  • TKPROF 결과 값
로우/컬럼 설명
Parse SQL문이 파싱되는 단계에 대한 통계. 새로 파싱을 했거나 Shared SQL Pool에서 찾아 온 것도 같이 포함 된다.
Execute SQL문의 실행 단계에 대한 통계. Update, Insert, Delete 문장들은 여기에 수행한 결과만 나온다.
Fetch SQL문이 실행되면서 페치된 통계
count SQL문이 파싱/실행/페치가 수행된 횟수
cpu parse, execute, fetch가 실제로 사용한 CPU시간
elapsed 작업의 시작에서 종료시까지 실제 소요된 시간
disk 디스크에서 읽혀진 데이터 블럭의 수
query 메모리내에서 변경되지 않은 블럭을 읽거나 다른 세션에 의해 변경되었으나 아직 커밋되지 않아 복사해 둔 스냅샷 블럭을 읽은 블럭 수. SELECT문에서는 대부분 여기에 해당하며 Update, Insert, Delete 작업시에는 소량만 발생 합니다.
current 현 세선에서 작업한 내용을 커밋하지 않아 오로지 자신에게만 유효한 블럭(Dirty Block)을 액세스한 블럭 수. 주로 Update, Insert, Delete 작업시 많이 발생 한다
rows SQL문을 수행한 결과에 의해 최종적으로 액세스된 로우의 수

http://www.gurubee.net/lecture/1842

 

SQL Trace와 TKPROF 유틸리티

이 강좌는 2003년도에 작성 되었습니다. 관련 강좌로 Oracle Tuning 강좌를 참고하세요 SQL Trace란?   SQL Trace는 실행되는 SQL문의 실행통..

www.gurubee.net

  • Backup&Recovery
  • Backup : 데이터베이스를 복사
  • Recovery : 장애가 발생하기 바로 전 시점으로 복구
  • 오라클 데이터베이스의 백업 대상
  1. 모든 데이터 파일
  2. 컨트롤 파일
  3. Redo Log File
  4. 파라미터 파일
  5. 패스워드 파일
  • Physical Backup : DB를 구성하는 File들을 그대로 복사하는 방법
    DB가 손상시에 아무런 피해 없이 또는 최소한의 피해로 Database를 Recovery하는 방법
  1. Offline Backup(Cold Backup) - Oracle이 Close(Shutdown)된 상태에서 OS의 COPY 명령어를 통해 복사하는 방법으로서, NoArchiveLog Mode, ArchiveLog Mode 둘 다에서 가능
  2. Oracle이 Open중인 상태에서 OS의 COPY 명령어를 통해 복사하는 방법으로서, ArchiveLog Mode일 경우만 가능하며 DB를 24시간 운영하는 System에서 사용하는 백업 방법
  • Logical Backup - Export Utility $ORACLE_HOME/bin/exp 명령어를 이용하여 Backup하는 방식으로 DB의 논리적인 정보(Schema 구조, 데이터 등)를 저장하는 방식
  • Media Recovery - Disk나 매체등의 장애가 원인일 경우 Recovery
  1. Physical Backup으로부터의 복구
    • complete Recovery - 장애 시점까지 Recovery하는 방법
      변경된 정보를 저장하고 있는 Redo Log 파일들이 재사용되기전에 저장되어지는 Archive Log File이 필요하므로 Archive Log Mode에서만 가능
      NoArchive Log Mode에서는 백업본 이후 적용할 Archive File이 존재하지 않는 경우 백업 받은 시점으로만 데이터베이스를 복구 가능
      완전 복구
    • incomplete Recovery - Backup본을 Restore한 이후 변경된 작업이 들어있는 Archive Log File을 찾을 수 없을 때나, DB를 특정 시점으로 돌리는 방법
      archive log file이 중간에 끊겨있을때 끊기기 바로 직전까지 복구
      특정 archive log file 까지만 복구 가능
      불완전 복구
  2. Logical Backup으로부터의 복구
    • Import Utility - $ORACLE_HOME/bin/imp를 이용하여 데이터를 복구하는 방법
      exp 명령어로 export한 DB의 데이터를 다른 DB에 적용하거나 복구할 때 사용가능
  • Instance Recovery - 비정상적인 종료(abort, 정전, CPU 고장, 메모리 손실 등과 같은 장애)에 의해 Oracle Instance가 Error를 일으켜 fail된 경우
  1. SMON에 의해 자동으로 이루어짐
  2. 비정상적인 종료 후 비동기화 되어있는 상태에서 Database open
  3. 롤 포워드(Mount 단계에서 수행) : commit 되었는데 data file에 반영되지 않고 없어진 data를 복구(마지막 CKPT이후부터 redo log 재실행 -> DBWR가 데이터 파일에 적용)
  4. 데이터베이스 오픈
  5. 롤백 단계 : 위 롤 포워드 작업에서 redo log의 재실행 -> DBWR의 작동으로 commit하지 않았는데 data file에 반영된 data를 이전 값으로 되돌리는 작업
  6. 데이터베이스가 동기화되어 데이터베이스 운영 가능
  • User Error Recovery : 사용자의 실수로 인한 Transaction으로 인해 원하지 않는 결과가 발생한 경우(Table truncation 또는 Drop 에러) 다시 복원하는 방식
    imp를 이용하는 경우가 대부분
  • 기본적인 Backup 정책
  1. 정기적으로 COLD BACKUP을 받도록 함
  2. database에 구조적인 변화가 생기기 전 반드시 COLD BACKUP을 받도록 함
  3. database에 장애가 발생하지 않도록 운영
  4. 장애시에는 Recovery까지의 시간이 최소한이 되도록 백업 정책을 세움
  • 기본적인 Backup 규칙
  1. Log file을 Disk에 Archive한 후, 추후에 다른 disk나 tape 등에 다시 복사 - 저장 공간을 여러 위치에
  2. data file의 backup은 실제 data file과는 다른 disk에 유지
  3. control file은 다중화 하여 여러개를 유지
  4. Log file이나 data file을 추가하거나 Rename 삭제 하는 등 database의 구조가 변경되었을 경우 반드시 control file 백업
  • NOARCHIVELOG MODE
  1. 데이터베이스를 설치하면 설정되는 기본모드
  2. 체크포인트가 발생한 후 즉시 리두 로그 파일을 재사용 할 수 있음
  3. 리두 로그가 겹쳐 쓰여지면서 변경정보가 없어지므로 마지막 전체 백업에 대해서만 복구가 가능
  4. 데이터베이스가 정상 종료되었을 때만 복구 가능한 백업본 생성이 가능
  5. 백업할때마다 전체 데이터파일 및 controlfile을 백업해야 함
  6. NOARCHIVELOG MODE의 DB는 동기화되어 있으므로 반드시 온라인 로그 파일을 백업해야 하는 것은 아님
  7. REDO LOG 파일이 겹쳐 써지기 때문에 마지막 전체 백업 이후의 모든 데이터가 손실됨
  • ARCHIVELOG MODE
  1. 다 쓰여진 리두 로그 파일은 Log Switch가 일어나기 전 체크포인트가 발생하고 ARCn 프로세스에 의해 리두로그 파일을 백업할 때까지(Archivelog file 생성) Redo Log File은 재사용될 수 없음
  2. ARCHIVE LOG FILE은 Media 장애가 발생했을때 데이터가 손실되지 않도록 데이터베이스를 보호
  3. ARCHIVE LOG MODE는 온라인 상태에서 데이터베이스를 백업할 수 있음(HOT BACKUP)
  • ARCHIVELOG 모드로 변경
  1. PFILE을 이용하여 변경 -> 파라미터 파일에서 수정 / SPFILE을 ALTER SYSTEM SET ... SCOPE=SPFILE; 명령어로 변경
    LOG_ARCHIVE_START=TRUE -> 10g 부턴 사용 안됨
    LOG_ARCHIVE_DEST='아카이브 로그 파일 저장할 경로'
    LOG_ARCHIVE_FORMAT=%S.ARC
    %S : redo 로그 시퀀스 번호를 표시하여 자동으로 왼쪽이 0으로 채워져 파일 이름 길이를 일정하게 만든다.
    %s : redo 로그 시퀀스 번호를 표시하고, 파일 이름 길이를 일정하게 맞추지 않는다.
    %T : redo 스레드 넘버를 표시하며, 자동으로 왼쪽이 0으로 채워져 파일 이름 길이를 일정하게 만든다.
    %t : redo 스레드 넘버를 표시하며, 파일 이름 길이를 일정하게 맞추지 않는다.
  2. 데이터베이스 종료 - NORMAL, IMMEDIATE, TRANSACTIONAL
  3. 데이터베이스를 MOUNT 상태로 시작
  4. ALTER DATABASE 명령을 사용하여 데이터베이스의 모드 변경 - ALTER DATABASE  ARCHIVELOG;
  5. 데이터베이스를 OPEN
  6. ARCHIVE LOG LIST; 로 확인
  7. 데이터베이스에 대한 전체 백업 수행 -> control file 정보가 변경되어 이전의 백업본을 사용할 수 없기 때문
    모든 데이터 파일 및 컨트롤 파일을 백업
  • Closed 백업(=Cold 백업)
  1. Closed 백업은 데이터베이스가 Shutdown된 상태에서 백업을 하는 방법을 의미
  2. Archive Log Mode와 Noarchive Log Mode 둘 다 가능
  3. 모든 Data File, Control File, Redo Log File이 대상
  4. 정상적인 종료일 때만 가능 - normal, transactional, immediate
  5. 초기화 파라미터 파일은 변경되었을 경우에 백업
  6. 개념적으로 단순하여 백업 및 복구방법이 용이
  7. Noarchive Log Mode일 경우에는 백업받은 시험 이후의 데이터는 보장하지 않으므로 장애가 발생하였을 경우는 변경된 사항을 수동으로 입력해 주어야 함
  • Open 백업(=Hot Backup)
  1. 데이터베이스가 운영중인 상태(Open 상태)에서 백업하는 방법
  2. Data File을 Online Backup하고 있다면 이 시점에 Data File에 저장되어야 할 사항이 Redo Log File에 저장
  3. 만약 Noarchive Log Mode라면 Online Redo Log를 재사용하게 되므로 후에 Recovery가 불가능 할 수 있기 때문에 Oracle은 Noarchive Log Mode에서는 Online Backup을 불가능하도록 해 놓음
  4. Archive Log Mode에서만 백업이 가능
  5. 테이블 스페이스의 모든 Data File 또는 하나의 Data File을 백업할 수 있음
  6. alter tablespace system begin backup;
  7. host copy (본 파일 위치) (백업 받을 위치)
  8. alter tablespace system end backup;
  9. control file의 백업은 따로 받아햐 함
  • Logical Backup
  1. Export Utility를 이용하여 Database를 백업하는 것
  2. 테이블이 DROP 되었을 경우에 많이 사용되는 방법으로 백업 본 이후의 변경사항은 수동으로 입력
  3. Table 모드 - 지정된 테이블만 export -> exp scott/tiger tables=(테이블1, 테이블2, ...) rows=y file=epp_dept.dmp
  4. User 모드 - 해당 유저에 속하는 모든 객체들을 백업 -> exp system/manager owner=scott rows=y file=scott.dmp
  5. Tablespace 모드 - 지정한 테이블 스페이스 내의 모든 객체를 백업 -> exp system/manager tablespaces=(users) file=ts.dmp
  6. 전체 데이터베이스 모드 - exp system/manager file=full.dmp full=y
buffer 데이터 행들을 가져오는데 사용되는 버퍼의 크기
file 생성되는 파일의 이름
rows 행을 포함하는지 여부(Y/N)
full 전체 데이터베이스를 export할지 여부(Y/N)
owner export할 소유자(유저)의 이름
table export할 테이블
tablespaces export할 테이블스페이스 이름
log 로그 파일을 저장할 이름
  • Recovery = Restore + Archive 적용
  1. Restore란 Database에 장애가 발생하기 이전에 Backup본을 이용하는 방법
  2. Recovery란 백업본을 적용한 데이터베이스에 변경사항을 기록한 Archive Log File을 적용한 것
  3. Complete Recovery - database에 장애가 발생하기 이전 시점까지 recovery하는 것을 의미하며 database를 archive log mode로 운영해야만 가능
  4. spfile이 없으면 mount 불가능, control file이 없으면 open 불가능
  5. v$datafile_header 뷰를 통해 현재의 에러 상황을 확인
  • system file에 문제가 생긴 경우
  1. noarchive log mode
    1. system 데이터 파일에 I/O가 발생하는 순간 DB가 종료되어 문제 발생
    2. 다시 startup 해도 control file에 있는 경로의 system file이 문제가 생겨서 open하지 못함
    3. 기존에 백업해둔 파일들을 모두 가져와서 복구한 후 백업 이후의 변경분을 수동으로 적용
  2. archive log mode
    1. 위에서 모든 파일을 가져온 뒤 archive log를 적용하여 오류 직전의 db로 회복
  • system과 같은 open하는데 주요 data file을 제외하고 일반 데이터 파일에 이상이 생긴 경우는 그 데이터 파일만 offline 시킨 후 restore한 다음 백업 이후의 변경사항을 적용 
  1. alter database '이상 있는 데이터파일 경로' offline;
  2. !cp (백업본 위치/이상 있는 데이터파일의 백업본) (원래 데이터파일 위치)
  3. recover datafile '복구한 데이터 파일 위치/데이터 파일';
  4. auto 입력
  5. archive log file들에 이상이 없는 경우 완전 복구 완료
  6. 만약 archive log file이 중간에 끊긴 경우 recover database until cancel로 복구 후 데이터베이스를 open할 때 resetlogs로 open한다.
  7. 일정 시간대의 log까지만 적용하고 싶다면 set autorecovery on -> recover database until time '원하는-시간-입력'
  • backup control file을 이용한 불완전 복구
  1. 데이터파일 뿐만아니라 컨트롤파일도 백업되어 있어야 한다.
  2. 만약 archive 파일이 유실되었는데 데이터가 매우 중요한 것들이라서 복구를 해야만 한다면
  3. alert 파일에서 데이터가 삭제된 시점을 확인하고 recover database until time '시간' using backup controlfile 적용
  4. 데이터베이스를 resetlogs를 이용하여 open
  • Logical Recovery
  1. imp userid=system/비밀번호 file=full.dmp(exp한 파일) full=y -> 전체 데이터베이스를 import
  2. imp userid=scott/tiger file=scott.dmp -> scott유저의 데이터만 import
userid import를 실행시키는 계정의 아이디/패스워드
buffer 데이터 행들을 가져오는데 사용되는 buffer의 bytes 크기
file import될 expory 덤프 파일명
show 파일 내용이 화면에 표시되어야 할 것인가(Y/N)
ignore import 중 create 명령을 실행할 때 만나게 되는 에러들을 무시할 것인지(Y/N)
indexes 테이블 index의 import 여부(Y/N)
rows 테이블 데이터를 import할 것인가(Y/N) -> N으로 설정하면 데이터베이스 객체들에 대한 DDL만 실행
full full 엑스포트 덤프 파일이 import할 때 사용
tables import될 테이블 리스트
commit 배열 단위로 commit을 할 것인가 결정. 기본적으로는 테이블 단위로 commit
fromuser export 덤프 파일로부터 읽혀져야 하는 객체들을 갖고 있는 데이터베이스 계정
touser export덤프 안에 있는 객체들이 import될 데이터베이스 계정
  • 백업본이 없는 데이터파일 복구
  1. 이상이 생긴 데이터파일을 새로 생성
  2. 로그파일 생성 - alter system switch logfile;
  3. 데이터베이스 종료 후 기존의 백업 본으로 restore -> 백업파일들을 복사해오는데 이상이 생긴 데이터파일은 없음(미리 만들어 놓음)
  4. recovery database using backup controlfile
  5. 백업본에 없던 데이터를 복구하여 unnamed라는 파일이 추가 되었으나 실제 데이터파일이 추가된 것은 아님
  6. alter database create datafile '데이터파일경로/unname' as '데이터파일경로/만들어놓은파일'
  7. 다시 recover 명령을 이용하여 recovery 수행 -> Recover database until cancel using backup controlfile;

http://www.gurubee.net/oracle/br

 

Oracle Backup And Recovery 강좌

 

www.gurubee.net

  • Object와 Segment
  • Object와 Segment의 가장 큰 차이점은 Object에 데이터를 저장하기 위한 extent가 존재하느냐의 여부이다.
  • Object의 종류 : table, index, view, sequence, synonym 등
  • Segment는 Object의 실제 저장공간 같은 개념이다. -> table, index의 뼈대(데이터는 없음)
  • data block < extent < segment < table < tablespace
  • ORACLE CURSOR
  • select 문을 통해 결과값들이 나올 때 이 결과들은 메모리 공간에 저장하게 되는데 이 메모리 공간을 커서 라고 한다.
  • 커리문에 의해서 반환되는 결과값들을 저장하는 메모리 공간
  • SQL plus에서 사용자가 실행한 SQL문의 단위
  • Fetch는 커서에서 원하는 결과값을 추출하는 것 -> select
  • 묵시적 커서(Implicit Cursor) : 오라클에서 자동으로 선언해주는 SQL 커서(사용자는 생성 유무를 알 수 없음)
  • 명시적 커서(Explicit Cursor) : 사용자가 선언해서 생성한 후에 사용하는 SQL 커서, 주로 여러개의 행을 처리하고자 할 경우 사용
  • RBO(Rule Based Optimizer) 와 CBO(Cost Based Optimizer)
  • 규칙 기반 옵티마이저 : 정해진 규칙에 따라 비용에 상관없이 우선순위가 가장 높은 실행 계획을 사용한다.
  • 비용 기반 옵티마이저 : 정해진 규칙이 없으므로 비용이 가장 적게드는 실행계획을 사용한다.
  • 부분범위처리
  • 부분범위처리의 목적 : 스캔범위를 나누어서 운반단위를 가능한 빨리 채워서 처리속도를 향상시키는 것
  • 10000건의 데이터를 스캔해야 할 때 1000건만 읽어서 필요한 운반단위를 채울 수 있다면 10000건을 다 읽지 않고 1000건씩 10번으로 나눠서 처리할 수 있도록 하는 것
  • 논리적으로 전체범위를 읽어 추가적인 가공을 하지 않고도 동일한 결과를 추출할 수 있다면 자격이 있다.
  • 부분범위처리를 할 수 없는 경우
  1. SUM, COUNT 등의 GROUP 함수를 사용한 경우
  2. ORDER BY가 사용된 경우
  3. UNION, MINUS, INTERSECT를 사용한 경우
  4. UNION -> 중복 제거의 목적이 없다면 UNION ALL로 대체
  5. ORDER BY -> INDEX를 이용하여 ORDER BY를 하지 않아도 되는 형태로 대체
  6. MINUS, INTERSECT -> EXISTS, NOT EXISTS, IN, NOT IN 사용

http://www.gurubee.net/lecture/2468

 

부분범위 처리

부분범위처리란 어떤 SQL에서 WHERE절에 주어진 조건을 만족하는 전체범위를 처리하지 않고 운반단위(ARRAY SIZE)까지만 먼저 처리하여 그 결과를 추..

www.gurubee.net

  • 트리거(Trigger)
  • insert, update, delete문이 table에 대해 행해질 때 묵시적으로 수행되는 프로시져
  • table과는 별도로 database에 저장
  • view에 대해서가 아니라 table에 관해서만 정의 될 수 있다.
  • 행 트리거 : 컬럼의 각각의 행의 데이터 행 변화가 생길때마다 실행되며, 그 데이터 행의 실제값을 제어할 수 있다.
  • 문장 트리거 : 트리거 사건에 의해 단 한번 실행되며, 컬럼의 각 데이터 행을 제어 할 수 없다.
  • before : insert, update, delete가 실행되기 전에 트리거가 실행
  • after : insert, update, delete가 실행된 후에 트리거가 실행
  • for each row : 행 트리거가 되는 옵션
  • 트리거를 걸어놓은 문장이 commit되거나 rollback 될 때 트리거의 작업도 함께 수행된다.

http://www.gurubee.net/lecture/1076

 

Trigger(트리거)

트리거란?   INSERT, UPDATE, DELETE문이 TABLE에 대해 행해질 때 묵시적으로 수행되는 PROCEDURE 이다.   트리거는 TABLE과는 별도로 DA..

www.gurubee.net

  • SYNONYM
  • 이름을 줄여주는 역할
  • 테이블의 이름을 설정
  • 보통 다른 유저의 객체(테이블, 뷰, 프로시저, 함수, 패키지, 시퀀스 등)를 참조할 때 많이 사용
  • 실제로 SYNONYM을 이용하는 이유는 다른 유저의 객체를 사용할 때 유저의 이름과 객체의 실제이름을 사용하는데 그 두개를 감춤으로써 데이터베이스의 보안을 개선하기위해 사용
  • 시노님으로 지정한 객체의 이름을 바꾸거나 이동할 경우 객체를 사용하는 SQL문을 모두 다시 고치는 것이 아니라 시노님만 다시 정의하면 되기 때문에 매우 편리
  • 객체의 긴 이름을 사용하기 편한 짧은 이름으로 해서 SQL코딩을 단순화 시킬 수 있다.
  • 시노님을 사용하는 유저는 참조하고 있는 객체들에 대한 소유자, 이름, 서버이름을 모르고 시노님 이름만 알아도 사용할 수 있다.
  • Private Synonym : 전용 시노님, 특정 사용자만 이용할 수 있다.
  • Public Synonym : 공용 시노님은 공용 사용자 그룹이 소유하며 그 데이터베이스에 있는 모든 사용자가 공유한다.
  • 시퀀스
  • 시퀀스 캐싱
  1. 시퀀스 캐시는 전통적인 캐시와 다른 '목표'이다.
  2. 시퀀스 캐시를 100으로 설정한다고 해서 100개의 번호를 생성, 저장하지 않는다.
  3. 시퀀스는 SGA 내에서 캐시된다.
  4. 다음 시퀀스 번호(NEXTVAL)가 저장된다.
  • 시퀀스는 SEQ$에 1개 레코드로 정의 됨
  • 순차적으로 증가하는 순번을 반환하는 데이터베이스 객체
  • start with : 시퀀스의 시작 값
  • increment by : 시퀀스의 증가 값을 지정
  • maxvalue : 시퀀스 최대값
  • minvalue : 시퀀스 최소값
  • cycleinocycle : 최대값 도달시 순환 여부
  • cache : cache 여부, 원하는 숫자만큼 미리 만들어 Shared Pool의 Library Cache에 상주
  • 바인딩 쿼리
  • 바인드 변수 - SQL 문장을 실행할 때 SQL에 사용자 값을 전달할 수 있는 통로 역할을 한다. 또한 오라클 성능에 큰 영향을 미치는 SQL 공유와도 큰 연관이 있다.
  • 선언 방법
  1. var[riable]을 사용한 선언 - 선언시 이름만 사용, 참조시 콜론 함께 사용
    세션에서 전역적으로 선언됨, 블럭 내부에서 var를 사용해서 선언할 수 없음
    값 할당시 exec를 사용, 함수 호출처럼 다루어짐
    var a number;
    exec :a := 2;
    select :a from dual;
  2. Toad, SQL Developer 등의 툴에서 선언
  3. declare 내부에서 선언
  4. 프로그램 파라미터에서 선언
  • 테이블스페이스
  • 하나 또는 여러개의 데이터 파일로 구성되어 있는 논리적인 데이터 저장구조
  • 데이터파일로 구성되어 있으며, 기본적인 테이블 스페이스는 각각의 역할을 갖고 생성된다.
  • 시스템 테이블 스페이스와 비시스템 테이블스페이스로 구분
  1. 시스템 테이블 스페이스 - 오라클 데이터베이스를 생성할 때 자동으로 생기며 오라클 데이터베이스의 기동을 위해 꼭 필요한 테이블스페이스
    - 모든 데이터 사전 정보와, 저장 프로시저, 패키지, 데이터베이스 트리거 등을 저장
    - 유저데이터가 포함될 수 있지만 관리 효율성 면에서 포함시키면 안됨 
  2. 비 시스템 테이블 스페이스 - 롤백세그먼트, 임시세그먼트, 응용프로그램 데이터, 응용프로그램 인덱스를 저장할 수 있음
    - 공간관리를 쉽게 하기 위해서 생성
    - 유저에게 할당되는 공간

http://www.gurubee.net/lecture/1094

 

테이블스페이스(TABLESPACE)란?

테이블스페이스(TABLESPACE)란   테이블스페이스는 하나 또는 여러개의 데이터 파일로 구성되어 있는 논리적인 데이터 저장구조 입니다.  ..

www.gurubee.net

  • SGA의 구조
  • SGA는 데이터베이스 아키텍처에서 메모리영역에 존재한다.
  • SGA 안에는 shared pool(library cache + dictionary cache), database buffer cache, redo log buffer, large pool, stream pool, java pool, nk buffer, keep buffer, recycle buffer 등 버퍼 캐시 영역이 존재하고 DBWR, LGWR, PMON, SMON, CKPT 의 background process가 존재한다.
  • 많은 사용자들이 한꺼번에 사용할 수 있는 대규모 공유 메모리 영역이다. 
  • shared pool
  1. shared pool에는 실행했었던 SQL문장과 그 실행계획이 저장되어있는 library cache와 열람했던 dictionary 정보들이 저장되어 있는 dictionary cache가 있다.
  2. sql문을 실행하게 되면 가장먼저 parse 과정이 진행되는데 shared pool에 실행계획이 있는지를 먼저 확인하고 있으면 그 실행계획을 바로 사용하게 된다.
  • database buffer cache
  1. database buffer cache는 데이터를 수정하거나 확인할 때 디스크에 access하는 시간보다 메모리 영역에 미리 올려두고 사용하는 것이 더 빠르기 때문에 사용하는 공간이다.
  2. default한 data block의 크기가 8KB 이므로 database buffer cache에 한 번에 할당하는 공간의 크기도 8K이다.
  3. 그렇지만 nk buffer라고 해서 다른 크기의 블럭을 읽어들이기 위해 따로 공간을 할당해 놓을수도 있다.(2K, 4K, 16K, 32K 등)
  4. free buffer : 데이터를 적재할 수 있는 공간을 의미한다. 작업이 진행중인 공간이나 작업이 끝났지만 아직 database에 적용이 되지 않은 공간은 free한 buffer라고 할 수 없다.
  5. pin buffer : 아직 작업이 진행중인 공간을 말한다. 이 영역은 latch가 걸려있기 때문에 동일한 데이터를 수정해야 하는 경우 작업이 끝날때까지 대기해야한다.
  6. dirty buffer : pin buffer에서 작업이 모두 끝났지만 database에 적용이 되지 않은 상태의 buffer를 말한다.
  7. 이 버퍼들은 LRU list에 의해 관리되는데 가장 최근에 사용된 버퍼가 왼쪽으로 옮겨지고 사용하지 않은 버퍼가 오른쪽으로 밀리는 형태로 관리된다.
  8. 만약 디스크에서 데이터를 새로 적재해야 하는 상황이 되면 가장 오른쪽부터 스캔하여 free한 buffer를 찾는다.
  9. 이때 LRU list를 스캔하면서 free를 발견하기 전의 dirty buffer들을 발견하게 된다면 LRUW list에 dirty buffer들의 위치를 저장한다.
  10. 1/3(약 40%)의 LRU list를 찾았음에도 free buffer가 발견되지 않았다면 DBWR에 의해 모든 dirty buffer들을 데이터베이스에 적용하는 작업을 수행하고 그때 생성되는 free buffer를 사용하게된다.
  • redo log buffer
  1. redo log file을 저장하기 전에 메모리 영역에 로그를 기록하는 공간
  2. 많은 작업들이 수행되는 SGA영역에서 리두 로그 버퍼가 꽉차서 대기해야하는 상황이 오지 않도록 하기위해 1/3이 찼을 때, commit이 되었을 때, redo log 데이터가 1MB 이상일 때, 로그 파일 switch가 발생할 때 등 자주 redo log file에 기록한다.
  3. DML 작업(update, insert, delete 등)을 수행할 경우 예기치 못한 상황으로 인스턴스가 종료되는 상황이 왔을때, commit을 한 직후까지 인스턴스를 회복시키기 위해서 사용
  4. 또한 archive log mode로 아카이브 로그 파일이 저장되는 경우 db의 오류로 백업본을 불러와 현재의 상태까지 회복하고자 할 때 사용되기도 함
  • large pool : 말 그대로 대규모의 메모리 할당을 제공하기 위해 설정하여 사용하는 공간, shared pool에서 다룰 수 없을 만큼 큰 메모리 조각 할당
  • stream pool : 데이터베이스를 복사하여 다른 데이터베이스로 옮기고자 할 때 buffer queue message를 위해 사용하는 공간
  • java pool : 자바 명령을 사용하는 경우 구문 분석을 위해 사용하는 메모리 공간
  • keep buffer : 자주 사용할 것 같은 데이터들을 세션이 끝날때까지 메모리에 상주시키기 위한 공간
  • recycle buffer : 자주 사용할 것 같지 않은 데이터들을 위한 버퍼 공간, 랜덤 액세스를 하는 큰 테이블에 사용되면 좋은 버퍼 풀
  • DBA와 DBE의 차이

엔지니어는 설치/이관/장애처리 등 데이터베이스의 기술적인 오퍼레이션만 수행하는 사람들을 DBE 라 하고, 관리가 들어가면 DBA가 됩니다.
관리라 하면 시스템 적인 관리 (데이터베이스와 관련 된 스토리지 및 장비 관리 등등)를 하면서 기업 전산실에 많은 수의 데이터베이스 시스템을 관리하는 경우도 있고, 개발자 분들이 잘 아시는 성능관리 (튜닝, 데이터베이스 디자인 등)을 하시는 경우도 있죠.
단적인 예를 들어서 DBMS의 백업/복구 방법을 아는 정도는 엔지니어도 할 수 있지만, 전산실의 DBMS들에 대한 백업/복구 정책을 새울 수 있으면 DBA라고 할 수 있다고 봅니다.

 

  • Alert log file
  • oracle 데이터베이스는 운영하면서 발생하는 모든 Event를 Alert 로그 파일에 기록
  1. 발생된 모든 내부에러, 블럭 훼손 에러, 데드락 에러
  2. create/alter/drop database/tablespace, startup, shutdown, archive log, recover 등의 sql 문장을 사용한 관리 작업
  3. 공유 서버와 디스패처 프로세스의 기능과 관련된 에러와 메시지
  4. 구체화된 뷰의 자동 갱신 시 발생하는 에러
  5. startup 시에 사용된 비 기본 초기화 파라미터들
  6. 관리 작업이 성공한다면, 메시지는 alert log에 시간과 completed 라는 메시지를 기록
  7. 시스템 관련 에러나 정보들을 보여주고 사용자 관련 에러는 저장되지 않음
  • 그래서 DBA 또는 엔지니어는 데이터베이스가 운영되는 동안 항상 Alert 로그 파일을 주시, 분석하여 특별한 문제가 없는지 확인을 하기도 한다.
  • $ORACLE_BASE/diag/rdbms/데이터베이스 이름/오라클 sid 이름/trace
    -> show parameter background_dump_dest
    v$parameter 나 v$diag_info 에서도 찾을 수 있음
  • alert log 파일은 지워지더라도 alert log가 입력될 시점에 자동으로 새로 생성하고 기록한다.

 

'Oracle > DataBase 개념' 카테고리의 다른 글

SQL*Loader  (0) 2020.03.11
데이터 이동 - data pump  (0) 2020.03.10
backup & recovery - RMAN  (0) 2020.03.09
메모리 구성 요소 관리  (0) 2020.02.26
undo tablespace 생성, 다른 DB 접속  (0) 2020.02.25
  • 아카이브 모드로 변경
  • shutdown immediate;
  • startup mount
  • alter database archivelog;
  • alter database open;
  • archive log list
  • RMAN에서 백업
  • rman target /
  • show all
  • configure controlfile autobackup on;
  • backup database;
  • Trace file
  • alter session set tracefile_identifier='con'; -> 트레이스 파일에 con을 붙여서 저장
  • alter database backup controlfile to trace; 
  • show parameter diag
  • ADR_BASE - diagnostic_dest/diag/rdbms/db_name/instance_name
  • ADR_HOME - diag부터
  • control file 소실

  • rm /u01/app/oracle/oradata/orcl/control01.ctl
  • alter system checkpoint; -> 컨트롤 파일 하나가 지워져도 오류가 발생하지 않음
  • tablespace 생성 시에도 오류가 발생하지 않음
  • 10g부터는 controlfile이 없어져도 temp 안에 임시방편으로 기록하는 작업을 함, 오류가 날 수도 있음
  • shutdown 후 startup 시 controlfile 관련 오류 발생
  • /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert 파일 확인 -> 어느 컨트롤 파일이 잘못됐는지 확인 가능
  • controlfile 복사하여 다시 지워진 위치에 저장
  • alter database mount -> alter database open
  • 이번에는 2개의 controlfile을 삭제
  • shutdown abort -> startup
  • rman에서 restore controlfile from autobackup;

  • alter database mount 후 recover database;
  • open이 안됨 -> resetlogs로 open 해야 함
  • alter database open resetlogs; -> log의 sequence 번호가 reset
  • reset을 한 경우 반드시 현재 상태를 다시 백업해야 함
  • report obsolete; -> 이제 필요 없어진 백업본들을 확인 가능
  • delete obsolete; -> yes
  • archivelog 모드에서의 Noncritical 데이터 파일 손실
  • open 중에 복구
  1. offline -> v$recover_file
  2. restore
  3. recover
  4. online
  • datafile 손실 - users

  1. LSN 1 : users 테이블 스페이스에 테이블 생성 후 alter system switch logfile;
  2. LSN 2 : alter system switch logfile; -> LSN이 + 1 
  3. LSN 3 : emp_test1의 내용 삽입 후 commit -> alter system switch logfile;
  4. LSN 4 : alter system switch logfile;
  5. LSN 5 : 모든 logfile이 덮이도록 log switch 5번

  1. !rm /u01/app/oracle/oradata/orcl/users01.dbf
  2. alter system flush buffer_cache; -> 버퍼 캐시 비움
  3. emp_test1을 확인하지 못함
  4. 데이터 파일 번호 기억

  1. rman에서 restore datafile 4; -> error 발생
  2. 문제가 있는 데이터 파일을 offline
  3. table space를 offline - alter tablespace users offline; -> 변경 작업을 기록하고 offline 하기 때문에 오류 발생
  4. alter tablespace users offline immediate; -> 전부 깨졌을 시 immediate, 일부 깨졌을 경우 temporary
  5. rman에서 restore tablespace users; -> 자동으로 가장 최근의 백업본으로부터 restore
  6. 현재 시점의 file이 아니기 때문에 recover 필요
  7. recover tablespace users; -> recovery를 하기 위한 아카이브 로그 파일을 확인한 후 아카이브 로그를 적용시킴
  8. sql에서 alter tablespace users online;
  • 생성한 테이블스페이스 복원 

 

  1. LSN 10 : new_tbs tablespace create, scott.dept_test1 create
  2. log switch 3번
  3. LSN 13 : insert into scott.dept_test1 select * from scott.dept_test1; -> commit;
  4. log switch 3번
  5. insert 후 log switch 5번
  6. !rm /home/oracle/new_tbs01.dbf
  7. PGA영역 정보를 없애기 위해 exit 후 재접속
  8. alter system flush buffer_cache;
  9. dept_test1을 읽을 수 없음

  1. alter database datafile 7 offline;
  2. rman에서 restore datafile 7; -> backup 본이 없어도 생성
  3. recover datafile 7; -> 로그를 적용시킴
  4. 아카이브 로그 모드로 변경 후 백업을 한 경우만 위와 같은 복구 작업 가능
  5. no archive log mode에서 위와 같은 상황 발생 시 복구 불가능 - log file이 없기 때문
  6. sql에서 alter database datafile 7 online;
  • system tablespace 삭제
  1. rm /u01/app/oracle/oradata/orcl/system01.dbf
  2. offline 시킬 수 없는 데이터 파일
  3. db를 shutdown 한 후 mount 상태에서 진행
  4. shutdown abort -> startup(자동으로 mount에서 멈춤)
  5. mount 상태에서 open으로 전환할 때 offline이나 read only인 파일은 일관성 체크하지 않음
  6. rman에서 restore datafile 1;
  7. recover datafile 1;
  8. sql에서 alter database open;
  • users tablespace 삭제, 아카이브 로그 삭제

  1. 테이블 생성 후 log switch 10번
  2. log switch 10번 하기 전의 아카이브 파일 삭제
  3. users01.dbf도 삭제
  4. offline 설정 후 restore -> 오류 발생
  5. rman에서 shutdown abort
  6. startup mount
  7. restore database;
  8. run {
  9. set until sequence 22 thread 1; 
  10. recover database;
  11. }
  12. alter database open resetlogs;
  13. 데이터 파일이 offline이 된 채로 recover가 진행되면 이 파일은 제외됨 -> 복원 후 사용할 수 없음
  14. alter database default tablespace example; -> parmanant tablespace를 옮겨줌
  15. drop tablespace users including contents and datafiles; -> 사용할 수 없는 테이블 스페이스를 삭제

'Oracle > DataBase 개념' 카테고리의 다른 글

데이터 이동 - data pump  (0) 2020.03.10
DataBase 핵심내용  (0) 2020.03.09
메모리 구성 요소 관리  (0) 2020.02.26
undo tablespace 생성, 다른 DB 접속  (0) 2020.02.25
DB 수동 생성 - 3(테이블 스페이스)  (0) 2020.02.24
  • 표준 블록 사이즈
  • db_block_size = 8K (표준 block size)
  1. db_cache_size
  2. db_keep_cache_size : 메모리 DB처럼 사용
  3. db_recycle_cache_size
  • DB가 생성되었을 때 꼭 만들어져야 하는 tablespace들
  1. system
  2. sysaux
  3. undo
  4. temporary
  • LRU Algorithm
  1. free - unused, clean(작업이 끝난 상태)
  2. pinned - 일순간 유지, free로 바뀌거나 dirty로 바뀜
  3. dirty - 작업이 끝났지만 아직 db에 저장되지 않은 상태
  4. LRU List에 순서대로 저장, 빈 공간이 없을 경우 가장 오래된 것부터 확인
  5. Free buffer를 발견하면 왼쪽으로 옮긴 후 사용 -> pinned로 바뀜
  • Dirty List(checkpoint queue)
  1. dirty buffer를 기록
  • LOCK
  1. data - enqueue
  2. memory - Latch : free 한 영역이 없을 때 메모리 영역에서 Dirty 블록을 찾는데 경합이 발생
  3. 데이터를 사용할 때 다른 사용자가 사용할 수 없게 잠금
  • db_keep_cache_size
  1. 블럭 크기를 적절하게 조절
  2. 공통 업무를 위한 메모리
  3. 크기가 크지 않으면서 자주 액세스 되는 테이블들(보통 select 문)을 keep 시켜놓고 빠져나오지 않게 함
  4. full table scan을 주로 함
  • db_recycle_cache_size
  1. 가끔 액세스 하는 테이블이지만 많은 블록이 필요한 경우
  2. free 한 버퍼가 너무 많이 사용됨
  3. 이러한 경우 db_cache_size를 사용하지 않고 따로 별도의 공간을 만들어 사용
  • 비표준 block size
  • db_nk_cache_size - 2K, 4K, 16K, 32K
  1. 테이블 스페이스 생성 시 아무것도 지정하지 않으면 표준으로 지정
  2. block size 16K로 생성 시 16K로 블록 사이즈를 설정
  3. 생성하기 전에 db_nk_cache_size를 선언해주어야 생성 가능
  • TTS(Transport TableSpace)
  1. window의 db에서 linux의 db로 데이터를 옮길 때
  2. datafile을 copy하여 넣을 수 있음 - 서로 다른 block 크기를 가지는 os들 사이에서도 옮길 수 있음
  3. 동일한 크기의 buffer cache만 있으면 가능
  4. multi block size
  • dynamic
  1. shared_pool_size
  2. db_cahce_size
  3. large_pool_size
  4. java_pool_size
  5. streams_pool_size
  6. db_keep_cache_size
  7. db_recycle_cache_size
  8. db_nk_cache_size
  • static - log_buffer(db운영 중 크기 변경 불가)
  • 10g ASMM(automatic shared memory management)
  • SGA
  • PGA(자동 관리 9i)
  1. stack : 변수
  2. session : 한 세션에서 변경한 옵션들을 임시적으로 저장
  3. cursor
  4. SQL work Area : 메모리를 많이 쓰는 작업(sort, hash join, bitmap index)
    1. 튜닝 불가
    2. pga_aggregate_target = 500M이고 사용 중인 공간이 100M인 경우
    3. 다른 작업들이 남아 있는 메모리 영역을 사용 가능
  5. sort용 공간, hash join용 공간 등으로 나누지 않고 pga_aggregate_target이라는 하나의 공유 공간으로 자동으로 관리
  • SGA_TARGET : 다이나믹한 메모리
  • MMON : 메모리에 대한 정보 수집
  • MMAN : 메모리 매니저 -> 수집된 정보로 어떤 식의 작업이 이루어지고 있는지 분석 5분 후 메모리가 필요한 곳에 분배
  1. 5분마다 한 번씩 메모리 크기들이 계속적으로 변경
  2. db에 쓰여지지 않은 블록은 내려쓴 후 free로 바꾸고 필요한 곳에 분배
  3. 자동으로 이루어짐
  4. out of memory 해결
  • SGA와 PGA 따로 자동 관리
  • SGA

  1. sga_target의 값을 0이 아닌 값으로 설정하면 ASMM 방식을 사용하겠다는 의미
  2. sga_max_size의 값 이하로 설정
  • 11g AMM(Automatic Memory Management) - 모든 메모리 자동 관리
  • SGA와 PGA를 공유 가능 - PGA의 빈 공간을 잠시 SGA에서 사용 가능
  • memory_target 하나만 지정하면 통합하여 관리
  • SGA : PGA = 6 : 4로 default

 


  • Backup&Recovery
  • flash back query
  1. delete 후 commit을 하면 이전 데이터로 rollback 하지 못함
  2. from 테이블 as of sysdate(or current_date, systimestamp) - 시간 -> 이전의 값을 보여줌
  • 데이터의 변화 추이

  • undo query 기록

  1. sys에서 grant select any transaction to hr;
  2. alter database add supplemental log data;
  • 오류 recovery용 도구

  • recyclebin 확인 - show recyclebin

  1. 동일한 테이블 이름으로 create, drop을 3번 반복
  2. _,$,# 이외의 특수 문자가 들어가는 이유 : " " 안에 입력된 문자
  3. select * from "BIN$n3Y9N5YuJJngUAB/AQB5XQ==$0"; -> 이전 값 확인도 가능
  4. flashback table emp_flash to before drop; -> drop 하기 전의 상태로 복원 가능, 가장 마지막에 일어난 drop
  5. flashback table "BIN$n3Y9N5YuJJngUAB/AQB5XQ==$0" to before drop; -> recyclebin 이름을 입력하면 원하는 시기의 테이블을 drop 전으로 되돌릴 수 있음

  • recyclebin의 제약사항
  • drop table purge; - recyclebin을 거치지 않고 바로 삭제

 

'Oracle > DataBase 개념' 카테고리의 다른 글

DataBase 핵심내용  (0) 2020.03.09
backup & recovery - RMAN  (0) 2020.03.09
undo tablespace 생성, 다른 DB 접속  (0) 2020.02.25
DB 수동 생성 - 3(테이블 스페이스)  (0) 2020.02.24
Network 구성  (0) 2020.02.21
  • log switch 발생 시 unused 상태인 group을 우선으로 찾아감
  • undo tablespace 생성

  • dba_rollback_segs 확인

  1. undo segment가 생성됨
  2. 아직 사용중이지 않으므로 모두 offline
  • 현재 활성화된 undo segment만 확인

  1. 사용 중이지 않은 undo1은 보이지 않음
  • 파라미터 확인

  1. flashback : 논리적인 오류들을 복구
    • Query : select, 일정 시점의 이전으로 돌아가서 그 시점의 데이터를 읽어올 수 있음
    • undo_retention  : 900초 기다려줌 -> 초과 시 재사용 가능, 충분한 공간이 존재하지 않는다면 시간이 지나지 않았더라도 재사용을 하는 경우가 있음
  • 유저 생성
  • hr 유저 생성 - default tablespace는 example, temporary tablespace는 temp

  • 권한 부여 - connect(데이터베이스 접속), resource(생성, 삭제, 변환) role 부여

  • hr유저로 접속
  • create database link orcl_link connect to hr identified by hr using 'orcl'; - orcl의 hr유저로 접속 가능(orcl network alias 사용)
  • select * from employees@orcl_link; -> prod hr에서 orcl에 있는 hr의 employees 테이블을 읽어와라
  • 다른 DB의 내용을 가져와서 테이블 생성도 가능

 

'Oracle > DataBase 개념' 카테고리의 다른 글

backup & recovery - RMAN  (0) 2020.03.09
메모리 구성 요소 관리  (0) 2020.02.26
DB 수동 생성 - 3(테이블 스페이스)  (0) 2020.02.24
Network 구성  (0) 2020.02.21
수동으로 DB 생성 - 2  (0) 2020.02.20
  • dba_tablespaces : 테이블 스페이스들의 설정들을 확인
  • dba_data_files : tablespace와 datafile의 상관관계를 나타냄
  • 파라미터(initprod.ora) 파일 설정
  1. db_name
  2. control_files 위치 -- 여기까지 필수 나머지는 oracle에서 설정한 값대로 설정됨
  3. shared_pool_size
  4. db_cache_size
  5. remote_login_passwordfile='EXCLUSIVE' -> 관리자의 인증 작업이 가능하도록 하는 파라미터(패스워드 파일)
  6. undo_management=auto
  7. undo_tablespace=undotbs1
  • create database
  1. log file : 2개의 log file을 생성할 것을 권장, 하나의 그룹에 2개의 멤버를 두어서 한 멤버가 없어지더라도 다른 하나의 멤버를 사용할 수 있도록 함
  2. system tablespace : 꼭 필요하므로 위치 필요, system tablespace라는 이름은 쓰지 않고 위치만 씀
  3. system tablespace의 extent management를 local로 설정
  4. sysaux : system을 보조하는 공간, sysaux라는 이름만 쓰고 tablespace는 제외하고 선언
  5. undo tablespace : 파라미터 파일 안에 지정이 되어있다면 파라미터 파일의 내용대로 이름을 설정해야 함
  6. temporary tablespace : temporary tablespace가 설정되어 있지 않으면 system tablespace를 사용하여 성능이 떨어질 수 있음
  7. controlfile reuse : db를 생성하는 도중에 오류가 나서 중단되었을 때, OS에 만들어진 controlfile을 삭제하지 않고 다시 사용할 수 있도록 하는 옵션
  • 테이블 스페이스
  1. 공간이 충분한지 부족한지를 모니터링하여 부족하다면 공간을 늘리는 작업을 해야 함
  • 테이블 스페이스 생성 예제
  • temporary tablespace group TEMPGRP에 TEMP1과 TEMP2를 구성하고 default temporary tablespace로 지정

  1. 명시적으로 설정하지 않은경우 system 사용
  2. sort 된 중간 결과 등을 system에 저장해서는 안됨
  • example tablespace EXAMPLE을 생성 - file 크기는 400m, 최대 4G, initial extent 1m, next extend 2m

  • index를 위한 tablespace INDX 생성 - 크기 40m

  • oracle tool을 위한 tablespace TOOLS 생성 - 크기 10m

  • Default permanent tablespace USERS 생성 - 크기 40m, initial 4m, next 4m

  • 리스너 설정(Network Configuration)
  • LISTENER - 1521 port 사용, TCP/IP 프로토콜 사용, orcl, prod 모두를 서비스하도록 구성

  • LISTENER1 - 1522 port 사용, TCP/IP 프로토콜 사용, prod만 서비스 하도록 구성

  • orcl 접속이 가능한 네트워크 alias : orcl, 1521번 port 번호를 사용하는 리스너를 사용하여 접속

  • prod 접속이 가능한 네트워크 alias : prod_1, 1521번 port 번호를 사용하는 리스너를 사용하여 접속

  • prod 접속이 가능한 네트워크 alias : prod_2, 1522번 port 번호를 사용하는 리스너를 사용하여 접속

  • 언두 데이터 관리
  • 수정되기 전 원래 데이터의 복사본
  • 데이터를 변경하는 모든 트랜잭션에 대해 캡쳐
  • 적어도 트랜잭션이 종료될 때까지는 보존
  • 변경되었다는 기록을 해놓고 변경 전 데이터를 undo data에 옮긴 후 데이터를 변경
  • select 시에도 undo 데이터가 필요
  • 자동으로 관리되는 방식을 이용 - undo tablespace 생성 시 extent가 자동으로 생성, 쓰여지면 자동으로 online
  • 하나의 undo 블록에는 동일한 트랜잭션에서 발생한 명령들만 저장 가능
  • 다른 트랜잭션일 경우에는 다른 블록을 사용
  • insert시에 rowid가 함께 저장되어 rollback시에 delete가 쉽도록 함
  • 하나의 undo segment는 여러 사용자에 의해 공유될 수 있음 - update, insert, delete...

'Oracle > DataBase 개념' 카테고리의 다른 글

메모리 구성 요소 관리  (0) 2020.02.26
undo tablespace 생성, 다른 DB 접속  (0) 2020.02.25
Network 구성  (0) 2020.02.21
수동으로 DB 생성 - 2  (0) 2020.02.20
수동으로 DB 생성  (0) 2020.02.19

+ Recent posts