开发者社区> lfreeali> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

[20130116]ASM未正常启动,使用dd找回数据文件.txt

简介: [20130116]ASM未正常启动,使用dd找回数据文件.txt参考链接:http://www.xifenfei.com/3025.html,自己为了加强理解,重做一次。
+关注继续查看
[20130116]ASM未正常启动,使用dd找回数据文件.txt

参考链接:http://www.xifenfei.com/3025.html,自己为了加强理解,重做一次。

SQL> column name format a50
SQL> select file#,ts#,status,enabled,checkpoint_change#,name,bytes  from v$datafile;

     FILE#        TS# STATUS  ENABLED    CHECKPOINT_CHANGE# NAME                                                    BYTES
---------- ---------- ------- ---------- ------------------ -------------------------------------------------- ----------
         1          0 SYSTEM  READ WRITE            6460476 +DATA/test/datafile/system.270.762883167            775946240
         2          1 ONLINE  READ WRITE            6460476 +DATA/test/datafile/sysaux.269.762883167            597688320
         3          2 ONLINE  READ WRITE            6460476 +DATA/test/datafile/undotbs1.267.762883167          519045120
         4          4 ONLINE  READ WRITE            6460476 +DATA/test/datafile/users.266.762883167             722206720
         5          6 ONLINE  READ WRITE            6460476 +DATA/test/datafile/example.268.762883167           104857600
         6          7 ONLINE  READ WRITE            6460476 +DATA/test/datafile/tools.280.762943407             104857600
         7          8 ONLINE  READ WRITE            6460476 +DATA/test/datafile/test.284.770380219               10485760
         8         10 ONLINE  READ WRITE            6460476 +DATA/test/datafile/mssm.291.771757063              104857600

8 rows selected.

SQL> SELECT GROUP_NUMBER, FILE_NUMBER, NAME FROM v$asm_alias WHERE upper(NAME) LIKE '%SPFILE%' GROUP BY GROUP_NUMBER, FILE_NUMBER, NAME;
GROUP_NUMBER FILE_NUMBER NAME
------------ ----------- --------------------------------------------------
           1         258 spfile.258.762881973
           1         258 spfiletest.ora

SQL> SELECT disk_kffxp, au_kffxp, xnum_kffxp FROM x$kffxp  WHERE GROUP_KFFXP=1 AND NUMBER_KFFXP=258;
DISK_KFFXP   AU_KFFXP XNUM_KFFXP
---------- ---------- ----------
         0         92          0

SQL> SELECT GROUP_NUMBER, FILE_NUMBER, NAME FROM v$asm_alias WHERE upper(NAME) LIKE '%TEST%' GROUP BY GROUP_NUMBER, FILE_NUMBER, NAME;

GROUP_NUMBER FILE_NUMBER NAME
------------ ----------- -------------------
           1         258 spfiletest.ora
           1         284 TEST.284.770380219
           1  4294967295 TEST

SQL> SELECT disk_kffxp, au_kffxp, xnum_kffxp FROM x$kffxp  WHERE GROUP_KFFXP=1 AND NUMBER_KFFXP=284;

DISK_KFFXP   AU_KFFXP XNUM_KFFXP
---------- ---------- ----------
         0       2676          0
         0       2677          1
         0       2672          2
         0       2673          3
         0       2674          4
         0       2675          5
         0       2576          6
         0       2577          7
         0       2578          8
         0       2579          9
         0       2580         10

11 rows selected.

SQL> column path format a40
SQL> select DISK_NUMBER,GROUP_NUMBER,PATH from v$asm_disk;

DISK_NUMBER GROUP_NUMBER PATH
----------- ------------ ----------------------------------------
          1            0 /dev/raw/raw2
          0            1 /dev/raw/raw1
--注:当前 /dev/raw/raw2没有使用

昨天测试了asm启动的情况下取出数据文件,主要知道文件号,以及x$kffxp视图。
如果不启动asm实例这些视图不能访问,如何取出数据文件呢?[我的测试取出+DATA/test/datafile/test.284.770380219数据文件]

利用kfed知道数据文件对应的AU,使用dd命令拼接形成数据文件。

