목록IT (144)
정미나닷컴
INSERT ALL - 한 테이블에 여러 row를 넣거나 여러 테이블에 하나의 명령어로 insert가 가능 Unconditional insert all : 조건없이 모두 insert INSERT ALL INTO CUST_TEL VALUES (CUST_NO, TEL_NO) INTO CUST_ADDR VALUES (CUST_NO, POST_NO, ADDR_1, ADDR_2) SELECT CUST_NO, TEL_NO, POST_NO, ADDR_1, ADDR_2 FROM CUSTOMER; Conditional insert all : 조건에 맞는 행들만 insert INSERT ALL WHEN SALE_PRICE >= 1000000 INTO HIGH_ORDER VALUES (ORDER_NO, GOODS_CODE,..
* Cluster : (함께 자라거나 나타나는) 무리, (조밀하게 모여 있는 사람동물 등의) 무리 그럼 Index Cluster Table은 인덱스 별로 모여있는 테이블(?) 정도로 이해하면 되려나.. 일단 클러스터는 DB Object 개념의 하나이다. 일반적으로 우리가 알고 있는 구조가 [테이블] ↔ [인덱스] 분리형이고 IOT가 [테이블=인덱스] 일체형이라고 한다면 인덱스 클러스터 테이블은 이 둘의 중간쯤이라고 생각하면 되겠다. 백문이 불여일견이므로 일단 직접 만들어보면서 이 놈이 어떻게 생겨먹은 놈인지 알아보도록 하자. ① 데이터를 저장할 클러스터를 생성한다.CREATE CLUSTER C_DEPTNO (DEPTNO NUMBER(2)) INDEX;: 클러스터의 이름을 C_DEPTNO로 정하고 인덱스로..
SELECT * FROM ORD E WHERE ORD_DT='20120112' AND BRANCH_CD='BR00000199';위와 같은 쿼리가 있을 때 ORD 테이블이 [ORD_DT+BRANCH_CD] 컬럼으로 이루어진 결합인덱스를 갖고 있다면 정말 Perfect 하겠지만 ORD_X01 > ORD_DT ORD_X02 > BRANCH_CD 이렇게 각각의 단일 인덱스만을 갖고 있다면 우리는 둘 중 어떤 인덱스를 타게 하는 것이 좋을지 고민하지 않을 수 없다. (물론 대부분의 경우 그냥 옵티마이저의 판단에 맡길테지만..) 이런 경우 Index Combine을 사용하면 고민할 필요 없이 두 개의 인덱스를 모두 사용할 수 있다.SELECT /*+ index_combine(e ord_x01 ord_x02) */ ..
작년 SQLP 시험에 소트 연산에 관한 문제가 출제됐었는데 시험장을 나온 후 틀렸음을 깨닫고 내 머리를 쥐어박았던 기억이 있다. 다시 나온다면 결코 틀리지 않으리라는 각오로 지금부터 소트에 대해 파보려고 한다.소트 수행 원리- SQL 수행 도중 데이터 정렬이 필요할 시 PGA 메모리에 Sort Area를 할당① 메모리 소트 (in-memory sort): 전체 데이터의 정렬 작업을 메모리 내에서 완료(=Internal Sort)② 디스크 소트 (to-dist sort): 할당받은 Sort Area 내에서 정렬을 완료하지 못해 디스크 공간까지 사용(=External Sort) ※ 디스크 소트 과정① PGA에서 정렬된 중간 결과집합을 Temp 테이블스페이스의 Temp 세그먼트에 임시 저장* Sort Run:..
DB에 대해 쥐뿔도 아는게 없던 시절에도 Lock이라는 단어는 많이 들어봤었다.애플리케이션에서 뭔가가 수정이 안되거나 저장이 안될 때면 늘 누군가 외쳤었으니깐. "락 걸린 것 같아!" 대학 시절 deadlock에 대해 배우면서 아래와 같은 그림도 뻔질나게 봤었다.근데 막상 "Lock의 종류나 원리에 대해 설명해봐라." 라고 하면 말문이 막히기 일쑤다.흠.. 대학교에선 들입다 외워서 시험보느라 바빴고회사에선 Lock을 1초라도 빨리 푸는데만 바빴다고 구차하게 변명해본다.그럼 이제부터 Lock에 대해 본격적으로 파헤쳐보자. 오라클이 제공하는 Lock에는 꽤 여러 종류가 있다.DML Lock, DDL Lock, Latch, 버퍼 Lock, 라이브러리 캐시 Lock/Pin 등등..대충 아는 것도 있고, 저건 뭐..
트랜잭션 수준 읽기 일관성 앞서 알아보았던 문장수준 읽기 일관성이 쿼리 시작 시점을 기준으로 삼았다면 트랜잭션 수준 읽기 일관성은 트랜잭션이 시작된 시점을 기준으로 일관성 있게 데이터를 읽어들이는 것을 말한다. ☑
Snapshot too old, 말 그대로 Snapshot이 너무 오래됐다는 말이다.Snapshot이 뭔데?* Snapshot : Data Buffer Cache 블록에 갱신이 일어날 때 복사해 놓은 Copy본 (CR 블록)CR 블록이 뭔지 모르겠다면 ☑[Oracle] 오라클 다중 버전 읽기 일관성 모델 알아보기 그럼 오라클에서 이런 에러가 나는 이유에 대해 알아보도록 하자. Undo 실패- 데이터를 읽어 내려가다가 쿼리 SCN 이후에 변경된 블록을 만나 과거 시점으로 롤백한 'Read Consistent' 이미지를 얻으려고 하는데, Undo 블록이 다른 트랜잭션에 의해 이미 재사용 돼 필요한 Undo 정보를 얻을 수 없는 경우 (Undo 세그먼트가 너무 작을때)① SCN 123 시점에 1시간 쯤 걸리는..
오늘은 어디선가 들어본 적 있는 블록 클린아웃에 대해 알아보자.우선 cleanout은 '청소'라는 뜻이므로 『블록 청소』 뭔가 dirty 상태의 블록을 free 상태로 바꿔주는 행위같다는 느낌적인 느낌이 든다. 블록 클린아웃 (Block Cleanout)- 트랜잭션에 의해 설정된 로우 Lock을 해제하고 블록 헤더에 커밋 정보를 기록하는 오퍼레이션- 보통은 트랜잭션 커밋 후 블록 클린아웃까지 완료해야 완전한 커밋이라고 할 수 있지만 대량 갱신 작업 후에는 시간 관계상 커밋 정보를 트랜잭션 테이블에만 기록하고 빠르게 커밋을 완료, 나중에 해당 블록이 처음 액세스되는 시점에 블록 클린아웃을 함흠.. 커밋을 때리면 Redo Log Buffer의 정보를 Redo Log File에 기록한다 라고 알고 있는데 위 ..