竹子开花的时 发表于 2018-9-11 07:55:34

Oracle 学习之--ASM DISK Header的备份和恢复(1)

  Oracle 学习之--ASM DISK Header的备份和恢复(1)
  一. 准备知识
  RAC ASM由于其高度的封装性,使得我们很难知道窥探其内部的原理。ASM如果一旦出现问题,通常都很难处理。即便在有很完备的RMAN备份的情况下,恢复起来都可能需要很长的时间。
  而ASM 中最为脆弱的又是ASM disk header。如果disk header逻辑损坏了,即corrupt了,整个disk group将不能够mount,依赖于ASM实例的database也将不能够startup。
  在RAC中增删节点后asm的disk header就很容易出现问题。如果是因为disk header的原因而需要重建整个diskgroup,进而用RMAN恢复就会浪费很多时间,所以最好的方法就是需要定期对ASM diskheader进行dd备份。
  Oracle ASM 系列小结
  http://blog.csdn.net/tianlesoftware/article/details/6364422
  Oracle ASM详解
  http://blog.csdn.net/tianlesoftware/article/details/5314541
  官网的说明:
  Introduction to Automatic StorageManagement (ASM)
  http://download.oracle.com/docs/cd/B28359_01/server.111/b31107/asmcon.htm
  1.1 什么是ASM(Automatic StorageManagement )
  ASM是一个管理卷组或者文件系统的软件。它是通过ASM instance 来实现对磁盘的管理。 这个和Oracle instance 很类似。 ASM instance 也有SGA和background processes组成. 但是ASM 相对的task 很少,所以它的SGA 相对较小。
  1.1.1 ASM instance
ASM instance 维护以下ASMmetadata:  
       (1)The disks that belong to a disk group
  
       (2)The amount of space that is available in a disk group
  
       (3)The filenames of the files in a disk group
  
       (4)The location of disk group datafile dataextents
  
       (5)A redo log that records information about atomically changing datablocks
  ASM instace 通过维护asm metadata 来在file layout层面上对database instance提供支持。 一个ASM instance 可以对应多个database instance。
  准确的说ASM 的Metadata 可以分为3种:
(1)diskgroup metadata: files with NUMBER_KFFIL   desc v$asm_diskgroup
Name                                     Null?    Type  
------------------------------------------------- ----------------------------
  
GROUP_NUMBER                                       NUMBER
  
NAME                                              VARCHAR2(30)
  
SECTOR_SIZE                                        NUMBER
  
BLOCK_SIZE                                       NUMBER
  
ALLOCATION_UNIT_SIZE                               NUMBER
  
STATE                                             VARCHAR2(11)
  
TYPE                                              VARCHAR2(6)
  
TOTAL_MB                                          NUMBER
  
FREE_MB                                           NUMBER
  
REQUIRED_MIRROR_FREE_MB                            NUMBER
  
USABLE_FILE_MB                                     NUMBER
  
OFFLINE_DISKS                                    NUMBER
  
UNBALANCED                                        VARCHAR2(1)
  
COMPATIBILITY                                    VARCHAR2(60)
  
DATABASE_COMPATIBILITY                           VARCHAR2(60)
  SYS@+ASM2(rac2)> select group_number,name,allocation_unit_size,total_mb from v$asm_diskgroup;
GROUP_NUMBER NAME                           ALLOCATION_UNIT_SIZE   TOTAL_MB  
------------ -------------------------------------------------- ----------
  
          1 DATA                                       1048576      11993
  
          2 FRA                                        1048576       7993
  这里我们分配了2个disk groups,启动AU 大小为1M。 即默认值,关于AU 下节有说明。
  1.1.3 ASM Disks
  ASM disk 组成disk group,在OS 上的表现就是每个disk 对应一个分区。 ASM disks 由extent 组成,而每个extent 又由一个或者多个AU 组成。