按照链接:http://www.xifenfei.com/3025.html
kfed找出相关AU映射
------------------------------------------------------------------------------
1号文件的第一个AU(0号盘2号AU)中,只能保存1至255号文件的。
从256号文件开始,AU的分布信息保存在1号文件第二个AU中。
其中第一个块(0号块),对应256号文件。1号块对应257号文件,等等,依此类推。
------------------------------------------------------------------------------
按照链接http://www.xifenfei.com/3025.html,他的测试有两个分区,我仅仅一个,上面那句话,我读了N久,慢慢理解,

$ kfed
as/mlib         ASM Library [asmlib='lib']
aun/um          AU number to examine or update [AUNUM=number]
aus/z           Allocation Unit size in bytes [AUSZ=number]
blkn/um         Block number to examine or update [BLKNUM=number]
blks/z          Metadata block size in bytes [BLKSZ=number]
ch/ksum         Update checksum before each write [CHKSUM=YES/NO]
cn/t            Count of AUs to process [CNT=number]
d/ev            ASM device to examine or update [DEV=string]
o/p             KFED operation type [OP=READ/WRITE/MERGE/REPAIR/NEW/FORM/FIND/STRUCT]
p/rovnm         Name for provisioning purposes [PROVNM=string]
s/eek           AU number to seek to [SEEK=number]
te/xt           File name for translated block text [TEXT=string]
ty/pe           ASM metadata block type number [TYPE=number]

