[20211112]SYS_CONTEXT ('USERENV','DBID').txt
[20211112]SYS_CONTEXT ('USERENV','DBID').txt
--//昨天看了華為監控執行sql語句,我發現一個規律,就是謂詞條件經常出現:
WHERE INSTANCE_NUMBER IN (SELECT instance_number FROM v$INSTANCE)
AND DBID IN (SELECT DBID FROM v$database)
--//也就是instance_number,DBID 透過兩個檢視v$INSTANCE,v$database,實際上應該儘量規避這樣的讀取模式。
--//也許程式設計讀一次獲取dbid,instance_number 然後儲存在變數裡面使用引數。
--//突然想起應該利用SYS_CONTEXT 函式取這樣更加科學,如果能支援獲取dbif可以規避對v$database的訪問,實際上就是減少對控制文
--//件的訪問。實際上對於檔案型資料庫可能影響並不大,OS有快取功能,而對於asm型別的資料庫,每次都是一次"硬讀"控制檔案。可
--//以大大減少對控制檔案的訪問。
SYS@127.0.0.1:17101/dyhis> select SYS_CONTEXT ('USERENV','INSTANCE') c10 from dual ;
C10
----------
1
--//我看oracle官方手冊,我發現沒有對應讀取DBID的函式,感覺有點奇怪,總覺應該有1個函式讀取DBID。
--//嘗試使用SYS_CONTEXT ('USERENV','DBID') 居然可以。我測試一下18c,19c版本都可以。
SYS@127.0.0.1:17101/dyhis> select SYS_CONTEXT ('USERENV','DBID') c10 ,dbid from v$database ;
C10 DBID
---------- ----------
34857349 34857349
--//唯獨缺點就是讀取的返回結果是字元型別,不過直接使用不會存在隱式轉化,dbid,instance_number都是number型別。
--//當然要對方修改不現實的,畢竟要保持程式碼的通用性。當然我覺得修改INSTANCE_NUMBER=SYS_CONTEXT ('USERENV','INSTANCE')
--//還是可行的,減少一些對X$表的訪問。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2842119/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SYS_CONTEXT & USERENVContext
- userenv() 和sys_context()Context
- Oracle USERENV和sys_contextOracleContext
- userenv和sys_context函式Context函式
- Oracle中USERENV和SYS_CONTEXT總結OracleContext
- [20190423]簡單測試user和SYS_CONTEXT ('USERENV','CURRENT_USER').txtContext
- 【Oracle-資料庫維護】-Oracle中USERENV和SYS_CONTEXT總結Oracle資料庫Context
- userenv函式函式
- Oracle 中的userenv()Oracle
- ORACLE USERENV函式Oracle函式
- [20150924]SYS_CONTEXT函式的使用.txtContext函式
- [20161003]如何知道資料庫的dbid.txt資料庫
- SYS_CONTEXTContext
- Oracle/PLSQL: UserEnv Function(轉自http://www.techonthenet.com/oracle/functions/userenv.php)OracleSQLFunctionHTTPPHP
- 獲取Oracle DBIDOracle
- oracle 之修改DBIDOracle
- Oracle identifiers :DBIDOracleIDE
- [20181116]SYS_CONTEXT函式的使用(12c).txtContext函式
- 使用SYS_CONTEXTContext
- oracle 修改dbid和dbnameOracle
- 更改資料庫DBID資料庫
- Oracle 設定指定DBIDOracle
- SYS_CONTEXT小記!Context
- DBNEWIN工具使用一:更改DBID
- sys_context函式用法Context函式
- dbnewid修改dbid和庫名
- sys_context函式的用法Context函式
- 說說sys_context函式Context函式
- Use SYS_CONTEXT to Obtain Session InformationContextAISessionORM
- SYS_CONTEXT函式的用法(ZT)Context函式
- 使用sys_context找出會話資訊Context會話
- 【SYS_CONTEXT】使用SYS_CONTEXT獲取連線到資料庫伺服器的IP地址Context資料庫伺服器
- RMAN duplicate必須指定DBID的場景
- nid 改變資料庫名,DBID資料庫
- 【原創】SYS_CONTEXT函式的用法Context函式
- 通過dbms_backup_restore修改oracle的dbidRESTOracle
- View and Data API Tips : Conversion between DbId and nodeViewAPI
- Instance database dbid sid tnsname等概念混個眼熟Database