首页 > 其他分享 >[20231019]rename IDL_UB1$的恢复测试前准备.txt

[20231019]rename IDL_UB1$的恢复测试前准备.txt

时间:2023-10-23 21:57:14浏览次数:34  
标签:rename off UB1 kd 20231019 IDL ID NAME

[20231019]rename IDL_UB1$的恢复测试前准备.txt

--//前几天看了https://www.anbob.com/archives/7545.html链接,对方rename IDL_UB1$表操作,导致无法建立表操作使用包的语句都有问题.
--//测试时遇到许多其他事情打断了恢复工作,最后我仅仅简单尝试了修改数据字典obj$的恢复方式。
--//我当时的执行命令是rename IDL_UB1$ to IDL_UB1X;,我开始以为这样恢复会很简单,因为我改名的长度与原来一样。
--//仅仅$ 换成 X。但我实际看到的情况不同,先为rename IDL_UB1$的恢复测试前做一些知识储备。

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

2.事前准备:
SYS@book> select rowid,owner#,name from obj$ where name='IDL_UB1$';
ROWID              OWNER# NAME
------------------ ------ --------
AAAAASAABAAAADzAAX      0 IDL_UB1$

SYS@book> @ rowid AAAAASAABAAAADzAAX
OBJECT FILE BLOCK ROW ROWID_DBA  DBA    TEXT
------ ---- ----- --- ---------- ------ ----------------------------------------
    18    1   243  23   0x4000F3 1,243  alter system dump datafile 1 block 243 ;

$ strings -t d /mnt/ramdisk/book/system01.dbf | grep 'IDL_UB1\$'| awk '{print int($1/8192), " ",$1-int($1/8192)*8192, " " ,$2}'
243   6325   IDL_UB1$
351   5692   IDL_UB1$
375   5692   IDL_UB1$
17086   4802   IDL_UB1$
34025   5594   SELECT
34029   5278   COMMIT"SELECT
36154   5278   COMMIT"SELECT
95511   4482   IDL_UB1$l
--//注:显示的第一个字段对应块号,第一个字段对应相应数据块的偏移.
--//主要关注或者讲修改数据块243,351,375,17086,95511.

--//看看这些块属于那个对象。
SYS@book> @ find_objz 1 243 '' 1
SYS@book> @ pr
==============================
FILE_ID                       : 1
BLOCK_ID                      : 240
BLOCKS                        : 8
SEGMENT_TYPE                  : TABLE
OWNER                         : SYS
SEGMENT_NAME                  : OBJ$
PARTITION_NAME                :
EXTENT_ID                     : 0
BYTES                         : 65536
TABLESPACE_NAME               : SYSTEM
RELATIVE_FNO                  : 1
SEGTSN                        : 0
SEGRFN                        : 1
SEGBID                        : 240
PL/SQL procedure successfully completed.

SYS@book> @ find_objz 1 351 '' 1
SYS@book> @ pr
==============================
FILE_ID                       : 1
BLOCK_ID                      : 344
BLOCKS                        : 8
SEGMENT_TYPE                  : INDEX
OWNER                         : SYS
SEGMENT_NAME                  : I_OBJ2
PARTITION_NAME                :
EXTENT_ID                     : 0
BYTES                         : 65536
TABLESPACE_NAME               : SYSTEM
RELATIVE_FNO                  : 1
SEGTSN                        : 0
SEGRFN                        : 1
SEGBID                        : 344
PL/SQL procedure successfully completed.

SYS@book> @ find_objz 1 375 '' 1
SYS@book> @ pr
==============================
FILE_ID                       : 1
BLOCK_ID                      : 368
BLOCKS                        : 8
SEGMENT_TYPE                  : INDEX
OWNER                         : SYS
SEGMENT_NAME                  : I_OBJ5
PARTITION_NAME                :
EXTENT_ID                     : 0
BYTES                         : 65536
TABLESPACE_NAME               : SYSTEM
RELATIVE_FNO                  : 1
SEGTSN                        : 0
SEGRFN                        : 1
SEGBID                        : 368
PL/SQL procedure successfully completed.