Allocation Units  
       Every ASM disk is divided into allocation units (AU). An AU is the fundamental unitof allocation within a disk group. A file extent consists of one or more AU. AnASM file consists of one or more file extents.
  
       When you create a disk group, you can setthe ASM AU size to be between 1 MB and 64 MB in powers of two, such as, 1, 2, 4,8, 16, 32, or 64. Larger AU sizes typically provide performance advantages fordata warehouse applications that use large sequential reads.
  默认的AU 大小是1M。 这个在上节通过v$asm_diskgroup 视图可以查看,而已可以查看指定AU的参数:_asm_ausize
  关于这个参数具体查看方法,参考:
  Oracle ASM 相关的 视图(V$)和 数据字典(X$)
  http://blog.csdn.net/tianlesoftware/article/details/6733039
  中的第八小节。
  我们也可以通过v$asm_disk视图来查看disk 的信息:
  SYS@+ASM2(rac2)> desc v$asm_disk
Name                                     Null?    Type  
------------------------------------------------- ----------------------------
  
GROUP_NUMBER                                       NUMBER
  
DISK_NUMBER                                        NUMBER
  
COMPOUND_INDEX                                     NUMBER
  
INCARNATION                                        NUMBER
  
MOUNT_STATUS                                    VARCHAR2(7)
  
HEADER_STATUS                                     VARCHAR2(12)
  
MODE_STATUS                                       VARCHAR2(7)
  
STATE                                              VARCHAR2(8)
  
REDUNDANCY                                        VARCHAR2(7)
  
LIBRARY                                           VARCHAR2(64)
  
TOTAL_MB                                          NUMBER
  
FREE_MB                                           NUMBER
  
NAME                                              VARCHAR2(30)
  
FAILGROUP                                       VARCHAR2(30)
  
LABEL                                             VARCHAR2(31)
  
PATH                                              VARCHAR2(256)
  
UDID                                              VARCHAR2(64)
  
PRODUCT                                           VARCHAR2(32)
  
CREATE_DATE                                        DATE
  
MOUNT_DATE                                        DATE
  
REPAIR_TIMER                                       NUMBER
  
READS                                             NUMBER
  
WRITES                                          NUMBER
  
READ_ERRS                                          NUMBER
  
WRITE_ERRS                                       NUMBER
  
READ_TIME                                       NUMBER
  
WRITE_TIME                                       NUMBER
  
BYTES_READ                                       NUMBER
  
BYTES_WRITTEN                                    NUMBER
  SYS@+ASM2(rac2)> select group_number,disk_number,name,path from v$asm_disk;
GROUP_NUMBER DISK_NUMBER NAME                           PATH  
------------ ----------------------------------------- ------------------------
  
          1         0 DATA                           /dev/mapper/datap1
  
          2         0 FRA_0000                     /dev/mapper/frap1
  1.1.4 ASM 文件的命名规则说明
  ASM文件名字的格式是固定的:+group/dbname/file type/tag.file.incarnation
  在创建db时系统自动创建的几个表空间(system,undotbs,sysaux,users)对应的都是真实的数据文件,即ASM 文件默认的命名格式。而且这个信息都写到了控制文件里。 如果我们使用别名的话,会方便很多。 对于这些创建数据库时自动创建的表空间,我们要他们使用别名,除了手工创建对应别名外,还需要重建控制文件,并且在重建时,datafile 里写别名的信息。 这样数据库也就使用别名了。
  SYS@anqing2(rac2)> select file_id,file_name,AUTOEXTENSIBLE from dba_data_files order by 1;
FILE_ID FILE_NAME                              AUTOEXTENS  
-------------------------------------------------- ----------
  
      1 +DATA/anqing/datafile/system01.dbf       YES
  
      2 +DATA/anqing/datafile/undotbs01.dbf      YES
  
      3 +DATA/anqing/datafile/sysaux01.dbf       YES
  
      4 +DATA/anqing/datafile/users.273.75154823 YES
  
      5 +DATA/anqing/datafile/undotbs02.dbf      YES
  
      6 +DATA/anqing/datafile/system02.dbf       YES
  
      7 +DATA/anqing/datafile/dave01.dbf         YES
  
      8 +DATA/anqing/datafile/test01.dbf         YES
  这里我使用了别名,所以只有user 表空间是默认的ASM名称,我们用ASMCMD 命令来验证一下这个:
  $ export ORACLE_SID=+ASM2
  $ asmcmd
ASMCMD> ls  
DATA/
  
FRA/
  
ASMCMD> cd DATA
  
ASMCMD> ls
  
ANQING/
  
DAVE/
  
DB_UNKNOWN/
  
RAC/
  
ASMCMD> cd ANQING
  
ASMCMD> ls
  
