oracle gtx,ORACLE
Category Archives: ORACLE
所有Oracle技術文章
看到群里有人提出一個需求,一張表數(shù)據量很大,只想導出其中一部分列。 無論是老版本exp還是數(shù)據泵expdp,Oracle都提供了QUERY的功能,這使得查詢表中部分記錄的功能可以實現(xiàn),但是QUERY只能過濾行,而不能過濾列,Oracle數(shù)據泵會讀取表中全部列的。 在12c中,Oracle為數(shù)據泵提供了VIEW功能,使得導出的時候可以根據視圖的定義來導出表中的數(shù)據: 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 →
嘉年華聽了恩墨學院的一個主題:《重現(xiàn)ORA-01555 細說Oracle 12c Undo數(shù)據管理》,呂老師介紹了UNDO的概念以及ORA-1555的產生,并介紹了12c以來Oracle的UNDO相關的新特性。 其中介紹了Oracle如何使用UNDO來實現(xiàn)多版本一致性讀,使用了OPEN CURSOR的方式非常巧妙地在很少量數(shù)據的情況下構造出可重現(xiàn)的案例。不過這個案例存在一點小的瑕疵,因為如果一不小心,很可能會導致結果與預期不符,這是因為這里有一個例外存在。 我們先來模擬一下UNDO構造一致性讀的情況,對于Oracle而言,默認的隔離級別是READ COMMIT,也就是說一個會話只能看到其他會話已經提交的修改,未提交的修改或者在當前會話查詢發(fā)起之后提交的修改都是不可見的。 再介紹一下OPEN CURSOR,Oracle中當一個游標被打開,其結果集就已經確定了,也就是說這個游標會根據OPEN CURSOR這個時間點對應的SCN來構造一致性查詢。但是OPEN CURSOR時,對應的SQL并不會被執(zhí)行,在后續(xù)FETCH的時候(對于SQLPLUS而言PRINT命令會觸發(fā)FETCH),SQL才真正被執(zhí)行。使用這種辦法可以模擬一個大的查詢,OPEN CURSOR相當于大的查詢的開始時間,其早于其他會話的修改提交時間,而FETCH的時間相當于大查詢讀取到這條記錄的時間,而該時間晚于其他會話提交的時間: ? 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ù)據庫出現(xiàn)了嚴重的性能問題,導致應用出現(xiàn)大范圍超時以及會話激增等問題,多次嘗試kill session都無法徹底解決問題,重啟后系統(tǒng)恢復正常。 拿到故障時刻的AWR報告,可以發(fā)現(xiàn)問題時刻,數(shù)據庫的主要等待為: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運行效率不佳導致數(shù)據庫整體運行負載較高的問題。 分析、定位數(shù)據庫的主要負載是這條語句引起的過程相對簡單,通過AWR報告就可以比較容易的完成定位,這里就不贅述了。 現(xiàn)在直接看一下這個導致性能問題的SQL語句,其對應的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 →
最近看到一個比較有意思的例子,是和更新重啟動有關。 更新重啟動是Oracle中一個隱藏的知識點,當Oracle在讀取數(shù)據時,會構造讀一致性,當讀取的內容發(fā)生了修改,Oracle會通過UNDO信息來還原數(shù)據的前鏡像,把數(shù)據還原到查詢發(fā)生的時刻,通過構造一致性的結果來實現(xiàn)讀取數(shù)據的一致性和隔離性。 Oracle實現(xiàn)的讀一致性也被稱為多版本讀一致性,每個會話都會構造自己的一致性查詢版本。但是對于寫操作而言,這種方式是不可能的,因為最終的數(shù)據只有一份,如要要修改數(shù)據,就只能修改唯一的這份數(shù)據,所以對讀操作,訪問的是一致性版本,而對于寫操作,修改的永遠是當前版本。 既然寫操作只能修改當前版本,當寫操作執(zhí)行的過程中,發(fā)現(xiàn)要修改的記錄發(fā)生了變化,破壞了更新發(fā)起時刻的一致性,這時就觸發(fā)了更新重啟動,也就是說更新操作會放棄之前的修改,然后重新發(fā)起一次新的更新操作。 ITPUB上有一個有意思的案例,展示的就是更新重啟動現(xiàn)象,鏈接如下:http://www.itpub.net/forum.php?mod=viewthread&tid=2102897 這里來重現(xiàn)一下更新重啟動,建立一張簡單測試用表,在會話一插入初始數(shù)據并進行更新操作: 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年刑偵科推理試題,看了一下題目,這些題目都是彼此依賴,很難找到一個題目作為入手點可以進一步分析,因此可能需要用紙筆配合大量的假設和試錯才能繼續(xù)完成。 原題如下: ??? 不過這種問題其實是SQL擅長的領域,于是一時手癢,寫了一個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 →
上一篇討論了非空字段中如果存在空值對于查詢的影響,這里描述一下導致問題的原因。 非空字段空值對查詢的影響: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有三年沒有更新了,其實這篇文檔也是三年前寫的,不過當時沒有貼出來,今天看到有人問起,于是分享出來。 這是客戶數(shù)據庫中碰到的一個有意思的問題。 數(shù)據庫版本為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新特性導致的問題。 這個新特性很早之前就研究過,也在其他客戶處碰到過類似的問題。從11g開始,如果一個用戶使用不正確的密碼嘗試登錄數(shù)據庫,那么隨著登錄失敗次數(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 →
總結
以上是生活随笔為你收集整理的oracle gtx,ORACLE的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 交行信用卡周周刷活动 周周刷2017礼品
- 下一篇: 交行信用卡怎么提升额度 用卡半年后提额才