SYS@book> @ find_objz 1 17086 '' 1
SYS@book> @ pr
==============================
FILE_ID                       : 1
BLOCK_ID                      : 17024
BLOCKS                        : 128
SEGMENT_TYPE                  : CLUSTER
OWNER                         : SYS
SEGMENT_NAME                  : C_TOID_VERSION#
PARTITION_NAME                :
EXTENT_ID                     : 18
BYTES                         : 1048576
TABLESPACE_NAME               : SYSTEM
RELATIVE_FNO                  : 1
SEGTSN                        : 0
SEGRFN                        : 1
SEGBID                        : 3464
PL/SQL procedure successfully completed.

SYS@book> @ find_objz 1 95511 '' 1
SYS@book> @ pr
==============================
FILE_ID                       : 1
BLOCK_ID                      : 95488
BLOCKS                        : 128
SEGMENT_TYPE                  : CLUSTER
OWNER                         : SYS
SEGMENT_NAME                  : C_OBJ#_INTCOL#
PARTITION_NAME                :
EXTENT_ID                     : 6
BYTES                         : 1048576
TABLESPACE_NAME               : SYSTEM
RELATIVE_FNO                  : 1
SEGTSN                        : 0
SEGRFN                        : 1
SEGBID                        : 2688
PL/SQL procedure successfully completed.

--//dba= 1,95511 属于对象C_OBJ#_INTCOL#是1个CLUSTER对象。
BBED> set width 200
        WIDTH           200

BBED> p kdbt
struct kdbt[0], 4 bytes                     @106
   sb2 kdbtoffs                             @106      0
   sb2 kdbtnrow                             @108      1
struct kdbt[1], 4 bytes                     @110
   sb2 kdbtoffs                             @110      1
   sb2 kdbtnrow                             @112      207
--//C_OBJ#_INTCOL#下仅仅有1个表。

BBED> x /rnnnnc *kdbr[90]
rowdata[3800]                               @4459
-------------
flag@4459: 0x6c (KDRHFL, KDRHFF, KDRHFH, KDRHFC)
lock@4460: 0x02
cols@4461:    5

col    0[2] @4463: 7
col    1[1] @4466: 0
col    2[2] @4468: 19
col    3[9] @4471: 380422925370589000000000000000000000
col    4[8] @4481: IDL_UB1$
--//是cluster的第1个表.下一个字符0x6c,对应字符l.所以上面扫描看到IDL_UB1$l字符串是正常的.

SELECT ROWNUM -1 rn , a.*
  FROM (  SELECT *
            FROM dba_objects
           WHERE owner = 'SYS' AND data_object_id = 444
        ORDER BY object_id) a;

        RN OWNER  OBJECT_NAME    SUBOBJECT_NAME  OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE         CREATED             LAST_DDL_TIME       TIMESTAMP           STATUS  T G S  NAMESPACE EDITION_NAME
---------- ------ -------------- -------------- ---------- -------------- ------------------- ------------------- ------------------- ------------------- ------- - - - ---------- ------------
         0 SYS    C_OBJ#_INTCOL#                       444            444 CLUSTER             2013-08-24 11:37:43 2013-08-24 11:37:43 2013-08-24:11:37:43 VALID   N N N          5
         1 SYS    HISTGRM$                             446            444 TABLE               2013-08-24 11:37:43 2013-08-24 11:37:43 2013-08-24:11:37:43 VALID   N N N          1
2 rows selected.
--//HISTGRM$ 应该是直方图相关的表

BBED> x /rnn *kdbr[0]
rowdata[7503]                               @8162
-------------
flag@8162: 0xac (KDRHFL, KDRHFF, KDRHFH, KDRHFK)
lock@8163: 0x00
cols@8164:    2
kref@8165:  181
mref@8167:   68
hrid@8169:0x00417518.0
nrid@8175:0x00417518.0

col    0[3] @8181: 6579
col    1[2] @8185: 7

SYS@book> select * from  HISTGRM$ where obj#=6579 and intcol#=7 and col#=7 and row#=0 and bucket=19
  2  @ pr
