[20190918]shrink space與ORA-08102錯誤.txt

来源:https://www.cnblogs.com/lfree/archive/2019/09/19/11552377.html
-Advertisement-
Play Games

[20190918]shrink space與ORA-08102錯誤.txt1.環境:SCOTT@test01p> @ ver1PORT_STRING VERSION BANNER CON_ID IBMPC/WIN_NT64-9.1.0 12.2.0.1.0 Oracle Database 12c ...


[20190918]shrink space與ORA-08102錯誤.txt

1.環境:
SCOTT@test01p> @ ver1
PORT_STRING                    VERSION        BANNER                                                                               CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0           12.2.0.1.0     Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production              0

2.再現ORA-08102錯誤:

SCOTT@test01p> create table t(x int, pad varchar2(100)) enable row movement;
Table created.

SCOTT@test01p> insert /*+ append*/  into t select level, lpad('x', 100, 'x') from dual connect by level<=1e4;
10000 rows created.

SCOTT@test01p> alter table t add y int default 10 not null;
Table altered.

SCOTT@test01p> create index i_t_xy on t(x,y);
Index created.

SCOTT@test01p> delete t where x<=5000;
5000 rows deleted.

SCOTT@test01p> commit ;
Commit complete.

SCOTT@test01p> alter table t shrink space;
alter table t shrink space
*
ERROR at line 1:
ORA-08102: index key not found, obj# 27979, file 11, block 2445 (2)

SCOTT@test01p> host  oerr ora 8102
08102, 00000, "index key not found, obj# %s, file %s, block %s (%s)"
// *Cause:  Internal error: possible inconsistency in index
// *Action:  Send trace file to your customer support representative, along
//           with information on reproducing the error

3.10046跟蹤看看.
SCOTT@test01p> alter session set events '10046 level 12';
Session altered.

SCOTT@test01p> alter table t shrink space;
alter table t shrink space
*
ERROR at line 1:
ORA-08102: index key not found, obj# 27979, file 11, block 2445 (2)

SCOTT@test01p> alter session set events '10046 off';
Session altered.

--//檢查轉儲發現:
oer 8102.2 - obj# 27979, rdba: 0x02c0098d(afn 11, blk# 2445)
kdk key 8102.2:
  ncol: 3, len: 12
  key: (12):  03 c2 64 31 ff 06 02 c0 1d a5 00 00
  mask: (2048):
--//通過bbed觀察看看.
--//03 c2 64 31 ,03表示長度.後面3位表示oracle數字.

SCOTT@test01p> @ conv_n c26431
       N20
----------
      9948

BBED> set dba 11,2446
        DBA             0x02c0098e (46139790 11,2446)
--//註:windows下bbed,無法識別10g以上版本的os頭,block存在+1的偏移.

BBED> map
 File: D:\APP\ORACLE\ORADATA\TEST\TEST01P\USERS01.DBF (11)
 Block: 2446                                  Dba:0x02c0098e
------------------------------------------------------------
 KTB Data Block (Index Leaf)
 struct kcbh, 20 bytes                      @0
 struct ktbbh, 72 bytes                     @20
 struct kdxle, 32 bytes                     @100
 b2 kd_off[399]                             @132
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ub1 freespace[822]                         @930
 ub1 rowdata[6380]                          @1752
 ub4 tailchk                                @8188

BBED> x /rnnx *kd_off[3]
rowdata[6352]                               @8104
-------------
flag@8104:     0x00 (NONE)
lock@8105:     0x00
data key:
col    0[3] @8107: 9583
col    1[2] @8111: 10
col    2[6] @8114:  0x02  0xc0  0x1d  0x9f  0x00  0x19

--//9948-9583+3 = 368

BBED> x /rnnx *kd_off[368]
rowdata[516]                                @2268
------------
flag@2268:     0x00 (NONE)
lock@2269:     0x00
data key:
col    0[3] @2271: 9948
col    1[2] @2275: 10
col    2[6] @2278:  0x02  0xc0  0x1d  0xa5  0x00  0x00

BBED> x /rxxx *kd_off[368]
rowdata[516]                                @2268
------------
flag@2268:     0x00 (NONE)
lock@2269:     0x00
data key:
col    0[3] @2271:  0xc2  0x64  0x31
col    1[2] @2275:  0xc1  0x0b
col    2[6] @2278:  0x02  0xc0  0x1d  0xa5  0x00  0x00
--//可以看出原來的key是 03 c2  64 31 02 c1  0b 06 02 c0 1d a5 00 00
--//而shrink space後,索引的鍵值發生了變化,變為如下:
--//key: (12):  03 c2 64 31 ff 06 02 c0 1d a5 00 00
--//0xff表示NULL,參考鏈接:http://blog.itpub.net/267265/viewspace-2120439/=>[20160619]NULL在資料庫的存儲.txt
--//也就是索引的第2欄位oracle認為是NULL,也就是遇到這樣的情況shrink space時.oracle錯誤的認為Y=null,
--//因為這樣的情況Y=10的值並沒有保存在數據塊中,而是放在sys.ecol$中.

