阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle ASM spfile in a disk group

121次阅读
没有评论

共计 9313 个字符,预计需要花费 24 分钟才能阅读完成。

从 ASM 11.2 开始,ASM spfile 可以被存储在 ASM 磁盘组中。的确,在新 ASM 安装时,OUI 会将 ASM spfile 存储在磁盘组中。这对于 Oracle Restart(单实例环境)与 RAC 环境是一样的。在安装时第一个创建的磁盘组就是存储 spfile 的缺省位置,但这不是必须的。spfile 仍然可以存储在文件系统中,比如 $ORACLE_HOME/dbs 目录。

ASMCMD 命令的新功能
 为了支持这个功能,ASMCMD 增加了新的命令来备份,复制与迁移 ASM spfile。这些命令是:
 .spbackup: 将一个 ASM spfile 备份到一个备份文件中。这个备份文件不是一种特定文件类型并且不会被标识为一个 spfile。

.spcopy: 将一个 ASM spfile 文件从原目录复制到目标目录中

.spmove: 将一个 ASM spfile 文件从原目录迁移到目标目录中并且自动更新 GPnP profile。

SQL 命令 create pfile from spfile 与 create spfile from pfile 对于存储在磁盘组中的 ASM spfile 仍然有效。

存储在磁盘组中的 ASM spfile
在我的环境中,ASM spfile 存储在磁盘组 crsdg 中
[grid@jyrac1 trace]$ asmcmd find –type ASMPARAMETERFILE +CRSDG “*”
+CRSDG/jyrac-cluster/asmparameterfile/REGISTRY.253.928747387

从上面的结果可以看到,ASM spfile 存储在特定的目录中,并且它的 ASM 文件号为 253,ASM spfile 以一个注册文件存储在磁盘组中,并且它的 ASM 元数据文件号总是 253

可以使用 sqlplus 来查看
SQL> show parameter spfile

NAME                                TYPE                  VALUE
———————————— ———————- ——————————
spfile                              string                +CRSDG/jyrac-cluster/asmparame
                                                            terfile/REGISTRY.253.928747387

备份 ASM spfile 文件
[grid@jyrac1 trace]$ asmcmd spbackup +CRSDG/jyrac-cluster/asmparameterfile/REGISTRY.253.928747387 /home/grid/asmspfile.backup

查看备份 ASM spfile 文件的内容
[grid@jyrac1 ~]$ strings asmspfile.backup
+ASM1.__oracle_base=’/u01/app/grid’#ORACLE_BASE set from in memory value
+ASM2.asm_diskgroups=’ARCHDG’,’DATADG’#Manual Dismount
+ASM1.asm_diskgroups=’ARCHDG’,’DATADG’,’ACFS’#Manual Mount
*.asm_power_limit=1
*.diagnostic_dest=’/u01/app/grid’
*.instance_type=’asm’
*.large_pool_size=12M
*.remote_login_passwordfile=’EXCLUSIVE’

可以看到这是 ASM spfile 的一个副本,它包含了参数与相关注释

ASM spfile 查找顺序
 因为 ASM 实例在启动时需要读取 spfile 文件,如果 spfile 所在磁盘组不能 mount,那么 ASM 不仅不知道 spfile 存储在那个磁盘组,而且也不知道 ASM spfile 查找字符串的值。当 Oracle ASM 实例搜索一个初始化参数文件时,它的搜索顺序为:
1. 在 Grid Plug and Play(GPnp) profile 中指定的初始化参数文件目录
2. 如果在 GPnP profile 中没有指定,那么搜索顺序将变为:
2.1.Oracle ASM 实例 home 目录中的 spfile(比如:$ORACLE_HOME/dbs/spfile+ASM.ora)
 2.2.Oracle ASM 实例 home 目录中的 pfile

