使用普通文件也能玩转ASM
NinGoo's blog

使用普通文件也能玩转ASM

ASM是Oracle10g一个非常吸引人的新特性。但是其需要多块磁盘才能配置,虽然可以使用vmware虚拟磁盘,但是毕竟要在虚拟环境中来配置,对于测试机器的硬件要求就比较高了。实际上,利用普通文件也能玩一把ASM。本文主要参考:How to use Files in place of Real Disk Devices for ASM – (Windows)

1.实验环境


SQL> select * from v$version;

BANNER
———————————————————

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Prod
PL/SQL Release 10.2.0.1.0 – Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 – Production
NLSRTL Version 10.2.0.1.0 – Production

2.配置css(Cluster Synchronization Services)

E:\>localconfig add
Step 1: creating new OCR repository
Successfully accumulated necessary OCR keys.
Creating OCR keys for user ‘gdchaiyuan.ning’, privgrp ”..
Operation successful.
Step 2: creating new CSS service
successfully created local CSS service
successfully added CSS to home

配置成功后,windows服务中会出现一个名为OracleCSService的服务。

如果没有配置好CSS,则启动asm实例的时候会报错:

ORA-29701: unable to connect to Cluster Manager

3.创建用于ASM的文件

这里使用一段perl脚本来创建预先分配空间的普通os文件,一共四个文件,每个200M,可以根据需要修改脚本。

my $s=’0′ x 2**20;
open(DF1,”>d:\asmdisks\_file_disk1″) || die “Cannot create file – $!n”;
open(DF2,”>d:\asmdisks\_file_disk2″) || die “Cannot create file – $!n”;
open(DF3,”>d:\asmdisks\_file_disk3″) || die “Cannot create file – $!n”;
open(DF4,”>d:\asmdisks\_file_disk4″) || die “Cannot create file – $!n”;

for (my $i=1; $i<200; $i++) {
print DF1 $s;
print DF2 $s;
print DF3 $s;
print DF4 $s;
}

exit

windows平台的perl解释器,可以从以下地址下载http://www.activestate.com/Products/Download/Download.plex?id=ActivePerl

4.创建ASM实例

a.创建相应的dump目录
mkdir %ORACLE_BASE%\admin\+ASM\bdump
mkdir %ORACLE_BASE%\admin\+ASM\cdump
mkdir %ORACLE_BASE%\admin\+ASM\hdump
mkdir %ORACLE_BASE%\admin\+ASM\pfile
mkdir %ORACLE_BASE%\admin\+ASM\udump

b.创建参数文件_asm_allow_only_raw_disks=false
asm_diskstring=’d:\asmdisks\_file*’
background_dump_dest=E:\oracleo\ra10\admin\+ASM\bdump
core_dump_dest=E:\oracle\ora10\admin\+ASM\cdump
user_dump_dest=E:\oracle\ora10\admin\+ASM\udump
instance_type=asm
compatible=10.2.0.1.0
large_pool_size=12M
remote_login_passwordfile=exclusive

c.使用oradim创建instance
E:>oradim -new -asmsid +ASM -syspwd pass
实例已创建。

5.启动ASM实例

E:\>set ORACLE_SID=+ASM

E:\>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 – Production on 星期四 11月 30 16:28:57 2006

Copyright (c) 1982, 2005, Oracle. All rights reserved.

SQL> conn / as sysdba
已连接到空闲例程。
SQL> startup nomount;
ASM 实例已启动

Total System Global Area 83886080 bytes
Fixed Size 1247420 bytes
Variable Size 57472836 bytes
ASM Cache 25165824 bytes

SQL> create spfile from pfile;

文件已创建。

SQL> shutdown;
ORA-15100: invalid or missing diskgroup name

ASM 实例已关闭
SQL> startup
ASM 实例已启动

Total System Global Area 83886080 bytes
Fixed Size 1247420 bytes
Variable Size 57472836 bytes
ASM Cache 25165824 bytes
ORA-15110: no diskgroups mounted

