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

1
2
3
4
5
6
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
2
3
4
1 )diskgroup metadata: files  with  NUMBER_KFFIL < 256  ASM metadataandASMlog files. These files have high redundancy ( 3  copies)  and  block size=4KB.
      1 )ASM log filesare used  for  ASM instance  and  crash recovery when a crash happens  with  metadataoperations (seebelow COD  and  ACD)
      2 at  diskgroupcreation  6  files withmetadata are visible  from  x$kffil( 2 )disk metadata: disk headers (typically the  first  2  AU ofeach disk)are  not  listed  in  x$kffil (they appear  as  file number  0  in  x$kfdat).Containdisk membership information. This part of the disk has to be  'zeroedout' before  the disk can be added to ASM diskgroup  as  new  disk.
  3 )file metadata:  3  mirrored extents  with  file metadata,visible fromx$kffxp  and  x$kfdat

1.1.2 ASM Disk groups

       Diskgroups 由多个disks 组成,每个disk 就是我们的的一个分区。 ASM disk groups包含的metadata信息就是ASM instance 管理的信息。

       大多数情况只需要创建很少的disk groups,一般是2个groups,很少有3个。

为了保护disks 上的数据,Oracle 对disk groups 有3种冗余方式:

       (1)external redundancy表示Oracle不帮你管理镜像,功能由外部存储系统实现,比如通过RAID技术。       (2)normalredundancy(默认方式)表示Oracle提供2路镜像来保护数据。

       (3)high redundancy表示Oracle提供3路镜像来保护数据。

       如果使用ASM 的冗余,就是通过 ASMfailure group 来实现。ASM使用的镜像算法并不是镜像整个disk,而是作extent级的镜像。所以很明显如果为各个failure group使用不同容量的disk是不明智的,因为这样在Oracle分配下一个extent的时候可能就会出现问题。

       在normal redundancy模式下,ASM环境中每分配一个extent都会有一个primary copy和一个second copy,ASM的算法保证了second copy和primary copy一定是在不同的failure group中,这就是failure group的意义。通过这个算法,ASM保证了即使一个failuregroup中的所有disk都损坏了,数据也是毫发无伤的。

       Oracle在分配extent的时候,所有failure group中的这个将拥有相同数据的extent称为一个extent set,当Oracle将数据写入文件的时候,primary copy可能在任何一个failure group中,而second copy则在另外的failure group中,当Oracle读取数据的时候,除非是primary copy不可用,否则将优先从primary copy中读取数据,通过这种写入无序,读取有序的算法,Oracle保证了数据读取尽量分布在多个disk中。

       因为公用一个硬件模块的磁盘很可能会同时损坏或者失效,所以通常我们在设计failuregroup时,应该把一个大的盘阵中在一个tray中的磁盘放在一个failuregroup中,这样我们就可以拿走一个tray,失效这个failure group,然后换上新的tray和磁盘,这跟RAID的思想是一样的。

       ASM的冗余方式是在创建disk groups时指定的,一经设定就无法更改,如果我们想把normal redundancy改为high redundancy就只能是创建一个新的failure group,然后把旧failure group中的文件通过RMAN或者DBMS_FILE_TRANSFER的方法移动到新failure group中去。

       如果在创建disk groups时,如果没有创建failure groups,即使没有显式指定,failure groups也是始终会创建的。在这种情况下,每个disk都属于一个failure group,在创建磁盘组的时候,failure group也会默认创建,名称就是disk的名字。

在我的blog:

       Oracle ASM 相关的 视图(V$)和 数据字典(X$)

       http://blog.csdn.net/tianlesoftware/article/details/6733039

       里面提到了一些与ASM 相关的视图,可以通过v$asm_diskgroup 来查看groups 的信息。

SYS@+ASM2(rac2)>  desc v$asm_diskgroup

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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;

1
2
3
4
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 组成。

1
2
3
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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;

1
2
3
4
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;

1
2
3
4
5
6
7
8
9
10
  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 命令来验证一下这个:

[oracle@rac2 ~]$ export ORACLE_SID=+ASM2

[oracle@rac2 ~]$ asmcmd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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的查询进一步确认一下:

[oracle@rac2 ~]$ exportORACLE_SID=+ASM2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[oracle@rac2 ~]$ 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;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    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
2
3
4
5
6
7
8
9
10
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 :Stalenessregistry, created when needed to track offline disks

这里的相关术语解释如下:

1
2
3
4
5
6
7
8
9
10
11
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

这里截取部分内容:

[oracle@rac2 ~]$ kfedread /dev/mapper/datap1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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[ 0 ]:   1096040772  0x008 0x41544144
kfdhdb.driver.reserved[ 1 ]:            0  0x00c 0x00000000
kfdhdb.driver.reserved[ 2 ]:            0  0x010 0x00000000
kfdhdb.driver.reserved[ 3 ]:            0  0x014 0x00000000
kfdhdb.driver.reserved[ 4 ]:            0  0x018 0x00000000
kfdhdb.driver.reserved[ 5 ]:            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';

