[20231114]如何知道一條sql語句涉及到那些表.txt

来源:https://www.cnblogs.com/lfree/archive/2023/11/16/17837314.html
-Advertisement-
Play Games

簡介 SQL(Structured Query Language)是一種用於訪問和操作關係型資料庫的標準語言。它是一個功能強大的語言,用於執行各種資料庫操作,包括檢索數據、插入新記錄、更新記錄、刪除記錄、創建資料庫、創建新表、設置許可權以及執行存儲過程和視圖等。以下是 SQL 的一些重要方面: SQL ...


[20231114]如何知道一條sql語句涉及到那些表.txt

--//別人問的問題,開始想看執行計劃不就可以嗎?當然一些計劃可能僅僅涉及到索引。還有join elimination可能僅僅看到1個表。
--//對方的目的就是獲取這條sql語句相關表,重新分析表看看。

--//我想起查詢表獲得對應sql_id的腳本,腳本如下,參數5,6對應owner,table_namne.

SELECT /*+ MATERIALIZE ordered use_hash(d) use_hash(c) */
        DISTINCT c.kglobt03 sql_id
   FROM sys.x$kglob o
       ,sys.x$kgldp d
       ,sys.x$kglcursor c
  WHERE     o.inst_id = USERENV ('Instance')
        AND d.inst_id = USERENV ('Instance')
        AND c.inst_id = USERENV ('Instance')
        AND o.kglnaown = upper(nvl('&5',user))
        AND o.kglnaobj = upper('&6')
        AND d.kglrfhdl = o.kglhdadr
        AND c.kglhdadr = d.kglhdadr;

--//按照該腳本修改一下就可以實現該功能。

$ cat sqlt.sql
column owner format a20
column table_name format a30
column ot format a50

with sqla as ( SELECT /*+ MATERIALIZE leading(c d o ) use_nl(d) use_nl(o) */
        DISTINCT o.kglnaown owner, o.kglnaobj table_name
   FROM sys.x$kglob o
       ,sys.x$kgldp d
       ,sys.x$kglcursor c
  WHERE     o.inst_id = USERENV ('Instance')
        AND d.inst_id = USERENV ('Instance')
        AND c.inst_id = USERENV ('Instance')
        AND d.inst_id=o.inst_id
        AND c.inst_id=d.inst_id
        and c.kglobt03 = '&1'
        AND d.kglrfhdl = o.kglhdadr
        AND c.kglhdadr = d.kglhdadr)
select owner,table_name,owner||'.'||table_name ot from dba_tables where (owner,table_name) in (select * from sqla);

--//驗證看看:

1.環境:
SCOTT@book> @ver1
PORT_STRING         VERSION    BANNER
------------------- ---------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

2.測試1:
SCOTT@book> select emp.* from emp,dept where emp.deptno=dept.deptno and empno=7369;
     EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 1980-12-17 00:00:00        800                    20
--//多執行幾次.執行計劃如下:

Plan hash value: 2949544139
---------------------------------------------------------------------------------------
| Id  | Operation                   | Name   | E-Rows |E-Bytes| Cost (%CPU)| E-Time   |
---------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |        |        |       |     1 (100)|          |
|*  1 |  TABLE ACCESS BY INDEX ROWID| EMP    |      1 |    38 |     1   (0)| 00:00:01 |
|*  2 |   INDEX UNIQUE SCAN         | PK_EMP |      1 |       |     0   (0)|          |
---------------------------------------------------------------------------------------
--//由於join elimination原因,僅僅看到使用emp的pk_emp索引.

SCOTT@book> @ hash
HASH_VALUE SQL_ID        CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX   SQL_EXEC_START      SQL_EXEC_ID
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
3279263698 6a0as8b1rb5yk            0     104402      2949544139  c37597d2  2023-11-14 09:16:09    16777218

SYS@book> @ sqlt 6a0as8b1rb5yk
OWNER TABLE_NAME OT
----- ---------- -----------
SCOTT DEPT       SCOTT.DEPT
SCOTT EMP        SCOTT.EMP

