May 2010 Archives

关于这次备份恢复的培训

| 3 Comments

我将会在6月初和李轶楠(Ora-600)联手完成恩墨科技的一个关于备份与恢复的培训,具体时间是在63~66日,连续4天,600是负责前两天,我负责后两天(即65日、66日)。

 

我在65日、66日这两天里主要会跟大家交流一些非常规的备份恢复方法,课程的内容除了eygle早就贴出来的那份培训提纲外,如果时间允许,我还会和大家交流如下的三个例子:

1、  system回滚段损坏后的恢复实例

2、  如何跳过缺失的归档

3、  当出现ORA-00600 [3020]allow 1 corruption失效后我们如何处理

 

最近觉得好累,数据移植所有的代码都得我一个人来写,业余时间修订一本韩国书修订得我都快崩溃了,极其痛苦,还要准备6月初的培训。

 

我下午刚看了我这个月的考勤记录,每天都是早上7点半之前到,晚上8点后才走,呵呵,很久都没有这样了。

 

当我累的快受不了的时候,我会去看一下糗百,看完了感觉会好很多。

谨以这篇文章献给那些想从ASM disk上直接unload出数据的朋友们

 

我们来看一个实例:

现在scott.empdatafile 4中,我现在要确定datafile 4的物理存储位置。

oracle@rac1 ~]$ crs_stat -t

Name           Type           Target    State     Host       

------------------------------------------------------------

ora....TEST.cs application    OFFLINE   OFFLINE              

ora....ua1.srv application    OFFLINE   OFFLINE              

ora....a1.inst application    OFFLINE   OFFLINE              

ora....a2.inst application    OFFLINE   OFFLINE              

ora.cuihua.db  application    OFFLINE   OFFLINE              

ora....SM1.asm application    OFFLINE   OFFLINE              

ora....C1.lsnr application    OFFLINE   OFFLINE              

ora.rac1.gsd   application    OFFLINE   OFFLINE              

ora.rac1.ons   application    OFFLINE   OFFLINE              

ora.rac1.vip   application    OFFLINE   OFFLINE              

ora....SM2.asm application    OFFLINE   OFFLINE              

ora....C2.lsnr application    OFFLINE   OFFLINE              

ora.rac2.gsd   application    OFFLINE   OFFLINE              

ora.rac2.ons   application    OFFLINE   OFFLINE              

ora.rac2.vip   application    OFFLINE   OFFLINE

 

先找到file directory的物理位置:

[oracle@rac1 ~]$ kfed read /dev/raw/raw3 aunum=0 blknum=0

kfbh.endian:                          1 ; 0x000: 0x01

kfbh.hard:                          130 ; 0x001: 0x82

kfbh.type:                            1 ; 0x002: KFBTYP_DISKHEAD

......省略显示部分内容

kfdhdb.blksize:                    4096 ; 0x0ba: 0x1000

kfdhdb.ausize:                  1048576 ; 0x0bc: 0x00100000

kfdhdb.mfact:                    113792 ; 0x0c0: 0x0001bc80

kfdhdb.dsksize:                    3067 ; 0x0c4: 0x00000bfb

kfdhdb.pmcnt:                         2 ; 0x0c8: 0x00000002

kfdhdb.fstlocn:                       1 ; 0x0cc: 0x00000001

kfdhdb.altlocn:                       2 ; 0x0d0: 0x00000002

kfdhdb.f1b1locn:                      2 ; 0x0d4: 0x00000002

从结果里我们可以看到,file directory的第1blockAU2上。

 

我们来看一下这个block

[oracle@rac1 ~]$ kfed read /dev/raw/raw3 aunum=2 blknum=1

kfbh.endian:                          1 ; 0x000: 0x01

kfbh.hard:                          130 ; 0x001: 0x82

kfbh.type:                            4 ; 0x002: KFBTYP_FILEDIR

......省略显示部分内容

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 C=0 S=0

kfffde[0].xptr.chk:                  40 ; 0x4a7: 0x28

kfffde[1].xptr.au:                    2 ; 0x4a8: 0x00000002

kfffde[1].xptr.disk:                  1 ; 0x4ac: 0x0001

kfffde[1].xptr.flags:                 0 ; 0x4ae: L=0 E=0 D=0 C=0 S=0

kfffde[1].xptr.chk:                  41 ; 0x4af: 0x29

kfffde[2].xptr.au:           4294967294 ; 0x4b0: 0xfffffffe

kfffde[2].xptr.disk:              65534 ; 0x4b4: 0xfffe

kfffde[2].xptr.flags:                 0 ; 0x4b6: L=0 E=0 D=0 C=0 S=0