这里并没有告诉关于 ASM 查找顺序字符串的任何信息,但至少告诉我们了 spfile 与 GPnp profile。下面是来自 Exadata 环境中的值:
[root@jyrac2 ~]# find / -name profile.xml
/u01/app/product/11.2.0/crs/gpnp/jyrac2/profiles/peer/profile.xml
/u01/app/product/11.2.0/crs/gpnp/profiles/peer/profile.xml
[grid@jyrac2 peer]$ gpnptool getpval -p=profile.xml -?

Oracle GPnP Tool
    getpval  Get value(s) from GPnP Profile
Usage:
 “gpnptool getpval “, where switches are:
    -prf                  Profile Tag: , optional
    -[id:]prf_cn          Profile Tag: “>, optional
    -[id:]prf_pa          Profile Tag: “>, optional
    -[id:]prf_sq          Profile Tag: “>, optional
    -[id:]prf_cid        Profile Tag: “>, optional
    -[pid:]nets          Profile Tag:  children of , optional
    -[pid:]haip          Profile Tag:  children of , optional
    -[id:]haip_ma        Profile Tag: “>, optional
    -[id:]haip_bm        Profile Tag: “>, optional
    -[id:]haip_s          Profile Tag: “>, optional
    -[pid:]hnet          Profile Tag:  children of , optional
    -[id:]hnet_nm        Profile Tag: “>, optional
    -[pid:]net            Profile Tag:  children of , optional
    -[id:]net_ip          Profile Tag: “>, optional
    -[id:]net_use        Profile Tag: “>, optional
    -[id:]net_nt          Profile Tag: “>, optional
    -[id:]net_aip        Profile Tag: “>, optional
    -[id:]net_ada        Profile Tag: “>, optional
    -[pid:]asm            Profile Tag:  children of , optional
    -[id:]asm_dis        Profile Tag: “>, optional
    -[id:]asm_spf        Profile Tag: “>, optional
    -[id:]asm_uid        Profile Tag: “>, optional
    -[pid:]css            Profile Tag:  children of , optional
    -[id:]css_dis        Profile Tag: “>, optional
    -[id:]css_ld          Profile Tag: “>, optional
    -[id:]css_cin        Profile Tag: “>, optional
    -[id:]css_cuv        Profile Tag: “>, optional
    -[pid:]ocr            Profile Tag:  children of , optional
    -[id:]ocr_oid        Profile Tag: “>, optional
    -rmws                Remove whitespace from xml, optional
    -fmt[=0,2]            Format profile. Value is ident level,step, optional
    -p[=profile.xml]      GPnP profile name
    -o[=gpnptool.out]    Output result to a file, optional
    -o-                  Output result to stdout
    -ovr                  Overwrite output file, if exists, optional
    -t[=3]                Trace level (min..max=0..7), optional
    -f=              Command file name, optional
    -?                    Print verb help and exit

[grid@jyrac2 peer]$ gpnptool getpval -p=profile.xml -asm_dis -o-

[grid@jyrac2 peer]$ gpnptool getpval -p=profile.xml -asm_spf -o-
+CRSDG/jyrac-cluster/asmparameterfile/spfileasm.ora

 

在单实例环境中没有 GPnP profile,因此为了支持在磁盘组中存储 ASM spfile
[grid@jyrac1 ~]$ crsctl stat res ora.asm -p | egrep “ASM_DISKSTRING|SPFILE”
ASM_DISKSTRING=
SPFILE=+DATA/ASM/ASMPARAMETERFILE/registry.253.822856169

现在知道 ASM 在什么目录查找 ASM 磁盘与 spfile。但磁盘组不能被 mount,ASM 实例没有启动时,ASM 如何读取 spfile 呢,答案就在 ASM 磁盘头中。为了支持在磁盘组中存储 ASM spfile,在 ASM 磁盘头中增加了两个字段:
 .kfdhdb.spfile:ASM spfile 的 AU 号