3.測試2:
$ cat aa.txt
SELECT   SYS.all_cons_columns.column_name, SYS.all_constraints.constraint_name
    FROM SYS.all_constraints, SYS.all_cons_columns
   WHERE SYS.all_constraints.constraint_type = 'P'
     AND SYS.all_constraints.table_name = 'EMP'
     AND SYS.all_constraints.owner = 'SCOTT'
     AND SYS.all_constraints.constraint_name = SYS.all_cons_columns.constraint_name
     AND SYS.all_constraints.table_name = SYS.all_cons_columns.table_name
     AND SYS.all_constraints.owner = SYS.all_cons_columns.owner
ORDER BY SYS.all_constraints.constraint_name, SYS.all_cons_columns.POSITION;

SCOTT@book> @ aa.txt
COLUMN_NAME CONSTRAINT_NAME
----------- ---------------
EMPNO       PK_EMP

SCOTT@book> @ hash
HASH_VALUE SQL_ID        CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX   SQL_EXEC_START      SQL_EXEC_ID
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
3901825224 bt65mz7n92868            0      73928      1868126782  e89120c8  2023-11-14 09:21:03    16777222

SYS@book> @ sqlt bt65mz7n92868
OWNER TABLE_NAME OT
----- ---------- ---------------
SYS   CON$       SYS.CON$
SYS   COL$       SYS.COL$
SYS   CCOL$      SYS.CCOL$
SYS   USER$      SYS.USER$
SYS   OBJ$       SYS.OBJ$
SYS   CDEF$      SYS.CDEF$
SYS   OBJAUTH$   SYS.OBJAUTH$
SYS   ATTRCOL$   SYS.ATTRCOL$
8 rows selected.

4.測試3:
SYS@book> select * from V$INDEXED_FIXED_COLUMN where table_name in ('X$KGLOB','X$KGLDP','X$KGLCURSOR');
TABLE_NAME INDEX_NUMBER COLUMN_NAME          COLUMN_POSITION
---------- ------------ -------------------- ---------------
X$KGLOB               2 KGLOBT03                           0
X$KGLOB               1 KGLNAHSH                           0
X$KGLDP               1 KGLNAHSH                           0

SYS@book> @ dpc '' '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  42c7rtyakuuc0, child number 0
-------------------------------------
select * from V$INDEXED_FIXED_COLUMN where table_name in
('X$KGLOB','X$KGLDP','X$KGLCURSOR')
Plan hash value: 2260767298
---------------------------------------------------------------------------------------------------------
| Id  | Operation         | Name    | E-Rows |E-Bytes| Cost (%CPU)| E-Time   |  OMem |  1Mem | Used-Mem |
---------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |         |        |       |     1 (100)|          |       |       |          |
|*  1 |  HASH JOIN        |         |      6 |   594 |     1 (100)| 00:00:01 |  1393K|  1393K| 1266K (0)|
|*  2 |   FIXED TABLE FULL| X$KQFCO |      6 |   414 |     1 (100)| 00:00:01 |       |       |          |
|*  3 |   FIXED TABLE FULL| X$KQFTA |     10 |   300 |     0   (0)|          |       |       |          |
---------------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$5C160134
   2 - SEL$5C160134 / C@SEL$3
   3 - SEL$5C160134 / T@SEL$3
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - access("T"."INDX"="C"."KQFCOTAB")
   2 - filter(("KQFCOIDX"<>0 AND "C"."INST_ID"=USERENV('INSTANCE')))
   3 - filter(("KQFTANAM"='X$KGLCURSOR' OR "KQFTANAM"='X$KGLDP' OR "KQFTANAM"='X$KGLOB'))

SYS@book> @ sqlt 42c7rtyakuuc0
no rows selected
--//一些X$表查詢不到.這些是一些記憶體結構,不是真正意義上的表.

SYS@book> select count(*) from v$session;
  COUNT(*)
----------
        27

SYS@book> @ dpc '' '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  6d3y2ug8byd5j, child number 0
-------------------------------------
select count(*) from v$session
Plan hash value: 3931255564
------------------------------------------------------------------------------------
| Id  | Operation                  | Name            | E-Rows |E-Bytes| Cost (%CPU)|
------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT           |                 |        |       |     1 (100)|
|   1 |  SORT AGGREGATE            |                 |      1 |    91 |            |
|   2 |   NESTED LOOPS             |                 |      1 |    91 |     0   (0)|
|   3 |    NESTED LOOPS            |                 |      1 |    78 |     0   (0)|
|*  4 |     FIXED TABLE FULL       | X$KSUSE         |      1 |    52 |     0   (0)|
|*  5 |     FIXED TABLE FIXED INDEX| X$KSLWT (ind:1) |      1 |    26 |     0   (0)|
|*  6 |    FIXED TABLE FIXED INDEX | X$KSLED (ind:2) |      1 |    13 |     0   (0)|
------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$5C160134
   4 - SEL$5C160134 / S@SEL$3
   5 - SEL$5C160134 / W@SEL$3
   6 - SEL$5C160134 / E@SEL$3