$ kfed read /dev/raw/raw1 aun=2 blkn=1 | less
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            4 ; 0x002: KFBTYP_FILEDIR
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                       1 ; 0x004: T=0 NUMB=0x1
kfbh.block.obj:                       1 ; 0x008: TYPE=0x0 NUMB=0x1
kfbh.check:                  3606471433 ; 0x00c: 0xd6f66309
kfbh.fcn.base:                      460 ; 0x010: 0x000001cc
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfffdb.node.incarn:                   1 ; 0x000: A=1 NUMM=0x0
kfffdb.node.frlist.number:   4294967295 ; 0x004: 0xffffffff
kfffdb.node.frlist.incarn:            0 ; 0x008: A=0 NUMM=0x0
kfffdb.hibytes:                       0 ; 0x00c: 0x00000000
kfffdb.lobytes:                 2097152 ; 0x010: 0x00200000
kfffdb.xtntcnt:                       2 ; 0x014: 0x00000002
kfffdb.xtnteof:                       2 ; 0x018: 0x00000002
kfffdb.blkSize:                    4096 ; 0x01c: 0x00001000
kfffdb.flags:                         1 ; 0x020: O=1 S=0 S=0 D=0 C=0 I=0 R=0 A=0
kfffdb.fileType:                     15 ; 0x021: 0x0f
kfffdb.dXrs:                         17 ; 0x022: SCHE=0x1 NUMB=0x1
kfffdb.iXrs:                         17 ; 0x023: SCHE=0x1 NUMB=0x1
kfffdb.dXsiz[0]:             4294967295 ; 0x024: 0xffffffff
kfffdb.dXsiz[1]:                      0 ; 0x028: 0x00000000
kfffdb.dXsiz[2]:                      0 ; 0x02c: 0x00000000
kfffdb.iXsiz[0]:             4294967295 ; 0x030: 0xffffffff
kfffdb.iXsiz[1]:                      0 ; 0x034: 0x00000000
kfffdb.iXsiz[2]:                      0 ; 0x038: 0x00000000
kfffdb.xtntblk:                       2 ; 0x03c: 0x0002
kfffdb.break:                        60 ; 0x03e: 0x003c
kfffdb.priZn:                         0 ; 0x040: KFDZN_COLD
kfffdb.secZn:                         0 ; 0x041: KFDZN_COLD
kfffdb.ub2spare:                      0 ; 0x042: 0x0000
kfffdb.alias[0]:             4294967295 ; 0x044: 0xffffffff
kfffdb.alias[1]:             4294967295 ; 0x048: 0xffffffff
kfffdb.strpwdth:                      0 ; 0x04c: 0x00
kfffdb.strpsz:                        0 ; 0x04d: 0x00
kfffdb.usmsz:                         0 ; 0x04e: 0x0000
kfffdb.crets.hi:               32958287 ; 0x050: HOUR=0xf DAYS=0x1a MNTH=0x9 YEAR=0x7db
kfffdb.crets.lo:              542028800 ; 0x054: USEC=0x0 MSEC=0x3ad SECS=0x4 MINS=0x8
kfffdb.modts.hi:               32958287 ; 0x058: HOUR=0xf DAYS=0x1a MNTH=0x9 YEAR=0x7db
kfffdb.modts.lo:              542028800 ; 0x05c: USEC=0x0 MSEC=0x3ad SECS=0x4 MINS=0x8
kfffdb.dasz[0]:                       0 ; 0x060: 0x00
kfffdb.dasz[1]:                       0 ; 0x061: 0x00
kfffdb.dasz[2]:                       0 ; 0x062: 0x00
kfffdb.dasz[3]:                       0 ; 0x063: 0x00
kfffdb.permissn:                      0 ; 0x064: 0x00
kfffdb.ub1spar1:                      0 ; 0x065: 0x00
kfffdb.ub2spar2:                      0 ; 0x066: 0x0000
kfffdb.user.entnum:                   0 ; 0x068: 0x0000
kfffdb.user.entinc:                   0 ; 0x06a: 0x0000
kfffdb.group.entnum:                  0 ; 0x06c: 0x0000
kfffdb.group.entinc:                  0 ; 0x06e: 0x0000
kfffdb.spare[0]:                      0 ; 0x070: 0x00000000
kfffdb.spare[1]:                      0 ; 0x074: 0x00000000
kfffdb.spare[2]:                      0 ; 0x078: 0x00000000
kfffdb.spare[3]:                      0 ; 0x07c: 0x00000000
kfffdb.spare[4]:                      0 ; 0x080: 0x00000000
kfffdb.spare[5]:                      0 ; 0x084: 0x00000000
kfffdb.spare[6]:                      0 ; 0x088: 0x00000000
kfffdb.spare[7]:                      0 ; 0x08c: 0x00000000
kfffdb.spare[8]:                      0 ; 0x090: 0x00000000
kfffdb.spare[9]:                      0 ; 0x094: 0x00000000
kfffdb.spare[10]:                     0 ; 0x098: 0x00000000
kfffdb.spare[11]:                     0 ; 0x09c: 0x00000000
kfffdb.usm:                             ; 0x0a0: length=0
kfffde[0].xptr.au:                    2 ; 0x4a0: 0x00000002
kfffde[0].xptr.disk:                  0 ; 0x4a4: 0x0000
kfffde[0].xptr.flags:                 0 ; 0x4a6: L=0 E=0 D=0 S=0
kfffde[0].xptr.chk:                  40 ; 0x4a7: 0x28
kfffde[1].xptr.au:                   59 ; 0x4a8: 0x0000003b
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
从256号文件开始,AU的分布信息保存在1号文件第二个AU中。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kfffde[1].xptr.disk:                  0 ; 0x4ac: 0x0000
kfffde[1].xptr.flags:                 0 ; 0x4ae: L=0 E=0 D=0 S=0
kfffde[1].xptr.chk:                  17 ; 0x4af: 0x11
kfffde[2].xptr.au:           4294967295 ; 0x4b0: 0xffffffff
kfffde[2].xptr.disk:              65535 ; 0x4b4: 0xffff
kfffde[2].xptr.flags:                 0 ; 0x4b6: L=0 E=0 D=0 S=0
kfffde[2].xptr.chk:                  42 ; 0x4b7: 0x2a
kfffde[3].xptr.au:           4294967295 ; 0x4b8: 0xffffffff
kfffde[3].xptr.disk:              65535 ; 0x4bc: 0xffff
kfffde[3].xptr.flags:                 0 ; 0x4be: L=0 E=0 D=0 S=0
kfffde[3].xptr.chk:                  42 ; 0x4bf: 0x2a

--注意看我~ 的地方。
从256号文件开始,AU的分布信息保存在1号文件第二个AU中,也就是(0号盘,59号AU)。
其中第一个块(0号块),对应256号文件。1号块对应257号文件,等等,依此类推。

--这样spfile文件号是258,test文件号是284
-- 258-256=2 , 284-256=28