.kfdhdb.spfflg:ASM spfile 标记,如果为 1,ASM spfile 将存储在 kfdhdb.spfile 所指示的 AU 中。

作为磁盘发现操作的一部分,ASM 实例将读取磁盘头并查找 spfile 信息。一旦它查找到磁盘存储了 spfile,它将可以读取真实的初始化参数。

下面先来检查我环境中的磁盘组 CRSDG 的状态与冗余类型
[grid@jyrac1 ~]$ asmcmd lsdg -g CRSDG  | cut -c1-26
Inst_ID  State    Type   
      1  MOUNTED  EXTERN 
      2  MOUNTED  EXTERN 

磁盘组 CRSDG 被 mount 并且磁盘组为外部冗余。这意味着 ASM spfile 不会有镜像副本,因此我们只能看到一个磁盘有 kfdhdb.spfile 与 fkdhdb.spfflg 字段。例如:
[grid@jyrac1 ~]$ asmcmd lsdsk -G CRSDG –suppressheader
/dev/raw/raw1
/dev/raw/raw8
[grid@jyrac1 ~]$ kfed read /dev/raw/raw1 | grep spf
kfdhdb.spfile:                        0 ; 0x0f4: 0x00000000
kfdhdb.spfflg:                        0 ; 0x0f8: 0x00000000
[grid@jyrac1 ~]$ kfed read /dev/raw/raw8 | grep spf
kfdhdb.spfile:                      30 ; 0x0f4: 0x0000001e
kfdhdb.spfflg:                        1 ; 0x0f8: 0x00000001

SQL> select group_number,disk_number, name,path from v$asm_disk where group_number=2;

GROUP_NUMBER DISK_NUMBER NAME                                                        PATH
———— ———– ———————————————————— ————————————————–
          2          1 CRSDG_0001                                                  /dev/raw/raw8
          2          0 CRSDG_0000                                                  /dev/raw/raw1

可以看到只有一个磁盘上存储了 ASM spfile 文件

使用 kfed 工具来查看磁盘 /dev/raw/raw8 上的 30 号 AU 所存储的内容
[grid@jyrac1 ~]$ dd if=/dev/raw/raw8 bs=1048576 skip=30 count=1 | strings
+ASM1.__oracle_base=’/u01/app/grid’#ORACLE_BASE set from in memory value
+ASM2.asm_diskgroups=’ARCHDG’,’DATADG’#Manual Dismount
+ASM1.asm_diskgroups=’ARCHDG’,’DATADG’,’ACFS’#Manual Mount
*.asm_power_limit=1
*.diagnostic_dest=’/u01/app/grid’
*.instance_type=’asm’
*.large_pool_size=12M
*.remote_login_passwordfile=’EXCLUSIVE’
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.035288 seconds, 29.7 MB/s
KeMQ
jyrac-cluster/asmparameterfile/spfileasm.ora

磁盘 /dev/raw/raw8 上的 30 号 AU 的确是存储的 ASM spfile 内容

ASM spfile 别名块
 新的 ASM 磁盘头有一个额外的字段,它的元数据块类型为 KFBTYP_ASMSPFALS,它用来描述 ASM spfile 别名。ASM spfile 别名存储在 ASM spfile 所在 AU 的最后一个块中。下面来查看磁盘 /dev/raw/raw8 上的 30 号 AU 的最一个块 255:
[grid@jyrac1 ~]$ kfed read /dev/raw/raw8 aun=30 blkn=255
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                          27 ; 0x002: KFBTYP_ASMSPFALS
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                    255 ; 0x004: blk=255
kfbh.block.obj:                    253 ; 0x008: file=253
kfbh.check:                  1364026699 ; 0x00c: 0x514d654b
kfbh.fcn.base:                        0 ; 0x010: 0x00000000
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfspbals.incarn:              928747387 ; 0x000: 0x375b8f7b
kfspbals.blksz:                    512 ; 0x004: 0x00000200
kfspbals.size:                        3 ; 0x008: 0x0003
kfspbals.path.len:                  44 ; 0x00a: 0x002c
kfspbals.path.buf:                      ; 0x00c: length=0

