ASM更换磁盘名称


今天他们要测试IBM的那个SVC存储同步的东西,然后需要把服务器上的盘都踢出去后再加进来,不过这样的话磁盘名称就会变了。因此需要把ASM中的磁盘名称都换了,其实过程也很简单:

1、修改asm实例的asm磁盘默认查找路径参数asm_diskstring,使用如下命令:

alter system set asm_diskstring='/dev/rhdisk*';

2、关闭整个Cluster,等待他们踢盘加盘后再修改如下属性,我的是RAC环境所以一下操作要在所有节点上执行

修改磁盘用户及属组:

[rac11g2@root]# chown grid:asmadmin /dev/rhdisk[2-4]

修改磁盘属性为660:

[rac11g2@root]# chmod 660 /dev/rhdisk[2-4]

修改磁盘共享属性:

[rac11g2@root]# lsattr -El hdisk2|grep reserve_policy
reserve_policy  no_reserve                                          Reserve Policy                          True

[rac11g2@root]# chdev -l hdisk2 -a reserve_policy=no_reserve
[rac11g2@root]# chdev -l hdisk3 -a reserve_policy=no_reserve
[rac11g2@root]# chdev -l hdisk4 -a reserve_policy=no_reserve

3、现在就可以启动Cluster了

[rac11g1@root]# crsctl start cluster -all


注:我曾经因为忘了修改磁盘属性为660,结果导致Database起不来,在Alert日志中出现了ORA-00600的错误,吓我一跳,不过从日志中比较容易看出来是权限的问题,调整磁盘属性后再重启就可以了:

Sweep [inc][393409]: completed
Sweep [inc2][393409]: completed
NOTE: Loaded library: System 
ORA-15025: could not open disk "/dev/rhdisk4"
ORA-27041: unable to open file
IBM AIX RISC System/6000 Error: 13: Permission denied
Additional information: 11
SUCCESS: diskgroup DATA was mounted
Errors in file /soft/Oracle/diag/rdbms/nint/nint1/trace/nint1_ckpt_19136654.trc  (incident=409793):
ORA-00600: internal error code, arguments: [kfioTranslateIO03], [], [], [], [], [], [], [], [], [], [], []
Incident details in: /soft/oracle/diag/rdbms/nint/nint1/incident/incdir_409793/nint1_ckpt_19136654_i409793.trc
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
NOTE: dependency between database nint and diskgroup resource ora.DATA.dg is established
ERROR: unrecoverable error ORA-600 raised in ASM I/O path; terminating process 19136654 
Dumping diagnostic data in directory=[cdmp_20120302172201], requested by (instance=1, osid=19136654 (CKPT)), summary=[incident=409793].
Fri Mar 02 17:22:01 2012
PMON (ospid: 14156014): terminating the instance due to error 469
System state dump requested by (instance=1, osid=14156014 (PMON)), summary=[abnormal instance termination].
System State dumped to trace file /soft/oracle/diag/rdbms/nint/nint1/trace/nint1_diag_21168306.trc
Fri Mar 02 17:22:02 2012
ORA-1092 : opitsk aborting process
Fri Mar 02 17:22:02 2012
License high water mark = 1
Instance terminated by PMON, pid = 14156014
USER (ospid: 15335672): terminating the instance
Instance terminated by USER, pid = 15335672

【摘录】

First, you can try to check the OS drive ownership , permission and reserve_policy attribute on all nodes. Then restart the ASM instance.
  1)Make sure that the hdisk# is owned by the OS user who installed the ASM Oracle Home ... and that the disk is mounted correctly (with the correct owner) 
  2)Make sure that the permissions are set correctly at the disk level ... 660 is normal ... but if there are problems use 777 as a test 
  ls -l /dev/rhdisk3 output:
  For 10gR2/11gR1 like:  crw-rw----  oracle:oinstall /dev/rhdisk3 
  For 11gR2 like:        crw-rw----  grid:asmadmin /dev/rhdisk3


  How to change the drive ownership and permission ?
  For 10gR2/11gR1:
    # chown -R oracle:oinstall /dev/rhdisk[3-10]
    # chmod -R 660 /dev/rhdisk[3-10]
  For 11gR2:
    # chown -R grid:asmadmin /dev/rhdisk[3-10]
    # chmod -R 660 /dev/rhdisk[3-10]


  3)Make sure that the reserve_policy attribute of the needed hdisk# is no_reserve or no on all nodes.
    chdev -l hdisk# -a reserve_policy=no_reserve






If it also fail by the first step, you may try to set the Oracle ASM parameter ASM_DISKSTRING to /dev/* or /dev/rhdisk*. The Step is:
1)Backup the ASM instance pfile(Parameter File) or spfile (Server Parameter File).
  Most in the $ORACLE_HOME/dbs. pfile name like is init+ASM1.ora, you can use cp command to backup it .and vi the content. 
  You to create spfile to pfile for backup,if use spfile. 
2)set ASM_DISKSTRING parameter
  use pfile ENV:
    Add or Edit "ASM_DISKSTRING" line to *.ASM_DISKSTRING='/dev/rhdisk*' in pfile. Startup the ASM instance using the pfile.
  
  use spfile ENV:
    $ ORACLE_SID=+ASM1;export ORACLE_SID
    
    $ sqlplus "/ as sysdba"
    or
    $ sqlplus "/ as sysasm"
    
    SQL> startup
    SQL> alter system set asm_diskstring='/dev/rhdisk*';
    SQL> select group_number,disk_number,path from v$asm_disk; 
        --You can get some disk info and the most disk's group_number  is not 0.




If ASM_DISKSTRING is NOT SET ... then the following default is used


    Default ASM_DISKSTRING per OS


    Operating System Default            Search String
    =======================================
    Solaris (32/64 bit)                        /dev/rdsk/*
    Windows NT/XP                          \\.\orcldisk* 
    Linux (32/64 bit)                          /dev/raw/* 


    LINUX (ASMLIB)                         ORCL:*
    LINUX (ASMLIB)                         /dev/oracleasm/disks/* ( as a workaround )


    HPUX                                       /dev/rdsk/* 
    HP-UX(Tru 64)                            /dev/rdisk/*
    AIX                                            /dev/*

相关内容