在windows上的两种建立ASM实例的方式

我们可以在windows上建立ASM实例。oracle给我们提供了一个很贴心的工具,来实现在windows上安装asm,这个工具就是asmtool。该工具可以在安装介质的asmtool目录中找到,也可以在安装数据库软件后,在$ORACLE_HOME/bin下找到。下面,我们就用asmtool来在windows xp上安装asm实例。

安装的方式有两种,一种是利用windows自身的没有格式化过的磁盘(其实是磁盘分区),来作为asm disk;另一种是用asmtool在windows的已经格式化好的分区上(如D盘)建立asm disk。注意第二种的方式需要利用隐含参数来启动asm实例,因此不被oracle推荐,也不适合用在生产系统上。另外,第二种方式建立的asm实例,不能被dbca所识别,在图形化界面安装数据库时,无法识别出来asm实例的diskgroup,但是手工建库却没问题。下面,我们就来分别介绍两种方式的建立ASM实例。

方法一,用windows中尚未格式化的硬盘分区:

1. 如果你的硬盘已经完全占有,没有未格式化的分区,可以用Norton PartitionMagic来resize一下你的空闲较多的分区,新建一个unallocated的分区。然后,关闭PartitionMagic,我们在控制面板-管理工具-计算机管理-磁盘管理,那边进行分区的建立。在这里,我们虽然建立的分区,但是没有格式化。

2. 我这边的例子是我有一个14.65G的空余分区:

3. 先新建需要的分区:
反击右键新建分区:

选择新建逻辑分区:

选择大小为4G:

选择挂载目录为D盘的asmdisks下:

选择不要格式化分区:

汇总信息:

类似的建立其他3G,3G,1G,1G,1G,1.64G的分区:

说明:4G用于做external redundancy,用于放一般的数据,3G+3G用于做normal redundancy,放比较重要数据,1G+1G+1G用于做high redundancy,用于放最重要的数据,最后的1.64G做external redundancy,存放flashback的文件。

最后,我们可以在D盘的asmdisks目录下可以看到:

上面的几个分区都是未格式化的,对于数据库来说,类似裸设备,可以添加到asm中,因此我们的这种方式不需要用隐含参数_asm_allow_only_raw_disks。

下面,我们就开始建立asm实例:

4.我们先list看看有哪些分区是能被asm使用,我们用asmtool -list这个命令:

我们看到partition4~partition10都是可以用的。我们用asmtool -add加入asm的标签:

在list看看:

另外,由于asm实例需要css服务,第一次使用的之前,我们需要建议css服务。在命令行运行:

建立完成后我们可以检查一下是否运行正常,在命令行运行:

css appears healthy说明css运行正常。

5. 建立asm的instance:
我们可以用dbca来建立,也可以用命令行来建立,在这里,我们用命令行的建立作为例子:
5.1 在$ORACLE_HOME/database下新建asm的初始化文件INIT+ASM1.ora:

5.2 在$ORACLE_HOME/database下新建+ASM1的密码文件:

5.3 用oradim新建+ASM1的windows服务:

5.4 启动+ASM1的实例:

6. 我们开始新建asm diskgroup,给oracle数据库使用:

6.2 新建disk group:

6.3 检查asm disk的状态以及diskgroup的使用率:

7. 把asm diskgroup加入到初始化文件中:

因此在INIT+ASM1.ora中加入这行:

然后shutdown asm实例,重新用pfile启动,再create spfile from pfile,最后从spfile启动。

这样,asm实例就建立完成了。





方法二,用windows中已经存在的分区,比如我们可以选择D盘。

1. 在已经格式化好的分区上新建asm disk:

上述文件的规划也和方法一类似,只是大小变小了一点。2G用于做external redundancy放一般数据,1G+1G做normal redundancy,200M+200M+200M做high redundancy,最后的400M做external redundancy。

我们看一下建立好后的文件类似如此:

同时我们看到建立好这些文件之后,用asmtool -list是看不到的:

这也可以解释为什么在后续的dbca中也看不到,因为在dbca中有一步骤是给asm disk的分区做标签,加前缀,也就是我们用命令asmtool -add做的,但是如果在asmtool -list都看不到,那还怎么做标签、加前缀呢。

不过我们可以不管这个,这个asm实例还是可以建立起来的。

2. 建立初始化文件和密码文件:
初始化文件INIT+ASM2.ora,注意这里多了一个隐含参数*._asm_allow_only_raw_disks=FALSE,这可以让asm在其disk文件为非裸设备的情况下启动:

新建密码文件:

3. 后续的操作就比较类似了,新建+ASM2的windows 服务,启动该实例,新建diskgroup:

注意如果我们建立的diskgroup name和之前的,另一个实例的diskgroup同名,就会报错:

虽然二者属于不同实例,但是一旦实例启动,disk被cache起来,diskgroup状态变成mount,这个时候的disk和diskgroup name就会被锁定。

4. 修改pfile,增加asm_diskgroups,然后从spfile启动。

至此,方法二也建立好了asm实例。

后续,我们就可以用这2个asm实例来作为存储,存放数据文件了。我们就简单的来建立一个数据库:
1. 建立bdump,cdump,udump对应的目录。

2. 建立密码文件和初始化文件,注意初始化文件中的db_create_file_dest:

3. 启动到nmount状态后,create database:

我们看到相关的文件已经用OMF管理:

最后@?/rdbms/admin/catalog和@?/rdbms/admin/catproc即完成数据库的创建。

那么,如果我在数据库的初始化文件中写上了db_create_file_dest=’+DG_FS_DATA_01’,那么我是否还能用到另一个asm实例的存储呢?

看来一个asm实例只能被一个数据库使用。
呵呵,看来一个数据库实例不能跨asm实例,用不同的diskgroup,一个数据库实例只能用一个asm实例。

相关文章

3条评论

  1. 看来一个asm实例只能被一个数据库使用。

    这最后一句是什么意思?正常情况下一个ASM实例是可以被多个数据库实例使用的。

  2. re kamus:我的意思是,一个数据库实例,尝试跨2个asm实例用,当添加数据文件到另一个asm实例上的diskgroup的时候,做报错。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据