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