kfffde[2].xptr.chk:                  42 ; 0x4b7: 0x2a

kfffde[3].xptr.au:                   93 ; 0x4b8: 0x0000005d

kfffde[3].xptr.disk:                  0 ; 0x4bc: 0x0000

kfffde[3].xptr.flags:                 0 ; 0x4be: L=0 E=0 D=0 C=0 S=0

kfffde[3].xptr.chk:                 119 ; 0x4bf: 0x77

kfffde[4].xptr.au:                   93 ; 0x4c0: 0x0000005d

kfffde[4].xptr.disk:                  1 ; 0x4c4: 0x0001

kfffde[4].xptr.flags:                 0 ; 0x4c6: L=0 E=0 D=0 C=0 S=0

kfffde[4].xptr.chk:                 118 ; 0x4c7: 0x76

kfffde[5].xptr.au:           4294967294 ; 0x4c8: 0xfffffffe

......省略显示部分内容

kfffde[39].xptr.disk:             65535 ; 0x5dc: 0xffff

从结果里我们可以知道/dev/raw/raw3只有两个file directory,第一个file directoryAU2上,第二个file directoryAU93上。

 

ASM里,第一个file directory是留给ASM metadata file的,所以这里我们要找的datafile 4一定在第二个file directory里,即AU93上。

 

对于第二个file directory而言,datafile 1就在block 0里,datafile 2就在block 1里,依次类推,所以我们要找的datafile 4一定在block 3里,我们来看一下这个block

[oracle@rac1 ~]$ kfed read /dev/raw/raw3 aunum=93 blknum=3

kfbh.endian:                          1 ; 0x000: 0x01

kfbh.hard:                          130 ; 0x001: 0x82

kfbh.type:                            4 ; 0x002: KFBTYP_FILEDIR

kfbh.datfmt:                          1 ; 0x003: 0x01

kfbh.block.blk:                     259 ; 0x004: T=0 NUMB=0x103

kfbh.block.obj:                       1 ; 0x008: TYPE=0x0 NUMB=0x1

......省略显示部分内容

kfffdb.spare[15]:                     0 ; 0x09c: 0x00000000

kfffdb.usm:                             ; 0x0a0: length=0

kfffde[0].xptr.au:                  834 ; 0x4a0: 0x00000342

kfffde[0].xptr.disk:                  1 ; 0x4a4: 0x0001

kfffde[0].xptr.flags:                 0 ; 0x4a6: L=0 E=0 D=0 C=0 S=0

kfffde[0].xptr.chk:                 106 ; 0x4a7: 0x6a

kfffde[1].xptr.au:                  834 ; 0x4a8: 0x00000342

kfffde[1].xptr.disk:                  0 ; 0x4ac: 0x0000

kfffde[1].xptr.flags:                 0 ; 0x4ae: L=0 E=0 D=0 C=0 S=0

kfffde[1].xptr.chk:                 107 ; 0x4af: 0x6b

kfffde[2].xptr.au:                  835 ; 0x4b0: 0x00000343

kfffde[2].xptr.disk:                  0 ; 0x4b4: 0x0000

kfffde[2].xptr.flags:                 0 ; 0x4b6: L=0 E=0 D=0 C=0 S=0

kfffde[2].xptr.chk:                 106 ; 0x4b7: 0x6a

kfffde[3].xptr.au:                  835 ; 0x4b8: 0x00000343

kfffde[3].xptr.disk:                  1 ; 0x4bc: 0x0001

kfffde[3].xptr.flags:                 0 ; 0x4be: L=0 E=0 D=0 C=0 S=0

kfffde[3].xptr.chk:                 107 ; 0x4bf: 0x6b

kfffde[4].xptr.au:                  836 ; 0x4c0: 0x00000344

kfffde[4].xptr.disk:                  1 ; 0x4c4: 0x0001

kfffde[4].xptr.flags:                 0 ; 0x4c6: L=0 E=0 D=0 C=0 S=0

kfffde[4].xptr.chk:                 108 ; 0x4c7: 0x6c

kfffde[5].xptr.au:                  836 ; 0x4c8: 0x00000344

kfffde[5].xptr.disk:                  0 ; 0x4cc: 0x0000

kfffde[5].xptr.flags:                 0 ; 0x4ce: L=0 E=0 D=0 C=0 S=0

kfffde[5].xptr.chk:                 109 ; 0x4cf: 0x6d

kfffde[6].xptr.au:                  837 ; 0x4d0: 0x00000345

kfffde[6].xptr.disk:                  0 ; 0x4d4: 0x0000