CONTROLFILE/
  
DATAFILE/
  
ONLINELOG/
  
PARAMETERFILE/
  
TEMPFILE/
  
ASMCMD> cd DATAFILE
  
ASMCMD> pwd
  
+DATA/ANQING/DATAFILE
  
ASMCMD> ls
  
DAVE.285.755349075
  
SYSAUX.275.751548237
  
SYSTEM.276.751548261
  
SYSTEM.280.755038499
  
TEST.286.755567335
  
UNDOTBS1.274.751548233
  
UNDOTBS2.281.751559213
  
USERS.273.751548233
  
dave01.dbf
  
sysaux01.dbf
  
system01.dbf
  
system02.dbf
  
test01.dbf
  
undotbs01.dbf
  
undotbs02.dbf
  从上面的结果我们可以看到别名和原始名称的对应关系。
  连上ASM 实例,用sqlplus的查询进一步确认一下:
  $ exportORACLE_SID=+ASM2
$ sqlplus / as sysdba;  
SQL*Plus: Release 10.2.0.4.0 - Productionon Tue Aug 30 15:31:03 2011
  
Copyright (c) 1982, 2007, Oracle.All Rights Reserved.
  
Connected to:
  
Oracle Database 10g Enterprise EditionRelease 10.2.0.4.0 - Production
  
With the Partitioning, Real ApplicationClusters, OLAP, Data Mining
  
and Real Application Testing options
  

  
SYS@+ASM2(rac2)> select name,file_numberfrom v$asm_alias order by 2;
  

  
NAME                                          FILE_NUMBER
  
-----------------------------------------------------------
  
SYSTEM.256.746634087                                     256
  
Current.256.746634203                                    256
  
SYSAUX.257.746634087                                     257
  
group_1.257.746989321                                    257
  
UNDOTBS1.258.746634089                                 258
  
group_2.258.746989329                                    258
  
group_3.259.746989339                                    259
  
USERS.259.746634089                                    259
  
Current.260.746634201                                    260
  
group_4.260.746989347                                    260
  
group_1.261.746989315                                    261
  以上内容简单的说明了一下什么是ASM,以及ASM 文件的分配。即:
  ASMinstance 管理ASM Diskgroups,disk groups 由disk 组成,每个disk 由多个extent 组成,每个extent又由多个AU组成。
  这个就是ASM 层面上的一个组成。 那么对于DB instance,它只能看到disk groups 这个层面。 当我们创建datafile 的时候,就是放到对应的asm disk groups里。 至于disk group 内部的balance 和 stripe 就交给ASM instance 来处理。
  1.2 ASM disk header 具体内容
  在1.1 节里,我们知道了asm disk 与asm 的关系。 ASM 中最脆弱的就是ASM disk header。如果disk header逻辑损坏了,即corrupt了,整个disk group将不能够mount,依赖于ASM实例的database也将不能够startup。
  可以使用KFED 命令或者BBED 命令来查看asm disk header 里的具体内容:
  Oracle KFED 和 KFOD 工具说明
  http://blog.csdn.net/tianlesoftware/article/details/6729950
  Oracle BBED 工具 说明
  http://blog.csdn.net/tianlesoftware/article/details/5006580
  Oracle bbed 五个 实用示例
  http://blog.csdn.net/tianlesoftware/article/details/6684505
  使用如下语句查看:
  SYS@+ASM2(rac2)> select group_kfdatgroup#,FNUM_KFDAT file#, sum(1) AU_used from x$kfdat where v_kfdat='V' group bygroup_kfdat,FNUM_KFDAT,v_kfdat;
   GROUP#      FILE#    AU_USED  
---------- ---------- ----------
  
         1          0          2 --这里保存的就是我们的disk header
  
      1          1          2
  
      1          2          1
  
      1          3         85
  
      1          4          2
  
      1          5          1
  
      1          6          1
  
      1      256      522
  
      1      257      602
  
      1      258      337
  
      1      259          8
  
            ......
  
      1      286         51
  
      1    1048575      103
  
         2          0          2 --这里保存的就是我们的disk header
  
      2          1          2
  
      2          2          1
  
      2          3         85
  
      2          4          2
  

  
   GROUP#      FILE#    AU_USED
  
