[20181122]模擬ORA-08103錯誤.txt

来源:https://www.cnblogs.com/lfree/archive/2018/11/22/10002134.html
-Advertisement-
Play Games

[20181122]模擬ORA-08103錯誤.txt$ oerr ora 810308103, 00000, "object no longer exists"// *Cause: The object has been deleted by another user since the oper ...


[20181122]模擬ORA-08103錯誤.txt

$ oerr ora 8103
08103, 00000, "object no longer exists"
// *Cause:  The object has been deleted by another user since the operation
//          began, or a prior incomplete recovery restored the database to
//          a point in time during the deletion of the object.
// *Action: Delete the object if this is the result of an incomplete
//          recovery.

在 Master Note for Handling Oracle Database Corruption Issues (文檔 ID 1088018.1)中對ORA-8103錯誤的描述如下:

The object has been deleted by another user since the operation began.
If the error is reproducible, following may be the reasons:-
a.) The header block has an invalid block type.
b.) The data_object_id (seg/obj) stored in the block is different than the data_object_id stored in the segment header.

See dba_objects.data_object_id and compare it to the decimal value stored in the block (field seg/obj).

--//以前做過的測試.鏈接:http://blog.itpub.net/267265/viewspace-2131848/
--//聽別人提起高水位下的塊出現了未格式化的塊.自己模擬測試看看.

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

--//建立表空間:
CREATE TABLESPACE TEA DATAFILE
  '/mnt/ramdisk/book/tea01.dbf' SIZE 40M AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED
LOGGING
ONLINE
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT MANUAL
FLASHBACK ON;

--//順便做1個備份.
RMAN> backup as copy datafile 6 format '/home/oracle/backup/%b' ;
Starting backup at 2018-11-22 16:22:12
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=67 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=94 device type=DISK
allocated channel: ORA_DISK_3
channel ORA_DISK_3: SID=106 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00006 name=/mnt/ramdisk/book/tea01.dbf
output file name=/home/oracle/backup/tea01.dbf tag=TAG20181122T162213 RECID=13 STAMP=992881334
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 2018-11-22 16:22:15

Starting Control File and SPFILE Autobackup at 2018-11-22 16:22:15
piece handle=/u01/app/oracle/fast_recovery_area/BOOK/autobackup/2018_11_22/o1_mf_s_992881335_fzdssq4g_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 2018-11-22 16:22:16

2.建立測試環境:
SCOTT@book> create table t tablespace tea as select * from all_objects where rownum<=1e4;
Table created.

SCOTT@book> select object_id,data_object_id from dba_objects where object_name = 'T' and owner = user;
 OBJECT_ID DATA_OBJECT_ID
---------- --------------
     90463          90463

SCOTT@book> select segment_type, HEADER_FILE, HEADER_BLOCK from dba_segments where owner = user and segment_name = 'T';
SEGMENT_TYPE       HEADER_FILE HEADER_BLOCK
------------------ ----------- ------------
TABLE                        6          128

SCOTT@book> select FILE_ID, block_id, blocks from dba_extents where owner = user and segment_name = 'T';
   FILE_ID   BLOCK_ID     BLOCKS
---------- ---------- ----------
         6        128          8
         6        136          8
         6        144          8
         6        152          8
         6        160          8
         6        168          8
         6        176          8
         6        184          8
         6        192          8
         6        200          8
         6        208          8
         6        216          8
         6        224          8
         6        232          8
         6        240          8
         6        248          8
         6        256        128
17 rows selected.

2.破壞數據塊看看:
SCOTT@book> alter system flush buffer_cache;
System altered.

SCOTT@book> select max(rowid) from t ;
MAX(ROWID)
------------------
AAAWFfAAGAAAAEBABJ

SCOTT@book> @ rowid AAAWFfAAGAAAAEBABJ
    OBJECT       FILE      BLOCK        ROW ROWID_DBA            DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
     90463          6        257         73  0x1800101           6,257                alter system dump datafile 6 block 257 ;

