oracle解析規則?
SQL的處理過程描述如下:
1.檢查是否有打開的光標。如果有,直接通過光標鏈接到位于PGA中的私有SQL區(privateSQLAREA),轉到步驟11。否則,執行步驟2。
2.檢查是否設置了初始化參數SESSION_CACHED_CURSORS。如果設置了,還可以通過光標指向位于PGA中的私有SQL區域,轉到步驟11。否則,轉到步驟3。
3.檢查保持光標和釋放光標的設置。如果RELEASE_CURSORno(缺省no)和HOLD_CURSORyes(缺省no),當ORACLE執行完SQL語句后,為私有SQL區分配的內存空間被保留,游標和私有SQL區之間的鏈接也被保留,預編譯器將不再使用它。同樣,可以通過這個指針直接在privateSQL區域獲取語句,并轉到步驟11。
以上三種情況,實際上沒有parse,語句直接從位于PGA的私有SQL區域獲取,直接執行。這是快速解析。
當這三個條件都不存在時,oracle執行第4步。
4.創建一個光標。
5.語法檢查:檢查語法書寫是否正確,是否符合SQL參考手冊中給出的SQL語法。
6.語義分析:查找數據字典,檢查表和列是否正確,獲取所需對象的解析鎖,使這些對象的定義在句子解析過程中不會改變,驗證是否滿足訪問所涉及的schema對象所需的權限。
7.將語句轉換成ASCII等價的數字代碼,然后通過哈希算法得到哈希值。
8.檢查庫緩存中是否存在具有相同哈希值的語句。如果是,請轉到步驟11。否則,轉到步驟9。這是軟解析。
9.選擇執行計劃。從可用的執行計劃中選擇一個最佳執行計劃,包括與存儲的大綱或實體化視圖相關的決策。
10.生成語句的編譯代碼(p代碼)。
11.執行語句。
當一個會話執行一個語句時,該語句的解析結果將被保存在庫緩存中,并且在PGA的私有sql區域。銅Rsor總是通過一個鏈接直接鏈接到私有sql區域。如果在private中沒有找到這個副本,您需要解析SQL,然后匹配庫緩存中的哈希值。所以一般來說,您可以使用cursor而不進行任何解析,因為您直接從當前的私有sql區域獲得了與語句相關的信息,包括執行計劃。一旦需要在庫緩存中進行匹配,就必須進行解析。
Softppars
什么是oracle實例,寫出在oracle如何查找實例名的sql語句?
oracle分為oracle實例和Oracle數據庫文件。
1.實例是指內存結構,包括Sga、SGA和后臺進程,都命名為實例名。
2.數據文件是用于存儲數據的文件。
在關閉狀態下,數據庫文件存在于磁盤上,用戶要讀寫記錄需要打開數據庫,也就是打開或建立實例的過程,也就是在內存中劃出一塊內存,建立各種后臺進程。然后用戶通過一個進程操作內存,另一個進程將內存寫入數據庫文件。用戶不能直接操作數據庫文件。
在單實例狀態下,一般實例名和數據庫名可以相同,也可以不同。但是我們要注意區分這兩個概念。
一般不建議修改數據庫名,但是有官方的方法可以修改。