---------- ---------- ----------
  
      2          5          1
  
         2         6          1
  
      2      400         15
  
      2      256         16
  
      2      257         56
  
   ......
  
      2      429          8
  
      2    1048575         71
  

  
74 rows selected.
  以上SQL 显示,在每个disk groups 上,都有file# 从0-6 的信息,并且显示了该File 占用的AU 大小。这里的信息就是我们需要关注的信息。 关于这7个File#的说明如下:
(1).File#0, AU=0: disk header (disk name, etc), Allocation Table (AT)andFree Space Table (FST)  
(2).File#0, AU=1: PartnerStatus Table (PST)
  
(3).File#1: File Directory(files and their extent pointers)
  
(4).File#2: Disk Directory
  
(5).File#3: Active ChangeDirectory (ACD) The ACD is analogous to a redolog, where changes to themetadata are logged. Size=42MB * number of instances
  
(6).File#4: Continuing OperationDirectory (COD). The COD is analogousto an undo tablespace. It maintains thestate of active ASM operations such asdisk or datafile drop/add. The COD logrecord is either committed or rolledback based on the success of the operation.
  
(7).File#5: Template directory
  
(8).File#6: Alias directory
  
(9).11g, File#9: AttributeDirectory
  
(10).11g, File#12:Stalene***egistry, created when needed to track offline disks
  这里的相关术语解释如下:
(1).PST - Partner StatusTable. Maintains info on disk-to-diskgroupmembership.  
(2).COD - ContinuingOperation Directory. The COD structuremaintains the state of active ASMoperations or changes, such as disk ordatafile drop/add. The COD log record iseither committed or rolled back basedon the success of the operation. (source Oraclewhitepaper)
  
(3).ACD - Active ChangeDirectory. The ACD is analogous to a redolog, where changes to the metadata arelogged. The ACD log record is used todetermine point of recovery in the case ofASM operation failures or instancefailures. (source Oracle whitepaper)
  
(4).OSM Oracle StorageManager, legacy name, synonymous of ASM
  
(5).CSS ClusterSynchronization Services. Part of Oracleclusterware, mandatory with ASM even insingle instance. CSS is used toheartbeat the health of the ASM instances.
  
(6).RBAL - Oraclebackgroud process. In an ASM instance coordinatedrebalancing operations. In aDB instance, opens and mount diskgroups from thelocal ASM instance.
  
(7).ARBx - Oraclebackgroud processes. In an ASM instance, a slavefor rebalancing operations
  
(8).PSPx - Oraclebackgroud processes. In an ASM instance, ProcessSpawners
  
(9).GMON - Oraclebackgroud processes. In an ASM instance,diskgroup monitor.
  
(10).ASMB - Oraclebackgroudprocess. In an DB instance, keeps a (bequeath) persistent DB connectionto thelocal ASM instance. Provides hearthbeat and ASM statistics. During adiskgrouprebalancing operation ASM communicates to the DB AU changes via thisconnection.
  
(11).   O00x - Oraclebackgroudprocesses. Slaves used to connected from the DB to the ASM instancefor 'shortoperations'.
  可以使用KFED 命令来查看disk header的具体内容。 这个在我之前有关KFED的blog里有示例:
  Oracle KFED 和 KFOD 工具说明
  http://blog.csdn.net/tianlesoftware/article/details/6729950
  这里截取部分内容:
  $ kfedread /dev/mapper/datap1
kfbh.endian:                         1 ; 0x000: 0x01  
kfbh.hard:                         130 ; 0x001: 0x82
  
kfbh.type:                           1 ; 0x002:KFBTYP_DISKHEAD
  
kfbh.datfmt:                         1 ; 0x003: 0x01
  
kfbh.block.blk:                      0 ; 0x004: T=0 NUMB=0x0
  
kfbh.block.obj:             2147483648 ; 0x008: TYPE=0x8NUMB=0x0
  
kfbh.check:               1508168608 ; 0x00c:0x59e4d3a0
  
kfbh.fcn.base:                     0 ; 0x010: 0x00000000
  
kfbh.fcn.wrap:                     0 ; 0x014: 0x00000000
  
kfbh.spare1:                         0 ; 0x018: 0x00000000
  
kfbh.spare2:                         0; 0x01c: 0x00000000
  
kfdhdb.driver.provstr:    ORCLDISKDATA ; 0x000: length=12
  