--//dba=6,257塊上有數據.

SCOTT@book> insert into t  select * from all_objects where rownum<=1;
1 row created.

SCOTT@book> commit ;
Commit complete.

SCOTT@book> alter system flush buffer_cache;
System altered.

SCOTT@book> @ rowid AAAWFfAAGAAAAECAAA
    OBJECT       FILE      BLOCK        ROW ROWID_DBA            DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
     90463          6        258          0  0x1800102           6,258                alter system dump datafile 6 block 258 ;

--//dba=6,258塊上有數據.通過bbed觀察dba=6,259
BBED> map dba 6,259
 File: /mnt/ramdisk/book/tea01.dbf (6)
 Block: 259                                   Dba:0x01800103
------------------------------------------------------------
 KTB Data Block (Table/Cluster)
 struct kcbh, 20 bytes                      @0
 struct ktbbh, 72 bytes                     @20
 struct kdbh, 14 bytes                      @92
 struct kdbt[0], 0 bytes                    @106
 sb2 kdbr[0]                                @106
 ub1 freespace[8082]                        @106
 ub1 rowdata[0]                             @8188
 ub4 tailchk                                @8188

--//可以發現dba=6,259已經格式化.但是沒有數據.
SCOTT@book> select count(*) from t;
  COUNT(*)
----------
     10001
--//OK一切正常.現在破壞dba=6,259

BBED> set offset 0
        OFFSET          0
--//註意一定要設置offset 0,不然可能copy僅僅剩下的部分.

BBED> copy filename '/home/oracle/backup/tea01.dbf' block 259 to filename '/mnt/ramdisk/book/tea01.dbf' block 259
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
 File: /mnt/ramdisk/book/tea01.dbf (6)
 Block: 259                                                  Offsets:    0 to   63                                               Dba:0x01800103
------------------------------------------------------------------------------------------------------------------------------------------------
 00a20000 03018001 00000000 00000105 83a70000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
<64 bytes per line>

--//現在已經未格式化塊.

4.繼續測試:
SCOTT@book> alter system flush buffer_cache;
System altered.

SCOTT@book> select count(*) from t;
select count(*) from t
*
ERROR at line 1:
ORA-08103: object no longer exists
--//再線ora-08103.
--//而執行如下不會報錯:
SCOTT@book> select count(*) from t where rownum<=10001;
  COUNT(*)
----------
     10001
SCOTT@book> select count(*) from t where rownum<=10002;
select count(*) from t where rownum<=10002
                     *
ERROR at line 1:
ORA-08103: object no longer exists
    
--//檢查跟蹤文件:
kcbzibmlt: dump suspect buffer, err=8103
buffer tsn: 7 rdba: 0x01800103 (6/259)
scn: 0x0000.00000000 seq: 0x01 flg: 0x05 tail: 0x00000001
frmt: 0x02 chkval: 0xa783 type: 0x00=unknown
Hex dump of corrupt header 4 = CORRUPT
Dump of memory from 0x000000006A4EA000 to 0x000000006A4EA014
06A4EA000 0000A200 01800103 00000000 05010000  [................]
06A4EA010 0000A783                             [....]
Hex dump of block: st=4, typ_found=0
Dump of memory from 0x000000006A4EA000 to 0x000000006A4EC000
06A4EA000 0000A200 01800103 00000000 05010000  [................]
06A4EA010 0000A783 00000000 00000000 00000000  [................]
06A4EA020 00000000 00000000 00000000 00000000  [................]
        Repeat 508 times
06A4EBFF0 00000000 00000000 00000000 00000001  [................]
Dump of buffer cache at level 8 for tsn=7 rdba=25166080

--//可以發現dba =6,259報錯.

5.如何跳過呢?
--//我測試僅僅設置壞塊.如果真有數據可以通過一些特殊的方式讀出來,這個給看運氣.通過10231事件跳過壞塊

