在Oracle Database 10g中,除了使用图形界面之外,也可以使用手工方式来创建ASM实例及磁盘组,这个过程和手工创建一个数据库实例完全一致。
创建ASM实例只需要一个参数文件,主要需要的参数如下:
$ cd $ORACLE_HOME/dbs $ vi init+ASM.ora *.asm_diskstring='ORCL:VOL*' *.background_dump_dest='/opt/oracle/admin/+ASM/bdump' *.core_dump_dest='/opt/oracle/admin/+ASM/cdump' *.instance_type='asm' *.large_pool_size=12M *.remote_login_passwordfile='SHARED' *.user_dump_dest='/opt/oracle/admin/+ASM/udump'
然后可以创建一个密码文件:
$ cd $ORACLE_HOME/dbs $ orapwd file=orapw+ASM password=oracle
创建必要的目录结构:
$ su – oracle $ mkdir -p $ORACLE_BASE/admin/+ASM/udump $ mkdir -p $ORACLE_BASE/admin/+ASM/bdump $ mkdir -p $ORACLE_BASE/admin/+ASM/cdump
在Oracle Database 10g中,启动ASM实例需要先启动Oracle集群同步服务(CSS),如果在创建ASM实例前没有启动该服务,创建或启动ASM实例就会出现如下错误:
SQL> startup ORA-29701: unable to connect to Cluster Manager
在Windows图形界面上会报出如图6-13所示的错误。
图6-13 Oracle 10g中的CSS配置提示
在命令行执行localconfig add命令可以创建CSS服务:
C:\>localconfig add Step 1: creating new OCR repository Successfully accumulated necessary OCR keys. Creating OCR keys for user 'eygle', privgrp ''.. Operation successful. Step 2: creating new CSS service successfully created local CSS service successfully added CSS to home
这个服务在Windows上通过ocssd.exe应用启动,在Linux/Solaris上通过ocssd.bin启动。OCSSD在RAC和单实例的ASM环境中同样需要,Oracle通过OCSSD进行数据库实例和磁盘组的通信。
在安装了Oracle软件之后,OCSSD的相关组件被安装,这些组件包括以下几项。
· $ORACLE_HOME/bin/ocssd:这是一个Shell脚本文件,用于调用OCSSD可执行文件。
· $ORACLE_HOME/bin/ocssd.bin:这是OCSSD可执行文件(当然在Windows上是ocssd.exe)。
· $ORACLE_HOME/css/admin/init.cssd:init.cssd这个脚本会被复制到init.d目录用于启动(例如Linux /etc/init.d/)。
· $ORACLE_HOME/css/admin/inittab_local:这个信息将被加入/etc/inittab,用于系统启动后自动加载OCSSD服务。当执行“localconfig add”命令时,这个启动信息会被加入/etc/inittab文件。
检查/etc/inittab文件,可以发现以下一行记录:
h1:35:respawn:/etc/init.d/init.cssd run >/dev/null 2>&1 </dev/null
检查服务是否启动:
# ps -ef|grep ocssd|grep -v grep oracle 1386 1 0 Mar 27 ? 0:05 /opt/oracle/product/10.2.0/bin/ocssd.bin
启动了这个服务之后,就可以启动实例:
$ export ORACLE_SID=+ASM $ sqlplus / as sysdba SQL> startup ASM instance started Total System Global Area 100663296 bytes Fixed Size 777616 bytes Variable Size 99885680 bytes Database Buffers 0 bytes Redo Buffers 0 bytes ORA-15110: no diskgroups mounted
注意最后有一个错误提示没有磁盘组被加载,因为这是首次启动ASM实例,尚未创建磁盘组,所以显示15110错误是正常的。
可以创建spfile,重新启动ASM实例:
SQL> create spfile from pfile; SQL> shutdown immediate; SQL> startup;
此后可以使用划分好的磁盘手工创建diskgroup(此处执行了FailGroup):
SQL> create diskgroup dgroup1 normal redundancy 2 failgroup fgroup1 disk 'ORCL:VOL1','ORCL:VOL2' 3 failgroup fgroup2 disk 'ORCL:VOL3','ORCL:VOL4'; Diskgroup created.
如果要创建外部冗余的磁盘组,可以使用类似如下命令:
CREATE DISKGROUP oradg External REDUNDANCY DISK 'ORCL:VOL1' SIZE 19077M ,'ORCL:VOL2' SIZE 19077M , 'ORCL:VOL3' SIZE 19077M ,'ORCL:VOL4' SIZE 12228M
创建磁盘组之后可以使用如下命令查看磁盘组的状态:
SQL> select name,state from v$asm_diskgroup; NAME STATE ---------- ---------------------- DGROUP1 MOUNTED
如果上述命令返回的STATE是DISMOUNTED,那么可以使用如下命令手工加载磁盘组:
SQL> ALTER DISKGROUP dgroup1 MOUNT; Diskgroup altered.
此时检查数据库初始化参数,发现asm_diskgroups参数值已经自动设置为DGROUP1,这表明在下次启动ASM实例的时候,这个diskgroup会被自动挂载。
SQL> show parameter asm_diskgroups NAME TYPE VALUE ------------------------------------ ---------- ------------------------------ asm_diskgroups string DGROUP1
如果要卸载diskgroup,使用下面的命令:
ALTER DISKGROUP ALL DISMOUNT;
如前文所述,在Oracle Database 11g中,ASM的配置和数据库独立开来,其主要程序需要随GI安装,所以在没有GI支持的情况下,是无法向10g那样创建和启动ASM实例的,如图6-14所示:
图6-14:Oracle Database 11gR2中ASM依赖于GI