與 Oracle DB 交互
下面的示例從最基本的層面描述 Oracle DB 操作。該示例說明了一種 Oracle DB 配置,在該配置中,用戶和關聯服務器進程運行於通過網絡連接的不同計算機上。
1. 在安裝了 Oracle DB 的節點(通常稱為“主機”或“數據庫服務器”)上啟動了一個實例。
2. 用戶啟動一個應用程序,該應用程序衍生了一個用戶進程。該應用程序嘗試建立一個與服務器的連接(此連接可能是本地連接、客戶機/服務器連接或來自中間層的三層連接)。
3. 服務器運行具有相應 Oracle Net Services 處理程序的監聽程序。監聽程序檢測到應用程序發出的連接請求,並創建一個代表用戶進程的專用服務器進程。
4. 用戶運行一條 DML 類型的 SQL 語句並提交事務處理。例如,用戶更改表中的客戶地址並提交更改。
5. 服務器進程接收該語句,並檢查共享池(一個 SGA 組件)中是否有包含相同 SQL 語句的共享 SQL 區域。如果找到共享 SQL 區域,服務器進程將檢查用戶對於所請求數據的訪問權限,並且使用現有的共享 SQL 區域處理該語句。如果未找到共享 SQL 區域,則為該語句分配一個新的共享 SQL 區域,以便對該語句進行語法分析和處理。
6. 服務器進程從實際數據文件(表)或數據庫緩沖區高速緩存中存儲的值中檢索任何必需的數據值。
7. 服務器進程修改 SGA 中的數據。因為提交了事務處理,所以日志寫進程 (LGWR) 會立即將該事務處理記錄到重做日志文件中。數據庫寫進程 (DBWn) 會待執行效率高時將修改後的塊永久寫入磁盤。
8. 如果事務處理成功,服務器進程將通過網絡向應用程序發送一條消息。如果事務處理不成功,則傳送一條錯誤消息。
9. 在整個過程中,其它後台進程同時在運行,用於監視是否有需要干預的情況。此外,數據庫服務器管理其他用戶的事務處理,並防止在請求相同數據的事務處理之間發生爭用。