권장 프로그래밍 연습
다음 권장되는 프로그래밍 방법을 사용합니다.
계측 패키지 사용
Oracle AI Database는 필요할 때마다 애플리케이션이 추적 정보를 생성할 수 있는 서브 프로그램이 포함된 계측 패키지를 제공합니다. 이 추적 정보를 사용하면 디버거 없이 응용 프로그램을 디버깅하고 성능이 나쁜 코드를 식별할 수 있습니다.
계측은 응용 프로그램에 상당한 기능을 제공하므로 오버헤드가 아닙니다. 오버헤드는 많은 이익을 잃지 않고 제거 할 수있는 것입니다.
Oracle AI Database가 제공하는 몇 가지 계측 패키지는 다음과 같습니다.
-
시스템 관리자가 모듈별로 응용 프로그램의 성능을 추적할 수 있도록 하는 DBMS_APPLICATION_INFO
DBMS_APPLICATION_INFO에 대한 자세한 내용은 Oracle AI Database PL/SQL Packages and Types Reference를 참조하십시오.
-
응용 프로그램이 세션 정보에 액세스하고 환경 설정 및 보안 레벨을 설정할 수 있도록 하는 DBMS_SESSION
DBMS_SESSION에 대한 자세한 내용은 Oracle AI Database PL/SQL Packages and Types Reference를 참조하십시오.
-
응용 프로그램이 운영 체제 텍스트 파일을 읽고 쓸 수 있도록 하는 UTL_FILE
UTL_FILE에 대한 자세한 내용은 Oracle AI Database PL/SQL Packages and Types Reference를 참조하십시오.
참조: Oracle AI Database에서 제공하는 PL/SQL 패키지에 대한 요약은 Oracle AI Database PL/SQL Packages and Types Reference입니다.
통계 수집 및 응용 프로그램 추적
데이터베이스 통계는 데이터베이스의 로드 유형 및 데이터베이스에서 사용하는 내부 및 외부 리소스에 대한 정보를 제공합니다. ADDM을 사용하여 데이터베이스의 성능 문제를 정확하게 진단하려면 통계를 사용할 수 있어야 합니다.
통계 수집에 대한 자세한 내용은 Oracle AI Database 성능 튜닝 시작하기를 참조하십시오.
주: Oracle Enterprise Manager를 사용할 수 없는 경우 Oracle AI Database PL/SQL Packages and Types Reference에 설명된 대로 DBMS_MONITOR 서브 프로그램을 사용하여 통계를 수집할 수 있습니다.
Oracle AI Database는 데이터베이스 애플리케이션을 모니터링하고 분석하는 데 도움이 되는 몇 가지 추적 도구를 제공합니다. 자세한 내용은 Oracle AI Database SQL Tuning Guide를 참조하십시오.
기존 기능 사용
기존 기능을 사용하는 응용 프로그램은 개발 및 유지 관리가 용이하며 그렇지 않은 응용 프로그램보다 빠르게 실행됩니다.
애플리케이션을 개발할 때는 프로그래밍 언어의 기존 기능, 운영 체제, Oracle AI Database, Oracle AI Database가 제공하는 PL/SQL 패키지 및 유형을 최대한 많이 사용하십시오.
많은 개발자가 재창조하는 기존 기능의 예는 다음과 같습니다.
-
제약 조건
제약 조건에 대한 소개 정보는 "테이블의 데이터 무결성 보장"을 참조하십시오.
-
SQL 함수(SQL에 "기본 제공"되는 함수)
SQL 함수에 대한 자세한 내용은 Oracle AI Database SQL Language Reference를 참조하십시오.
-
순서(고유 순차 값을 생성할 수 있음)
"시퀀스 생성 및 관리"를 참조하십시오.
-
감사(선택된 사용자 데이터베이스 작업의 모니터링 및 기록)
감사에 대한 소개 정보는 Oracle AI Database Security Guide를 참조하십시오.
-
복제(분산 데이터베이스 시스템을 포함하는 여러 데이터베이스에서 테이블과 같은 데이터베이스 객체를 복사하고 유지 관리하는 프로세스)
복제에 대한 자세한 내용은 Oracle GoldenGate 설명서를 참조하십시오.
-
메시지 대기열에 넣기(웹 기반 비즈니스 애플리케이션이 서로 통신하는 방식)
Oracle AI Database AQ(고급 대기열 지정)에 대한 소개 정보는 Oracle AI Database Advanced Queuing User's Guide를 참조하십시오.
-
레코드 변경 사항 기록 유지 관리
Workspace Manager에 대한 소개 정보는 Oracle AI Database Workspace Manager Developer's Guide를 참조하십시오.
예 8-4에서 두 개의 동시 트랜잭션은 테이블에 저장된 메시지를 대기열에서 빼냅니다. 즉, 각 트랜잭션은 테이블의 다음 처리되지 않은 행을 찾아 잠급니다. 예제에서는 단순히 Oracle AI 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 AI Database New Features Guide(각 릴리스 포함)
-
Oracle AI Database Concepts(각 릴리스 포함)
뷰가 에디션화된 커버 데이터베이스 테이블
응용 프로그램에서 데이터베이스 테이블을 사용하는 경우 에디션 기반 재정의(EBR)를 사용하여 응용 프로그램이 사용 중인 동안 응용 프로그램의 데이터베이스 구성 요소를 업그레이드할 수 있으므로 작동 중지 시간이 최소화되거나 제거될 수 있도록 에디션 보기로 각 테이블을 다룹니다.
에디션 기반 재정의에 대한 자세한 내용은 Oracle AI Database Development Guide를 참조하십시오.