kfffde[6].xptr.flags:                 0 ; 0x4d6: L=0 E=0 D=0 C=0 S=0

kfffde[6].xptr.chk:                 108 ; 0x4d7: 0x6c

kfffde[7].xptr.au:                  837 ; 0x4d8: 0x00000345

kfffde[7].xptr.disk:                  1 ; 0x4dc: 0x0001

kfffde[7].xptr.flags:                 0 ; 0x4de: L=0 E=0 D=0 C=0 S=0

kfffde[7].xptr.chk:                 109 ; 0x4df: 0x6d

kfffde[8].xptr.au:                  838 ; 0x4e0: 0x00000346

kfffde[8].xptr.disk:                  1 ; 0x4e4: 0x0001

kfffde[8].xptr.flags:                 0 ; 0x4e6: L=0 E=0 D=0 C=0 S=0

kfffde[8].xptr.chk:                 110 ; 0x4e7: 0x6e

kfffde[9].xptr.au:                  838 ; 0x4e8: 0x00000346

kfffde[9].xptr.disk:                  0 ; 0x4ec: 0x0000

kfffde[9].xptr.flags:                 0 ; 0x4ee: L=0 E=0 D=0 C=0 S=0

kfffde[9].xptr.chk:                 111 ; 0x4ef: 0x6f

kfffde[10].xptr.au:                 839 ; 0x4f0: 0x00000347

kfffde[10].xptr.disk:                 0 ; 0x4f4: 0x0000

kfffde[10].xptr.flags:                0 ; 0x4f6: L=0 E=0 D=0 C=0 S=0

kfffde[10].xptr.chk:                110 ; 0x4f7: 0x6e

kfffde[11].xptr.au:                 839 ; 0x4f8: 0x00000347

kfffde[11].xptr.disk:                 1 ; 0x4fc: 0x0001

kfffde[11].xptr.flags:                0 ; 0x4fe: L=0 E=0 D=0 C=0 S=0

kfffde[11].xptr.chk:                111 ; 0x4ff: 0x6f

kfffde[12].xptr.au:          4294967295 ; 0x500: 0xffffffff

kfffde[12].xptr.disk:             65535 ; 0x504: 0xffff

......省略显示部分内容

kfffde[23].xptr.au:          4294967295 ; 0x558: 0xffffffff

kfffde[23].xptr.disk:             65535 ; 0x55c: 0xffff

 

至此,datafile 4/dev/raw/raw3上的物理存储位置我们已经完全清楚了----datafile 4一共占了6AU,分别是AU834AU835AU836AU837AU838AU839

 

DUL10已经支持ASM了,ODU4AUL6什么时候能支持ASM呢?

让我们拭目以待!

ASM里如何修改指定的Block

| 4 Comments

ASM下的库坏了起不来的时候,我们怎么办?

这时候如果你没有有效备份的话你可能会需要修改ASM下的指定block这时候怎么找到这个指定block的物理存储地址成了问题的关键!

 

在你真正面临上述问题的时候,一般情况下不太可能会让你有机会用RMAN或者DBMS_FILE_TRANSFER把有问题的文件拷出来,因为一来file system的容量有限,可能放不下;二来因为需要修改一个block就把整个文件都拷出来,改了后再拷回去----这个可能恢复的时间根本就不允许你这么做。

 

我们现在来看一个ASM下修改指定block的实例,善用我这里的方法在某些特殊的情况下是可以救命的:

SQL> select empno,ename,dbms_rowid.rowid_relative_fno(rowid)||'_'||dbms_rowid.rowid_block_number(rowid) location from scott.emp;

 

     EMPNO ENAME      LOCATION

---------- ---------- ---------------------------------------------------------------------------------

      7369 SMITH      4_32

      7499 ALLEN      4_32

      7521 WARD       4_32

      ......省略显示部分内容

      7934 MILLER     4_32

 

14 rows selected.

 

假定这里我们要把SMITH所对应的EMPNO7369改为7370,我们现在知道这个blockDBAfile 4block 32

 

我们现在把上述实例shutdown后再mount----这就模拟了ASM下库起不来的情况:

[oracle@rac1 db_1]$ srvctl stop instance -d cuihua -i cuihua1

[oracle@rac1 db_1]$ export ORACLE_SID=cuihua1

[oracle@rac1 db_1]$ sqlplus '/ as sysdba';

 

SQL*Plus: Release 10.2.0.1.0 - Production on Fri May 7 09:08:34 2010

 

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

Connected to an idle instance.

 

SQL> startup mount

ORACLE instance started.

 

Total System Global Area  209715200 bytes

Fixed Size                  1218556 bytes

Variable Size              88082436 bytes

