본문 바로가기

oracle

오라클 PL/SQL 함수(Function) 병렬처리 옵션 (parallel_enable) Oracle DB 내에서 PL/SQL "함수" 를 만들때 병렬처리 옵션을 줄 수가 있습니다. 병렬처리 옵션 주는 방법은 매우 간단한데, 효과는 엄청납니다. create function 함수 생성 문장에서 "parallel_enable" 문구만 뒤에 추가해주면 끝입니다. -- 함수 (싱글처리) create or replace function func_s (p_val number) return number is v_ret number; begin select dbms_random.value(1, p_val) into v_ret from dual; return v_ret; end; / -- 함수 (병렬처리) create or replace function func_p (p_val number) return n.. 더보기
테이블, 인덱스, 뷰, 시퀀스 rename to (이름 변경) SQL 구문 (ORA-14047, ORA-01765) Oracle DB 에서 Table, View, Sequence, Private Synonym 의 이름변경시에는 "rename ~ to" 구문을 사용할 수 있습니다. SQL> rename TAB1 to TAB2; SQL> rename VIEW1 to VIEW2; SQL> rename SEQ_TEMP1 to SEQ_TEMP2; SQL> rename SYN_TAB1 to SYN_TAB2; -- Synonym은 Private Synonym 만 가능하고, Public Synonym 은 안됩니다. Table 의 경우에는 "alter table ..." 구문으로도 이름 변경이 가능합니다. SQL> alter table TAB1 rename to TAB2; Table 의 경우는, 위 2가지 방법이 모두 가능한데, In.. 더보기
ORA-600, ORA-7445 등 Internal 에러 분석할때 필요한 정보수집 TFA툴 소개 Oracle DB에서 ORA-00600, ORA-00700, ORA-07445 등과같은 Internal 에러가 발생하는 경우는 보통 버그성인 경우가 많고, 원인분석을 위해 오라클에 직접 물어봐야 합니다. 이때, 오라클에 증상만 설명하고 에러넘버만 불러준다고 오라클에서 원인분석을 할 수 있는 게 아닙니다. 보통 ORA-00600 같은 Internal 에러들은 버그성인 경우들이 많아서 Oracle 개발자도 첨보는 에러상황인 경우일 수 있기 때문에, 그 당시(에러가 날 당시)의 각종 로그정보들이 필요합니다. 그 당시의 정보를 이거달라 저거달라 해서 주고받다 보면 시간이 엄청 소요되겠죠? 그래서 한방에 필요할만한 정보들을 왕창 모아서 받기 위해 오라클에서 만든게 TFA (Trace File Analyzer) 라.. 더보기
(솔라리스 19c DB 설치시 에러) pkg list: no packages matching 'oracle-database-preinstall-19c' known Oracle Solaris 11 버전에서 Oracle Databse 19c 설치하기 전에, 필요한 패키지 설치를 위해 oracle-database-preinstall-19c 를 먼저 install 하도록 되어있습니다. 하지만, 막상 실행해보면, 아래와 같이 못 찾는다는 에러메시지가 발생합니다. 한글 Locale 환경에서는 아래와 같이 나옵니다. [root@solaris ~]# [root@solaris ~]# pkg list -n oracle-database-preinstall-19c pkg list: 'oracle-database-preinstall-19c'과(와) 일치하는 패키지가 알려지지 않았습니다. [root@solaris ~]# [root@solaris ~]# [root@solaris ~]# [r.. 더보기
오라클 병렬처리(Parallel Processing)관련 주의사항 (의도하지 않은 병렬수행, default degree) 지난번 포스팅에서 Table 에 설정된 degree 값을 주의깊게 봐야한다고 설명드린 적이 있는데, 그 값이 특정 숫자가 아니라 "default" 라고 되어 있는 경우도 주의가 필요합니다. 아래와 같이 TEST_X1 테이블에 degree 값이 "default" 로 되어 있는 것을 확인할 수 있습니다. 이 default 의 의미가 위험합니다. 병렬처리에서 default 값은 cpu_count x parallel_threads_per_cpu 로 계산됩니다. 저는 테스트서버로 cpu_count 값이 4밖에 안되지만, 실제 운영시스템의 경우는 보통 24, 48, 96 정도로 꽤 큰 값입니다. 여기에 x 2 (parallel_threads_per_cpu) 를 하기때문에, 아주 많은 병렬프로세스를 띄우게 되는 불상.. 더보기
오라클 에러 정보 (ORA-01144) - 데이터파일 최대크기를 초과한 경우 Oracle 에서 데이터파일(datafile)을 크게 새로 만들려고 하거나, 기존 데이터파일의 크기를 변경(resize) 하려고 할때, ORA-01144 에러를 만날 수 있습니다. Oracle 에서 데이터는 블록(block) 단위로 저장됩니다. 하나의 데이터파일이 가질 수 있는 최대 블록의 갯수 제한이 있는데, 이게 2^22-1 입니다. 즉, 4,194,303 개. 오라클DB에서 블록크기를 보통 8k (8,192) 를 많이 사용합니다. 8k * 4,194,303 = 32GB 16k * 4,194,303 = 64GB 32k * 4,194,303 = 128GB 8k 짜리 블록 4백만개는 32GB 크기가 됩니다. 그래서 datafile 최대크기는 32GB 로 제한됩니다. 이런 제한때문에 ORA-01144 에러.. 더보기
오라클 테이블, 인덱스 압축 OLTP Compress 테스트 (ACO 옵션) Oracle DB서버의 Disk 스토리지 공간을 절약하기 위해서, 데이터베이스내에 있는 Table, Index 를 압축(Compress)할 수 있습니다. 1) Basic SQL> alter table TEST1 move row store compress basic; 2) Advanced SQL> alter table TEST1 move row store compress advanced; Basic 과 Advanced 타입이 있는데, Basic 의 경우는 초기에 테이블에 데이터를 대량으로 로딩할 때만 압축이 적용됩니다. 이후로 들어오는 데이터는 압축되지 않고 그냥 저장됩니다. Advanced 의 경우는 시기나 방식에 상관없이 계속 압축됩니다. 단, ACO(Advanced Compression Option).. 더보기
ASM 구성시 LUN 크기, 갯수가 성능에 미치는 영향 LUN은 Logical Unit Number 의 약자로, "논리적인 디스크" 단위를 말합니다. 논리적인 단위이기 때문에, 물리적인 디스크 한개가 하나의 LUN 이 될 수도 있고, 여러개의 디스크가 하나의 LUN 이 될 수도 있습니다. 물론 1개의 디스크 내에 여러개의 LUN 이 있을 수도 있습니다. 구성하기 나름입니다. Oracle ASM 에서 DG (Disk Group) 구성시 물리적인 디스크 파티션을 통째로 사용하는 경우는 별로 신경쓸게 없지만, LUN 을 사용하는 경우, ASM DG 구성을 위해 LUN 크기는 얼마로 잡아야 할지, LUN 갯수는 얼마로 잡아야 할지 고민이 됩니다. 그래서 오라클 MOS (My Oracle Support) 에서 문서들을 좀 뒤져 봤습니다. Lun Size And Per.. 더보기