程式設計實務
使用下列程式設計實務。
使用設備套件
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 無法使用,您可以使用 DBMS_MONITOR 子程式收集統計資料 (如 Oracle Database PL/SQL Packages and Types Reference 中所述)。
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 文件。
-
訊息佇列 (Web 型商業應用程式如何相互通訊)
如需 Oracle Database Advanced Queuing (AQ) 的簡介資訊,請參閱 Oracle Database Advanced Queuing User's Guide。
-
維護記錄變更的記錄
如需有關「工作區管理程式」的簡介資訊,請參閱 Oracle Database Workspace Manager Developer's Guide。
在範例 8-4 中,兩個並行交易會將儲存在表格中的訊息移出佇列 (亦即,每個交易都會尋找並鎖定表格的下一個未處理資料列)。此範例不會只是呼叫 DBMS_AQ.DEQUEUE 程序 (如 Oracle Database PL/SQL Packages and Types Reference 中所述),而是會在表格上建立以函數為基礎的索引,然後在每個交易中使用該函數來擷取資料列和顯示訊息。
範例 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
另請參閱:
涵蓋含有版本檢視的資料庫表格
如果您的應用程式使用資料庫表格,請以版本檢視來涵蓋每個表格,以便使用以版本為基礎的重新定義 (EBR) 在使用中時升級應用程式的資料庫元件,進而縮短或消除停機時間。
如需有關以版本為基礎的重新定義之資訊,請參閱 Oracle Database Development Guide。