1
2
3
NAME       VALUE
------------------------------------------------
_asm_blksize     4096

       在disk header 中某些状态位和效验位是会发生变化,但是基本信息是固定的。 使用这些固定信息就可以进行恢复。  

 

       还有一个重要的一点:dd 备份最好停机做,kfed 可以在线做。

 

2.2  如何清理ASMDisk

       有时候一个ASM Disk由于故障,导致我们删也删不掉,加也加不进去,通常现象是磁盘的headerstatus状态不正确但是diskheader中仍然保留了部分磁盘组的信息。此时我们就需要clear这个磁盘的diskheader,然后再将它重新加入磁盘组中。

       清理操作的命令如下:

              ddif=<device name> of=<backup file> bs=4096 count=1              dd if=/dev/zeroof=<device name> bs=4096 count=1

       强调一点:慎用该命令。

2.3 开始DD 备份

SYS@anqing2(rac2)> select name,path fromv$asm_disk;

1
2
3
4
NAME            PATH
-------------------------------------------------------------------------------
DATA            /dev/mapper/datap1
FRA_0000        /dev/mapper/frap1

[oracle@rac2 ~]$ dd if=/dev/mapper/datap1 of=/u01/datap1header bs=4096 count=1

1
2
3
1 + 0  records  in
1 + 0  records out
4096  bytes ( 4.1  kB) copied,  0. 000122762seconds,  33.4  MB/s

[oracle@rac2 ~]$ dd if=/dev/mapper/frap1 of=/u01/fraheader bs=4096 count=1;

1
2
3
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; 

1
2
3
4
NAME            STATE       TYPE
--------------- ----------- ------
DATA            CONNECTED   EXTERN
FRA             CONNECTED   EXTERN

[oracle@rac2 u01]$ sh crs_stat.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

[oracle@rac2 u01]$ srvctl stop database -danqing

[oracle@rac2 u01]$ sh crs_stat.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

[oracle@rac2 u01]$ srvctl stop asm -n rac1

[oracle@rac2 u01]$ srvctl stop asm -n rac2

[oracle@rac2 u01]$ sh crs_stat.sh        

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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中的方法。

[oracle@rac2 u01]$ 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

[oracle@rac2 u01]$ kfed read /dev/mapper/datap1

1
2
3
4
5
6
7
8
9
10
11
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 实例

[oracle@rac2 u01]$ export ORACLE_SID=+ASM2

1
2
3
4
5
6
7
8
9
10
11
[oracle@rac2 u01]$ 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 alterations performed

ORA-15063: ASM discoveredan insufficient number of disks for diskgroup "DATA"

这里提示DATAdiskgroup 不能mout,ASM 实例不能启动

2.8 用之前的备份恢复

[oracle@rac2 u01]$ 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

[oracle@rac2 u01]$ kfed read /dev/mapper/datap1

1
2
3
4
5
6
7
8
9
10
11
12
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 上去

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 可以正常启动了。

[oracle@rac2 u01]$ sh crs_stat.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

--未完,待续!










本文转自 客居天涯 51CTO博客,原文链接:http://blog.51cto.com/tiany/1566353,如需转载请自行联系原作者
目录
相关文章
|
8天前
|
Oracle 关系型数据库
oracle asm 磁盘显示offline
oracle asm 磁盘显示offline
17 2
|
5月前
|
Oracle 关系型数据库 数据库
9-2 Oracle数据库(表)的逻辑备份与恢复 --导出与导入
9-2 Oracle数据库(表)的逻辑备份与恢复 --导出与导入
|
1月前
|
存储 Oracle 关系型数据库
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
oracle数据库ASM磁盘组掉线,ASM实例不能挂载。数据库管理员尝试修复数据库,但是没有成功。
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
|
2月前
|
SQL 存储 Oracle
oracle如何定期备份数据库sql文件
【1月更文挑战第7天】oracle如何定期备份数据库sql文件
49 8
|
7月前
|
Oracle 关系型数据库 数据库
通过数据泵expdp、impdp方式备份与还原(导出与导入)Oracle数据库
通过数据泵expdp、impdp方式备份与还原(导出与导入)Oracle数据库
|
10月前
创建asm disk 磁盘组出错! ORA-15018 And ORA-15107 (Doc ID 2678808.1)
ORA-15018: diskgroup cannot be created ORA-15107: missing or invalid ASM disk name
|
10月前
|
Oracle 关系型数据库 内存技术
|
10月前
|
Oracle 关系型数据库 Linux
Oracle自动备份脚本(Linux)
Oracle自动备份脚本(Linux)
84 0
|
SQL Oracle 关系型数据库
Oracle中如何备份控制文件?备份控制文件的方式有哪几种?
Oracle中如何备份控制文件?备份控制文件的方式有哪几种?
242 0
|
SQL Oracle 关系型数据库
Oracle ASM磁盘和磁盘组的常用SQL语句
Oracle ASM磁盘和磁盘组的常用SQL语句
175 0

推荐镜像

更多