现在的位置: 首页 > 综合 > 正文

Oracle RAC ASM disk header 备份 恢复 与 重建 示例说明

2013年10月08日 ⁄ 综合 ⁄ 共 9006字 ⁄ 字号 评论关闭

一.
准备知识

       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/xujinyang/article/details/6822308

 

Oracle
ASM 详解

http://blog.csdn.net/xujinyang/article/details/6837288

 

官网的说明:

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 <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 a 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/xujinyang/article/details/6822822

 

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

SYS@+ASM2(rac2)>  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/xujinyang/article/details/6822822

       中的第八小节。

 

我们也可以通过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 命令来验证一下这个:

 

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

[oracle@rac2 ~]$ asmcmd

ASMCMD> ls

DATA/

FRA/

ASMCMD> cd DATA

ASMCMD> ls

ANQING/

抱歉!评论已关闭.