这个元数据块不大,大多数的条目都是块头信息 (字段 kfbh.*)。实际上 ASM spfile 别名数据(字段 kfspbals.*) 只有几个条目。spfile 文件的 incarnation 为 928747387 是文件名 (REGISTRY.253.928747387) 的一部分,ASM spfile 的块大小 512 bytes 并且文件大小为 3 个块。path 信息为空,意味着没有真实的 ASM spfile 别名。

下面将创建 ASM spfile 别名,先使用现有的 spfile 来创建 pfile,再使用 pfile 来创建 spfile 别名:
[grid@jyrac1 ~]$sqlplus / as sysasm

SQL> create pfile=’/tmp/pfile+ASM.ora’ from spfile;

File created.

SQL> shutdown abort;
ASM instance shutdown

SQL> startup pfile=’/tmp/pfile+ASM.ora’;
ASM instance started

Total System Global Area 1135747072 bytes
Fixed Size                  2297344 bytes
Variable Size            1108283904 bytes
ASM Cache                  25165824 bytes
ASM diskgroups mounted

SQL> create spfile=’+CRSDG/jyrac-cluster/asmparameterfile/spfileasm.ora’ from pfile=’/tmp/pfile+ASM.ora’;

File created.

SQL> exit

再次使用 asmcmd 查看 ASM spfile 将会发现存在两个条目
[grid@jyrac1 trace]$ asmcmd find –type ASMPARAMETERFILE +CRSDG “*”
+CRSDG/jyrac-cluster/asmparameterfile/REGISTRY.253.928747387
+CRSDG/jyrac-cluster/asmparameterfile/spfileasm.ora

现在可以看到 ASM spfile 本身 (REGISTRY.253.928747387) 与它的别名或链接文件 (spfileasm.ora)。查看 spfileasm.ora 可以看到它确实是注册文件(REGISTRY.253.928747387) 的别名
[grid@jyrac1 ~]$ asmcmd ls -l +CRSDG/jyrac-cluster/asmparameterfile/
Type              Redund  Striped  Time            Sys  Name
ASMPARAMETERFILE  UNPROT  COARSE  JAN 12 16:00:00  Y    REGISTRY.253.928745345
                                                    N    spfileasm.ora => +CRSDG/jyrac-cluster/asmparameterfile/REGISTRY.253.928745345

下面再次查看磁盘 /dev/raw/raw8 上的 30 号 AU 的最一个块 255:
[grid@jyrac1 ~]$ kfed read /dev/raw/raw8 aun=30 blkn=255
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                          27 ; 0x002: KFBTYP_ASMSPFALS
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                    255 ; 0x004: blk=255
kfbh.block.obj:                    253 ; 0x008: file=253
kfbh.check:                  1364026699 ; 0x00c: 0x514d654b
kfbh.fcn.base:                        0 ; 0x010: 0x00000000
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfspbals.incarn:              928745345 ; 0x000: 0x375b8f7b
kfspbals.blksz:                    512 ; 0x004: 0x00000200
kfspbals.size:                        3 ; 0x008: 0x0003
kfspbals.path.len:                  44 ; 0x00a: 0x002c
kfspbals.path.buf:jyrac-cluster/asmparameterfile/spfileasm.ora ; 0x00c: length=44

现在可以看到别名文件名出现在 ASM spfile 别名块中。并且出现了新的 incarnation 号来表示新的 ASM spfile 文件的创建时间。

小结:
从 ASM 11.2 开始,ASM spfile 可以被存储在 ASM 磁盘组中。为了支持这个功能,ASMCMD 增加了相关命令来进行管理,并且在 ASM 磁盘头中增加了新的 ASM 元数据结构。

更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-01/139604.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计9313字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中