Oracle ASM Renaming Disks Groups

renamedg工具可以用来改变一个磁盘组的名称。在对磁盘组执行renamedg之前,磁盘组必须在所有节点中dismounted。renamedg工具重命名磁盘组由两个阶段组成:
1.步骤一会生成一个配置文件供步骤二使用
2.步骤二会使用步骤一生成的配置文件来重命名磁盘组

renamedg的语法如下:

[grid@jyrac1 ~]$ renamedg -help
NOTE: No asm libraries found in the system

Parsing parameters..
phase                           Phase to execute, 
                                (phase=ONE|TWO|BOTH), default BOTH

dgname                          Diskgroup to be renamed

newdgname                       New name for the diskgroup

config                          intermediate config file

check                           just check-do not perform actual operation,
                                (check=TRUE/FALSE), default FALSE

confirm                         confirm before committing changes to disks,
                                (confirm=TRUE/FALSE), default FALSE

clean                           ignore errors,
                                (clean=TRUE/FALSE), default TRUE

asm_diskstring                  ASM Diskstring (asm_diskstring='discoverystring',
                                'discoverystring1' ...)

verbose                         verbose execution, 
                                (verbose=TRUE|FALSE), default FALSE

keep_voting_files               Voting file attribute, 
                                (keep_voting_files=TRUE|FALSE), default FALSE


phase=(ONE|TWO|BOTH):指定被执行的阶段。它的取值为one,two或both。这个参数是一个可选参数,它的缺省值为both。通过使用both。如果在第二个阶段出现问题,那么可以使用生成的配

置文件来重新执行two(第二个)阶段。

dgname=diskgroup:指定要被重新命名的磁盘组

newdgname=newdiskgroup:指定新磁盘组名

config=configfile:指定在第一阶段所生成的的配置文件路径或在第二阶段所使用的配置文件路径。这个参数是一个可选参数。缺省的配置文件名为renamedg_config并且它存储在执行

renamedg命令的目录中。在有些平台上配置文件可能需要使用单引号。

asm_diskstring=discoverystring,discoverystrig…:指定Oracle ASM发现字符串。如果Oracle ASM磁盘不是在操作系统的缺省位置,就必须指定asm_diskstring参数。在有些平台上配置文件可能需要使用单引号,当指定通配符时通常需要使用单引号。

clean=(true|false):指定是否容忍错误,否则将会忽略。缺省值是true。

check=(true|false):指定一个boolean值将用在第二阶段。如果为true,那么renamedg工具将打印对磁盘所使用的改变信息列表。没有写操作被执行,这是一个可选参数,缺省值为false。

confirm=(true|false):指定一个boolean值将
用在第二阶段。如果为false,那么renamedg工具将打印所执行的改变并且在实际执行改变之前进行确认。这是一个可选参数,缺省值为false。

如果check参数被设置为true,那么这个参数值是多余的。

verbose=(true|false):当verbose=true时指定verbose执行。缺省值为false。

keep_voting_files=(true|false):指定voting文件是否被保留在被重命名的磁盘组中。它的缺省值为false,它将从被重命名的磁盘组中删除voting文件。

renamedg工具不会更新集群资源,也不会更新数据库所使用的任何文件路径。因为这个原因,在完成第二阶段操作之后,原来的磁盘组资源不会自动删除。旧磁盘组资源的状态可以通过Oracle Clusterware Control(crsctl)的crsctl stat res -t命令来进行检查,并且然后使用Server Control Utility(srvctl)的srvctl remove diskgroup命令来进行删除。

下面将使用两个例子来演示renamedg工具的使用方法
1.将创建一个test磁盘组,并将test磁盘组使用带有asm_diskstring,verbose参数的renamedg命令重命名为new_test磁盘组。

SQL> create diskgroup test normal redundancy disk '/dev/raw/raw12','/dev/raw/raw13';

Diskgroup created.

SQL> select group_number,name from v$asm_diskgroup;

GROUP_NUMBER NAME
------------ ------------------------------
           1 ACFS
           2 ARCHDG
           3 CRSDG
           4 DATADG
           5 TEST

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

GROUP_NUMBER DISK_NUMBER NAME                           PATH
------------ ----------- ------------------------------ ------------------------------
           0           3                                /dev/raw/raw14
           1           2 ACFS_0002                      /dev/raw/raw7
           5           1 TEST_0001                      /dev/raw/raw13
           5           0 TEST_0000                      /dev/raw/raw12
           4           0 DATADG_0001                    /dev/raw/raw11
           1           0 ACFS_0000                      /dev/raw/raw5
           4           3 DATADG_0000                    /dev/raw/raw10
           2           1 ARCHDG_0001                    /dev/raw/raw9
           3           1 CRSDG_0001                     /dev/raw/raw8
           1           1 ACFS_0001                      /dev/raw/raw6
           2           0 ARCHDG_0000                    /dev/raw/raw2
           4           1 DATADG_0003                    /dev/raw/raw4
           4           2 DATADG_0002                    /dev/raw/raw3
           3           0 CRSDG_0000                     /dev/raw/raw1

14 rows selected.

在两节点上将磁盘组test执行dismout

SQL> alter diskgroup test dismount;

Diskgroup altered.

SQL> alter diskgroup test dismount;

Diskgroup altered.

将磁盘组test重命名为new_test

[grid@jyrac1 ~]$ renamedg  phase=both dgname=test newdgname=new_test asm_diskstring='/dev/raw/raw*' verbose=true
NOTE: No asm libraries found in the system

Parsing parameters..