Database Buffers          117440512 bytes

Redo Buffers                2973696 bytes

Database mounted.

 

SQL> select name from v$datafile where file#=4;

 

NAME

--------------------------------------------------------------------------------

+DGDATA/cuihua/datafile/users.259.651595941

这里我们知道了file 4所对应的ASM internal file number259

 

SQL> select 32*8192 from dual;

 

   32*8192

----------

262144

262144小于1M,所以file 4,block 32一定在259所对应的第一个AU上。

 

然后我们转到ASM instance

SQL> select NUMBER_KFFXP, XNUM_KFFXP, GROUP_KFFXP, DISK_KFFXP,AU_KFFXP from X$KFFXP where NUMBER_KFFXP = 259;

 

NUMBER_KFFXP XNUM_KFFXP GROUP_KFFXP DISK_KFFXP   AU_KFFXP

------------ ---------- ----------- ---------- ----------

         259          0           1          1        834

         259          0           1          0        834

         259          1           1          0        835

         259          1           1          1        835

          ......省略显示部分内容

         259         55           2          0        277

 

68 rows selected.

 

SQL> select NAME, PATH from v$asm_disk where GROUP_NUMBER=1 and DISK_NUMBER=0;

 

NAME                                                         PATH

------------------------------------------------------------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

DGDATA_0000                                                  /dev/raw/raw3

 

SQL> select NAME, PATH from v$asm_disk where GROUP_NUMBER=1 and DISK_NUMBER=1;   

 

NAME                                                         PATH

------------------------------------------------------------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

DGDATA_0001                                                  /dev/raw/raw4

这里我们可以看到259所在的第一个AUnormal redundancy了,其物理地址分别在disk 0disk 1的第834AU,因为这里是normal redundancy,所以我们改完后覆盖的时候要覆盖这两个地方。

 

现在我们来算一下file 4,block 32的物理offset

SQL> select (834*1048576+262144)/8192 from dual;

 

(834*1048576+262144)/8192

-------------------------

                   106784

 

至此,我们已经完全知道了file 4,block 32的实际物理存储地址。

 

现在我们就可以用dd把这个block拷出来了:

[oracle@rac1 ASMDump]$ dd if=/dev/raw/raw3 of=emp_4_32.dmp bs=8192 skip=106784 count=1

读入了 1+0 个块

输出了 1+0 个块

 

拷出来后就可以用BBED修改这个块了,注意这里一定要在这个block之前构造一个OS block header,否则BBED会乱套的

 

BBED改完了后我们再用dd把修改后的block拷回去:

[oracle@rac1 ASMDump]$ dd if=emp_4_32.dmp of=/dev/raw/raw3 bs=8192 seek=106784 count=1 conv=notrunc

读入了 1+0 个块

输出了 1+0 个块

 

[oracle@rac1 ASMDump]$ dd if=emp_4_32.dmp of=/dev/raw/raw4 bs=8192 seek=106784 count=1 conv=notrunc

读入了 1+0 个块

输出了 1+0 个块

 

拷完后我们起一下库,现在我们来看一下修改后的效果:

SQL> select empno,ename from scott.emp;

 

     EMPNO ENAME

---------- ----------

      7370 SMITH

      7499 ALLEN

      7521 WARD

      ......省略显示部分内容

      7934 MILLER

 

14 rows selected.

 

可以看到我们已经成功的把7369改成了7370

Recent Comments

  • never fail list building system: the written content on this submit is really a single read more
  • never fail list building system: Awesome article which has got me considering about the potential read more
  • how to stop panic attacks: I couldn't agree with you more, anyway l love your read more
  • never fail list building bonus: Remarkable article which has received me considering concerning the prospective read more
  • never fail list building system: Actually truly beneficial weblog article which has got me considering. read more
  • never fail list building review: Nice piece of info that you've got in this website read more
  • Buck The Deer: Hi there!I like your post.Where by did you got all read more
  • The Diet Solution Program: I quite agree with your submission, however, lam having problem read more
  • crtea1: 汗,不是有意的,多余的帖子请删。 read more
  • crtea1: 回帖貌似有问题,总是跳到错误页,也不知道到底有没有重复回帖。 根据我原先的理解: 当需要一个数据块时,ORACLE会根据BLOCK的HASH值去读对应的HASH CHAIN,查看需要的块是否存在。而不是去查找LRU LIST,因此会有cache buffers chain latch (cbc latch)。 read more

About this Archive

This page is an archive of entries from May 2010 listed from newest to oldest.

April 2010 is the previous archive.

June 2010 is the next archive.

Find recent content on the main index or look in the archives to find all content.