==============================
OBJ#                          : 6579
COL#                          : 7
ROW#                          : 0
BUCKET                        : 19
ENDPOINT                      : 380422925370589000000000000000000000
INTCOL#                       : 7
EPVALUE                       : IDL_UB1$
SPARE1                        :
SPARE2                        :
PL/SQL procedure successfully completed.

SYS@book> @ oid 6579
owner object_name       object_type        SUBOBJECT_NAME CREATED             LAST_DDL_TIME       status    DATA_OBJECT_ID  OBJECT_ID
----- ----------------- ------------------ -------------- ------------------- ------------------- --------- -------------- ----------
SYS   WRH$_SEG_STAT_OBJ TABLE                             2013-08-24 11:39:10 2013-08-24 11:39:10 VALID               6579       6579
1 row selected.
--//明显这个不重要.

--//dba = 1,17086.属于C_TOID_VERSION# cluster。
BBED> map dba 1,17086
 File: /mnt/ramdisk/book/system01.dbf (1)
 Block: 17086                                 Dba:0x004042be
------------------------------------------------------------
 KTB Data Block (Table/Cluster)
 struct kcbh, 20 bytes                      @0
 struct ktbbh, 72 bytes                     @20
 struct kdbh, 14 bytes                      @92
 struct kdbt[3], 12 bytes                   @106
 sb2 kdbr[3]                                @118
 ub1 freespace[7842]                        @124
 ub1 rowdata[222]                           @7966
 ub4 tailchk                                @8188
-//offset =4802 在freespace 区间,不用修改.

SYS@book> @ ind2 obj$
Display indexes where table or index name matches obj$...
TABLE_OWNER TABLE_NAME INDEX_NAME POS# COLUMN_NAME                    DSC
----------- ---------- ---------- ---- ------------------------------ ----
SYS         OBJ$       I_OBJ1        1 OBJ#
                                     2 OWNER#
                                     3 TYPE#
                       I_OBJ2        1 OWNER#
                                     2 NAME
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                                                                      
                                     3 NAMESPACE
                                     4 REMOTEOWNER
                                     5 LINKNAME
                                     6 SUBNAME
                                     7 TYPE#
                                     8 SPARE3
                                     9 OBJ#
                       I_OBJ3        1 OID$
                       I_OBJ4        1 DATAOBJ#
                                     2 TYPE#
                                     3 OWNER#
                       I_OBJ5        1 SPARE3
                                     2 NAME
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                     3 NAMESPACE
                                     4 TYPE#
                                     5 OWNER#
                                     6 REMOTEOWNER
                                     7 LINKNAME
                                     8 SUBNAME
                                     9 OBJ#

INDEX_OWNER TABLE_NAME INDEX_NAME IDXTYPE    UNIQ STATUS   PART TEMP  H     LFBLKS           NDK   NUM_ROWS       CLUF LAST_ANALYZED       DEGREE VISIBILIT
----------- ---------- ---------- ---------- ---- -------- ---- ---- -- ---------- ------------- ---------- ---------- ------------------- ------ ---------
SYS         OBJ$       I_OBJ1     NORMAL     YES  VALID    NO   N     2        250         87018      87018       1158 2023-08-30 22:00:13 1      VISIBLE
            OBJ$       I_OBJ2     NORMAL     YES  VALID    NO   N     3        876         87018      87018      64485 2023-08-30 22:00:13 1      VISIBLE
            OBJ$       I_OBJ3     NORMAL     NO   VALID    NO   N     2         16          3421       3421        249 2023-08-30 22:00:13 1      VISIBLE
            OBJ$       I_OBJ4     NORMAL     NO   VALID    NO   N     2        383          9358      87018       3237 2023-08-30 22:00:13 1      VISIBLE
            OBJ$       I_OBJ5     NORMAL     YES  VALID    NO   N     3        876         87018      87018      64473 2023-08-30 22:00:13 1      VISIBLE