$ oerr ora 10231
10231, 00000, "skip corrupted blocks on _table_scans_"
// *Cause:
// *Action: such blocks are skipped in table scans, and listed in trace files
--//alter session set db_file_multiblock_read_count=1 ;
ALTER SESSION SET EVENTS '10231 TRACE NAME CONTEXT FOREVER, LEVEL 10';

SCOTT@book> ALTER SESSION SET EVENTS '10231 TRACE NAME CONTEXT FOREVER, LEVEL 10';
Session altered.

SCOTT@book> select count(*) from t ;
select count(*) from t
*
ERROR at line 1:
ORA-08103: object no longer exists

--//不行.在bbed設置壞塊看看.
BBED> set dba 6,259
        DBA             0x01800103 (25166083 6,259)

BBED> corrupt
Block marked media corrupt.

BBED> sum apply ;
Check value for File 6, Block 259:
current = 0xa683, required = 0xa683


SCOTT@book> select count(*) from t ;
  COUNT(*)
----------
     10001

--//ok.跳過壞塊.


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

-Advertisement-
Play Games
更多相關文章
  • 一、效果在博客園文章的上方製作一個導航視窗,方便瀏覽文章內容。點擊按鈕可以,隱藏和顯示導航視窗。二、配置方法2.0 相關css和js的下載鏈接:https://pan.baidu.com/s/1dTBkWFFHRMfqonTL6CTxnQ 提取碼:o2mk 2.1 上傳製作好的相關js和css文件到... ...
  • 一、命令介紹 passwd 命令用於修改用戶密碼,過期時間,認證信息等。 普通用戶只能使用 passwd 命令修改自身的系統密碼,而 root 管理員則有許可權修改其他所有人的密碼。更酷的是,root 管理員在 Linux 系統中 修改自己或他人的密碼時不需要驗證舊密碼,這一點特別方便。既然 root ...
  • 作為一個開發人員,對於伺服器的操作不可避免。最常用的操作就是部署應用到伺服器,及在生產,測試環境通過查看日誌排查問題。一般伺服器都是linux操作系統並且是無圖形界面的,所以進行任何操作都是通過命令行,由於從新一代程式員接觸電腦都是從圖形界面開始,所以在開始使用命令行的時候都不是很習慣,如果使用命令 ...
  • 近日應公司要求,需在windows伺服器上架設一個交易中介軟體。 過程之一:將軟體壓縮文件傳到伺服器上。 問題:在“運行”對話框通過輸入'mstsc' 創建遠程連接以後,出現本地桌面與伺服器之間無法物質粘貼的情況。 解決方案:伺服器上,打開任務管理器,在進程中關閉 rdpclip.exe 進程。再通 ...
  • 安裝openssl支持 wget -c https://www.openssl.org/source/openssl.org/source/openssl-1.1.0c.tar.gz tar -zxvf openssl-1.1.0c.tar.gz cd openssl-1.1.0c ./connfi ...
  • vim包管理器vim plug 安裝 配置 在~/.vim中添加要下載的vim插件,然後重啟 使用 配置vim主題 配置完成後 ...
  • 緒論 大數據處理 數據的價值 受眾較少 一種不同的方法 Hadoop 基於Amazon web Service的雲計算 雲太多 第三種方法 不同類型的成本 AWS:Amazon的彈性架構 本書內容 安裝並運行Hadoop 基於本地Ubuntu主機的Hadoop系統 實踐環節:檢查是否已安裝JDK 實... ...
  • 表值函數創建註意事項 用戶定義表值函數返回 table 數據類型。 對於內聯表值函數,沒有函數主體,表是單個 SELECT 語句的結果集。 表值函數主要用於數據計算出來返回結果集。 使用SSMS資料庫管理工具和T-SQL腳本創建表值函數語法相同。 使用T-SQL腳本創建表值函數 語法: 語法一: - ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...