본문 바로가기

DB

(90)
메모리 기반 DB-Embeded Process방식 구분 메모리 기반 DB-Embeded Process방식 특징 • DB 가 서버의 메모리상에 위치하며 HA형태로 무정지 기능을 구현함, DBMS 서버가 응용프로그램에 내장(Embeded)됨 장점 • 통신오버헤드가 없으므로 클라이언트 – 서버 방식에 비해 성능이 우수함. 단점 • 공통된 비즈니스 로직을 DBMS서버에 등록하여 사용하기 어려움. 제품 BerkeleyDB, Tokyo cabinet, JDBM 등
blob 타입을 clob 타입으로 변경(함수) SQL에서 blob과 clob간 상호 변환이 자동으로 않됩니다. 그떄 사용할 수 있는 함수입니다. CREATE OR REPLACE FUNCTION ENC_BLOBTOCLOB(b IN BLOB) RETURN CLOB IS L_BLOB BLOB; L_CLOB CLOB := 'X'; L_DEST_OFFSSET INTEGER := 1; L_SRC_OFFSSET INTEGER := 1; L_LANG_CONTEXT INTEGER := DBMS_LOB.DEFAULT_LANG_CTX; L_WARNING INTEGER; BEGIN L_BLOB := B; IF DBMS_LOB.GETLENGTH(B) != 0 THEN DBMS_LOB.CONVERTTOCLOB ( DEST_LOB => L_CLOB , SRC_BLOB => L..
3시간 돌던 Job이 죽다 테라바이트 급 테이블의 인덱스를 만들 때, 대량의 데이터이다 보니 인덱스 하나를 생성하는데도 3~4시간 걸리는 경우가 있다. 이런 인덱스를 심지어 4~5개를 생성해야 될 경우, 인덱스 하나를 생성하는 시간은 전체 이행 소요시간에 절대적인 영향을 미치게 되므로 매우 중요하다고 볼 수 있다. 그런데, 3시간 이상 돌던 인덱스 작업이 에러를 발생시키면서 죽어버린다. 미치고 팔짝 뛸 지경이다. 에러 메시지 확인 결과, 테이블스페이스 부족이란다. 테이블스페이스를 늘려주기만 하면 되겠지만, 막상 넉넉하게 공간을 줄 수 있는 상황도 아니다 보니, 최대한 예측해서 늘려줬지만, 또 불가피하게 부족해서 다시 돌린 경우도 죽는 경우가 발생하게 된다. 이렇게 두번만 죽어도 그 날의 인덱스 생성 작업은 실패라고 볼 수 있겠다...
전체 Table Row Count 를 빠르게 구하는 방법 H모사에서 데이터 이행 종료후에 전체 테이블의 Row Count를 구하여 이행 완료 Check List에 기록하는 절차가 있었다. 통계 정보를 다시 갱신하는 것보다 더 빠르게 Count하는 방법이 무엇일까 고민하다가, 찾은 방법이다. ※ 요약 - 테이블 전체를 적절한 그룹으로 나누어 Program parallel 방식으로 Segment 크기에 따라 PK Index를 Parallel degree를 조절하여 Fast full scan으로 읽어 Count하고 결과를 테이블에 기록 ※ 필요한 객체 1. 전체 테이블을 크기별로 그룹핑한 목록 (홀수번 그룹은 테이블 크기의 Ascending 정렬, 짝수번 그룹은 Descending 정렬) - Balancing SQL 이용 2. MIG_TAB_CNT_VRF_LOG 테..
ORACLE DML Error Logging(Oracle 10g R2 New Feature) 출처 : http://www.dator.co.kr/zero/textyle/44780 데이터 이행을 하다보면 가장 힘빠지는 오류가 있다. ORA-00001: unique constraint violated (한글 메시지 : ORA-00001: 무결성 제약 조건에 위배됩니다) PK 또는 Unique Index 가 생성되어 있을 때 중복된 값의 발생이 그 원인이다. 특히 As-Is 의 PK 구조와 To-Be 의 PK 구조가 다를 때와 여러 테이블을 통합하는 경우에 자주 발생한다. 몇십분 또는 몇시간 이상 SQL이 실행되다가 이 오류를 만나면 정말 황당 + 당황할 수 밖에 없다. As-Is의 데이터가 계속 추가/변경/삭제되기 때문에, 지난 번에는 오류가 없었다고 해서 이번에 또 오류가 발생하지 말라는 보장이 없..
Wait가 가장 많은 사용자 및 해당 Sql 조회 -- wait가 가장 많은 사용자 조회 select se.sid, p.spid,ss.status, ss.machine, ss.program, ss.terminal, ss.username, ss.sql_hash_value, se.event, se.time_waited, so.block_gets, so.consistent_gets, so.physical_reads from v$session_event se, v$session ss, v$process p, v$sess_io so where 1=1 and event like '%db file %' and se.sid = ss.sid and ss.paddr = p.addr and ss.sid = so.sid order by time_waited desc; -- ..
[대용량]배열을 이용한 INSERT 처리문의.. BULK COLLECTION External Table을 사용해보세요. 1~20만건의 데이타가 18개소에서 수시로 발생이 되는데 이를 FTP을 통해서 File로 받아 File과 Mapping 된 External Table을 통해 Insert 하고자 하는 Table입력합니다. 20M File 의 Text 양이라도 몇초가 걸리지 않더라고요 Oracle 9i 이상에서 지원됩니다. 참고 URL http://blog.naver.com/tangamjaelt?Redirect=Log&logNo=39542677
Oracle Bulk Loader Oracle DB의 특정 테이블에 대용량의 데이터를 Insert 하고 싶을때, Oracle Bulk Loader를 사용한다. - PL/SQL Procedure에서 제공하는 Bulk를 사용해서 Update를 추천!!! Loader를 사용하기 위해서는 컨트롤 파일과, 데이터 파일이 필요하다. 컨트롤 파일은 데이터 파일 정보와 테이블 정보를 가지고 있고, 데이터 파일은 DB에 넣고자 하는 데이터 목록을 가지고 있다. 1. 테이블 생성 CREATE TABLE TEST_TBL ( NAME CHAR(20), SCORE NUM(5), UPDATE DATE ); 2. 컨트롤 파일 생성 $ cat test.ctl LOAD DATA INFILE test.dat INTO TABLE TEST_TBL FIELDS TERMINA..