这里的ORA-15100和ORA-15110错误可以忽略,因为还没有创建磁盘组。

另外,如果第二步的css服务没有创建,或者服务没有启动,则启动asm实例时会报错:ORA-29701: unable to connect to Cluster Manager

6.创建ASM磁盘组

首先查看是否已经将前面建的普通文件当作磁盘认出来了


SQL> col group_number heading gNo for 99
SQL> col disk_number heading dNo for 99
SQL> col mount_status heading mstatus for a6
SQL> col header_status heading hstatus for a9
SQL> col path for a40
SQL> SELECT group_number, disk_number, mount_status, header_status, state, path
from v$asm_disk;

gNo dNo mstatus hstatus STATE PATH
— — ——- ——— —— ————————
0 0 CLOSED CANDIDATE NORMAL D:\ASMDISKS\_FILE_DISK1
0 3 CLOSED CANDIDATE NORMAL D:\ASMDISKS\_FILE_DISK4
0 2 CLOSED CANDIDATE NORMAL D:\ASMDISKS\_FILE_DISK3
0 1 CLOSED CANDIDATE NORMAL D:\ASMDISKS\_FILE_DISK2

注意到group_number都是0,说明这4个磁盘还不属于任何一个磁盘组


SQL> create diskgroup test_data1 normal redundancy
failgroup controller1 disk ‘D:\ASMDISKS\_FILE_DISK1′,’D:\ASMDISKS\_FILE_DISK2′
failgroup controller2 disk ‘D:\ASMDISKS\_FILE_DISK3′,’D:\ASMDISKS\_FILE_DISK4′;

磁盘组已创建。

查看磁盘组状态

SQL> select group_number, name, total_mb, free_mb, state, type from v$asm_diskgroup;

gNo NAME TOTAL_MB FREE_MB STATE TYPE
— ———- ———- ———- ——– ————
1 TEST_DATA1 597 493 MOUNTED NORMAL

由于冗余的关系,整个diskgroup只有493M可用空间

再次查看磁盘状态

SQL> select group_number, disk_number, mount_status, header_status, state, path,
failgroup from v$asm_disk;

gNo dNo status hstatus STATE PATH FAILGROUP
— — —— ——— ——– ————— ———–
1 0 CACHED MEMBER NORMAL D:\ASMDISKS\_FILE_DISK1 CONTROLLER1
1 1 CACHED MEMBER NORMAL D:\ASMDISKS\_FILE_DISK2 CONTROLLER1
1 2 CACHED MEMBER NORMAL D:\ASMDISKS\_FILE_DISK3 CONTROLLER2
1 3 CACHED MEMBER NORMAL D:\ASMDISKS\_FILE_DISK4 CONTROLLER2

至此,ASM创建成功,以后可以再添加,删除磁盘和磁盘组。通过DBCA创建数据库时,文件就可以选择这

里创建好的磁盘组来做为存储选项了。另外,也可以使用DBCA来管理ASM的磁盘组。

本文网址:http://www.ningoo.net/html/2007/using_file_simulate_asm.html

订阅到Google | 收藏到Del.icio.us | 推荐到鲜果

上一篇: 下一篇:
相关文章 随机文章

本文Tags: ,

4 条评论

  • At 2007.07.25 01:39, 木匠 said:

    只能用 perl脚本 创建用于ASM的文件? why?

    • At 2007.07.25 09:46, NinGoo said:

      不是吧,这段perl的脚本是创建几个指定大小的文件,文件内容全填0,也就是预先分配好空间。

    • At 2007.12.11 16:58, ricky said:

      Linux下,也可以用普通的文件做成文件系统,然后用于ASM。有一篇note介绍了这些

      • At 2008.12.08 21:11, dbafans said:

        为什么没有用asmtool创建ASM文件?


        (Required)
        (Required, will not be published)