[20190227]簡單探究tab$的bojb#欄位.txt

来源:https://www.cnblogs.com/lfree/archive/2019/02/28/10451183.html
-Advertisement-
Play Games

[20190227]簡單探究tab$的bojb#欄位.txt--//上午做了刪除tab$表,其對應索引i_tab1的恢復,我一直以為這個索引會很大,沒有想到在我的測試環境僅僅139個鍵值.--//查看/u01/app/oracle/product/11.2.0.4/dbhome_1/rdbms/ad ...


[20190227]簡單探究tab$的bojb#欄位.txt

--//上午做了刪除tab$表,其對應索引i_tab1的恢復,我一直以為這個索引會很大,沒有想到在我的測試環境僅僅139個鍵值.
--//查看/u01/app/oracle/product/11.2.0.4/dbhome_1/rdbms/admin/dcore.sql的內容tab$的定義如下.(我使用版本11.2.0.4)

1.環境:
SYS@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

create table tab$                                             /* table table */
( obj#          number not null,                            /* object number */
  /* DO NOT CREATE INDEX ON DATAOBJ#  AS IT WILL BE UPDATED IN A SPACE
   * TRANSACTION DURING TRUNCATE */
  dataobj#      number,                          /* data layer object number */
  ts#           number not null,                        /* tablespace number */
  file#         number not null,               /* segment header file number */
  block#        number not null,              /* segment header block number */
  bobj#         number,                /* base object number (cluster / iot) */
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ...
  spare1        number,                       /* used to store hakan_kqldtvc */
  spare2        number,         /* committed partition # used by drop column */
  spare3        number,                           /* summary sequence number */
  spare4        varchar2(1000),         /* committed RID used by drop column */
  spare5        varchar2(1000),      /* summary related information on table */
  spare6        date                                  /* flashback timestamp */
)
cluster c_obj#(obj#)
/

--//可以從後面的註解發現base object number (cluster / iot).也就是IOT表以及cluster table的base object number.

2.對於cluster table:

select obj# from sys.tab$ where bobj#=2
minus
select object_id from dba_objects where data_object_id=2;

no rows selected

select object_id from dba_objects where data_object_id=2
minus
select obj# from sys.tab$ where bobj#=2

OBJECT_ID
----------
         2

SYS@book> select * from sys.tab$ where obj#=2  ;
no rows selected

SCOTT@book> select obj#,dataobj#,bobj#,tab# from sys.tab$ a where bobj#=2 order by obj#;
      OBJ#   DATAOBJ#      BOBJ#       TAB#
---------- ---------- ---------- ----------
         4          2          2          1
         5          2          2          2
        19          2          2          3
        20          2          2          4
        21          2          2          5
        80          2          2          6
        83          2          2          7
        86          2          2          8
        88          2          2          9
        92          2          2         10
        95          2          2         11
       114          2          2         12
       174          2          2         13
       252          2          2         14
       253          2          2         15
       512          2          2         16
       517          2          2         17
17 rows selected.

--//可以發現tab$表中沒有obj#=2的記錄.也就是對於cluster table,tab$的bobj#欄位僅僅記錄各個子表的情況.並且等於dataobj#.

3.IOT表的情況呢?
--//建立IOT看看:

SCOTT@book> create table t_iot ( a varchar2(10),b varchar2(10),vc varchar2(1200), constraint t_iot_pk PRIMARY KEY(a)) ORGANIZATION INDEX;
Table created.

SCOTT@book> select object_id,data_object_id,object_name from dba_objects where object_name in ('T_IOT_PK','T_IOT') and owner=user;
 OBJECT_ID DATA_OBJECT_ID OBJECT_NAME
---------- -------------- --------------------
     91110                T_IOT
     91111          91111 T_IOT_PK

--//對於IOT表的本質實際上是一個索引,僅僅索引段有空間分配(DATA_OBJECT_ID非空).

SCOTT@book> select obj#,dataobj#,bobj# from sys.tab$ a where obj# in (91110,91111);
      OBJ#   DATAOBJ#      BOBJ#
---------- ---------- ----------
     91110
--//表IOT沒有任何段分配.奇怪沒有obj#=91111的段.沒有插入記錄嗎?

SCOTT@book> insert into t_iot values ('1','a','a');
1 row created.

SCOTT@book> commit ;
Commit complete.

SCOTT@book> select obj#,dataobj#,bobj# from sys.tab$ a where obj# in (91110,91111);
      OBJ#   DATAOBJ#      BOBJ#
---------- ---------- ----------
     91110

--//當然也很好理解OBJECT_ID=91111是索引段,不會出現在表tab$裡面.如何理解註解base object number (cluster / iot)呢?
--//也就是索引組織表(IOT)什麼時候會出現表段呢?難道是OVERFLOW段嗎?建立包含overflow段的iot表看看:

SCOTT@book> create table z_iot ( a varchar2(10),b varchar2(10),vc varchar2(1200), constraint z_iot_pk PRIMARY KEY(a)) ORGANIZATION INDEX OVERFLOW  TABLESPACE users;
Table created.

SCOTT@book> select object_id,data_object_id,object_name from dba_objects where object_name in ('Z_IOT_PK','Z_IOT') and owner=user;
 OBJECT_ID DATA_OBJECT_ID OBJECT_NAME