SCOTT@test01p> SELECT *  FROM sys.ecol$ WHERE tabobj# IN (SELECT DATA_OBJECT_ID FROM dba_objects WHERE owner = USER AND object_name = 'T');
   TABOBJ#     COLNUM BINARYDEFVAL                     GUARD_ID
---------- ---------- ------------------------------ ----------
     27978          3 C10B
--//c10b對應number類型是數字10.
--//對於這樣的情況如果要降低HWM,僅僅ctas建立表以及索引.
--//如果增加欄位時寫入數據塊中,應該不會出現這樣的情況.看了一下隱含參數,應該是_add_col_optim_enabled.
SYS@test> @ hide _add_col_optim_enabled
NAME                   DESCRIPTION                        DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE ISSES ISSYS_MOD
---------------------- ---------------------------------- ------------- ------------- ------------ ----- ---------
_add_col_optim_enabled Allows new add column optimization TRUE          TRUE          TRUE         TRUE  IMMEDIATE

SCOTT@test01p> alter session set "_add_col_optim_enabled"=false;
Session altered.

create table t1(x int, pad varchar2(100)) enable row movement;
insert /*+ append*/  into t1 select level, lpad('x', 100, 'x') from dual connect by level<=1e4;
alter table t1 add y int default 10 not null;
create index i_t1_xy on t1(x,y);
delete t1 where x<=5000;
commit ;
alter table t1 shrink space;

SCOTT@test01p> alter table t1 shrink space;
Table altered.
--//當然這樣增加欄位就很慢!!

總結:
如果要做shrink space,最好先檢查看看是否曾經這樣增加過新欄位.


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

-Advertisement-
Play Games
更多相關文章
  • 最近配置一個GridFTP 用於測試其傳輸FTP性能, 在這裡簡單記錄,備忘;使用本教程可以簡單起一個GridFTP用於測試服務; 預配置環境: 測試系統:CentOS 7 1806 配置Yum倉庫:https://opensciencegrid.org/docs/common/yum/ 安裝Gri ...
  • 這裡以idea的springboot項目為例(打成jar包) 這裡去阿裡雲購買伺服器的過程就不說了,自行百度 還有這篇只是簡述,因為把一個項目部署到伺服器要做的事情還是不少的,然後沒學過Linux的建議先去學學Linux基礎,以及centos基礎 這裡附上學習centos基礎鏈接:https://w ...
  • 現象:客服反饋webmail發信上傳附件時,報錯提示上傳失敗,發信時提示發送失敗前因:運維同事新增加了三台伺服器 1.伺服器上有一個掛載的公共目錄,該目錄是存儲的上傳後的附件文件.該路徑是通過一個軟鏈接鏈接過去的,在新增加的機器上,沒有這個軟鏈接,因此就找不到上傳目錄報許可權錯誤 2.增加軟鏈接後,觀 ...
  • Windows校驗文件值的三種方式 win鍵+R鍵輸入cmd調出命令行 查看MD5值: certutil -hashfile 文件名 MD5 查看 SHA1 certutil -hashfile 文件名 SHA1 查看SHA256 certutil -hashfile 文件名 SHA256 ...
  • 1.下載 地址: https://filezilla-project.org/download.php?type=server 點擊下載 2. 安裝較為簡單, 不詳細介紹,下麵說配置 2.1 添加用戶 2.2 共用的文件夾 2.3 訪問IP設置 3. 設置參數 3.1 設置監聽參數 3.2 埠分配 ...
  • jumpserver 堡壘機 重啟啟動順序 ...
  • 使用的sql圖形軟體:SQLyogEnt 使用的資料庫:MYSQL5.7 軟體地址: 鏈接:https://pan.baidu.com/s/1lajyXaSnmrO1v5v987NOoA 提取碼:i3a4 //創建名為student的資料庫 create database student; //顯示 ...
  • 這三個不同的數據模型之間既相互獨立,又存在著關聯。從現實世界到概念 模型的轉換是由資料庫設計人員完成的;從概念模型到邏輯模型的轉換可以 由資料庫設計人員完成,也可以用資料庫設計工具協助設計人員完成;從邏 輯模型到物理模型的轉換主要是由資料庫管理系統完成的。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...