oracle gtx,ORACLE
Category Archives: ORACLE
所有Oracle技術(shù)文章
看到群里有人提出一個需求,一張表數(shù)據(jù)量很大,只想導(dǎo)出其中一部分列。 無論是老版本exp還是數(shù)據(jù)泵expdp,Oracle都提供了QUERY的功能,這使得查詢表中部分記錄的功能可以實現(xiàn),但是QUERY只能過濾行,而不能過濾列,Oracle數(shù)據(jù)泵會讀取表中全部列的。 在12c中,Oracle為數(shù)據(jù)泵提供了VIEW功能,使得導(dǎo)出的時候可以根據(jù)視圖的定義來導(dǎo)出表中的數(shù)據(jù): SQL> select banner from v$version; BANNER ——————————————————————————– Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 – Production SQL> CREATE TABLE T_TABLES AS SELECT * FROM ALL_TABLES; 表已創(chuàng)建。 SQL> create view v_tables as select owner, table_name, tablespace_name from t_tables … Continue reading →
Oracle在12c之前對于索引范圍掃描是沒有辦法并行執(zhí)行的,從12.1開始,Oracle可以并行的執(zhí)行索引掃描。 首先創(chuàng)建測試環(huán)境: SQL> create table t_para_ind (id number, name varchar2(30), created date); ? Table created. ? SQL> insert into t_para_ind select id, object_name, created from t_big; ? 6735106 rows created. ? SQL> commit; ? Commit complete. ? SQL> create index … Continue reading →
嘉年華聽了恩墨學(xué)院的一個主題:《重現(xiàn)ORA-01555 細(xì)說Oracle 12c Undo數(shù)據(jù)管理》,呂老師介紹了UNDO的概念以及ORA-1555的產(chǎn)生,并介紹了12c以來Oracle的UNDO相關(guān)的新特性。 其中介紹了Oracle如何使用UNDO來實現(xiàn)多版本一致性讀,使用了OPEN CURSOR的方式非常巧妙地在很少量數(shù)據(jù)的情況下構(gòu)造出可重現(xiàn)的案例。不過這個案例存在一點小的瑕疵,因為如果一不小心,很可能會導(dǎo)致結(jié)果與預(yù)期不符,這是因為這里有一個例外存在。 我們先來模擬一下UNDO構(gòu)造一致性讀的情況,對于Oracle而言,默認(rèn)的隔離級別是READ COMMIT,也就是說一個會話只能看到其他會話已經(jīng)提交的修改,未提交的修改或者在當(dāng)前會話查詢發(fā)起之后提交的修改都是不可見的。 再介紹一下OPEN CURSOR,Oracle中當(dāng)一個游標(biāo)被打開,其結(jié)果集就已經(jīng)確定了,也就是說這個游標(biāo)會根據(jù)OPEN CURSOR這個時間點對應(yīng)的SCN來構(gòu)造一致性查詢。但是OPEN CURSOR時,對應(yīng)的SQL并不會被執(zhí)行,在后續(xù)FETCH的時候(對于SQLPLUS而言PRINT命令會觸發(fā)FETCH),SQL才真正被執(zhí)行。使用這種辦法可以模擬一個大的查詢,OPEN CURSOR相當(dāng)于大的查詢的開始時間,其早于其他會話的修改提交時間,而FETCH的時間相當(dāng)于大查詢讀取到這條記錄的時間,而該時間晚于其他會話提交的時間: ? SQL> SET SQLP ‘SQL1> ‘ SQL1> CREATE TABLE T_UNDO (ID NUMBER, NAME VARCHAR2(30)); ? Table created. ? SQL1> INSERT INTO T_UNDO SELECT ROWNUM, OBJECT_NAME FROM DBA_OBJECTS; … Continue reading →
某客戶數(shù)據(jù)庫出現(xiàn)了嚴(yán)重的性能問題,導(dǎo)致應(yīng)用出現(xiàn)大范圍超時以及會話激增等問題,多次嘗試kill session都無法徹底解決問題,重啟后系統(tǒng)恢復(fù)正常。 拿到故障時刻的AWR報告,可以發(fā)現(xiàn)問題時刻,數(shù)據(jù)庫的主要等待為:Global transaction acquire instance locks和enq: TX – row lock contention。 ? Event Waits Time(s) Avg wait (ms) % DB time Wait Class Global transaction acquire instance locks 5,342 5,343 1000 74.09 Configuration enq: TX – row lock contention … Continue reading →
最近碰到一個單條SQL運(yùn)行效率不佳導(dǎo)致數(shù)據(jù)庫整體運(yùn)行負(fù)載較高的問題。 分析、定位數(shù)據(jù)庫的主要負(fù)載是這條語句引起的過程相對簡單,通過AWR報告就可以比較容易的完成定位,這里就不贅述了。 現(xiàn)在直接看一下這個導(dǎo)致性能問題的SQL語句,其對應(yīng)的SQL REPORT統(tǒng)計如下: Stat Name Statement Total Per Execution % Snap Total Elapsed Time (ms) 363,741 363,740.78 8 .42 CPU Time (ms) 362,770 362,770.00 8 .81 Executions 1 ? ? Buffer Gets 756 756.00 0.00 Disk Reads 0 0.00 … Continue reading →
最近看到一個比較有意思的例子,是和更新重啟動有關(guān)。 更新重啟動是Oracle中一個隱藏的知識點,當(dāng)Oracle在讀取數(shù)據(jù)時,會構(gòu)造讀一致性,當(dāng)讀取的內(nèi)容發(fā)生了修改,Oracle會通過UNDO信息來還原數(shù)據(jù)的前鏡像,把數(shù)據(jù)還原到查詢發(fā)生的時刻,通過構(gòu)造一致性的結(jié)果來實現(xiàn)讀取數(shù)據(jù)的一致性和隔離性。 Oracle實現(xiàn)的讀一致性也被稱為多版本讀一致性,每個會話都會構(gòu)造自己的一致性查詢版本。但是對于寫操作而言,這種方式是不可能的,因為最終的數(shù)據(jù)只有一份,如要要修改數(shù)據(jù),就只能修改唯一的這份數(shù)據(jù),所以對讀操作,訪問的是一致性版本,而對于寫操作,修改的永遠(yuǎn)是當(dāng)前版本。 既然寫操作只能修改當(dāng)前版本,當(dāng)寫操作執(zhí)行的過程中,發(fā)現(xiàn)要修改的記錄發(fā)生了變化,破壞了更新發(fā)起時刻的一致性,這時就觸發(fā)了更新重啟動,也就是說更新操作會放棄之前的修改,然后重新發(fā)起一次新的更新操作。 ITPUB上有一個有意思的案例,展示的就是更新重啟動現(xiàn)象,鏈接如下:http://www.itpub.net/forum.php?mod=viewthread&tid=2102897 這里來重現(xiàn)一下更新重啟動,建立一張簡單測試用表,在會話一插入初始數(shù)據(jù)并進(jìn)行更新操作: SQL> SET SQLP ‘SQL1> ‘ SQL1> CREATE TABLE T_UPDATE (ID NUMBER); Table created. SQL1> INSERT INTO T_UPDATE SELECT ROWNUM FROM DUAL CONNECT BY LEVEL < 4; 3 rows created. SQL1> COMMIT; Commit complete. SQL1> … Continue reading →
前些天看到一個朋友在朋友圈里面貼了個圖,上面是2018年刑偵科推理試題,看了一下題目,這些題目都是彼此依賴,很難找到一個題目作為入手點可以進(jìn)一步分析,因此可能需要用紙筆配合大量的假設(shè)和試錯才能繼續(xù)完成。 原題如下: ??? 不過這種問題其實是SQL擅長的領(lǐng)域,于是一時手癢,寫了一個SQL語句: SQL> WITH T AS ? 2? (SELECT ASCII(‘A’) R FROM DUAL ? 3? UNION ALL ? 4? SELECT ASCII(‘B’) FROM DUAL ? 5? UNION ALL ? 6? SELECT ASCII(‘C’) FROM DUAL ? 7? UNION ALL ? … Continue reading →
上一篇討論了非空字段中如果存在空值對于查詢的影響,這里描述一下導(dǎo)致問題的原因。 非空字段空值對查詢的影響:http://yangtingkun.net/?p=1481 書接上文,其實CBO的判斷本身是沒有問題的,問題在于,為什么一個空值會存在非空約束的字段中。 重新看一下問題: SQL> select * from t_def; ID NAME TYPE ———- —————————— ——– 1 a SQL> select * from t_def where type is null; no rows selected SQL> select * from t_def where type is not null; ID … Continue reading →
BLOG有三年沒有更新了,其實這篇文檔也是三年前寫的,不過當(dāng)時沒有貼出來,今天看到有人問起,于是分享出來。 這是客戶數(shù)據(jù)庫中碰到的一個有意思的問題。 數(shù)據(jù)庫版本為11.2.0.3,客戶的DSG同步軟件在同步某張表時出現(xiàn)了錯誤,報錯無非插入空值ORA-1400,本來這是一個很簡單的問題,但是診斷發(fā)現(xiàn)問題比較有意思: SQL> select * from t_def; ID NAME TYPE ———- —————————— ——– 1 a SQL> select * from t_def where type is null; no rows selected SQL> select * from t_def where type is not null; ID NAME … Continue reading →
又是一個11g新特性導(dǎo)致的問題。 這個新特性很早之前就研究過,也在其他客戶處碰到過類似的問題。從11g開始,如果一個用戶使用不正確的密碼嘗試登錄數(shù)據(jù)庫,那么隨著登錄失敗次數(shù)的增加,每次登錄驗證前延遲等待的時間也會增加: SQL> SET TIME ON 18:30:54 SQL> 18:30:58 SQL> conn test/test Connected. 18:31:25 SQL> 18:31:25 SQL> conn test/a conn test/a conn test/a conn test/a conn test/a conn test/a conn test/a conn test/test conn test/a ERROR: ORA-01017: invalid username/password; logon … Continue reading →
總結(jié)
以上是生活随笔為你收集整理的oracle gtx,ORACLE的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 交行信用卡周周刷活动 周周刷2017礼品
- 下一篇: 东明县计算机学校,东明县职业中等专业学校