---------- -------------- --------------------
     91112                Z_IOT
     91114          91114 Z_IOT_PK
--//註意1個細節,object_id出現跳號.

SCOTT@book> select * from dba_objects where  object_id between 91112 and 91114;
OWNER  OBJECT_NAME          SUBOBJECT_  OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE CREATED             LAST_DDL_TIME       TIMESTAMP           STATUS  T G S  NAMESPACE EDITION_NAME
------ -------------------- ---------- ---------- -------------- ----------- ------------------- ------------------- ------------------- ------- - - - ---------- ------------
SCOTT  Z_IOT_PK                             91114          91114 INDEX       2019-02-28 15:51:44 2019-02-28 15:51:44 2019-02-28:15:51:44 VALID   N N N          4
SCOTT  SYS_IOT_OVER_91112                   91113          91113 TABLE       2019-02-28 15:51:44 2019-02-28 15:51:44 2019-02-28:15:51:44 VALID   N Y N          1
SCOTT  Z_IOT                                91112                TABLE       2019-02-28 15:51:44 2019-02-28 15:51:44 2019-02-28:15:51:44 VALID   N N N          1
--//可以看出多了一個對象SYS_IOT_OVER_91112就是OVERFLOW段(類型是table),也就是這個溢出段按照表的形式保持信息,對於這些東西
--//很少探究.正常的業務表很少使用IOT,至少國內的情況如此.

SCOTT@book> select obj#,dataobj#,bobj# from sys.tab$ a where obj# between 91112 and 91114;
      OBJ#   DATAOBJ#      BOBJ#
---------- ---------- ----------
     91112                 91113
     91113      91113      91112

--//註意看它們之間的關係.
--//OBJ#=91112,對應是表Z_IOT,沒有數據段分配,DATAOBJ#等於null,BOBJ#=91113,對應是SYS_IOT_OVER_91112(後面的數字與Z_IOT的object_id一致)
--//OBJ#=91113,對應的是SYS_IOT_OVER_91112.DATAOBJ#=91113.BOBJ#=91112,對應的是Z_IOT,這也就是註解講base object number(cluster / iot).
--//有點繞,大家慢慢理解吧...

--//這也就是sys.tab$表為什麼bobj#非空的記錄很少的原因,這樣前面的修複索引成為可能,相對容易的緣故.


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

-Advertisement-
Play Games
更多相關文章
  • 1、ubuntu網卡配置 1、查看網卡名稱 2、進行編輯網卡配置文件 更改網卡配置文件添加內容修改內容如下:下麵的enp0s3需要改成自己的網卡名稱。ip地址,掩碼網關自己合理配置就行了。記得wq!保存退出。 3、重啟網卡 4、ping百度測試 2、ubuntu安裝ssh服務 1、查看是否開啟ssh ...
  • 在實際的資料庫Sqlserver的運維的過程中,很多時候我們需要做到數據的備份操作,可以做到定時備份,也可以進行手動資料庫備份。在實際的過程中,有時候因業務需要備份出完整資料庫,而有時候又因為實際業務只需要影響到一張表或者幾張表,備份整個資料庫未必是最優的方案,此時可採用生成腳本或者Select I ...
  • 一、介面回調+自定義分區 1.介面回調:在使用消費者的send方法時添加Callback回調 註意:在自定義分區後,你的消費者會收不到消息,因為消費者預設接收的分區為0。 二、攔截器 1)創建生產者類; 2)創建自定義攔截器類實現ProducerInterceptor介面,重寫抽象方法; 3)在業務 ...
  • 在一次考試中,筆者因考試的電腦上沒有安裝操作Mysql資料庫的可視化工具而不知如何操作資料庫,所以在這裡可以提醒各位掌握 命令行來操作資料庫也是非常重要的。 筆者以慘痛的教訓來警惕大家。 進入正題: 使用命令行來操作資料庫分為以下幾個步驟: 前提: windows +R 運行 cmd.exe 步驟一 ...
  • 一、Kafka概述 1.Kafka是一個分散式流媒體平臺,它有三個關鍵功能: (1)發佈和訂閱記錄流,類似於消息隊列或企業消息傳遞系統; (2)以容錯的持久方式存儲記錄流; (3)記錄發送時處理流。 2.Kafka通常應用的兩大類應用 (1)構建在系統或應用程式之間的可靠獲取數據的實時流數據管道; ...
  • 筆記記錄自林曉斌(丁奇)老師的《MySQL實戰45講》 5) --深入淺出索引(下) 這次的筆記從一個簡單的查詢開始: 建表語句是這樣的 如果要執行 select * from T where k between 3 and 5這條語句,需要執行幾次搜索操作呢,會掃描多少行呢?由上面的建表及初始化語 ...
  • 禁用 1* select LAST_DATE,NEXT_DATE from dba_jobs where job=45SQL> begin 2 dbms_job.broken(45,true); 3 end; 4 / PL/SQL procedure successfully completed. ...
  • eclipse中寫入sql插入語句時,navicat中顯示的出現亂碼(???)。 在修改eclipse工作空間編碼、navicate中的資料庫編碼、mysql中my.ini中的配置之後還是出現亂碼。 然後把mysql、navicate全部卸載,下載新版本。 再重新配置mysql中,因為新建data里 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...