프로그래밍 관행
다음 프로그래밍 연습을 사용합니다.
계측 패키지 사용
Oracle Database는 응용 프로그램이 필요할 때마다 추적 정보를 생성할 수 있는 서브 프로그램이 포함된 계측 패키지를 제공합니다. 이 추적 정보를 사용하면 디버거 없이 응용 프로그램을 디버깅하고 성능이 나쁜 코드를 식별할 수 있습니다.
계측은 응용 프로그램에 상당한 기능을 제공하므로 오버헤드가 아닙니다. 오버헤드는 많은 이익을 잃지 않고 제거 할 수있는 것입니다.
다음 계측 패키지는 Oracle Database에서 제공합니다.
-
시스템 관리자는 DBMS_APPLICATION_INFO를 사용하여 모듈별로 응용 프로그램의 성능을 추적할 수 있습니다.
DBMS_APPLICATION_INFO에 대한 자세한 내용은 Oracle Database PL/SQL Packages and Types Reference를 참조하십시오.
-
응용 프로그램은 DBMS_SESSION을 사용하여 세션 정보에 액세스하고 환경 설정과 보안 레벨을 설정할 수 있습니다.
DBMS_SESSION에 대한 자세한 내용은 Oracle Database PL/SQL Packages and Types Reference를 참조하십시오.
-
UTL_FILE을 사용하면 응용 프로그램에서 운영 체제 텍스트 파일을 읽고 쓸 수 있습니다.
UTL_FILE에 대한 자세한 내용은 Oracle Database PL/SQL Packages and Types Reference를 참조하십시오.
참조: Oracle Database PL/SQL Packages and Types Reference에서 Oracle Database가 제공하는 PL/SQL 패키지 요약
통계 수집 및 응용 프로그램 추적
데이터베이스 통계는 데이터베이스의 로드 유형 및 데이터베이스에서 사용하는 내부 및 외부 리소스에 대한 정보를 제공합니다. ADDM을 사용하여 데이터베이스의 성능 문제를 정확하게 진단하려면 통계를 사용할 수 있어야 합니다.
통계 수집에 대한 자세한 내용은 Oracle Database 2 Day + Performance Tuning Guide를 참조하십시오.
주: Oracle Enterprise Manager를 사용할 수 없는 경우 Oracle Database PL/SQL Packages and Types Reference에 설명된 DBMS_MONITOR 서브 프로그램을 사용하여 통계를 수집할 수 있습니다.
Oracle Database는 Oracle Database 응용 프로그램을 모니터하고 분석하는 데 도움이 되는 몇 가지 추적 도구를 제공합니다. 자세한 내용은 Oracle Database SQL Tuning Guide를 참조하십시오.
기존 기능 사용
기존 기능을 사용하는 응용 프로그램은 개발 및 유지 관리가 용이하며 그렇지 않은 응용 프로그램보다 빠르게 실행됩니다.
응용 프로그램을 개발할 때는 프로그래밍 언어, 운영 체제, Oracle Database 및 Oracle Database에서 제공하는 PL/SQL 패키지와 유형의 기존 기능을 최대한 사용하십시오.
많은 개발자가 재설계하는 기존 기능의 예는 다음과 같습니다.
-
제약 조건
제약 조건에 대한 소개 정보는 "테이블의 데이터 무결성 보장"을 참조하십시오.
-
SQL 함수(SQL에 "기본 제공"되는 함수)
SQL 함수에 대한 자세한 내용은 Oracle Database SQL Language Reference를 참조하십시오.
-
순서(고유 순차 값을 생성할 수 있음)
"시퀀스 생성 및 관리"를 참조하십시오.
-
감사(선택된 사용자 데이터베이스 작업의 모니터링 및 기록)
감사에 대한 소개 정보는 Oracle Database Security Guide를 참조하십시오.
-
복제(분산 데이터베이스 시스템을 포함하는 여러 데이터베이스에서 테이블과 같은 데이터베이스 객체를 복사하고 유지 관리하는 프로세스)
복제에 대한 자세한 내용은 Oracle GoldenGate 설명서를 참조하십시오.
-
메시지 대기열에 넣기(웹 기반 비즈니스 애플리케이션이 서로 통신하는 방식)
Oracle Database AQ(고급 대기열 지정)에 대한 소개 정보는 Oracle Database Advanced Queuing User's Guide를 참조하십시오.
-
레코드 변경 사항 기록 유지 관리
Workspace Manager에 대한 소개 정보는 Oracle Database Workspace Manager Developer's Guide를 참조하십시오.
예 8-4에서 두 개의 동시 트랜잭션은 테이블에 저장된 메시지를 대기열에서 빼냅니다. 즉, 각 트랜잭션은 테이블의 다음 처리되지 않은 행을 찾아 잠급니다. 이 예제에서는 단순히 Oracle Database PL/SQL Packages and Types Reference에 설명된 DBMS_AQ.DEQUEUE 프로시저를 호출하는 대신 테이블에 함수 기반 인덱스를 생성한 다음 각 트랜잭션의 해당 함수를 사용하여 행을 검색하고 메시지를 표시합니다.
Example 8-4의 코드는 DBMS_AQ.DEQUEUE 호출과 유사하지만 기능이 적은 기능을 구현합니다. 기존 기능(이 경우 함수 기반 인덱스)을 사용하여 시간을 절약할 수 있습니다.
예제 8-4 동시 대기열에서 빼기 트랜잭션
테이블 생성:
DROP TABLE t;
CREATE TABLE t
( id NUMBER PRIMARY KEY,
processed_flag VARCHAR2(1),
payload VARCHAR2(20)
);
테이블에 인덱스 생성:
CREATE INDEX t_idx ON
t( DECODE( processed_flag, 'N', 'N' ) );
테이블 채우기:
INSERT INTO t
SELECT r,
CASE WHEN MOD(r,2) = 0 THEN 'N' ELSE 'Y' END,
'payload ' || r
FROM (SELECT LEVEL r FROM DUAL CONNECT BY LEVEL <= 5);
테이블 표시:
SELECT * FROM t;
결과:
ID P PAYLOAD
---------- - --------------------
1 Y payload 1
2 N payload 2
3 Y payload 3
4 N payload 4
5 Y payload 5
5 rows selected.
첫번째 트랜잭션:
DECLARE
l_rec t%ROWTYPE;
CURSOR c IS
SELECT *
FROM t
WHERE DECODE(processed_flag,'N','N') = 'N'
FOR UPDATE
SKIP LOCKED;
BEGIN
OPEN c;
FETCH c INTO l_rec;
IF ( c%FOUND ) THEN
DBMS_OUTPUT.PUT_LINE( 'Got row ' || l_rec.id || ', ' || l_rec.payload );
END IF;
CLOSE c;
END;
/
결과:
Got row 2, payload 2
동시작업 트랜잭션:
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
l_rec t%ROWTYPE;
CURSOR c IS
SELECT *
FROM t
WHERE DECODE(processed_flag,'N','N') = 'N'
FOR UPDATE
SKIP LOCKED;
BEGIN
OPEN c;
FETCH c INTO l_rec;
IF ( c%FOUND ) THEN
DBMS_OUTPUT.PUT_LINE( 'Got row ' || l_rec.id || ', ' || l_rec.payload );
END IF;
CLOSE c;
COMMIT;
END;
/
결과:
Got row 4, payload 4
참조:
-
Oracle Database New Features Guide(각 릴리스 포함)
-
Oracle Database Concepts(각 릴리스 포함)
뷰가 에디션화된 커버 데이터베이스 테이블
응용 프로그램에서 데이터베이스 테이블을 사용하는 경우 에디션 기반 재정의(EBR)를 사용하여 응용 프로그램의 데이터베이스 구성 요소를 사용 중인 동안 업그레이드할 수 있으므로 다운타임을 최소화하거나 없앨 수 있는 에디션 보기로 각 테이블을 다룹니다.
에디션 기반 재정의에 대한 자세한 내용은 Oracle Database Development Guide를 참조하십시오.