[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 微服務框架,幫助我們輕鬆構建和管理微服務應用。 本框架不僅支持 Consul 服務註 ...
  • 先看一下效果吧: 如果不會寫動畫或者懶得寫動畫,就直接交給Blend來做吧; 其實Blend操作起來很簡單,有點類似於在操作PS,我們只需要設置關鍵幀,滑鼠點來點去就可以了,Blend會自動幫我們生成我們想要的動畫效果. 第一步:要創建一個空的WPF項目 第二步:右鍵我們的項目,在最下方有一個,在B ...
  • Prism:框架介紹與安裝 什麼是Prism? Prism是一個用於在 WPF、Xamarin Form、Uno 平臺和 WinUI 中構建鬆散耦合、可維護和可測試的 XAML 應用程式框架 Github https://github.com/PrismLibrary/Prism NuGet htt ...
  • 在WPF中,屏幕上的所有內容,都是通過畫筆(Brush)畫上去的。如按鈕的背景色,邊框,文本框的前景和形狀填充。藉助畫筆,可以繪製頁面上的所有UI對象。不同畫筆具有不同類型的輸出( 如:某些畫筆使用純色繪製區域,其他畫筆使用漸變、圖案、圖像或繪圖)。 ...
  • 前言 嗨,大家好!推薦一個基於 .NET 8 的高併發微服務電商系統,涵蓋了商品、訂單、會員、服務、財務等50多種實用功能。 項目不僅使用了 .NET 8 的最新特性,還集成了AutoFac、DotLiquid、HangFire、Nlog、Jwt、LayUIAdmin、SqlSugar、MySQL、 ...
  • 本文主要介紹攝像頭(相機)如何採集數據,用於類似攝像頭本地顯示軟體,以及流媒體數據傳輸場景如傳屏、視訊會議等。 攝像頭採集有多種方案,如AForge.NET、WPFMediaKit、OpenCvSharp、EmguCv、DirectShow.NET、MediaCaptre(UWP),網上一些文章以及 ...
  • 前言 Seal-Report 是一款.NET 開源報表工具,擁有 1.4K Star。它提供了一個完整的框架,使用 C# 編寫,最新的版本採用的是 .NET 8.0 。 它能夠高效地從各種資料庫或 NoSQL 數據源生成日常報表,並支持執行複雜的報表任務。 其簡單易用的安裝過程和直觀的設計界面,我們 ...
  • 背景需求: 系統需要對接到XXX官方的API,但因此官方對接以及管理都十分嚴格。而本人部門的系統中包含諸多子系統,系統間為了穩定,程式間多數固定Token+特殊驗證進行調用,且後期還要提供給其他兄弟部門系統共同調用。 原則上:每套系統都必須單獨接入到官方,但官方的接入複雜,還要官方指定機構認證的證書 ...
  • 本文介紹下電腦設備關機的情況下如何通過網路喚醒設備,之前電源S狀態 電腦Power電源狀態- 唐宋元明清2188 - 博客園 (cnblogs.com) 有介紹過遠程喚醒設備,後面這倆天瞭解多了點所以單獨加個隨筆 設備關機的情況下,使用網路喚醒的前提條件: 1. 被喚醒設備需要支持這WakeOnL ...
  • 前言 大家好,推薦一個.NET 8.0 為核心,結合前端 Vue 框架,實現了前後端完全分離的設計理念。它不僅提供了強大的基礎功能支持,如許可權管理、代碼生成器等,還通過採用主流技術和最佳實踐,顯著降低了開發難度,加快了項目交付速度。 如果你需要一個高效的開發解決方案,本框架能幫助大家輕鬆應對挑戰,實 ...