一、通過PL/SQL Dev工具

創(chuàng)新互聯(lián)公司服務(wù)項目包括新安網(wǎng)站建設(shè)、新安網(wǎng)站制作、新安網(wǎng)頁制作以及新安網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,新安網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到新安省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
1、直接File-New-Explain Plan Window,在窗口中執(zhí)行sql可以查看計劃結(jié)果。其中,Cost表示cpu的消耗,單位為n%,Cardinality表示執(zhí)行的行數(shù),等價Rows。
2、先執(zhí)行 EXPLAIN PLAN FOR select * from tableA where paraA=1,再 select * from table(DBMS_XPLAN.DISPLAY)便可以看到oracle的執(zhí)行計劃了,看到的結(jié)果和1中的一樣,所以使用工具的時候推薦使用1方法。
注意:PL/SQL Dev工具的Command window中不支持set autotrance on的命令。還有使用工具方法查看計劃看到的信息不全,有些時候我們需要sqlplus的支持。
二、通過sqlplus
1.最簡單的辦法
Sql set autotrace on
Sql select * from dual;
執(zhí)行完語句后,會顯示explain plan 與 統(tǒng)計信息。
這個語句的優(yōu)點就是它的缺點,這樣在用該方法查看執(zhí)行時間較長的sql語句時,需要等待該語句執(zhí)行成功后,才返回執(zhí)行計劃,使優(yōu)化的周期大大增長。如果不想執(zhí)行語句而只是想得到執(zhí)行計劃可以采用:
Sql set autotrace traceonly
這樣,就只會列出執(zhí)行計劃,而不會真正的執(zhí)行語句,大大減少了優(yōu)化時間。雖然也列出了統(tǒng)計信息,但是因為沒有執(zhí)行語句,所以該統(tǒng)計信息沒有用處,如果執(zhí)行該語句時遇到錯誤,解決方法為:
(1)在要分析的用戶下:
Sqlplus @ ?
dbmsadminutlxplan.sql
(2) 用sys用戶登陸
Sqlplus @ ?sqlplusadminplustrce.sql
Sqlplus grant plustrace to user_name;
- - user_name是上面所說的分析用戶
2.用explain plan命令
(1) sqlplus explain plan for select * from testdb.myuser
(2) sqlplus select * from table(dbms_xplan.display);
上面這2種方法只能為在本會話中正在運行的語句產(chǎn)生執(zhí)行計劃,即我們需要已經(jīng)知道了哪條語句運行的效率很差,我們是有目的只對這條SQL語句去優(yōu)化。其實,在很多情況下,我們只會聽一個客戶抱怨說現(xiàn)在系統(tǒng)運行很慢,而我們不知道是哪個SQL引起的。此時有許多現(xiàn)成的語句可以找出耗費資源比較多的語句,如:
SELECT ADDRESS, substr(SQL_TEXT,1,20) Text, buffer_gets, executions,
buffer_gets/executions AVG FROM v$sqlarea
WHERE executions0 AND buffer_gets 100000 ORDER BY 5;
ADDRESS TEXT BUFFER_GETS EXECUTIONS AVG
-------- ---------------------------------------- ----------- ---------- ------------------------------------------------------------
66D83D64 select t.name, (sel 421531 60104 7.01336017
66D9E8AC select t.schema, t.n 1141739 2732 417.913250
66B82BCC select s.synonym_nam 441261 6 73543.5
從而對找出的語句進(jìn)行進(jìn)一步優(yōu)化。當(dāng)然我們還可以為一個正在運行的會話中運行的所有SQL語句生成執(zhí)行計劃,這需要對該會話進(jìn)行跟蹤,產(chǎn)生trace文件,然后對該文件用tkprof程序格式化一下,這種得到執(zhí)行計劃的方式很有用,因為它包含其它額外信息,如SQL語句執(zhí)行的每個階段(如Parse、Execute、Fetch)分別耗費的各個資源情況(如CPU、DISK、elapsed等)。
3、啟用SQL_TRACE跟蹤所有后臺進(jìn)程活動:
全局參數(shù)設(shè)置: .OracleHome/admin/SID/pfile中指定: SQL_TRACE = true (10g)
當(dāng)前session中設(shè)置:
SQL alter session set SQL_TRACE=true;
SQL select * from dual;
SQL alter session set SQL_TRACE=false;
對其他用戶進(jìn)行跟蹤設(shè)置:
SQL select sid,serial#,username from v$session where username='XXX';
SID SERIAL# USERNAME
------ ---------- ------------------
127 31923 A
128 54521 B
開啟跟蹤:SQL exec dbms_system.set_SQL_TRACE_in_session(127,31923,true);
關(guān)閉跟蹤:SQL exec dbms_system.set_SQL_TRACE_in_session(127,31923,false);
然后使用oracle自帶的tkprof命令行工具格式化跟蹤文件。
4、使用10046事件進(jìn)行查詢:
10046事件級別:
Lv1 - 啟用標(biāo)準(zhǔn)的SQL_TRACE功能,等價于SQL_TRACE
Lv4 - Level 1 + 綁定值(bind values)
Lv8 - Level 1 + 等待事件跟蹤
Lv12 - Level 1 + Level 4 + Level 8
全局設(shè)定:
OracleHome/admin/SID/pfile中指定: EVENT="10046 trace name context forever,level 12"
當(dāng)前session設(shè)定:
開啟:SQL alter session set events '10046 trace name context forever, level 8';
關(guān)閉:SQL alter session set events '10046 trace name context off';
對其他用戶進(jìn)行設(shè)置:
SQL select sid,serial#,username from v$session where username='XXX';
SID SERIAL# USERNAME
------ ---------- ------------------
127 31923 A
SQL exec dbms_system.set_ev(127,31923,10046,8,'A');
5、使用tkprof格式化跟蹤文件: (根據(jù)下面SQL語句得到的文件都不存在該目錄下,郁悶啊,懵懂啊...)
一般,一次跟蹤可以分為以下幾步:
1、界定需要跟蹤的目標(biāo)范圍,并使用適當(dāng)?shù)拿顔⒂盟韪櫋?/p>
2、經(jīng)過一段時間后,停止跟蹤。此時應(yīng)該產(chǎn)生了一個跟蹤結(jié)果文件。
3、找到跟蹤文件,并對其進(jìn)行格式化,然后閱讀或分析。
--使用一下SQL找到當(dāng)前session的跟蹤文件:
SELECT d.value|| '/' ||lower(rtrim(i.instance, chr( 0 )))|| '_ora_' ||p.spid|| '.trc' trace_file_namefrom( select p.spid from v$mystat m,v$session s, v$process pwhere m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,( select t.instance from v$thread t,v$parameter vwhere v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i,( select value from v$parameter where name = 'user_dump_dest' ) d;-- 其它用戶的 session SELECT d.value|| '/' ||lower(rtrim(i.instance, chr( 0 )))|| '_ora_' ||p.spid|| '.trc' trace_file_name from ( select p.spid from v$session s, v$process p where s.sid= '27' and s. SERIAL#= '30' and p.addr = s.paddr) p, ( select t.instance from v$thread t,v$parameter v where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i, ( select value from v$parameter where name = 'user_dump_dest' ) d;
--查找后使用tkprof命令,將TRACE文件格式為到D盤的explain_format.txt文件中
SQL $tkprof d:/oracle/admin/FZLGFM/udump/fzlgfm_ora_3468.trc d:/explain_format.txt
文件內(nèi)容大致如下(看不太懂....懵懂啊.....天啊....神啊.....過幾時就懂了/////////////)
TKPROF: Release 9.2.0.1.0 - Production on 星期二 4月 20 13:59:20 2010
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Trace file: d:/oracle/admin/FZLGFM/udump/fzlgfm_ora_3468.trc
Sort options: default
********************************************************************************
count = number of times OCI procedure was executed
cpu = cpu time in seconds executing
elapsed = elapsed time in seconds executing
disk = number of physical reads of buffers from disk
query = number of buffers gotten for consistent read
current = number of buffers gotten in current mode (usually for update)
rows = number of rows processed by the fetch or execute call********************************************************************************
alter session set events '10046 trace name context forever, level 8'
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 0 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 1 0.00 0.00 0 0 0 0
Misses in library cache during parse: 0
Misses in library cache during execute: 1
Optimizer goal: CHOOSE
Parsing user id: SYS
1.語法檢查:檢查 SQL 拼寫是否正確,如果不正確,Oracle 會報語法錯誤。
2.語義檢查:檢查 SQL 中的訪問對象是否存在。比如我們在寫 SELECT 語句的時候,列名寫錯了,系統(tǒng)就會提示錯誤。語法檢查和語義檢查的作用是保證 SQL 語句沒有錯誤。
3.權(quán)限檢查:看用戶是否具備訪問該數(shù)據(jù)的權(quán)限。
4.共享池檢查:共享池(Shared Pool)是一塊內(nèi)存池,最主要的作用是緩存 SQL 語句和該語句的執(zhí)行計劃。Oracle 通過檢查共享池是否存在 SQL 語句的執(zhí)行計劃,來判斷進(jìn)行軟解析,還是硬解析。那軟解析和硬解析又該怎么理解呢?在共享池中,Oracle 首先對 SQL 語句進(jìn)行 Hash 運算,然后根據(jù) Hash 值在庫緩存(Library Cache)中查找,如果存在 SQL 語句的執(zhí)行計劃,就直接拿來執(zhí)行,直接進(jìn)入“執(zhí)行器”的環(huán)節(jié),這就是軟解析。如果沒有找到 SQL 語句和執(zhí)行計劃,Oracle 就需要創(chuàng)建解析樹進(jìn)行解析,生成執(zhí)行計劃,進(jìn)入“優(yōu)化器”這個步驟,這就是硬解析。
5.優(yōu)化器:優(yōu)化器中就是要進(jìn)行硬解析,也就是決定怎么做,比如創(chuàng)建解析樹,生成執(zhí)行計劃。
6.執(zhí)行器:當(dāng)有了解析樹和執(zhí)行計劃之后,就知道了 SQL 該怎么被執(zhí)行,這樣就可以在執(zhí)行器中執(zhí)行語句了。
共享池是 Oracle 中的術(shù)語,包括了庫緩存,數(shù)據(jù)字典緩沖區(qū)等。我們上面已經(jīng)講到了庫緩存區(qū),它主要緩存 SQL 語句和執(zhí)行計劃。而數(shù)據(jù)字典緩沖區(qū)存儲的是 Oracle 中的對象定義,比如表、視圖、索引等對象。當(dāng)對 SQL 語句進(jìn)行解析的時候,如果需要相關(guān)的數(shù)據(jù),會從數(shù)據(jù)字典緩沖區(qū)中提取。
如何避免硬解析,盡量使用軟解析呢?在 Oracle 中,綁定變量是它的一大特色。綁定變量就是在 SQL 語句中使用變量,通過不同的變量取值來改變 SQL 的執(zhí)行結(jié)果。
Oracle中的SQL在執(zhí)行之前進(jìn)行解析 一個硬解析包括下面的步驟
加載到共享池中 SQL源代碼被加載到內(nèi)存中
語法解析 Oracle檢查語法拼寫錯誤
語義解析 Oracle驗證來自數(shù)據(jù)字典的所有表名和列名并且驗證你是否有權(quán)訪問這些數(shù)據(jù)
查詢轉(zhuǎn)換 如果允許(query_rewrite=true) oracle將把復(fù)雜的SQL轉(zhuǎn)換為等價的簡單形式
優(yōu)化 根據(jù)模式的統(tǒng)計信息創(chuàng)建執(zhí)行計劃(在 g中或許會使用動態(tài)的樣本統(tǒng)計信息)
創(chuàng)建可執(zhí)行文件 Oracle創(chuàng)建一個服務(wù)于SQL查詢的 調(diào)用本地文件的可執(zhí)行文件
Oracle提供了 shared_pool_size參數(shù)來緩存SQL從而使我們不需要重復(fù)解析SQL 但是 如果shared_pool_size設(shè)置太小或者在代碼中使用了非重用的SQL(例如包含直接量where name= fred ) SQL語句可能會過期
在Oracle中軟解析和硬解析的區(qū)別是什么?僅僅是上面用紅色標(biāo)明的第一步 也就是說 軟解析不需要重新裝載到共享池(以及相關(guān)的內(nèi)存分配)
通常很高的解析調(diào)用次數(shù)( /秒)表明你的系統(tǒng)有大量不同的SQL語句 或者你的SQL語句沒有被重用(例如 沒有使用綁定變量)
硬解析需要把 SQL語句加載到共享池中 硬解析比軟解析差很多 因為它牽涉到共享池中內(nèi)存的分配和管理 一旦被加載 SQL必須完全重新檢查語法和語義以及生成可執(zhí)行目標(biāo)
如果shared_pool_size設(shè)置的太小或者SQL語句沒有重用 則會發(fā)生大量的硬解析
lishixinzhi/Article/program/Oracle/201311/17371
導(dǎo)讀:Oracle的后臺運作原理是什么?我們的一條命令是如何被執(zhí)行的?今天我們就從一條簡單的Select語句開始,看看Oracle數(shù)據(jù)庫后臺的運作機(jī)制。
Select語句可以說是DBA和數(shù)據(jù)庫開發(fā)者在工作中使用最多的語句之一,但這條語句是如何執(zhí)行?在Oracle數(shù)據(jù)庫中又是如何運作的呢?今天我們就從一條簡單的Select語句開始,看看Oracle數(shù)據(jù)庫后臺的運作機(jī)制。這對于我們之后的系統(tǒng)管理與故障排除非常有幫助。
第一步:客戶端把語句發(fā)給服務(wù)器端執(zhí)行
當(dāng)我們在客戶端執(zhí)行select語句時,客戶端會把這條SQL語句發(fā)送給服務(wù)器端,讓服務(wù)器端的進(jìn)程來處理這語句。也就是說,Oracle客戶端是不會做任何的操作,他的主要任務(wù)就是把客戶端產(chǎn)生的一些SQL語句發(fā)送給服務(wù)器端。雖然在客戶端也有一個數(shù)據(jù)庫進(jìn)程,但是,這個進(jìn)程的作用跟服務(wù)器上的進(jìn)程作用事不相同的。服務(wù)器上的數(shù)據(jù)庫進(jìn)程才會對SQL語句進(jìn)行相關(guān)的處理。不過,有個問題需要說明,就是客戶端的進(jìn)程跟服務(wù)器的進(jìn)程是一一對應(yīng)的。也就是說,在客戶端連接上服務(wù)器后,在客戶端與服務(wù)器端都會形成一個進(jìn)程,客戶端上的我們叫做客戶端進(jìn)程;而服務(wù)器上的我們叫做服務(wù)器進(jìn)程。所以,由于所有的SQL語句都是服務(wù)器進(jìn)程執(zhí)行的,所以,有些人把服務(wù)器進(jìn)程形象地比喻成客戶端進(jìn)程的“影子”。
第二步:語句解析
當(dāng)客戶端把SQL語句傳送到服務(wù)器后,服務(wù)器進(jìn)程會對該語句進(jìn)行解析。同理,這個解析的工作,也是在服務(wù)器端所進(jìn)行的。雖然這只是一個解析的動作,但是,其會做很多“小動作”。
1. 查詢高速緩存。服務(wù)器進(jìn)程在接到客戶端傳送過來的SQL語句時,不會直接去數(shù)據(jù)庫查詢。而是會先在數(shù)據(jù)庫的高速緩存中去查找,是否存在相同語句的執(zhí)行計劃。如果在數(shù)據(jù)高速緩存中,剛好有其他人使用這個查詢語句的話,則服務(wù)器進(jìn)程就會直接執(zhí)行這個SQL語句,省去后續(xù)的工作。所以,采用高速數(shù)據(jù)緩存的話,可以提高SQL語句的查詢效率。一方面是從內(nèi)存中讀取數(shù)據(jù)要比從硬盤中的數(shù)據(jù)文件中讀取數(shù)據(jù)效率要高,另一方面,也是因為這個語句解析的原因。
不過這里要注意一點,這個數(shù)據(jù)緩存跟有些客戶端軟件的數(shù)據(jù)緩存是兩碼事。有些客戶端軟件為了提高查詢效率,會在應(yīng)用軟件的客戶端設(shè)置數(shù)據(jù)緩存。由于這些數(shù)據(jù)緩存的存在,可以提高客戶端應(yīng)用軟件的查詢效率。但是,若其他人在服務(wù)器進(jìn)行了相關(guān)的修改,由于應(yīng)用軟件數(shù)據(jù)緩存的存在,導(dǎo)致修改的數(shù)據(jù)不能及時反映到客戶端上。從這也可以看出,應(yīng)用軟件的數(shù)據(jù)緩存跟數(shù)據(jù)庫服務(wù)器的高速數(shù)據(jù)緩存不是一碼事。
2. 語句合法性檢查。當(dāng)在高速緩存中找不到對應(yīng)的SQL語句時,則數(shù)據(jù)庫服務(wù)器進(jìn)程就會開始檢查這條語句的合法性。這里主要是對SQL語句的語法進(jìn)行檢查,看看其是否合乎語法規(guī)則。如果服務(wù)器進(jìn)程認(rèn)為這條SQL語句不符合語法規(guī)則的時候,就會把這個錯誤信息,反饋給客戶端。在這個語法檢查的過程中,不會對SQL語句中所包含的表名、列名等等進(jìn)行SQL他只是語法上的檢查。
3. 語言含義檢查。若SQL語句符合語法上的定義的話,則服務(wù)器進(jìn)程接下去會對語句中的字段、表等內(nèi)容進(jìn)行檢查。看看這些字段、表是否在數(shù)據(jù)庫中。如果表名與列名不準(zhǔn)確的話,則數(shù)據(jù)庫會就會反饋錯誤信息給客戶端。
所以,有時候我們寫select語句的時候,若語法與表名或者列名同時寫錯的話,則系統(tǒng)是先提示說語法錯誤,等到語法完全正確后,再提示說列名或表名錯誤。若能夠掌握這個順序的話,則在應(yīng)用程序排錯的時候,可以節(jié)省時間。
4. 獲得對象解析鎖。當(dāng)語法、語義都正確后,系統(tǒng)就會對我們需要查詢的對象加鎖。這主要是為了保障數(shù)據(jù)的一致性,防止我們在查詢的過程中,其他用戶對這個對象的結(jié)構(gòu)發(fā)生改變。對于加鎖的原理與方法,我在其他文章中已經(jīng)有專門敘述,在這里就略過不談了。
5. 數(shù)據(jù)訪問權(quán)限的核對。當(dāng)語法、語義通過檢查之后,客戶端還不一定能夠取得數(shù)據(jù)。服務(wù)器進(jìn)程還會檢查,你所連接的用戶是否有這個數(shù)據(jù)訪問的權(quán)限。若你連接上服務(wù)器的用戶不具有數(shù)據(jù)訪問權(quán)限的話,則客戶端就不能夠取得這些數(shù)據(jù)。故,有時候我們查詢數(shù)據(jù)的時候,辛辛苦苦地把SQL語句寫好、編譯通過,但是,最后系統(tǒng)返回個 “沒有權(quán)限訪問數(shù)據(jù)”的錯誤信息,讓我們氣半死。這在前端應(yīng)用軟件開發(fā)調(diào)試的過程中,可能會碰到。所以,要注意這個問題,數(shù)據(jù)庫服務(wù)器進(jìn)程先檢查語法與語義,然后才會檢查訪問權(quán)限。
6. 確定最佳執(zhí)行計劃。當(dāng)語句與語法都沒有問題,權(quán)限也匹配的話,服務(wù)器進(jìn)程還是不會直接對數(shù)據(jù)庫文件進(jìn)行查詢。服務(wù)器進(jìn)程會根據(jù)一定的規(guī)則,對這條語句進(jìn)行優(yōu)化。不過要注意,這個優(yōu)化是有限的。一般在應(yīng)用軟件開發(fā)的過程中,需要對數(shù)據(jù)庫的sql語言進(jìn)行優(yōu)化,這個優(yōu)化的作用要大大地大于服務(wù)器進(jìn)程的自我優(yōu)化。所以,一般在應(yīng)用軟件開發(fā)的時候,數(shù)據(jù)庫的優(yōu)化是少不了的。
當(dāng)服務(wù)器進(jìn)程的優(yōu)化器確定這條查詢語句的最佳執(zhí)行計劃后,就會將這條SQL語句與執(zhí)行計劃保存到數(shù)據(jù)高速緩存。如此的話,等以后還有這個查詢時,就會省略以上的語法、語義與權(quán)限檢查的步驟,而直接執(zhí)行SQL語句,提高SQL語句處理效率。
第三步:語句執(zhí)行
語句解析只是對SQL語句的語法進(jìn)行解析,以確保服務(wù)器能夠知道這條語句到底表達(dá)的是什么意思。等到語句解析完成之后,數(shù)據(jù)庫服務(wù)器進(jìn)程才會真正的執(zhí)行這條SQL語句。
這個語句執(zhí)行也分兩種情況。一是若被選擇行所在的數(shù)據(jù)塊已經(jīng)被讀取到數(shù)據(jù)緩沖區(qū)的話,則服務(wù)器進(jìn)程會直接把這個數(shù)據(jù)傳遞給客戶端,而不是從數(shù)據(jù)庫文件中去查詢數(shù)據(jù)。若數(shù)據(jù)不在緩沖區(qū)中,則服務(wù)器進(jìn)程將從數(shù)據(jù)庫文件中查詢相關(guān)數(shù)據(jù),并把這些數(shù)據(jù)放入到數(shù)據(jù)緩沖區(qū)中。
這里仍然要注意一點,就是Oracle數(shù)據(jù)庫中,定義了很多種類的高速緩存。像上面所說的SQL語句緩存與現(xiàn)在講的數(shù)據(jù)緩存。我們在學(xué)習(xí)數(shù)據(jù)庫的時候,需要對這些緩存有一個清晰的認(rèn)識,并了解各個種類緩存的作用。這對于我們后續(xù)數(shù)據(jù)庫維護(hù)與數(shù)據(jù)庫優(yōu)化是非常有用的。
第四步:提取數(shù)據(jù)
當(dāng)語句執(zhí)行完成之后,查詢到的數(shù)據(jù)還是在服務(wù)器進(jìn)程中,還沒有被傳送到客戶端的用戶進(jìn)程。所以,在服務(wù)器端的進(jìn)程中,有一個專門負(fù)責(zé)數(shù)據(jù)提取的一段代碼。他的作用就是把查詢到的數(shù)據(jù)結(jié)果返回給用戶端進(jìn)程,從而完成整個查詢動作。
從這整個查詢處理過程中,我們在數(shù)據(jù)庫開發(fā)或者應(yīng)用軟件開發(fā)過程中,需要注意以下幾點:
一是要了解數(shù)據(jù)庫緩存跟應(yīng)用軟件緩存是兩碼事情。數(shù)據(jù)庫緩存只有在數(shù)據(jù)庫服務(wù)器端才存在,在客戶端是不存在的。只有如此,才能夠保證數(shù)據(jù)庫緩存中的內(nèi)容跟數(shù)據(jù)庫文件的內(nèi)容一致。才能夠根據(jù)相關(guān)的規(guī)則,防止數(shù)據(jù)臟讀、錯讀的發(fā)生。而應(yīng)用軟件所涉及的數(shù)據(jù)緩存,由于跟數(shù)據(jù)庫緩存不是一碼事情,所以,應(yīng)用軟件的數(shù)據(jù)緩存雖然可以提高數(shù)據(jù)的查詢效率,但是,卻打破了數(shù)據(jù)一致性的要求,有時候會發(fā)生臟讀、錯讀等情況的發(fā)生。所以,有時候,在應(yīng)用軟件上有專門一個功能,用來在必要的時候清除數(shù)據(jù)緩存。不過,這個數(shù)據(jù)緩存的清除,也只是清除本機(jī)上的數(shù)據(jù)緩存,或者說,只是清除這個應(yīng)用程序的數(shù)據(jù)緩存,而不會清除數(shù)據(jù)庫的數(shù)據(jù)緩存。
二是絕大部分SQL語句都是按照這個處理過程處理的。我們DBA或者基于Oracle數(shù)據(jù)庫的開發(fā)人員了解這些語句的處理過程,對于我們進(jìn)行涉及到SQL語句的開發(fā)與調(diào)試,是非常有幫助的。有時候,掌握這些處理原則,可以減少我們排錯的時間。特別要注意,數(shù)據(jù)庫是把數(shù)據(jù)查詢權(quán)限的審查放在語法語義的后面進(jìn)行檢查的。所以,有時會若光用數(shù)據(jù)庫的權(quán)限控制原則,可能還不能滿足應(yīng)用軟件權(quán)限控制的需要。此時,就需要應(yīng)用軟件的前臺設(shè)置,實現(xiàn)權(quán)限管理的要求。而且,有時應(yīng)用數(shù)據(jù)庫的權(quán)限管理,也有點顯得繁瑣,會增加服務(wù)器處理的工作量。因此,對于記錄、字段等的查詢權(quán)限控制,大部分程序涉及人員喜歡在應(yīng)用程序中實現(xiàn),而不是在數(shù)據(jù)庫上實現(xiàn)。
...分析可以使用關(guān)鍵字 analyze
或者使用三方工具 比如 plsql里面就有相關(guān)功能
網(wǎng)站名稱:oracle解析器怎么看 oracle查詢分析器
網(wǎng)站地址:http://chinadenli.net/article32/hjgosc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、App開發(fā)、虛擬主機(jī)、營銷型網(wǎng)站建設(shè)、云服務(wù)器、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)