$ kfed read /dev/raw/raw1 aun=59 blkn=2
...
kfffde[0].xptr.au:                   92 ; 0x4a0: 0x0000005c
kfffde[0].xptr.disk:                  0 ; 0x4a4: 0x0000
kfffde[0].xptr.flags:                 0 ; 0x4a6: L=0 E=0 D=0 S=0
kfffde[0].xptr.chk:                 118 ; 0x4a7: 0x76
kfffde[1].xptr.au:           4294967295 ; 0x4a8: 0xffffffff
kfffde[1].xptr.disk:              65535 ; 0x4ac: 0xffff
kfffde[1].xptr.flags:                 0 ; 0x4ae: L=0 E=0 D=0 S=0
kfffde[1].xptr.chk:                  42 ; 0x4af: 0x2a
...
au=4294967295,表示还未分配。

$ kfed read /dev/raw/raw1 aun=59 blkn=28| less
kfffde[0].xptr.au:                 2676 ; 0x4a0: 0x00000a74
kfffde[0].xptr.disk:                  0 ; 0x4a4: 0x0000
kfffde[0].xptr.flags:                 0 ; 0x4a6: L=0 E=0 D=0 S=0
kfffde[0].xptr.chk:                  84 ; 0x4a7: 0x54
kfffde[1].xptr.au:                 2677 ; 0x4a8: 0x00000a75
kfffde[1].xptr.disk:                  0 ; 0x4ac: 0x0000
kfffde[1].xptr.flags:                 0 ; 0x4ae: L=0 E=0 D=0 S=0
kfffde[1].xptr.chk:                  85 ; 0x4af: 0x55
kfffde[2].xptr.au:                 2672 ; 0x4b0: 0x00000a70
kfffde[2].xptr.disk:                  0 ; 0x4b4: 0x0000
kfffde[2].xptr.flags:                 0 ; 0x4b6: L=0 E=0 D=0 S=0
kfffde[2].xptr.chk:                  80 ; 0x4b7: 0x50
kfffde[3].xptr.au:                 2673 ; 0x4b8: 0x00000a71
kfffde[3].xptr.disk:                  0 ; 0x4bc: 0x0000
kfffde[3].xptr.flags:                 0 ; 0x4be: L=0 E=0 D=0 S=0
kfffde[3].xptr.chk:                  81 ; 0x4bf: 0x51
kfffde[4].xptr.au:                 2674 ; 0x4c0: 0x00000a72
kfffde[4].xptr.disk:                  0 ; 0x4c4: 0x0000
kfffde[4].xptr.flags:                 0 ; 0x4c6: L=0 E=0 D=0 S=0
kfffde[4].xptr.chk:                  82 ; 0x4c7: 0x52
kfffde[5].xptr.au:                 2675 ; 0x4c8: 0x00000a73
kfffde[5].xptr.disk:                  0 ; 0x4cc: 0x0000
kfffde[5].xptr.flags:                 0 ; 0x4ce: L=0 E=0 D=0 S=0
kfffde[5].xptr.chk:                  83 ; 0x4cf: 0x53
kfffde[6].xptr.au:                 2576 ; 0x4d0: 0x00000a10
kfffde[6].xptr.disk:                  0 ; 0x4d4: 0x0000
kfffde[6].xptr.flags:                 0 ; 0x4d6: L=0 E=0 D=0 S=0
kfffde[6].xptr.chk:                  48 ; 0x4d7: 0x30
kfffde[7].xptr.au:                 2577 ; 0x4d8: 0x00000a11
kfffde[7].xptr.disk:                  0 ; 0x4dc: 0x0000
kfffde[7].xptr.flags:                 0 ; 0x4de: L=0 E=0 D=0 S=0
kfffde[7].xptr.chk:                  49 ; 0x4df: 0x31
kfffde[8].xptr.au:                 2578 ; 0x4e0: 0x00000a12
kfffde[8].xptr.disk:                  0 ; 0x4e4: 0x0000
kfffde[8].xptr.flags:                 0 ; 0x4e6: L=0 E=0 D=0 S=0
kfffde[8].xptr.chk:                  50 ; 0x4e7: 0x32
kfffde[9].xptr.au:                 2579 ; 0x4e8: 0x00000a13
kfffde[9].xptr.disk:                  0 ; 0x4ec: 0x0000
kfffde[9].xptr.flags:                 0 ; 0x4ee: L=0 E=0 D=0 S=0
kfffde[9].xptr.chk:                  51 ; 0x4ef: 0x33
kfffde[10].xptr.au:                2580 ; 0x4f0: 0x00000a14
kfffde[10].xptr.disk:                 0 ; 0x4f4: 0x0000
kfffde[10].xptr.flags:                0 ; 0x4f6: L=0 E=0 D=0 S=0
kfffde[10].xptr.chk:                 52 ; 0x4f7: 0x34
kfffde[11].xptr.au:          4294967295 ; 0x4f8: 0xffffffff
kfffde[11].xptr.disk:             65535 ; 0x4fc: 0xffff
kfffde[11].xptr.flags:                0 ; 0x4fe: L=0 E=0 D=0 S=0
kfffde[11].xptr.chk:                 42 ; 0x4ff: 0x2a
--这样与上面的查询信息对上了,使用dd取出就很简单了。

