10g,11g的asm还是存在一定的差别,在10g中通过dbca可以直接在里面配置asm,到了11g,把asm的功能从dbca里分离开来,单独有一个asmca来配置ASM,而且需要在安装grid包的场景下才可以使用。
问题1: 启用ASM出错。
ASM的配置,如果希望启用,首先需要使用root运行一个脚本,来完成CSS的注册。这个过程和rac中配置CRS的有些类似。
但是使用 localconfig add来注册的时候,日志内容如下:
[root@oel1 bin]# ./localconfig add
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
Configuration for local CSS has been initialized
Adding to inittab
Startup will be queued to init within 30 seconds.
Checking the status of new Oracle init process...
Expecting the CRS daemons to be up within 600 seconds.
Giving up: Oracle CSS stack appears NOT to be running.
Oracle CSS service would not start as installed
Automatic Storage Management(ASM) cannot be used until Oracle CSS service is started
可以看到CSS服务最终没有起来,如果这个时候还是在dbca里面尝试创建ASM实例,就会抛出错误
ORA-29701: unable to connect to Cluster Manager
这个时候分析这个问题,还是需要从CSS相关的配置来考虑,可能是某些文件丢失或者出现了不一致之类的问题。
可以尝试使用localconfig delete删除注册信息,然后使用localconfig reset来重新配置。
./localconfig delete
Stopping CSSD.
Unable to communicate with the CSS daemon.
Shutdown has begun. The daemons should exit soon.
在重新配置的时候,就会很i清楚的看到,其实是有一些文件找不到了,在这套机器上,之前安装过rac的crs软件,可能是有一些文件可能产生冲突。比如/etc/oracle/ocr.loc这个文件,这个文件是在最近使用dbca打开图形界面的时候报出了错误,最后发现是因为ocr.loc这个文件影响的,把这个文件删了之后就没有问题了。没想到在配置ASM的时候也会有一定的影响,不过最终重新配置CSS的时候,会重新去创建ocr.loc这个文件
[root@oel1 bin]# ./localconfig reset
./localconfig: line 529: /etc/oracle/ocr.loc: No such file or directory
./localconfig: line 551: [: too many arguments
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
Configuration for local CSS has been initialized
Adding to inittab
Startup will be queued to init within 30 seconds.
Checking the status of new Oracle init process...
Expecting the CRS daemons to be up within 600 seconds.
CSS is active on these nodes.
oel1
CSS is active on all nodes.
Oracle CSS service is installed and running under init(1M)
重新配置成功后,我们查看CSS的服务,可以看到已经起来了
[root@oel1 bin]# ps -ef|grep css
oracle 26370 1 0 21:30 ? 00:00:00 /u01/app/oracle/product/10.2.0/db_1/bin/ocssd.bin
root 26637 24953 0 21:30 pts/1 00:00:00 grep css
问题2:配置裸设备/取消裸设备配置
接下来,我们需要配置一些裸设备在ASM中使用。
配置裸设备,可以使用如下的脚本,会批量生成多个裸设备
基本思路就是使用dd创建出模拟的文件,然后使用losetup来将文件虚拟为块设备。
然后使用raw来绑定即可。
比如我们创建6个裸设备,脚本如下:
for i in {1..6}
do
dd if=/dev/zero of=asm_disk$i bs=1M count=500
chmod 777 asm_disk$i
losetup /dev/loop$i asm_disk$i
raw /dev/raw/raw$i /dev/loop$i
chown oracle:dba /dev/raw/raw$i
done
运行脚本的时候会发现
[root@oel1 asmdisks]# ksh create_asmdisk.sh
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 1.41319 seconds, 371 MB/s
/dev/raw/raw1: bound to major 7, minor 1
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 1.85704 seconds, 282 MB/s
/dev/raw/raw2: bound to major 7, minor 2
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 4.13632 seconds, 127 MB/s
/dev/raw/raw3: bound to major 7, minor 3
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 2.29498 seconds, 228 MB/s
/dev/raw/raw4: bound to major 7, minor 4
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 1.36017 seconds, 385 MB/s
/dev/raw/raw5: bound to major 7, minor 5
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 2.30878 seconds, 227 MB/s
/dev/raw/raw6: bound to major 7, minor 6
[root@oel1 asmdisks]#
运行完成之后查看裸设备的情况,可以看到6个裸设备都创建好了。
[root@oel1 asmdisks]# raw -qa
/dev/raw/raw1: bound to major 7, minor 1
/dev/raw/raw2: bound to major 7, minor 2
/dev/raw/raw3: bound to major 7, minor 3
/dev/raw/raw4: bound to major 7, minor 4
/dev/raw/raw5: bound to major 7, minor 5
/dev/raw/raw6: bound to major 7, minor 6
[root@oel1 asmdisks]#
当然我们能够创建裸设备,绑定,也可以撤销绑定,删除这些裸设备,
可以使用如下的脚本来完成回滚的操作
>cat rollback*.sh
for i in {1..6}
do
dd if=/dev/zero of=asm_disk$i bs=1M count=200
raw /dev/raw/raw$i 0 0
losetup -d /dev/loop$i
rm asm_disk$i
done
运行脚本的日志如下:
[root@oel1 asmdisks]# ksh rollback.sh
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 0.464948 seconds, 451 MB/s
/dev/raw/raw1: bound to major 0, minor 0
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 0.423312 seconds, 495 MB/s
/dev/raw/raw2: bound to major 0, minor 0
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 0.39266 seconds, 534 MB/s
/dev/raw/raw3: bound to major 0, minor 0
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 0.419405 seconds, 500 MB/s
/dev/raw/raw4: bound to major 0, minor 0
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 0.552266 seconds, 380 MB/s
/dev/raw/raw5: bound to major 0, minor 0
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 0.568867 seconds, 369 MB/s
/dev/raw/raw6: bound to major 0, minor 0
再次查看裸设备的情况,可以看到裸设备都不存在了。
[root@oel1 asmdisks]# raw -qa
[root@oel1 asmdisks]#
问题3:创建磁盘组错误
基本条件都准备好了,我们来尝试创建对应的磁盘组,把这些裸设备都加进来。但是创建磁盘组的时候报出了下面的错误。
对于ORA-15018的问题,其实还是和之前安装过rac有一定的影响。
这个时候查看ASM的实例情况,会发现启动了一个+ASM1的实例,而且属主是orarac这个用户,
[root@oel1 asmdisks]# ps -ef|grep smon
oracle 5848 1 0 20:16 ? 00:00:00 ora_smon_TEST10G
oracle 27195 1 0 21:40 ? 00:00:00 asm_smon_+ASM
orarac 29473 1 0 22:11 ? 00:00:00 asm_smon_+ASM1
root 29608 27674 0 22:14 pts/1 00:00:00 grep smon
因为这套rac已经完全不用了,也没有做卸载,所以有些配置信息还是会有一定的影响,对于这个问题,最后发现是在/etc/oratab的地方已经配置了+ASM1,所以使用dbca的时候会把之前的这个ASM实例启用,但是添加磁盘组的时候又用不了了。
对于这个问题的处理,就是删除/etc/oratab中不需要的ASM配置信息,因为这些配置是之前创建的时候生成的记录,因为一些配置的原因,现在已经完全不使用这个环境,甚至可以完全删除这个用户。
[root@oel1 etc] cat /etc/oratab
+ASM1:/u02/rac/db:N
删除这个配置信息之后,重新运行dbca创建就诶有问题了。一会就把磁盘组创建好了。如下图所示。
然后我们尝试重启一下ASM实例,可以看到都没有问题。
SQL> shutdown immediate
ASM diskgroups dismounted
ASM instance shutdown
SQL> startup
ASM instance started
Total System Global Area 83886080 bytes
Fixed Size 1260216 bytes
Variable Size 57460040 bytes
ASM Cache 25165824 bytes
ASM diskgroups mounted
ASM的简单配置就告一段落。