전체 글 110

[ORACLE] PL/SQL Autonomous (자율 트랜잭션)

create or replace function seq_nextval(l_gubun number) return numberas pragma autonomous_transaction; l_new_seq seq_tab.seq%type;begin update seq_tab set seq = seq+1 where gubun = l_gubun; select seq into l_new_seq from seq_tab where gubun = l_gubun; commit; return l_new_seq;end; PL/SQL 함수/프로시저르 자율 트랜잭션으로 선언하면, 그 내부에서 커밋을 수행해도 메인 트랜잭션은 커밋하지 않은 상태로 남는다.메인 트랜잭..

[ORACLE] 21C XE에서 ORA-12543: TNS:수신지 호스트에 도달할 수 없습니다. 오류해결방법

ORA-12543: TNS:수신지 호스트에 도달할 수 없습니다. 오류해결방법 오류 원인1 - 방화벽 문제 (1521포트를 열지 않았을 경우)  오류 원인2 - 관리자 비밀번호에 @가 들어가 있을 경우 - @는 구분자로 인식하여 로그인이 정상적으로 안된다함. - 관리자 비밀번호를 변경 후 재시도하면 정상적으로 동작함.   (관리자 비밀번호 변경 방법 : https://fakegrowthup.tistory.com/253)

[ORACLE] Direct Path Insert

일반적인 Insert가 느린 이유는 데이터를 입력할 수 있는 블록을 Freelist에서 찾는다. (Freelist란? HWM 아래쪽에 있는 블록중 입력이 가능한 블록에 대한 목록) (HWM란? High-Water-Mart. 즉, 테이블 데이터가 쌓여있는 가장 높은 영역) Freelist에서 할당받은 블록을 버퍼캐시에서 찾는다. 버퍼캐시에 없으면, 데이터파일에서 읽어 버퍼캐시에 적재한다. INSERT 내용을 Undo 세그먼트에 기록한다. (Undo란? 트랜젝션을 롤백하기 위해 기록한 정보) INSERT 내용을 Redo 로그에 기록한다. (Redo란? 트랜젝션을 리커버리 하기위한 정보) Direct Path Insert 방식이 빠른 이유는 Freelist를 참조하지 않고 HWM 바깥 영역에 데이터를 순차적으..

[ORACLE] 월별 누적 매출 예제

sqld, sqlp 2과목의 단골 문제죠~~ 간단한 예제로 직접 해보면 이해하기 쉽습니다. 먼저 사전에 emp, dept 테이블이 없으시면 아래 링크로 가서 생성하시고, 실습하시면 됩니다. 1. dept, emp 테이블 생성 https://java7.tistory.com/164 2. 월별 누적 매출 예제 create table 월별지점매출 as select deptno "지점" , row_number() over (partition by deptno order by empno) "판매월" , round(dbms_random.value(500, 1000)) "매출" from emp order by deptno; select * from 월별지점매출; -- 분석함수 이용 select 지점, 판매월, 매출 ,..

[ORACLE] emp, dept 테이블 생성 스크립트

오라클 테스트시 많이 사용되는 emp, dept 테이블의 스크립트입니다. scoot계정에 기본으로 되어있지 않은 경우 아래 스크립트를 이용해서 생성하시면 됩니다. CREATE TABLE DEPT (DEPTNO number(10), DNAME VARCHAR2(14), LOC VARCHAR2(13) ); INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK'); INSERT INTO DEPT VALUES (20, 'RESEARCH', 'DALLAS'); INSERT INTO DEPT VALUES (30, 'SALES', 'CHICAGO'); INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON'); CREATE TABLE EMP ..

[ORACLE] 21C에서 사용자 계정 생성하기

--1. SQL PLUS 실행 후 sys계정으로 접속 conn /as sysdba --2. 사용자 계정 생성 --참고: 21c에서 사용자 계정을 생성하려면 "c##" 수식어를 앞에 붙여야한다. create user c##sqlp identified by 20230319; --3. 사용자 권한 설정 grant create any table to c##sqlp; grant connect, resource, dba to c##sqlp; --4. 테이블스페이스 권한 부여 alter user c##sqlp default tablespace users quota unlimited on users; --5. 생성한 계정으로 재로그인 conn c##sqlp; 비밀번호: 20230319 --6. 접속한 계정 확인 sho..

[ORACLE] 바인드 변수의 중요성

1. 개요 바인드 변수를 사용하게 되면, 커서를 많이 생성하지 않고 하나를 반복 재사용하므로 메모리 사용량과 파싱 소요시간을 줄여준다.궁극적으로, 시스템 전반의 메모리와 CPU 사용률을 낮춰 데이터베이스 성능과 확장성을 높이는게 기여하고, 특히 동시 사용자 접속이 많을 때는 그 영향력이 절대적이다.아래 간단한 실습을 통해 바인드 변수에 대해 알아보자. 2. 실습 환경 설정 -- 테이블 생성 create table t as select * from all_objects; update t set object_id = rownum; -- 인덱스 생성 create unique index t_idx on t(object_id); -- 통계정보 수집 analyze table t compute statistics; ..