--//I_OBJ2,I_OBJ5都是obj#的索引,里面都包含name字段,换一句话讲如果使用bbed恢复.这3块(243,351,375)都需要恢复.
--//oracle建立这两个索引有点奇怪,都是包含相同字段,仅仅顺序有一些不同,并且都是唯一索引.

3.探究数据块243,351,375的一些细节:

BBED> x  /rnnncncntttnccnxnnncct dba 1,243 *kdbr[23]
rowdata[5215]                               @6311
-------------
flag@6311: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@6312: 0x00
cols@6313:   18

col    0[3] @6314: 225
col    1[3] @6318: 225
col    2[1] @6322: 0
col    3[8] @6324: IDL_UB1$
col    4[2] @6333: 1
col    5[0] @6336: *NULL*
col    6[2] @6337: 2
col    7[7] @6340: 2013-08-24 11:37:39
col    8[7] @6348: 2013-08-24 11:37:39
col    9[7] @6356: 2013-08-24 11:37:39
col   10[2] @6364: 1
col   11[0] @6367: *NULL*
col   12[0] @6368: *NULL*
col   13[1] @6369: 0
col   14[0] @6371: *NULL*
col   15[1] @6372: 0
col   16[2] @6374: 1
col   17[1] @6377: 0

--//dba=1,351 , 索引i_obj2
BBED> p dba 1,351 kd_off
sb2 kd_off[0]                               @124      8032
sb2 kd_off[1]                               @126      0
sb2 kd_off[2]                               @128      4078
sb2 kd_off[3]                               @130      4120
sb2 kd_off[4]                               @132      4172
sb2 kd_off[5]                               @134      4214
..
sb2 kd_off[36]                              @196      5589
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sb2 kd_off[37]                              @198      5623
sb2 kd_off[38]                              @200      5657
sb2 kd_off[39]                              @202      5697
sb2 kd_off[40]                              @204      5731
sb2 kd_off[41]                              @206      5771
sb2 kd_off[42]                              @208      5809
sb2 kd_off[43]                              @210      5842
...
sb2 kd_off[99]                              @322      7861
sb2 kd_off[100]                             @324      7911
sb2 kd_off[101]                             @326      7952

--//前面记录的偏移是5692,BBED> p dba 1,351 kd_off输出的相对偏移.
--//5692-92 = 5600,前面还有一些flag,lock标识,而且i_obj2是唯一索引,记录的rowid在前面占6字节.对应的应该是kd_off[36]指向的内容。

BBED> x /rncncccnnn dba 1,351 *kd_off[36]
rowdata[1679]                               @5681
-------------
flag@5681:     0x00 (NONE)
lock@5682:     0x00
keydata[6]:    0x00  0x40  0x00  0xf3  0x00  0x17

data key:
col    0[1] @5690: 0
col    1[8] @5692: IDL_UB1$
--//偏移等于5692,能对上。
col    2[2] @5701: 1
col    3[0] @5704: *NULL*
col    4[0] @5705: *NULL*
col    5[0] @5706: *NULL*
col    6[2] @5707: 2
col    7[1] @5710: 0
col    8[3] @5712: 225

--//dba=1,375 , 索引i_obj5,也是唯一索引.方法类似.
BBED> x /rncnnnnccn dba 1,375 *kd_off[36]
rowdata[1679]                               @5681
-------------
flag@5681:     0x00 (NONE)
lock@5682:     0x00
keydata[6]:    0x00  0x40  0x00  0xf3  0x00  0x17

data key:
col    0[1] @5690: 0
col    1[8] @5692: IDL_UB1$
col    2[2] @5701: 1
col    3[2] @5704: 2
col    4[1] @5707: 0
col    5[0] @5709: *NULL*
col    6[0] @5710: *NULL*
col    7[0] @5711: *NULL*
col    8[3] @5712: 225

4.阶段总结:
--//如果需要使用bbed做这里rename恢复,仅仅需要修改这3块。
--//概括一下:
x  /rnnncncntttnccnxnnncct dba 1,243 *kdbr[23]
x /rncncccnnn dba 1,351 *kd_off[36]
x /rncnnnnccn dba 1,375 *kd_off[36]

--//内容有点多,使用bbed的恢复另外写一篇blog。