-->磁盘卷名
  
kfdhdb.driver.reserved:1096040772 ; 0x008: 0x41544144
  
kfdhdb.driver.reserved:         0 ; 0x00c: 0x00000000
  
kfdhdb.driver.reserved:         0 ; 0x010: 0x00000000
  
kfdhdb.driver.reserved:         0 ; 0x014: 0x00000000
  
kfdhdb.driver.reserved:         0 ; 0x018: 0x00000000
  
kfdhdb.driver.reserved:         0 ; 0x01c: 0x00000000
  
kfdhdb.compat:               168820736 ; 0x020: 0x0a100000
  
kfdhdb.dsknum:                     0 ; 0x024: 0x0000
  
kfdhdb.grptyp:                     1 ; 0x026:KFDGTP_EXTERNAL
  
--> ThisindicatesRedundancy for Group.Check TYPE in query output.
  
kfdhdb.hdrsts:                     3 ; 0x027:KFDHDR_MEMBER
  
--> This indicatesDiskHeader status. Here it indicates it is member of Group.
  
kfdhdb.dskname:                   DATA ; 0x028: length=4
  
--> This indicatesDisk Name
  
kfdhdb.grpname:                   DATA ; 0x048: length=4
  
--> This indicates theGroupName for the disk.
  
kfdhdb.fgname:                  DATA ; 0x068: length=4
  
--> This indicatestheFailure Group Name.
  使用BBED 命令查看disk header 参考:
  Oracle 使用BBED 查看 ASMDisk Header 内容
  http://blog.csdn.net/tianlesoftware/article/details/6739369
  二. 使用DD 命令进行asmdisk 备份与恢复
  2.1 DD 备份需要多少个bytes?
  我们通过KFED命令可以查看到最后一个bytes的信息:
  kfdhdb.acdb.ub2spare:                0 ; 0x1de: 0x0000
  这里的0x1de 转成十进制是478.即这个disk header 占用了478个bytes。 但是我们用dd 备份disk header需要备份4096个bytes,即4k。 为什么是4k?
  这是受隐含参数控制的:_asm_blksize=4096。 即一个block的大小。
  可以通过all_parameters 视图查看该隐含参数的值:
  Oracle all_parameters 视图
  http://blog.csdn.net/tianlesoftware/article/details/6641281
  SYS@anqing2(rac2)> select name,valuefrom all_parameters where name='_asm_blksize';
NAME       VALUE  
------------------------------------------------
  
_asm_blksize    4096
  在disk header 中某些状态位和效验位是会发生变化,但是基本信息是固定的。 使用这些固定信息就可以进行恢复。
  还有一个重要的一点:dd 备份最好停机做,kfed 可以在线做。
  2.2如何清理ASMDisk
  有时候一个ASM Disk由于故障,导致我们删也删不掉,加也加不进去,通常现象是磁盘的headerstatus状态不正确但是diskheader中仍然保留了部分磁盘组的信息。此时我们就需要clear这个磁盘的diskheader,然后再将它重新加入磁盘组中。
  清理操作的命令如下:
  ddif= of= bs=4096 count=1            dd if=/dev/zeroof= bs=4096 count=1
  强调一点:慎用该命令。
  2.3 开始DD 备份
  SYS@anqing2(rac2)> select name,path fromv$asm_disk;
NAME            PATH  
-------------------------------------------------------------------------------
  
DATA            /dev/mapper/datap1
  
FRA_0000      /dev/mapper/frap1
  $ dd if=/dev/mapper/datap1 of=/u01/datap1header bs=4096 count=1
1+0 records in  
1+0 records out
  
4096 bytes (4.1 kB) copied, 0.000122762seconds, 33.4 MB/s
  $ dd if=/dev/mapper/frap1 of=/u01/fraheader bs=4096 count=1;
1+0 records in  
1+0 records out
  
4096 bytes (4.1 kB) copied, 0.000325073seconds, 12.6 MB/s
  2.4 停掉ASM 实例
  SYS@anqing2(rac2)> select name,state,type from v$asm_diskgroup;
NAME            STATE       TYPE  
--------------- ----------- ------
  
DATA            CONNECTED   EXTERN
  
FRA             CONNECTED   EXTERN
  $ sh crs_stat.sh
Name                           Target   State   Host  
------------------------------ --------------------------
  