$ kfed read /dev/raw/raw1 aun=59 blkn=28 text=a.txt

--我仅仅一个磁盘,过滤a.txt,最后编辑内容如下就可以了,执行就可以取出数据文件了。

$ grep 'xptr.au:' a.txt | grep -v '4294967295 ;'| cut -d';' -f1 | cut -d':' -f2 | sed 's/ //g'
2676
2677
2672
2673
2674
2675
2576
2577
2578
2579
2580

$ grep 'xptr.au:' a.txt | grep -v '4294967295 ;'| cut -d';' -f1 | cut -d':' -f2 | sed 's/ //g'| sed -e  's+^+dd if=/dev/sda7 bs=1024k count=1 skip=+' -e 's/$/ >>test01.dbf/'
dd if=/dev/sda7 bs=1024k count=1 skip=2676  >>test01.dbf
dd if=/dev/sda7 bs=1024k count=1 skip=2677  >>test01.dbf
dd if=/dev/sda7 bs=1024k count=1 skip=2672  >>test01.dbf
dd if=/dev/sda7 bs=1024k count=1 skip=2673  >>test01.dbf
dd if=/dev/sda7 bs=1024k count=1 skip=2674  >>test01.dbf
dd if=/dev/sda7 bs=1024k count=1 skip=2675  >>test01.dbf
dd if=/dev/sda7 bs=1024k count=1 skip=2576  >>test01.dbf
dd if=/dev/sda7 bs=1024k count=1 skip=2577  >>test01.dbf
dd if=/dev/sda7 bs=1024k count=1 skip=2578  >>test01.dbf
dd if=/dev/sda7 bs=1024k count=1 skip=2579  >>test01.dbf
dd if=/dev/sda7 bs=1024k count=1 skip=2580  >>test01.dbf


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
AntData.ORM框架 之DBModel CodeGen如何使用
AntData.ORM 框架 开源地址:https://github.com/yuzd/AntData.ORM 点我下载最新版tt文件     netcore2.0的场景如何使用tt文件来生成model层的代码   1.
670 0
调用Bytom Chrome插件钱包开发Dapp
安装使用插件钱包 1. 打开Google浏览器的应用商店,搜索Bystore 下载链接:http://t.cn/E6cFFwb 2. 然后点击添加到Chrome,就可以添加到我们的: 3. 使用google插件钱包 如果你使用的是测试网,可以去测试网水龙头领取BTM。
2136 0
DataWorks百问百答07:如何有效组织和管理DataStudio中的节点文件?
DataWorks百问百答07:如何有效组织和管理DataStudio中的节点文件?
0 0
使用数据库表查询的方式直接获得CRM服务订单的sold to party信息
使用数据库表查询的方式直接获得CRM服务订单的sold to party信息
0 0
SwiftUI极简教程20:CoreData数据持久化框架的使用(上)
SwiftUI极简教程20:CoreData数据持久化框架的使用(上)
0 0
SwiftUI极简教程21:CoreData数据持久化框架的使用(中)
SwiftUI极简教程21:CoreData数据持久化框架的使用(中)
0 0
SwiftUI极简教程22:CoreData数据持久化框架的使用(下)
SwiftUI极简教程22:CoreData数据持久化框架的使用(下)
0 0
在 CIFAR-10 数据集上使用最大均值差异(MMD)漂移检测器(Seldon Alibi Detect)(上)
方法 Maximum Mean Discrepancy (MMD)检测器是一种基于核的多元2样本测试方法。MMD是基于再生核希尔伯特空间 F 中的平均嵌入\mu_{p}μ p ​ 和\mu_{q}μ q ​ 的2个分布p和q之间的基于距离的度量:
0 0
+关注
lfreeali
熟悉oracle数据库性能优化,rman备份,数据库恢复技术.
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载