标签:rename,off,UB1,kd,20231019,IDL,ID,NAME
From: https://www.cnblogs.com/lfree/p/17783564.html

相关文章

  • [20231020]rename IDL_UB1$后使用bbed的恢复.txt
    [20231020]renameIDL_UB1$后使用bbed的恢复.txt--//继续前面的测试:--//参考链接:[20231019]renameIDL_UB1$的恢复测试前准备.txt1.环境:SYS@book>@ver1PORT_STRING        VERSION   BANNER-------------------------------------------------------------------......
  • 20231019
    20231019NOIP#24总结时间安排7:40~8:10看题,\(A,B,C\)各会一点,\(D\)没想法。8:10~8:30写\(A\)的暴力。8:30~9:00写\(C\)的暴力。9:00~9:30会\(A\)写了。9:30~11:00马上看出了\(B\)的做法,但是可能太久没写了写挂了,调了一个小时。11:00~11:40\(D\)写半天看......
  • 20231019打卡
    上午的课程是UML的序列图和协作图。在这门课上,我们学习了UML建模语言中的序列图和协作图,这是一种图形化的表示方法,用于描述对象间的交互和协作过程。通过老师的讲解和实践练习,我对序列图和协作图的概念和绘制规则有了更深入的理解。这种图形化的表达方式对于我们软件工程师来说非......
  • linux rename的实现
    linuxrename可以批量重命名文件。renameexpressionreplacementfiles可以用bash实现:遍历文件file,用sed等替换file中的字符串,mv$fileecho$file|sed-i's/expression/replacement/'也可以用bash内置的parameterexpansion替换。代码如下:#!/bin/bash#Prompttheus......
  • rename
    rename用字符串替换的方式批量改变文件名补充说明rename命令存在两个版本用法上有所区别C语言版本,支持通配符[常用通配符说明]?表示一个任意字符*表示一个或一串任意字符Perl版本,支持正则表达式[常用正则表达式符号说明]^匹配输入的开始位置$匹配......
  • rsync 遇到中文乱码文件名无法同步,并报错:rsync: rename "/test1/abc/abc/opt/abc/abc/
    rsync遇到中文文件名乱码报错报错如下:rsync:rename"/test1/abc/def/efg/abc-V2/img_abc/.δ\#261\#352\#314\#342-3.jpg.wdPu5C"->"event/abc-V2/img_abc/δ\#261\#352\#314\#342-3.jpg":Input/outputerror(5)rsync:rename"/test1/abc/def/e......
  • 解决npm i 报错显示 code EPERM syscall rename等问题
    问题描述:npmERR!codeEPERMnpmERR!syscallrenamenpmERR!pathD:\ProgramFiles\nodejs\npm_global\node_modules\cnpm\node_modules\npm\node_modules\.node-gyp.DELETE\node_modules\@npmclinpmERR!destD:\ProgramFiles\nodejs\npm_global\node_modul......
  • ps批量处理图片分辨率 rename批量修改名称
    制作linux项目,需要批量处理部分图片分辨率录制动作注意此处存储,经过测试直接存储会导致失败,此处选择的是另存方式 文件->存储为(A)...   此处另存选择的是png格式  执行动作  文件修改完毕,有时候需要统一名称,可以自己写bat脚本,但是学习成本有点高,此......
  • node使用fs.rename重命名文件的时候,如果有该名称的文件会被替换的问题
    再项目中使用fs.rename给快捷方式重命名的时候,因为有两个版本,在开发人员电脑上都安装两个版本的时候,发现每次都只有快捷方式,然后在重新查看代码的时候。发现代码中使用到了fs.rename去重命名文件。于是做了以下处理letnewLnkPath=path.join(桌面地址,`{appName}.lnk`)if(exi......
  • 目录操作函数(mkdir rmdir rename chdir getcwd opendir closedir readdir dup dup2)
      /*创建文件#include<sys/stat.h>#include<sys/types.h>intmkdir(constchar*pathname,mode_tmode);参数:mode:权限移除文件#include<unistd.h>intrmdir(constc......