ora.anqing.anqing1.inst      ONLINE   ONLINE    rac1
  
ora.anqing.anqing2.inst      ONLINE   ONLINE    rac2
  
ora.anqing.db                  ONLINE   ONLINE    rac1
  
ora.rac1.ASM1.asm            ONLINE   ONLINE    rac1
  
ora.rac1.LISTENER_RAC1.lsnr    ONLINE    ONLINE   rac1
  
ora.rac1.gsd                   ONLINE   ONLINE    rac1
  
ora.rac1.ons                   ONLINE   ONLINE    rac1
  
ora.rac1.vip                   ONLINE   ONLINE    rac1
  
ora.rac2.ASM2.asm            ONLINE   ONLINE    rac2
  
ora.rac2.LISTENER_RAC2.lsnr    ONLINE    ONLINE   rac2
  
ora.rac2.gsd                   ONLINE   ONLINE    rac2
  
ora.rac2.ons                   ONLINE   ONLINE    rac2
  
ora.rac2.vip                   ONLINE   ONLINE    rac2
  $ srvctl stop database -danqing
  $ sh crs_stat.sh
Name                           Target   State   Host  
------------------------------ --------------------------
  
ora.anqing.anqing1.inst      OFFLINE    OFFLINE
  
ora.anqing.anqing2.inst      OFFLINE    OFFLINE
  
ora.anqing.db                  OFFLINE    OFFLINE
  
ora.rac1.ASM1.asm            ONLINE   ONLINE    rac1
  
ora.rac1.LISTENER_RAC1.lsnr    ONLINE    ONLINE   rac1
  
ora.rac1.gsd                   ONLINE   ONLINE    rac1
  
ora.rac1.ons                   ONLINE   ONLINE    rac1
  
ora.rac1.vip                   ONLINE   ONLINE    rac1
  
ora.rac2.ASM2.asm            ONLINE   ONLINE    rac2
  
ora.rac2.LISTENER_RAC2.lsnr    ONLINE    ONLINE   rac2
  
ora.rac2.gsd                   ONLINE   ONLINE    rac2
  
ora.rac2.ons                   ONLINE   ONLINE    rac2
  
ora.rac2.vip                   ONLINE   ONLINE    rac2
  $ srvctl stop asm -n rac1
  $ srvctl stop asm -n rac2
  $ sh crs_stat.sh
Name                           Target   State   Host  
------------------------------ --------------------------
  
ora.anqing.anqing1.inst      OFFLINE    OFFLINE
  
ora.anqing.anqing2.inst      OFFLINE    OFFLINE
  
ora.anqing.db                  OFFLINE    OFFLINE
  
ora.rac1.ASM1.asm            OFFLINE    OFFLINE
  
ora.rac1.LISTENER_RAC1.lsnr    ONLINE    ONLINE   rac1
  
ora.rac1.gsd                   ONLINE   ONLINE    rac1
  
ora.rac1.ons                   ONLINE   ONLINE    rac1
  
ora.rac1.vip                   ONLINE   ONLINE    rac1
  
ora.rac2.ASM2.asm            OFFLINE    OFFLINE
  
ora.rac2.LISTENER_RAC2.lsnr    ONLINE    ONLINE   rac2
  
ora.rac2.gsd                   ONLINE   ONLINE    rac2
  
ora.rac2.ons                   ONLINE   ONLINE    rac2
  
ora.rac2.vip                   ONLINE   ONLINE    rac2
  2.5 模拟diskheader 故障
  使用2.2中的方法。
  $ dd if=/dev/zero of=/dev/mapper/datap1 bs=4096 count=1
  1+0 records in
  1+0 records out
  4096 bytes (4.1 kB) copied, 0.00558218seconds, 734 kB/s
  2.6 用KFED 查看此时的diskheader
  $ kfed read /dev/mapper/datap1
kfbh.endian:                        0 ; 0x000: 0x00  
kfbh.hard:                            0 ; 0x001: 0x00
  
kfbh.type:                            0 ; 0x002:KFBTYP_INVALID
  
kfbh.datfmt:                        0 ; 0x003: 0x00
  
kfbh.block.blk:                     0 ; 0x004: T=0 NUMB=0x0
  
kfbh.block.obj:                     0 ; 0x008: TYPE=0x0NUMB=0x0
  
