목록DB/oracle (29)
nickjoIT
When creating an Oracle GoldenGate replication, you need to correctly configure the swap space for the machine running Oracle GoldenGate. This is especially important when using the replication "Hub" architecture. In this blog, let's talk about what swap space is, how it impacts Oracle GoldenGate replications, how you can estimate the size of the swap space and how you can add more swap space. 1..
[참고]http://puttico.tistory.com/119?category=601216
이번 글이 분석함수의 실행계획 시리즈의 마지막이다. 1부와 2부에서 분석함수의 실행계획에 대해서 알아보았다. 이 글(3부)은 새로 작성되었으며, 이전 글( 문제 출제용 )은 삭제하지 않고 그대로 두었음을 밝혀둔다. 나중에라도 문제를 풀어볼 사람은 이 글(답안)을 보지 말고, 이전 글을 보기 바란다. 각각의 답안은 오렌지색으로 표시해 두었으므로 쉽게 채점할 수 있을 것이다. 분석함수의 다섯 가지 원리 많은 수의 개발자, DBA, 튜너들은 분석함수를 만나면 식은 땀을 흘린다. 왜냐하면, 분석함수의 비효율을 어떻게 찾을 수 있는지, 또 그 비효율은 어떻게 제거 할 수 있는지 알 수 없기 때문이다. 기껏해야 분석함수의 over절을 만족하는 적절한 인덱스를 생성하는 정도이다. 어쩌면 이런 결과들은 당연하다고 볼 ..
DECLARE --조회 대상 데이타에 대한 락을 점유하며 커서 오픈 CURSOR c IS SELECT * FROM emp FOR UPDATE; --락이 걸린 데이터에 대한 커서 오픈 요청 시 바로 에러 출력 --CURSOR c IS SELECT * FROM emp FOR UPDATE NOWAIT; --락이 걸린 데이터에 대한 커서 오픈 요청 시 3초 후에도 락 대기 시 에러 출력 --CURSOR c IS SELECT * FROM emp FOR UPDATE WAIT 3;BEGIN --CURRENT OF를 이용하여 커서에 읽어들인 로우의 rowid를 활용하여 성능 개선 --기본 키 인덱스를 이용하는 것보다도 성능이 우월함 FOR rec IN c LOOP UPDATE emp SET sal=sal+0 WHERE..
DECLARE --명시적 커서 선언(매개변수 전달) CURSOR c1(p_deptno NUMBER, p_job VARCHAR2) IS SELECT * FROM emp WHERE deptno=p_deptno AND job=p_job;BEGIN --방법2. 명시적 커서와 FOR LOOP를 이용한 데이터 추출 --IN 절 뒤에 커서와 함께 매개변수 전달 FOR emp_rec IN c1(20,'CLERK') LOOP DBMS_OUTPUT.PUT_LINE('NAME=' || emp_rec.ename || ', salary=' || emp_rec.sal || ', Job Id=' || emp_rec.job); END LOOP;END;/ --------------------------------------------..
DECLARE --명시적 커서 선언(매개변수 전달) CURSOR c1(p_deptno NUMBER, p_job VARCHAR2) IS SELECT * FROM emp WHERE deptno=p_deptno AND job=p_job; --커서 c1과 같은 레코드 타입 선언 emp_rec c1%ROWTYPE;BEGIN --방법1. 커서 OPEN, LOOP, FETCH, CLOSE를 이용한 데이터 추출 --커서 오픈(매개변수 전달) OPEN c1(30,'SALESMAN'); --커서 내 데이터 반복 추출 LOOP --커서 결과를 c1%ROWTYPE 변수에 입력 FETCH c1 INTO emp_rec; --커서 내 추출 데이터가 없을 경우 LOOP 빠져나감 EXIT WHEN c1%NOTFOUND; --데이터 처..
CREATE OR REPLACE FUNCTION get_ename_func(p_empno NUMBER)RETURN VARCHAR2IS --명시적 커서 선언 CURSOR c1 IS SELECT ename FROM emp WHERE empno=p_empno; l_ename emp.ename%TYPE; BEGIN --커서 오픈 OPEN c1; --데이터 추출 후 INTO 절 안의 변수에 입력 FETCH c1 INTO l_ename; --추출 결과 건수가 0일 경우 IF c1%NOTFOUND THEN l_ename := NULL; END IF; --커서 닫기 CLOSE c1; RETURN l_ename;END;/
DECLARE --부서별 사원 정보를 추출하는 커서 선언 CURSOR emp_cursor(p_deptno NUMBER) IS SELECT ename,empno FROM emp WHERE deptno=p_deptno;BEGIN --커서 결과 건수만큼 LOOP가 수행됨 --emp_cursor 커서에 10번 부서로 조회하여 emp_rec 레코드 변수에 저장 FOR emp_rec IN emp_cursor(10) LOOP --emp_rec 레코드의 값을 출력. 레코드.칼럼 이름으로 출력 DBMS_OUTPUT.PUT_LINE('EMP NAME:' || emp_rec.ename); DBMS_OUTPUT.PUT_LINE('EMP EMPNO:' || emp_rec.empno); END LOOP;END;/---------..
DECLARE l_ename VARCHAR2(20);BEGIN FOR i IN 1..20 LOOP SELECT NVL(MAX(ename),'NULL') INTO l_ename FROM emp WHERE empno=7899+i; DBMS_OUTPUT.PUT_LINE('ENAME:' || l_ename || ', i:' || i); END LOOP;END;/--------------------------------------------------------DECLARE l_ename VARCHAR2(20); BEGIN --역순으로 읽고자 할 경우 FOR i IN REVERSE 1..20 LOOP SELECT NVL(MAX(ename),'NULL') INTO l_ename FROM emp WHERE empno..
DECLARE l_cnt NUMBER := 0;BEGIN WHILE l_cnt