今天又有一台单节点的数据库服务器掉电重启后数据库服务没有被带起来,查看了一下发现磁盘组没有启动:
[root@exafuckts ~]# crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.DATA.dg ora....up.type ONLINE OFFLINE
ora....ER.lsnr ora....er.type ONLINE ONLINE exafuckts
ora.asm ora.asm.type ONLINE ONLINE exafuckts
ora.cssd ora.cssd.type ONLINE ONLINE exafuckts
ora.diskmon ora....on.type OFFLINE OFFLINE
ora.evmd ora.evm.type ONLINE ONLINE exafuckts
ora.exats.db ora....se.type ONLINE OFFLINE
ora.fucku.db ora....se.type OFFLINE OFFLINE
ora.ons ora.ons.type OFFLINE OFFLINE
于是尝试手工启动磁盘组,结果报错了:
[root@exafuckts ~]# srvctl start diskgroup -g data
PRCR-1079 : Failed to start resource ora.DATA.dg
CRS-5017: The resource action "ora.DATA.dg start" encountered the following error:
ORA-15032: not all alterations performed
ORA-15017: diskgroup "DATA" cannot be mounted
ORA-15063: ASM discovered an insufficient number of disks for diskgroup "DATA"
. For details refer to "(:CLSN00107:)" in "/soft/product/11.2.0.3/gih/log/exafuckts/agent/ohasd/oraagent_grid/oraagent_grid.log".
CRS-2674: Start of 'ora.DATA.dg' on 'exafuckts' failed
这个问题是指找不到磁盘组中相应的磁盘,和这个错误有关的参数是asm_diskstring,可以查看一下这个参数是否被置空或者是指向不存在的路径。
如,在本例中该参数是被置空的,那怎么处理呢?
1、因为该参数的默认值是/dev/raw/*(Linux平台,AIX的话是/dev/hdisk*),因此你可以把磁盘组的磁盘都link到默认路了。
[grid@exafuckts ~]$ ls -l /dev/raw
total 0
lrwxrwxrwx 1 root root 6 Dec 21 16:13 sdb -> ../sdb
lrwxrwxrwx 1 root root 6 Dec 21 16:13 sdc -> ../sdc
lrwxrwxrwx 1 root root 6 Dec 21 16:13 sdd -> ../sdd
然后再启动asm并mount磁盘组(alter diskgroup xxxxx mount)即可.
2、另外一个方法是修改pfile参数文件,$ORACLE_HOME/dbs/init+ASM.ora,直接修改asm_diskstring参数,如:
*.asm_diskstring='/dev/sd*'
*.asm_power_limit=1
*.diagnostic_dest='/soft/grid'
*.instance_type='asm'
*.large_pool_size=12M
*.remote_login_passwordfile='EXCLUSIVE'
然后以pfile参数启动ASM并mount磁盘组,再重建spfile(create spfile='+DATA' from pfile),最后重启asm是指以spfile启动并使用了指定的asm_diskstring参数。
[root@exafuckts ~]# crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.DATA.dg ora....up.type ONLINE OFFLINE
ora....ER.lsnr ora....er.type ONLINE ONLINE exafuckts
ora.asm ora.asm.type ONLINE ONLINE exafuckts
ora.cssd ora.cssd.type ONLINE ONLINE exafuckts
ora.diskmon ora....on.type OFFLINE OFFLINE
ora.evmd ora.evm.type ONLINE ONLINE exafuckts
ora.exats.db ora....se.type ONLINE OFFLINE
ora.fucku.db ora....se.type OFFLINE OFFLINE
ora.ons ora.ons.type OFFLINE OFFLINE
于是尝试手工启动磁盘组,结果报错了:
[root@exafuckts ~]# srvctl start diskgroup -g data
PRCR-1079 : Failed to start resource ora.DATA.dg
CRS-5017: The resource action "ora.DATA.dg start" encountered the following error:
ORA-15032: not all alterations performed
ORA-15017: diskgroup "DATA" cannot be mounted
ORA-15063: ASM discovered an insufficient number of disks for diskgroup "DATA"
. For details refer to "(:CLSN00107:)" in "/soft/product/11.2.0.3/gih/log/exafuckts/agent/ohasd/oraagent_grid/oraagent_grid.log".
CRS-2674: Start of 'ora.DATA.dg' on 'exafuckts' failed
这个问题是指找不到磁盘组中相应的磁盘,和这个错误有关的参数是asm_diskstring,可以查看一下这个参数是否被置空或者是指向不存在的路径。
如,在本例中该参数是被置空的,那怎么处理呢?
1、因为该参数的默认值是/dev/raw/*(Linux平台,AIX的话是/dev/hdisk*),因此你可以把磁盘组的磁盘都link到默认路了。
[grid@exafuckts ~]$ ls -l /dev/raw
total 0
lrwxrwxrwx 1 root root 6 Dec 21 16:13 sdb -> ../sdb
lrwxrwxrwx 1 root root 6 Dec 21 16:13 sdc -> ../sdc
lrwxrwxrwx 1 root root 6 Dec 21 16:13 sdd -> ../sdd
然后再启动asm并mount磁盘组(alter diskgroup xxxxx mount)即可.
2、另外一个方法是修改pfile参数文件,$ORACLE_HOME/dbs/init+ASM.ora,直接修改asm_diskstring参数,如:
*.asm_diskstring='/dev/sd*'
*.asm_power_limit=1
*.diagnostic_dest='/soft/grid'
*.instance_type='asm'
*.large_pool_size=12M
*.remote_login_passwordfile='EXCLUSIVE'
然后以pfile参数启动ASM并mount磁盘组,再重建spfile(create spfile='+DATA' from pfile),最后重启asm是指以spfile启动并使用了指定的asm_diskstring参数。