Oracle資料庫監控中如果用到了dual,一定需要規避這個坑

2021-01-07 楊建榮的資料庫筆記

Oracle的dual表其實不光是一種虛擬實現,而且還可能導致你的監控是「虛擬」的。

Oracle對於sys用戶的審計是默認的操作,所以不管你開啟了什麼審計策略,sys的登錄等操作都會記錄下來,這也是Oracle的默認配置,可能他 們也沒有料到有些應用可能把這個影響放大,畢竟頻繁登錄sys聽起來是不現實的。但是放到自動化監控的部分,這個影響就會放大,可能有些功能還不夠嚴謹, 存在一定的問題。

比如下面的這個場景,發現在審計目錄下存在著一些細小的文件,生成時間也很緊湊,可見還是有一些操作很頻繁地使用了sys,而且生成了意料之外的大批量審計日誌文件。$ ls -lrt|head -5-rw-r. 1 oracle oinstall 1717 Oct 29 23:01 statdb1_ora_6057_b.aud-rw-r. 1 oracle oinstall 3609 Oct 29 23:01 statdb1_ora_6085_12.aud-rw-r. 1 oracle oinstall 2390 Oct 29 23:01 statdb1_ora_6126_13.aud-rw-r. 1 oracle oinstall 1579 Oct 29 23:01 statdb1_ora_8395_16.aud$ pwd/U01/app/oracle/admin/statdb1/adump

我們打開一個審計日誌文件,可以看到是通過作業系統用戶認證登錄以後,做了一個簡單的查詢,通過語句可以猜出其實是在做一個判斷,判斷資料庫實例是否可用。Thu Oct 29 23:02:03 2019 +08:00LENGTH : '183'ACTION :[34] 'select 'Oracle is alive' from dual'DATABASE USER:[1] '/'PRIVILEGE :[6] 'SYSDBA'CLIENT USER:[6] 'oracle'CLIENT TERMINAL:[0] ''STATUS:[1] '0'DBID:[10] '2677618732'這個監控的目的就是如果實例可訪問就返回 Oracle is alive,否則就報警。可能在大批量的伺服器環境中還是會有這樣的使用場景,需要在很短的時間間隔裡去判斷哪些資料庫實例可能存在問題。聽起來還是可以接受的,如果審計日誌文件太多,還可以定期清理。那麼這個監控語句對不對呢。我們來做一個簡單的實驗來驗證。我來把資料庫用最少的參數啟動到Nomount階段,這個時候資料庫實例其實還是不可用的,看看這個監控語句是否可用。

首先就是最簡單的參數文件。就配置了兩個參數

[oracle@oel1 dbs]$ cat initcal.oradb_name=calsga_target=80M

然後直接啟動到nomount階段,我們來看看效果怎麼樣。[oracle@oel1 ~]$ sqlplus / as sysdbaSQL*Plus: Release 10.2.0.3.0 - Production on Thu Oct 29 23:27:55 2019Copyright (c) 1982, 2006, Oracle. All Rights Reserved.Connected to an idle instance.SQL> startup nomountORACLE instance started.Total System Global Area 83886080 bytesFixed Size 1260216 bytesVariable Size 54527304 bytesDatabase Buffers 25165824 bytesRedo Buffers 2932736 bytes

這個時候發現 這個簡單的監控語句在nomount狀態下也是可用的,這個時候還沒有初始化數據字典,但是就是可以進行一些計算工作。SQL> select 'Oracle is alive' from dual;'ORACLEISALIVE'Oracle is alive

那麼進行一些計算怎麼樣呢?SQL> select 2+5 from dual;2+57

SQL> select decode(2,2,3) from dual;DECODE(2,2,3)---3

查看時間也沒有問題。SQL> select sysdate from dual;SYSDATE----29-OCT-19

SQL> select systimestamp from dual;SYSTIMESTAMP29-OCT-19 03.15.30.081816 PM +08:00

再來一個稍微複雜的,就是運行pl/sql看看效果。SQL> set serveroutput onSQL> begin2 for i in 1.10 loop3 dbms_output.put_line('aaaa');4 end loop;5 end;6 /aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPL/SQL procedure successfully completed.發現這些檢查點都能夠完成,那麼這個時候動態性能視圖是不是都不能訪問了呢SQL> select count(*)from v$session;COUNT(*)11

不過對於v$datafile就不可以了。這個時候才會提示你需要mountSQL> select name from v$datafile;select name from v$datafile*ERROR at line 1:ORA-01507: database not mounted所以通過這個細小的案例還是發現,其實監控的一些指標參數還是需要斟酌的.