Predicate Information (identified by operation id):
---------------------------------------------------
   4 - filter(("S"."INST_ID"=USERENV('INSTANCE') AND
              BITAND("S"."KSSPAFLG",1)<>0 AND BITAND("S"."KSUSEFLG",1)<>0))
   5 - filter("S"."INDX"="W"."KSLWTSID")
   6 - filter("W"."KSLWTEVT"="E"."INDX")

SYS@book> @ sqlt 6d3y2ug8byd5j
no rows selected

SYS@book> select count(*) from v$session,scott.dept;
  COUNT(*)
----------
       100

SYS@book> @ hash
HASH_VALUE SQL_ID        CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX   SQL_EXEC_START      SQL_EXEC_ID
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
2763321059 5n2nw9kkb9vr3            0      61155      3295531564  a4b4eee3  2023-11-16 16:05:00    16777216

SYS@book> @ sqlt 5n2nw9kkb9vr3
OWNER                TABLE_NAME                     OT
-------------------- ------------------------------ --------------------------------------------------
SCOTT                DEPT                           SCOTT.DEPT



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 學習視頻:【孫哥說Spring5:從設計模式到基本應用到應用級底層分析,一次深入淺出的Spring全探索。學不會Spring?只因你未遇見孫哥】 第四章、註入(Injection) 1.什麼是註入 通過Spring工廠及配置文件,為所創建對象的成員變數賦值 1.1為什麼需要註入 “通過編碼的方式,為 ...
  • 公眾號「架構成長指南」,專註於生產實踐、雲原生、分散式系統、大數據技術分享。 在本文中,我們將討論一些重要且常見的 Java Lambda 表達式面試問題和解答 1.什麼是 Lambda 表達式? lambda表達式只是一個沒有任何名稱的函數,它甚至可以用作函數中的參數,Lambda 表達式有利於函 ...
  • 目錄abstract class 和 interface 有什麼區別1.抽象類1.1抽象類的格式1.2抽象類註意事項2.介面2.1介面的格式2.2介面可以多繼承2.3介面的實現(implements)3.異同 abstract class 和 interface 有什麼區別 1.抽象類 抽象類:聲明 ...
  • 日誌在程式中的重要性非常的重要,當系統發生故障時,我們要隨時能排查出相關的日誌,細數日誌在Rust中的定義依賴及其實現。 ...
  • 本文討論了一次故障排查的過程,通過監控工具和分析信息,但最終沒有找到根本原因。文章強調了故障排查的複雜性和重要性,提醒保持冷靜和耐心,在團隊合作和知識共用的基礎上解決問題,並總結了從這次故障中學到的經驗和教訓。 ...
  • 前言 看過不少關於 await 的原理的文章,也知道背後是編譯器給轉成了狀態機實現的,但是具體是怎麼完成的,回調又是如何銜接的,一直都沒有搞清楚,這次下定決心把源碼自己跑了下,終於豁然開朗了 本文的演示代碼基於 VS2022 + .NET 6 示例 public class Program { st ...
  • 哈嘍大家好,我是鹹魚 最近這段時間比較忙,將近一周沒更新文章,再不更新我那為數不多的粉絲量就要庫庫往下掉了 T﹏T 剛好最近在學 Kafka,於是決定寫篇跟 Kafka 相關的文章(文中有不對的地方歡迎大家指出) 考慮到有些小伙伴可能是第一次接觸 Kafka ,所以先簡單介紹一下什麼是 Kafka ...
  • 零基礎快速上手STM32開發(手把手保姆級教程) 1. 前言 作為一名嵌入式工程師,STM32 是必須要學習的一款單片機,同時這款單片機資料足夠多,而且比較簡單,非常適合初學者入門。 STM32 是一款由 STMicroelectronics 公司開發的 32 位微控制器,由於其強大的處理能力和廣泛 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...