kfbh.check:                           0 ; 0x00c:0x00000000
  
kfbh.fcn.base:                        0 ; 0x010: 0x00000000
  
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
  
kfbh.spare1:                        0 ; 0x018: 0x00000000
  
kfbh.spare2:                        0 ; 0x01c: 0x00000000
  2.7 启动ASM 实例
  $ export ORACLE_SID=+ASM2
$ sqlplus / as sysdba;  
SQL*Plus: Release 10.2.0.4.0 - Productionon Thu Sep 1 16:35:06 2011
  
Copyright (c) 1982, 2007, Oracle.All Rights Reserved.
  
Connected to an idle instance.
  
SQL> startup
  
ASM instance started
  

  
Total System Global Area   92274688 bytes
  
Fixed Size                  1265960 bytes
  
Variable Size            65842904 bytes
  
ASM Cache                  25165824 bytes

  ORA-15032: not all>  ORA-15063: ASM discoveredan insufficient number of disks for diskgroup "DATA"
  这里提示DATAdiskgroup 不能mout,ASM 实例不能启动
  2.8 用之前的备份恢复
  $ dd if=/u01/datap1header of=/dev/mapper/datap1 bs=4096 count=1
  1+0 records in
  1+0 records out
  4096 bytes (4.1 kB) copied, 0.00666105seconds, 615 kB/s
  2.9 用KFED 验证diskheader
  $ kfed read /dev/mapper/datap1
kfbh.endian:                        1 ; 0x000: 0x01  
kfbh.hard:                        130 ; 0x001: 0x82
  
kfbh.type:                            1 ; 0x002:KFBTYP_DISKHEAD
  
kfbh.datfmt:                        1 ; 0x003: 0x01
  
kfbh.block.blk:                     0 ; 0x004: T=0 NUMB=0x0
  
kfbh.block.obj:            2147483648 ; 0x008: TYPE=0x8NUMB=0x0
  
kfbh.check:                  1508168608 ; 0x00c:0x59e4d3a0
  
kfbh.fcn.base:                        0 ; 0x010: 0x00000000
  
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
  
kfbh.spare1:                        0 ; 0x018: 0x00000000
  
kfbh.spare2:                        0 ; 0x01c: 0x00000000
  
....
  现在恢复正常!
  2.10 将Data diskgroup mount 上去
SYS@+ASM2(rac2)> select name,state,typefrom v$asm_diskgroup;  
NAME                           STATE       TYPE
  
------------------------------ -----------------
  
DATA                           DISMOUNTED
  
FRA                            MOUNTED   EXTERN
  

  
SYS@+ASM2(rac2)> alter diskgroup DATAmount;
  
Diskgroup altered.
  

  
SYS@+ASM2(rac2)> select name,state,typefrom v$asm_diskgroup;
  
NAME                           STATE       TYPE
  
------------------------------ -----------------
  
DATA                           MOUNTED   EXTERN
  
FRA                           MOUNTED   EXTERN
  mout 成功,现在RAC 可以正常启动了。
  $ sh crs_stat.sh
Name                           Target   State   Host  
------------------------------ --------------------------
  
ora.anqing.anqing1.inst      ONLINE    ONLINE   rac1
  
ora.anqing.anqing2.inst      ONLINE   ONLINE    rac2
  
ora.anqing.db                  ONLINE   ONLINE    rac2
  
ora.rac1.ASM1.asm            ONLINE   ONLINE    rac1
  
ora.rac1.LISTENER_RAC1.lsnr    ONLINE    ONLINE   rac1
  
ora.rac1.gsd                   ONLINE   ONLINE    rac1
  
ora.rac1.ons                   ONLINE   ONLINE    rac1
  
ora.rac1.vip                   ONLINE   ONLINE    rac1
  
ora.rac2.ASM2.asm            ONLINE    ONLINE   rac2
  
ora.rac2.LISTENER_RAC2.lsnr    ONLINE    ONLINE   rac2
  
ora.rac2.gsd                   ONLINE   ONLINE    rac2
  
ora.rac2.ons                   ONLINE   ONLINE    rac2
  
ora.rac2.vip                   ONLINE    ONLINE   rac2
  --未完,待续!


页: [1]
查看完整版本: Oracle 学习之--ASM DISK Header的备份和恢复(1)