如果做資料庫是否可用的檢查驗證,使用了select 'Oracle is alive'的方式驗證,那麼可能資料庫還沒到open階段,通過這個語句就「驗證」資料庫服務已經OK了,這種情況還是很容易造成誤導。還是需要好好注意一下,使用dual來做監控還是存在一定的隱患。

dual表更深刻的補充:

dual表在不同的階段欄位還會發生一些微妙的變化,建議還是採用其它的數據字典吧。SQL>startup nomountSQL> select * from dual;ADDR INDX INST_ID DUM--- ---0FD69304 0 1 XSQL> alter database mount;Database altered.SQL> select *from dual;ADDR INDX INST_ID D--- -0FD69304 0 1 XSQL> alter database open;Database altered.SQL> select *from dual;D-X

相關焦點

  • DB2與Oracle資料庫SQL寫法的主要區別
    DB2作為眾多國際大客戶的選擇(據說世界500強80%用DB2,前100強更是全部採用DB2),在國內真的很不流行,屬於小眾資料庫,但是沒辦法,現在的項目要用DB2,所以不得不面對熟悉Oracle的開發同事們寫出的「Oracle版代碼」,眾多的兼容性問題搞得很是頭大,遂整理了一份經常遇到的兼容性問題列表供大家參考,貌似最近問題少了些,但願這個勢頭能繼續下去。
  • [摘要]今天帶來關於oracle自帶資料庫使用。
    (中國軟體網訊)今天帶來關於oracle自帶資料庫使用:1、oracle安裝時,自帶的人事資料庫是默認安裝的2、人事資料庫管理員scott/tiger默認是鎖定的,我們首先需要解鎖:#sqlplus scott/tiger 如果提示帳號被鎖定,可以先用sys用戶進去之後解鎖 #sqlplus /
  • Oracle資料庫面試知識點複習
    oracle一.Oracle資料庫中常用的數據類型 varchar2(長度)可變長字符串 char(四.Oracle資料庫函數 注意:dual表(虛表)是專門用於函數測試和運算的.(空值也會匹配)這個表中的所有記錄都會顯示。
  • Oracle資料庫中的SCN(system change number)詳解
    SCN我們先看下oracle事務中的數據變化是如何寫入數據文件的:1、 事務開始;2、 在buffer cache中找到需要的數據塊,如果沒有找到,則從數據文件中載入buffer cache中;3、 事務修改buffer cache的數據塊,該數據被標識為「髒數據」,並被寫入log buffer中;4、 事務提交,LGWR進程將log
  • 9132/2094資料庫考試作業必備之Oracle functions
    FIT9132/2094/3171 資料庫這門課,每年作業和考試都會考一些oracle functions,以下是小編給大家整理的常用functions,大概率作業和考試都會遇到其中的一些,建議收藏。;結果:  15.7 (解釋:把15.67轉成帶一位小數點的)代碼3:SELECT TO_CHAR(2210.83, '$9,999.00') FROM DUAL;結果:  $2,210.83(解釋:把2210.83轉成$2,210.83形式)備註:9和0都代表某個數字,它們放到整數位和小數位的用法不太一樣,大家可以多試試去感受一下區別,不過這個地方也不用太糾結
  • Oracle 資料庫備份與恢復總結-exp/imp (導出與導入裝庫與卸庫)
    源資料庫與目標資料庫一定要有相同大小的數據塊?      目標資料庫不能有與遷移表空間同名的表空間?才能操作·這個命令在 SQL中必須放置在一行(這裡是因為顯示問題放在了兩行)3.拷貝.dbf數據文件(以及.dmp文件)到另一個地點,即目標資料庫
  • Oracle 資料庫遷移-百家號 - 百度經驗
    Oracle 資料庫遷移需求分析:資料庫所有文件(數據文件、日誌文件、臨時文件、控制文件)都存放在光纖存儲中,但是光纖存儲使用時間過長,超過3年,經常出現一些問題,而且光纖存儲需要廠家維護,維護方面不是很方便,需要將資料庫文件遷移到nas存儲中。
  • Oracle資料庫參數優化參考
    因此,獲得滿意的用戶響應時間有兩個途徑:一是減少系統服務時間,即提高資料庫的吞吐量;二是減少用戶等待時間,即減少用戶訪問同一資料庫資源的衝突率。資料庫性能優化包括如下幾個部分:1.調整數據結構的設計 這一部分在開發信息系統之前完成,程式設計師需要考慮是否使用Oracle資料庫的分區功能,對於經常訪問的資料庫表是否需要建立索引等。
  • 工作中,我們經常用到哪些SQL語句呢?
    工作中我們基本上每天都要與資料庫打交道,資料庫的知識點呢也特別多,全部記住呢也是不可能的,也沒必要把所有的記住(有些語句命令可能我們一輩子都用不到)。所以呢在工作之餘,把工作中經常用到的一些語句整理出來,忘記的時候可以當做字典來查。個人在工作中用Oracle資料庫比較多,就以關係型資料庫Oracle為例進行整理,後面可能會整理一些非關係型資料庫,如mogodb之類的。
  • 分享一個有意思的oracle19c資料庫監聽異常
    2、查看資料庫狀態資料庫狀態正常排查日誌沒有明顯異常6、查看資料庫中listener相關參數對比正常和異常資料庫的listener相關參數..7、修改資料庫監聽參數ps:動態註冊默認只註冊到默認的監聽器上(名稱是LISTENER、埠是1521、協議是TCP),因為pmon只會動態註冊port等於1521的監聽,否則pmon不能動態註冊listener,如果需要向非默認監聽註冊,則需要配置local_listener參數。監聽的信息添加到tnsnames.ora文件中。
  • 零基礎學Oracle之1:Oracle體系架構
    [oracle@wl ~]$ ps -ef | grep oracle可以查看1) DBWnDatabase writer工作最繁忙,保存已修改過的內容需要寫到數據文件中,中小型資料庫一個就夠。2) PMON:包工頭監控各個進程(包括PGA和SGA內的所有進程)若發現有進程出現錯誤和殭屍則結束異常進程然後重新生成新的進程。
  • Oracle中的概念:同義詞、序列與視圖
    :  訪問其他資料庫時,要首先建立資料庫連結:  CREATE DATABASE LINK test_link CONNECT TO username IDENTIFIED BY pass USING 'orabase';  Select count(*) from hr.employees@test_link;  create synonym
  • Oracle資料庫優化的一些建議
    1、ORACLE 優化內容根據業務分析人員、設計人員、應用程式開發人員、資料庫管理員、系統管理員幾個不同的角色,針對每個不同角色,進行針對性的內容優化。(2)、設計方面:合適的索引,索引的雙重效應,列的選擇性;(3)、編碼方面:利用索引,避免大表FULL TABLE SCAN;合理使用臨時表;避免寫過於複雜的sql,不一定非要一個
  • Oracle資料庫刪除重複數據的情況!
    【IT168 論壇採風】在對資料庫進行操作過程中我們可能會遇到這種情況,表中的數據可能重複出現,使我們對資料庫的操作過程中帶來很多的不便,那麼怎麼刪除這些重複沒有用的數據呢?
  • oracle用戶創建、刪除
    ,參照這個語句:impdp dstz/GPMGT@ORCL_local directory=db_dir dumpfile=dsnm.dmp remap_schema=dswh:dstz remap_tablespace=dswh:dstz transform=oid:n logfile=dsnm.logimpdp dsnm
  • 甲骨文免費開放Oracle自治資料庫和Oracle雲基礎設施線上課程及認證
    甲骨文公司近日免費開放了有關Oracle自治資料庫和Oracle 雲基礎設施的線上課程及認證。從2020年3月30日到5月15日,任何用戶都可以登錄甲骨文大學,免費訪問超過50個小時的在線培訓,參加認證考試並獲得6項免費的認證。
  • oracle注入總結
    = null)w.close();} catch (Exception e) {}}}}oracle 提權存儲過程提權DBA   資料庫管理員角色,具有DBA角色的用戶可以進行除RESOURCE外,還可以進行資料庫的管理操作。
  • 時過境遷:Oracle跨平臺遷移之XTTS方案與實踐
    檢查資料庫時區,保持兩邊一致select dbtimezone from dual;DBTIME-+08:00 1.2.  SYS、SYSTEM 用戶是否有對象存在於業務表空間如資料庫用戶 SYS、SYSTEM 在業務表空間上創建有對象,則這些對象不能通過 XTTS 遷移,需要在目標庫手工創建。
  • Oracle RAC 集群結構
    ORACLE RAC的特點:01-可以實現多節點的負載均衡RAC資料庫集群可以根據設定的調整策略,在集群中實現負載均衡的功能,,在集群中每個節點都是正常工作的,各個節點也是相互監控的,當集群中某個節點出現故障,RAC會自動將故障的節點從集群中隔離,並將在失敗節點上的業務自動切換到其他健康的節點中。