oracle asm dd所出要的块
admin
2023-05-06 17:21:52
0次

前一篇写了asm里dd出文件,这篇里只dd出块,主要是针对文件大的情况。

以scott模式为例:

修改前的表信息

SQL>select * from emp where mgr=7566 and empno=7788
7788 SCOTT     ANALYST    7566 1987/4/19     3000.00               20

1 AU计算:

SQL> selectextent_Id,block_id,blocks,file_id
  2  fromdba_extents where segment_name='EMP'
SQL> /
 EXTENT_ID  BLOCK_ID     BLOCKS    FILE_ID
-------------------- ---------- ----------
         0        144          8          5
SQL> selectname from v$datafile where file#=5;
NAME
--------------------------------------------------------------
+DATA/db/datafile/users.276.899048797
SQL> selectname,group_number,file_number from v$asm_alias where name like '%USERS%' andfile_number=276;
NAME               GROUP_NUMBER FILE_NUMBER
---------------------------------------------------------------------------------- -----------
USERS.276.899048797          1        276
SQL> selectdisk_kffxp,au_kffxp,xnum_kffxp from x$kffxp where group_kffxp=1 andnumber_kffxp=276;
DISK_KFFXP  AU_KFFXP XNUM_KFFXP
---------- ---------- ----------
        1        426          0
        0        289          1

这里计算一下,其block_id为144,块大小为8KB,那么其位置为144*8/1024=1.125M,加上块头8*8/1024=0.0625M,一共不超过4M;应当在第一个AU上(AU大小为4M),第二块盘的第426个AU上,取第二个盘路径:

SQL> selectdisk_number,path from v$asm_disk where disk_number=1;
DISK_NUMBERPATH
-------------------------------------------------------------------------------------------
          1 /dev/raw/raw2

取出该表的最大和最小data_object_id,然后dd.

SQL>  select dbms_rowid.rowid_relative_fno(rowid)rel_fno,
 max(dbms_rowid.rowid_block_number(rowid))max_block,
 min(dbms_rowid.rowid_block_number(rowid))min_block
 from emp
 group by dbms_rowid.rowid_relative_fno(rowid);
 
   REL_FNO MAX_BLOCK  MIN_BLOCK
-------------------- ----------
         5        149       149
[oracle@mysql-1]$ddif=/dev/raw/raw2 bs=1024 count=8 skip=1746088 of=emp.dd

说明一下:skip=426*4*1024+149*8

检查一下:

[oracle@mysql-1~]$ strings emp.dd
MILLER
CLERK
FORD
ANALYST
JAMES
CLERK
ADAMS
CLERK
TURNER
SALESMAN
KING    PRESIDENT
SCOTT
ANALYST
SMITH
CLERK

从上可以看出,是emp的内容。

 2 bbed修改内容

11g里首先要安装bbed,安装过程记录一下:

copy oracle 10g的sbbdpt.o,ssbbded.o到$ORACLE_HOME/rdbms/lib下
copybbedus.msb 到$ORACLE_HOME/mesg下
cd$ORACLE_HOME/rdbms/lib
make -fins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed
cp bbed$ORACLE_HOME/bin
[oracle@mysql-1~]$ bbed
BBED> set filename'/home/oracle/emp.dd';
       FILENAME        /home/oracle/emp.dd
#用bbed校验下块。
BBED> verify
DBVERIFY - Verification starting
FILE = /home/oracle/emp.dd
BLOCK = 0
Block 0 is corrupt
Corrupt block relative dba: 0x01400000(file 0, block 0)
Bad header found during verification
Data in bad block:
 type: 6 format: 2 rdba: 0x01400095
 lastchange scn: 0x0000.0004dec0 seq: 0x1 flg: 0x06
 spare1: 0x0 spare2: 0x0 spare3: 0x0
 consistency value in tail: 0x00000000
 check value in block header: 0x89af
 computed block checksum: 0xd6b  
DBVERIFY - Verification complete
Total Blocks Examined         : 1
Total Blocks Processed (Data) : 0
Total Blocks Failing   (Data) : 0
Total Blocks Processed (Index): 0
Total Blocks Failing   (Index): 0
Total Blocks Empty            : 0
Total Blocks Marked Corrupt   : 1
Total Blocks Influx           : 0
Message 531 not found;  product=RDBMS; facility=BBED

用bbed查看dd出文件内容

BBED> set blocksize 8192
        BLOCKSIZE       8192
BBED> p kdbr
BBED> find /c SCOTT
 File: /home/oracle/emp.dd (0)
 Block: 1                Offsets: 7864 to 8191           Dba:0x00000000
------------------------------------------------------------------------
 53434f54 5407414e 414c5953 5403c24c 430777bb04130101 0102c21f ff02c115
BBED> dump /v
 File: /home/oracle/emp.dd (0)
 Block: 1      Offsets: 7864 to 8191  Dba:0x00000000
-------------------------------------------------------
 53434f54 5407414e 414c5953 5403c24c lSCOTT.ANALYST..L
 430777bb 04130101 0102c21f ff02c115 lC.w.............
 2c010803 c24e5305 434c4152 4b074d41 l,....NS.CLARK.MA
 4e414745 5203c24f 280777b5 06090101 lNAGER..O(.w.....
 0103c219 33ff02c1 0b2c0108 03c24d63 l....3....,....Mc

用bbed修改:

set mode edit
set blocksize 8192
find /c SCOTT
m /c SNOWH
BBED> dump /v
 File: /home/oracle/emp.dd (0)
 Block: 1      Offsets: 7864 to 8191 Dba:0x00000000
-------------------------------------------------------
 534e4f57 4807414e 414c5953 5403c24c lSNOWH.ANALYST..L
BBED> sum
Check value for File 0, Block 1:
current = 0x89af, required = 0x87b3
 
BBED> sum apply
Check value for File 0, Block 1:
current = 0x87b3, required = 0x87b3

关库,导入修改后数据:

[oracle@mysql-1~]$ srvctl stop database -d db
[oracle@mysql-1~]$dd of=/dev/raw/raw2 bs=1024 count=8 seek=1746088 if=emp.dd
8+0 records in
8+0 records out
8192 bytes (8.2 kB) copied, 0.00208818 s,3.9 MB/s

查询表信息:

[oracle@mysql-1~]$ srvctl start database -d db
SQL> select* from emp where mgr=7566 and empno=7788 2  ;
EMPNOENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
--------------- --------- ----- ----------- --------- --------- ------
 7788 SNOWH     ANALYST    7566 1987/4/19     3000.00               20

OVER




相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...