Parameters in effect:

         Old DG name       : TEST 
         New DG name          : NEW_TEST 
         Phases               :
                 Phase 1
                 Phase 2
         Discovery str        : (null) 
         Clean              : TRUE
         Raw only           : TRUE
renamedg operation: phase=both dgname=test newdgname=new_test asm_diskstring='/dev/raw/raw*' verbose=true
Executing phase 1
Discovering the group
Performing discovery with string:
Identified disk UFS:/dev/raw/raw12 with disk number:0 and timestamp (33048873 -682272768)
Identified disk UFS:/dev/raw/raw13 with disk number:1 and timestamp (33048873 -682272768)
Checking for hearbeat...
Re-discovering the group
Performing discovery with string:
Identified disk UFS:/dev/raw/raw12 with disk number:0 and timestamp (33048873 -682272768)
Identified disk UFS:/dev/raw/raw13 with disk number:1 and timestamp (33048873 -682272768)
Checking if the diskgroup is mounted or used by CSS 
Checking disk number:0
Checking disk number:1
Generating configuration file..
Completed phase 1
Executing phase 2
Looking for /dev/raw/raw12
Modifying the header
Looking for /dev/raw/raw13
Modifying the header
Completed phase 2
Terminating kgfd context 0x2b0307e120a0

检查生成的配置文件

[grid@jyrac1 ~]$ ls -lrt
total 58
-rw-r--r-- 1 grid oinstall       58 Feb  9 10:04 renamedg_config
[grid@jyrac1 ~]$ cat renamedg_config
/dev/raw/raw12 TEST NEW_TEST
/dev/raw/raw13 TEST NEW_TEST

在两节点上将命名为new_test的磁盘组执行mount操作

SQL> alter diskgroup new_test mount;

Diskgroup altered.


SQL> alter diskgroup new_test mount;

Diskgroup altered.


ASMCMD> lsdg
State    Type    Rebal  Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Voting_files  Name
MOUNTED  NORMAL  N         512   4096  1048576     15360     8763             5120            1821              0             N  ACFS/
MOUNTED  NORMAL  N         512   4096  1048576     10240     2152                0            1076              0             N  ARCHDG/
MOUNTED  EXTERN  N         512   4096  1048576     10240     9842                0            9842              0             Y  CRSDG/
MOUNTED  NORMAL  N         512   4096  1048576     20480    12419             5120            3649              0             N  DATADG/
MOUNTED  NORMAL  N         512   4096  1048576     10240    10054                0            5027              0             N  NEW_TEST/

检查资源状态信息,可以看到原来的磁盘组test还存在,但处于offline状态,需要使用srvctl remove diskgroup命令将其删除

[grid@jyrac1 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ACFS.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.ARCHDG.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.CRSDG.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.DATADG.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.LISTENER.lsnr
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.NEW_TEST.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.TEST.dg
               OFFLINE OFFLINE      jyrac1                                       
               OFFLINE OFFLINE      jyrac2                                       
ora.asm
               ONLINE  ONLINE       jyrac1                   Started             
               ONLINE  ONLINE       jyrac2                   Started             
ora.gsd
               OFFLINE OFFLINE      jyrac1                                       
               OFFLINE OFFLINE      jyrac2                                       
ora.net1.network
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.ons
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.registry.acfs
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       jyrac1                                       
ora.LISTENER_SCAN2.lsnr
      1        ONLINE  ONLINE       jyrac2                                       
ora.LISTENER_SCAN3.lsnr
      1        ONLINE  ONLINE       jyrac2                                       
ora.cvu
      1        ONLINE  ONLINE       jyrac2                                       
ora.jyrac.db
      1        ONLINE  ONLINE       jyrac1                   Open                
      2        ONLINE  ONLINE       jyrac2                   Open                
ora.jyrac1.vip
      1        ONLINE  ONLINE       jyrac1                                       
ora.jyrac2.vip
      1        ONLINE  ONLINE       jyrac2                                       
ora.oc4j
      1        ONLINE  ONLINE       jyrac2                                       
ora.scan1.vip
      1        ONLINE  ONLINE       jyrac1                                       
ora.scan2.vip
      1        ONLINE  ONLINE       jyrac2                                       
ora.scan3.vip
      1        ONLINE  ONLINE       jyrac2                       

使用srvctl remove diskgroup命令将资源ora.TEST.dg(磁盘组test)删除

[grid@jyrac1 ~]$ srvctl remove diskgroup -g test

再次检查资源状态信息,可以看到原来的磁盘组test不存在了。

[grid@jyrac1 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ACFS.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.ARCHDG.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.CRSDG.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.DATADG.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.LISTENER.lsnr
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.NEW_TEST.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.asm
               ONLINE  ONLINE       jyrac1                   Started             
               ONLINE  ONLINE       jyrac2                   Started             
ora.gsd
               OFFLINE OFFLINE      jyrac1                                       
               OFFLINE OFFLINE      jyrac2                                       
ora.net1.network
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.ons
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.registry.acfs
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       jyrac1                                       
ora.LISTENER_SCAN2.lsnr
      1        ONLINE  ONLINE       jyrac2                                       
ora.LISTENER_SCAN3.lsnr
      1        ONLINE  ONLINE       jyrac2                                       
ora.cvu
      1        ONLINE  ONLINE       jyrac2                                       
ora.jyrac.db
      1        ONLINE  ONLINE       jyrac1                   Open                
      2        ONLINE  ONLINE       jyrac2                   Open                
ora.jyrac1.vip
      1        ONLINE  ONLINE       jyrac1                                       
ora.jyrac2.vip
      1        ONLINE  ONLINE       jyrac2                                       
ora.oc4j
      1        ONLINE  ONLINE       jyrac2                                       
ora.scan1.vip
      1        ONLINE  ONLINE       jyrac1                                       
ora.scan2.vip
      1        ONLINE  ONLINE       jyrac2                                       
ora.scan3.vip
      1        ONLINE  ONLINE       jyrac2           

2.下面的例子将new_test磁盘组使用带有asm_diskstring,verbose参数的renamedg命令分两个阶段操作重命名为test磁盘组。

只生成第二阶段操作需要的配置文件

[grid@jyrac1 ~]$ renamedg phase=one dgname=new_test newdgname=test asm_diskstring='/dev/raw/raw*' config=/home/grid/new_test.conf verbose=true
NOTE: No asm libraries found in the system

Parsing parameters..

Parameters in effect:

         Old DG name       : NEW_TEST 
         New DG name          : TEST 
         Phases               :
                 Phase 1
         Discovery str        : /dev/raw/raw* 
         Clean              : TRUE
         Raw only           : TRUE
renamedg operation: phase=one dgname=new_test newdgname=test asm_diskstring=/dev/raw/raw* config=/home/grid/new_test.conf verbose=true
Executing phase 1
Discovering the group
Performing discovery with string:/dev/raw/raw*
Identified disk UFS:/dev/raw/raw12 with disk number:0 and timestamp (33048873 -682272768)
Identified disk UFS:/dev/raw/raw13 with disk number:1 and timestamp (33048873 -682272768)
Checking for hearbeat...
Re-discovering the group
Performing discovery with string:/dev/raw/raw*
Identified disk UFS:/dev/raw/raw12 with disk number:0 and timestamp (33048873 -682272768)
Identified disk UFS:/dev/raw/raw13 with disk number:1 and timestamp (33048873 -682272768)
Checking if the diskgroup is mounted or used by CSS 
Checking disk number:0
KFNDG-00405: file not found; arguments: [NEW_TEST]

出现了KFNDG-00405错误,这是因为在执行renamedg操作之前忘记了将磁盘组new_test在所有节点上执行dismount

在两节点上将磁盘组new_test执地dismount

SQL> alter diskgroup new_test dismount;

Diskgroup altered.


SQL> alter diskgroup new_test dismount;

Diskgroup altered.

Terminating kgfd context 0x2b34496f80a0
[grid@jyrac1 ~]$ renamedg phase=one dgname=new_test newdgname=test asm_diskstring='/dev/raw/raw*' config=/home/grid/new_test.conf verbose=true
NOTE: No asm libraries found in the system

Parsing parameters..

Parameters in effect:

         Old DG name       : NEW_TEST 
         New DG name          : TEST 
         Phases               :
                 Phase 1
         Discovery str        : /dev/raw/raw* 
         Clean              : TRUE
         Raw only           : TRUE
renamedg operation: phase=one dgname=new_test newdgname=test asm_diskstring=/dev/raw/raw* config=/home/grid/new_test.conf verbose=true
Executing phase 1
Discovering the group
Performing discovery with string:/dev/raw/raw*
Identified disk UFS:/dev/raw/raw12 with disk number:0 and timestamp (33048873 -682272768)
Identified disk UFS:/dev/raw/raw13 with disk number:1 and timestamp (33048873 -682272768)
Checking for hearbeat...
Re-discovering the group
Performing discovery with string:/dev/raw/raw*
Identified disk UFS:/dev/raw/raw12 with disk number:0 and timestamp (33048873 -682272768)
Identified disk UFS:/dev/raw/raw13 with disk number:1 and timestamp (33048873 -682272768)
Checking if the diskgroup is mounted or used by CSS 
Checking disk number:0
Checking disk number:1
Generating configuration file..
Completed phase 1
Terminating kgfd context 0x2b1c202a80a0

执行重命名磁盘组的第二阶段操作

[grid@jyrac1 ~]$ renamedg phase=two dgname=new_test newdgname=test config=/home/grid/new_test.conf verbose=true
NOTE: No asm libraries found in the system

Parsing parameters..

Parameters in effect:

         Old DG name       : NEW_TEST 
         New DG name          : TEST 
         Phases               :
                 Phase 2
         Discovery str        : (null) 
         Clean              : TRUE
         Raw only           : TRUE
renamedg operation: phase=two dgname=new_test newdgname=test config=/home/grid/new_test.conf verbose=true
Executing phase 2
Looking for /dev/raw/raw12
Modifying the header
Looking for /dev/raw/raw13
Modifying the header
Completed phase 2
Terminating kgfd context 0x2b8da14950a0

检查磁盘组new_test是否成功被重命名为test

SQL> select group_number,name from v$asm_diskgroup;

GROUP_NUMBER NAME
------------ ------------------------------
           1 ACFS
           2 ARCHDG
           3 CRSDG
           4 DATADG
           0 TEST

在两节点上将磁盘组test执行mount操作

SQL> alter diskgroup test mount;

Diskgroup altered.


SQL> alter diskgroup test mount;

Diskgroup altered.

ASMCMD> lsdg
State    Type    Rebal  Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Voting_files  Name
MOUNTED  NORMAL  N         512   4096  1048576     15360     8763             5120            1821              0             N  ACFS/
MOUNTED  NORMAL  N         512   4096  1048576     10240     1958                0             979              0             N  ARCHDG/
MOUNTED  EXTERN  N         512   4096  1048576     10240     9842                0            9842              0             Y  CRSDG/
MOUNTED  NORMAL  N         512   4096  1048576     20480    12419             5120            3649              0             N  DATADG/
MOUNTED  NORMAL  N         512   4096  1048576     10240    10054                0            5027              0             N  TEST/

检查资源状态信息,可以看到原磁盘组new_test还存在,但为offline状态,重命名后的磁盘组test状态为online

                              
[grid@jyrac1 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ACFS.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.ARCHDG.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.CRSDG.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.DATADG.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.LISTENER.lsnr
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.NEW_TEST.dg
               OFFLINE OFFLINE      jyrac1                                       
               OFFLINE OFFLINE      jyrac2                                       
ora.TEST.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.asm
               ONLINE  ONLINE       jyrac1                   Started             
               ONLINE  ONLINE       jyrac2                   Started             
ora.gsd
               OFFLINE OFFLINE      jyrac1                                       
               OFFLINE OFFLINE      jyrac2                                       
ora.net1.network
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.ons
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.registry.acfs
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       jyrac1                                       
ora.LISTENER_SCAN2.lsnr
      1        ONLINE  ONLINE       jyrac2                                       
ora.LISTENER_SCAN3.lsnr
      1        ONLINE  ONLINE       jyrac2                                       
ora.cvu
      1        ONLINE  ONLINE       jyrac2                                       
ora.jyrac.db
      1        ONLINE  ONLINE       jyrac1                   Open                
      2        ONLINE  ONLINE       jyrac2                   Open                
ora.jyrac1.vip
      1        ONLINE  ONLINE       jyrac1                                       
ora.jyrac2.vip
      1        ONLINE  ONLINE       jyrac2                                       
ora.oc4j
      1        ONLINE  ONLINE       jyrac2                                       
ora.scan1.vip
      1        ONLINE  ONLINE       jyrac1                                       
ora.scan2.vip
      1        ONLINE  ONLINE       jyrac2                                       
ora.scan3.vip
      1        ONLINE  ONLINE       jyrac2                  

将原来的磁盘组new_test从资源信息中删除

[grid@jyrac1 ~]$ srvctl remove diskgroup -g new_test

再将检查资源状态信息,可以看到原磁盘组new_test不存在了

[grid@jyrac1 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ACFS.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.ARCHDG.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.CRSDG.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.DATADG.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.LISTENER.lsnr
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.TEST.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.asm
               ONLINE  ONLINE       jyrac1                   Started             
               ONLINE  ONLINE       jyrac2                   Started             
ora.gsd
               OFFLINE OFFLINE      jyrac1                                       
               OFFLINE OFFLINE      jyrac2                                       
ora.net1.network
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.ons
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.registry.acfs
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       jyrac1                                       
ora.LISTENER_SCAN2.lsnr
      1        ONLINE  ONLINE       jyrac2                                       
ora.LISTENER_SCAN3.lsnr
      1        ONLINE  ONLINE       jyrac2                                       
ora.cvu
      1        ONLINE  ONLINE       jyrac2                                       
ora.jyrac.db
      1        ONLINE  ONLINE       jyrac1                   Open                
      2        ONLINE  ONLINE       jyrac2                   Open                
ora.jyrac1.vip
      1        ONLINE  ONLINE       jyrac1                                       
ora.jyrac2.vip
      1        ONLINE  ONLINE       jyrac2                                       
ora.oc4j
      1        ONLINE  ONLINE       jyrac2                                       
ora.scan1.vip
      1        ONLINE  ONLINE       jyrac1                                       
ora.scan2.vip
      1        ONLINE  ONLINE       jyrac2                                       
ora.scan3.vip
      1        ONLINE  ONLINE       jyrac2                        

Oracle Find block in ASM

为了更容易的从ASM定位与抽取Oracle数据文件,可以创建一个Perl脚本find_block.pl来自动进行处理,只需要提供数据文件名与块号。脚本find_block.pl是一个Perl脚本,它由dd或kfed命令组成。它可以与所有的Linux和Unix ASM版本与单实例的ASM或RAC环境中使用。

这个脚本必须以ASM/Grid Infrastructure用户来执行,在RAC环境中,脚本可以在任何一个节点上执行,在运行脚本之前,设置ASM环境变量并且确保ORACLE_SID,ORACLE_HOME,LD_LIBRARY_PATH等等设置正确。对于ASM 10g与11gr1来说,也可以设置环境变量PERL5LIB,比如:

export PERL5LIB=$ORACLE_HOME/perl/lib/5.8.3:$ORACLE_HOME/perl/lib/site_perl

运行脚本例子如下:

$ORACLE_HOME/perl/bin/perl find_block.pl filename block

命令中的filename是指要抽取的数据块所在文件的文件名。对于数据文件,文件名可以通过在数据库实例上执行select name from v$datafile来获得。block是要从ASM中抽取数据块的块号

输出结果类似如:

dd if=[ASM disk path] ... of=block_N.dd

或Exadata中的

kfed read dev=[ASM disk path] ... > block_N.txt

如果磁盘组是外部冗余,这个脚本将生成单个命令。对于normal冗余磁盘组文件来说,这个脚本将生成两个命令,对于high冗余磁盘组文件来说,这个脚本将生成三个命令。

下面将对于oracle 10g rac来通过find_block.pl脚来从ASM中抽取数据块

SQL> select name from v$tablespace;

NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
USERS
TEMP
EXAMPLE
UNDOTBS2
YB
TEST

9 rows selected.

SQL> create table t1 (name varchar2(16)) tablespace TEST;

Table created.

SQL> insert into t1 values ('CAT');

1 row created.

SQL> insert into t1 values ('DOG');

1 row created.

SQL> commit;

Commit complete.

SQL> select rowid,name from t1;

ROWID              NAME
------------------ ----------------
AAAN8qAAIAAAAAUAAA CAT
AAAN8qAAIAAAAAUAAB DOG

SQL> select dbms_rowid.rowid_block_number('AAAN8qAAIAAAAAUAAA') "block" from dual;

     block
----------
        20

SQL> select t.name "Tablespace", f.name "Datafile" from v$tablespace t, v$datafile f where t.ts#=f.ts# and t.name='TEST';

Tablespace                     Datafile
------------------------------ --------------------------------------------------
TEST                           +DATADG/test/datafile/test.269.930512093

切换到ASM环境,设置PERL5LIB,运行脚本

[oracle@jyrac3 bin]$ export ORACLE_SID=+ASM1
[oracle@jyrac3 bin]$ export PERL5LIB=$ORACLE_HOME/perl/lib/5.8.3:$ORACLE_HOME/perl/lib/site_perl

[oracle@jyrac3 bin]$ $ORACLE_HOME/perl/bin/perl find_block.pl +DATADG/test/datafile/test.269.930512093 20
dd if=/dev/raw/raw3 bs=8192 count=1 skip=266260 of=block_20.dd
dd if=/dev/raw/raw4 bs=8192 count=1 skip=266260 of=block_20.dd

从上面的输出可以看到指定的文件是normal冗余,脚本生成了两个dd命令,下面我们来运行:

[root@jyrac3 ~]# dd if=/dev/raw/raw3 bs=8192 count=1 skip=266260 of=block_20.dd
1+0 records in
1+0 records out
8192 bytes (8.2 kB) copied, 0.00608323 seconds, 1.3 MB/s

下面查看block_20.dd文件的内容,使用od工具,我们可以看到插入表中的数据:

[root@jyrac3 ~]# od -c block_20.dd | tail -3
0017740   S   O   R   T   =   '   B   I   N   A   R   Y   '  \b   , 001
0017760 001 003   D   O   G   , 001 001 003   C   A   T 001 006  \r 203
0020000

可以看到DOG与CAT

Example with ASM version 12.1.0.1 in Exadata
在Exadata中,不可以使用dd命令来抽取数据块,因为磁盘对数据库服务器不可见。为了得到数据库的数据块,可以使用kfed工具,因为find_block.pl将由kfed命令组成。


$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on [date]

SQL> alter pluggable database BR_PDB open;

Pluggable database altered.

SQL> show pdbs

CON_ID CON_NAME OPEN MODE   RESTRICTED
------ -------- ----------- ----------
       2 PDB$SEED READ ONLY   NO
...
       5 BR_PDB   READ WRITE  NO

SQL>

$ sqlplus bane/welcome1@BR_PDB

SQL*Plus: Release 12.1.0.1.0 Production on [date]

SQL> create table TAB1 (n number, name varchar2(16)) tablespace USERS;

Table created.

SQL> insert into TAB1 values (1, 'CAT');

1 row created.

SQL> insert into TAB1 values (2, 'DOG');

1 row created.

SQL> commit;

Commit complete.

SQL> select t.name "Tablespace", f.name "Datafile"
from v$tablespace t, v$datafile f
where t.ts#=f.ts# and t.name='USERS';

Tablespace Datafile
---------- ---------------------------------------------
USERS      +DATA/CDB/054.../DATAFILE/users.588.860861901

SQL> select ROWID, NAME from TAB1;

ROWID              NAME
------------------ ----
AAAWYEABfAAAACDAAA CAT
AAAWYEABfAAAACDAAB DOG

SQL> select DBMS_ROWID.ROWID_BLOCK_NUMBER('AAAWYEABfAAAACDAAA') "Block number" from dual;

Block number
------------
       131

SQL>

切换到ASM环境执行脚本

$ $ORACLE_HOME/perl/bin/perl find_block.pl +DATA/CDB/0548068A10AB14DEE053E273BB0A46D1/DATAFILE/users.588.860861901 131
kfed read dev=o/192.168.1.9/DATA_CD_03_exacelmel05 ausz=4194304 aunum=16212 blksz=8192 blknum=131 | grep -iv ^kf > block_131.txt
kfed read dev=o/192.168.1.11/DATA_CD_09_exacelmel07 ausz=4194304 aunum=16267 blksz=8192 blknum=131 | grep -iv ^kf > block_131.txt

注意find_block.pl将生成两个脚本,数据文件是normal冗余,执行以下命令:

$ kfed read dev=o/192.168.1.9/DATA_CD_03_exacelmel05 ausz=4194304 aunum=16212 blksz=8192 blknum=131 | grep -iv ^kf > block_131.txt
$

检查block_131文件的内容,可以看到DOG与CAT

$ more block_131.txt
...
FD5106080 00000000 00000000 ...  [................]
      Repeat 501 times
FD5107FE0 00000000 00000000 ...  [........,......D]
FD5107FF0 012C474F 02C10202 ...  [OG,......CAT..,-]
$

Find any block
find_block.pl脚本可以用来从存储在ASM中的任何文件抽取数据块。执行下面的命令来抽取控制文件与随机数据块

$ $ORACLE_HOME/perl/bin/perl find_block.pl +DATA/CDB/CONTROLFILE/current.289.843047837 5
kfed read dev=o/192.168.1.9/DATA_CD_10_exacelmel05 ausz=4194304 aunum=73 blksz=16384 blknum=5 | grep -iv ^kf > block_5.txt
kfed read dev=o/192.168.1.11/DATA_CD_01_exacelmel07 ausz=4194304 aunum=66 blksz=16384 blknum=5 | grep -iv ^kf > block_5.txt
kfed read dev=o/192.168.1.10/DATA_CD_04_exacelmel06 ausz=4194304 aunum=78 blksz=16384 blknum=5 | grep -iv ^kf > block_5.txt
$

可以看到脚本显示了正确的控制文件块大小(16K),并且生成三个不同的命令。当磁盘组data是normal冗余磁盘组时,控制文件会为high冗余(ASM中控制文件缺省为冗余)。

小结:
find_block.pl是perl脚本,它由dd或kfed命令组成用来从ASM中的文件中抽取数据块。在大多数情况下我们想要从数据文件中抽取数据块,但脚本也能从控制文件,重做日志或任何其它文件中抽取数据块。

如果文件存储在外部冗余磁盘组中,那么脚本将会生成单个命令,这可以用来从ASM磁盘中抽取数据块。

如果文件存储在normal冗余磁盘组,那么脚本将会生成两个命令,它们用来从两个不同的ASM磁盘来抽取数据块(相同副本)。

如果文件存储在high冗余磁盘组,那么脚本将会生成三个命令。

Oracle ASM REQUIRED_MIRROR_FREE_MB

REQUIRED_MIRROR_FREE_MB与USABLE_FILE_MB是V$ASM_DISKGROUP[_STAT]视图中两个非常有意义的列。关于这两个字段有很多问题与及如何计算它们。

How much space can I use
ASM不能阻止你使用外部冗余磁盘组的所有可用空间,normal冗余磁盘组总空间的一半,high冗余磁盘组总空间的三分之一。但如果你想填满磁盘组直到溢出,使它没有足够空间来增长或增加任何文件,在磁盘故障情况下,直到故障磁盘被替换与rebalance操作完成之前,将没有空间来还原一些数据的冗余.

11gr2 ASM in Exadata
在Exadata ASM 11gr2中,required_mirror_free_mb作为磁盘组中的最大故障组的大小被显示。下面是Exadata中的11.2.0.4 ASM的例子进行说明。

[grid@exadb01 ~]$ sqlplus / as sysasm

SQL*Plus: Release 11.2.0.4.0 Production on [date]

SQL> select NAME, GROUP_NUMBER from v$asm_diskgroup_stat;

NAME      GROUP_NUMBER
--------- ------------
DATA                 1
DBFS_DG              2
RECO                 3

SQL>

下面将查看磁盘组DBFS_DG。正常来说对于磁盘组DBFS_DG的每个故障组有10块磁盘。为了说明REQUIRED_MIRROR_FREE_MB对于最大故障组所显示的大小删除了几块磁盘。

SQL> select FAILGROUP, count(NAME) "Disks", sum(TOTAL_MB) "MB"
from v$asm_disk_stat
where GROUP_NUMBER=2
group by FAILGROUP
order by 3;

FAILGROUP       Disks         MB
---------- ---------- ----------
EXACELL04           7     180096
EXACELL01           8     205824
EXACELL02           9     231552
EXACELL03          10     257280

SQL>

可以看到最大故障组中的总空间大小为257280MB。

最后我们来查看最大故障组的required_mirror_free_mb大小

SQL> select NAME, TOTAL_MB, FREE_MB, REQUIRED_MIRROR_FREE_MB, USABLE_FILE_MB
from v$asm_diskgroup_stat
where GROUP_NUMBER=2;

NAME         TOTAL_MB    FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB
---------- ---------- ---------- ----------------------- --------------
DBFS_DG        874752     801420                  257280         272070

ASM计算USABLE_FILE_MB使用以下公式:

USABLE_FILE_MB=(FREE_MB-REQUIRED_MIRROR_FREE_MB)/2
              =(801420-257280)/2=544140/2=272070 

Exadata with ASM version 12cR1
在使用ASM 12cr1的exadata中,required_mirror_free_mb作为磁盘组中最大的大小被显示

[grid@exadb03 ~]$ sqlplus / as sysasm

SQL*Plus: Release 12.1.0.2.0 Production on [date]

SQL> select NAME, GROUP_NUMBER from v$asm_diskgroup_stat;

NAME     GROUP_NUMBER
-------- ------------
DATA                1
DBFS_DG             2
RECO                3

SQL> select FAILGROUP, count(NAME) "Disks", sum(TOTAL_MB) "MB"
from v$asm_disk_stat
where GROUP_NUMBER=2
group by FAILGROUP
order by 3;

FAILGROUP       Disks         MB
---------- ---------- ----------
EXACELL05           8     238592
EXACELL07           9     268416
EXACELL06          10     298240

最大故障组中的总空间为298240MB,但这时required_mirror_free_mb显示的大小为29824MB。

SQL> select NAME, TOTAL_MB, FREE_MB, REQUIRED_MIRROR_FREE_MB, USABLE_FILE_MB
from v$asm_diskgroup_stat
where GROUP_NUMBER=2;  2    3

NAME         TOTAL_MB    FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB
---------- ---------- ---------- ----------------------- --------------
DBFS_DG        805248     781764                   29824         375970

下面查看磁盘组中最大磁盘的大小

SQL> select max(TOTAL_MB) from v$asm_disk_stat where GROUP_NUMBER=2;

MAX(TOTAL_MB)
-------------
        29824

ASM计算usable_file_mb的公式如下:

USABLE_FILE_MB = (FREE_MB - REQUIRED_MIRROR_FREE_MB) / 2
               =(781764-29824)/2=375970

小结:
required_mirror_free_mb与usable_file_mb用来帮助dba与存储管理员来规划磁盘组容量与冗余。这只是一个报告,ASM并不执行。在ASM为12cr1的exadata中,required_mirror_free_mb的大小就是磁盘组中最大磁盘的大小。通过这种设计,从这个字段就能反映出实践经验,它显示了磁盘出现故障,而不是整个存储单元。

Oracle ASM Disk Group Attributes

磁盘组属性是在ASM 11.1中引入的,它们属于磁盘组,不是属于ASM实例。有一些属性只能在磁盘组创建时设置,有一些只能在磁盘组创建之后设置,而有些属性可以在任何时候设置。

ACCESS_CONTROL.ENABLED
这个属性决定了对磁盘组是否启用ASM文件访问控制。它的参数值可以设置为TRUE或FALSE(缺省值)。如果属性被设置为TRUE,访问ASM文件受制于访问控制。如果为FALSE,任何用户都可以访问磁盘组中的文件。所有其它操作不依赖这个属性。这个属性只能在执行修改磁盘组时才能设置。

ACCESS_CONTROL.UMASK
这个属性决定了那些权限掩盖了创建ASM文件的所有者,组与用户组中的其它信息。这个属性应用于磁盘组中的所有文件。这个属性值可以是三个数字的组合 {0|2|6} {0|2|6} {0|2|6},缺省值是066。设置为’0’表示不掩盖任何信息。设置为’2’掩盖写权限,设置为’6’掩盖读写权限。在设置ACCESS_CONTROL.UMASK磁盘组属性之前,ACCESS_CONTROL.ENABLED必须被设置为TRUE。

AU_SIZE
这个属性控制着AU大小并且只能在创建磁盘组时进行设置。每个磁盘组可以有不同的AU大小。

CELL.SMART_SCAN_CAPABLE[Exadata]
这个属性在exadata中对storage cells中的grid disks创建磁盘组时使用。它能对存储在磁盘组中的对象启用smart scan功能。

COMPATIBLE.ASM
磁盘组的compatible.asm属性决定了可以使用这些磁盘组的ASM实例的最低软件版本。这个设置也会影响ASM元数据结构的格式。compatible.asm的缺省值为10.1,当使用create diskgroup语句时,ASMCMD的mkdg命令与EM的Create Disk Group page时会使用。当使用ASMCA创建磁盘组时,在ASM 11gr2中它的缺省值为11.2,在ASM 12c中它的缺省值为12.1。

COMPATIBLE.RDBMS
这个属性决定了使用磁盘组的任何数据库实例的compatible参数的最小值。在推进compatible.rdbms属性之前,确保访问磁盘组的所有数据库的compatible参数被设置为新的compatible.rdbms所允许的最小值。

COMPATIBLE.ADVM
这个属性值决定了是否磁盘组可以创建ASM卷。这个属性必须设置为11.2或更高版本。在设置这个属性之前,compatible.asm值必须被设置为11.2或更高版本,ADVM卷驱动必须被加载到所支持的环境中。缺省情况下,compatible.advm属性为空。

CONTENT.CHECK[12c]
当对磁盘组执行rebalance时,这个属性决定了是否启用或禁用内容检查。这个属性可以设置为TRUE或FALSE。内容检查包括对用户数据的硬件辅助弹性数据(HARD)检查,验证文件目录中的文件类型,文件目录信息与镜像比较。当这个属性设置为TRUE时,会对所有rebalance操作执行内容检查。内容检查也可以当作磁盘清除功能。

CONTENT.TYPE[11.2.0.3,Exadata]
这个属性标识磁盘组类型,它可以是DATA,RECOVERY或SYSTEM。它决定了最近的伙伴磁盘/故障磁盘组的距离。缺省值是DATA,它指定了距离为1,RECOVERY指定距离为3,SYSTEM指定距离为5。距离为1,意味着ASM会将所有磁盘考虑为伙伴关系。距离为3意味着每3个磁盘将被考虑为伙伴关系,距离为5意味着每5个磁盘将考虑为伙伴关系。

这个属性可以在创建或修改磁盘组时可以设置。如果content.type属性被设置或使用alter diskgroup被改变,新的配置直到磁盘组rebalance显式完成之前不会生效。

content.type属性只对normal与high冗余磁盘组有效。compatible.asm属性必须被设置为11.2.0.3或更高版本来启用content.type属性。

DISK_REPAIR_TIME
DISK_REPAIR_TIME属性决定了在磁盘删除之前,ASM将其它保持脱机状态的时间。这个属性与快速镜像重新同步功能相关,并且compatible.asm属性必须设置为11.1或更高版本。而且只能在修改磁盘组时才能设置。

FAILGROUP_REPAIR_TIME[12c]
这个属性指定了磁盘组中的故障磁盘组的缺省修复时间。故障磁盘组的修复时间在ASM判断整个故障磁盘组出现故障时会被用到。它的缺省值是24小时。如果对磁盘指定了修复时间,比如执行alter diskgroup offline disk drop after语句,那么磁盘修复时间将会覆盖故障磁盘组的修复时间。

这个属性只能对normal与high冗余磁盘组执行修改时进行设置。

IDP.BOUNDARY and IDP.TYPE[Exadata]
这两个属性被用来配置Exadata存储,并且与智能数据存储功能相关。

PHYS_META_REPLICATED[12c]
这个属性用来跟踪磁盘组的复制状态。当一个磁盘组的ASM的compatible被设置为12.1或更高版本时,每块磁盘的物理元数据会被复制。这些元数据包含磁盘头,可用空间表块与分配表块。复制操作是以联机异步方式执行。这个属性值被设置为true时,磁盘组中的每个磁盘中的物理元数据会被复制。

这个属性只能在compatible.asm被设置为12.1或更高版本才能对磁盘组进行定义。这个属性是只读状态并且用户不能设置或修改它。它的参数值为true或false。

SECTOR_SIZE
这个属性指定磁盘组中磁盘的sector size,并且只能在创建磁盘组时设置。SECTOR_SIZE的值可以是512,4094或4K(提供的磁盘支持这些参数值)。缺省值依赖于平台。compatible.asm与compatible.rdbms属性必须被设置为11.2或更高版本才能将sector size设置为非缺省值。ACFS不支持4KB的sector驱动。

STORAGE.TYPE
这个属性指定了磁盘组中的磁盘类型。它的参数值有:exadata,pillar,zfsas与other。如果属性被设置为exadata|pillar|zfsas,那么磁盘组中的所有磁盘必须是这种类型。如果属性被设置为other,磁盘组中的磁盘的类型可以是任何类型。

如果storage.type磁盘组属性被设置为pillar或zfsas,Hybrid Columnar Compression(HCC)混合列压缩功能可以对磁盘组中的对象启用。Exadata支持HCC。

注意:ZFS存储必须通过Direct NFS(dNFS)提供来使用,Pillar Axiom存储必须通过SCSI或光纤通道接口提供来使用。

为了设置storage.type属性,compatible.asm与compatible.rdbms磁盘组属性必须设置为11.2.0.3或更高版本。为了对ZFS存储提供最大化支持,将compatible.asm与compatible.rdbms磁盘组属性设置为11.2.0.4或更高版本。

storage.type属性可以在创建或修改磁盘组时进行设置。当客户端连接到磁盘组时不能进行设置。例如,当磁盘组使用ADVM卷时,这个属性不能进行设置。

这个属性在v$asm_attribute视图或ASMCMD lsattr命令中直到它被设置之前是不可见的。

THIN_PROVISIONED[12c]
这个属性在磁盘组完成rebalance操作之后用来启用或禁用丢弃没有使用的空间。这个属性值可以设置为true或false(缺省值)

存储厂商产品支持thin provisioning的能力来更用效率的重用丢弃的存储空间

APPLIANCE.MODE[11.2.0.4,Exadatga]
APPLIANCE.MODE属性提供了在删除一个或多个ASM磁盘时,磁盘rebalance完成时间。这意味着在磁盘故障后冗余会被快速还原。当在Exadata中创建新磁盘组时这个属性会自动被启用。现有磁盘组必须使用alter diskgroup命令来显式设置。这个功能叫作固定伙伴。

这个属性在满足以下条件时可以对磁盘组启用:
Oracle ASM磁盘组属性compatible.asm被设置为11.2.0.4或更高版本,CELL.SMART_SCAN_CAPABLE属性被设置为TRUE。磁盘组中的所有磁盘是相同的磁盘类型,比如都是磁盘或闪存磁盘。磁盘组中的所有磁盘是相同大小。磁盘组中的所有故障组有相同磁盘数。磁盘组中没有磁盘脱机。

最小化软件:Oracle Exadata Storage Server Software release 11.2.3.3 运行Oracle Database 11g Release 2(11.2) release 11.2.0.4

注意:这个功能在Oracle Database version 12.1.0.1中不可用。

Hidden disk group attributes

_REBALANCE_COMPACT
这个属性与rebalance的compacting阶段有关。这个属性可以为TRUE(缺省值)或FALSE。将这个属性设置为FALSE,会对磁盘组的rebalance禁用compacting阶段。

_EXTENT_COUNTS
_EXTENT_COUNTS这个属性,与可变区大小有关,它决定了那个区大小将会增加。这个属性的值为”20000 20000 214748367″,这意味着前20000个区大小将是1个AU,接下来的20000区大小将由_extent_sizes属性的第二个值决定,并且剩余的区大小将由_extent_sizes的第三个值决定。

_EXTENT_SIZES
这个属性是与可变区大小有关的第二个隐藏参数,并且它决定了区大小的增长,也就是AU的数量。

在ASM 11.1中,属性值为”1 8 64″。在ASM 11.2与以后版本中,属性值为”1 4 16″。

v$asm_attribute视图与ASMCMD lsattr命令
磁盘组属性可以通过v$asm_attribute视图与asmcmd lsattr命令。

下面是显示磁盘组DATADG属性的一种方法:

[grid@jyrac1 ~]$ asmcmd lsattr -G DATADG -l
Name                     Value       
access_control.enabled   FALSE       
access_control.umask     066         
au_size                  1048576     
cell.smart_scan_capable  FALSE       
compatible.asm           11.2.0.0.0  
compatible.rdbms         11.2.0.0.0  
disk_repair_time         3.6h        
sector_size              512         

磁盘组属性可以通过alter diskgroup set attribute语句,ASMCMD setattr命令与ASMCA来进行修改。下面是使用ASMCMD setattr命令来修改disk_repair_time属性的一个例子:

[grid@jyrac1 ~]$ asmcmd setattr -G DATADG disk_repair_time '4.5 H'

检查新属性:

[grid@jyrac1 ~]$ asmcmd lsattr -G DATADG -l disk_repair_time
Name              Value  
disk_repair_time  4.5 H  

小结:
磁盘组属性,在ASM 11.1中引入,它是优化磁盘组能力的一种很好方式。有些属性是Exadata特定的,有些只能在特定版本中使用。大多数磁盘组属性可以通过v$asm_attribute视图来查看。

查询