ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 在windows上的两种建立ASM实例的方式

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

原创 Linux操作系统 作者:liyijie78 时间:2011-02-16 21:17:58 0 删除 编辑

我们可以在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这个命令:

D:\oracle\product\10.2.0\db_1\database>asmtool -list
NTFS                             \Device\Harddisk0\Partition1            29996M
NTFS                             \Device\Harddisk0\Partition2            45005M
NTFS                             \Device\Harddisk0\Partition3           215238M
                                 \Device\Harddisk0\Partition4             4097M
                                 \Device\Harddisk0\Partition5             3071M
                                 \Device\Harddisk0\Partition6             3071M
                                 \Device\Harddisk0\Partition7             1026M
                                 \Device\Harddisk0\Partition8             1026M
                                 \Device\Harddisk0\Partition9             1026M
                                 \Device\Harddisk0\Partition10            1683M
 
D:\oracle\product\10.2.0\db_1\database>

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

D:\oracle\product\10.2.0\db_1\database>asmtool -add \Device\Harddisk0\Partition4 ORCLDISKDATA0
 
D:\oracle\product\10.2.0\db_1\database>asmtool -add \Device\Harddisk0\Partition5 ORCLDISKDATA1
 
D:\oracle\product\10.2.0\db_1\database>asmtool -add \Device\Harddisk0\Partition6 ORCLDISKDATA2
 
D:\oracle\product\10.2.0\db_1\database>asmtool -add \Device\Harddisk0\Partition7 ORCLDISKDATA3
 
D:\oracle\product\10.2.0\db_1\database>asmtool -add \Device\Harddisk0\Partition8 ORCLDISKDATA4
 
D:\oracle\product\10.2.0\db_1\database>asmtool -add \Device\Harddisk0\Partition9 ORCLDISKDATA5
 
D:\oracle\product\10.2.0\db_1\database>asmtool -add \Device\Harddisk0\Partition10 ORCLDISKDATA6
 
D:\oracle\product\10.2.0\db_1\database>

在list看看:

D:\oracle\product\10.2.0\db_1\database>asmtool -list
NTFS                             \Device\Harddisk0\Partition1            29996M
NTFS                             \Device\Harddisk0\Partition2            45005M
NTFS                             \Device\Harddisk0\Partition3           215238M
ORCLDISKDATA0                    \Device\Harddisk0\Partition4             4097M
ORCLDISKDATA1                    \Device\Harddisk0\Partition5             3071M
ORCLDISKDATA2                    \Device\Harddisk0\Partition6             3071M
ORCLDISKDATA3                    \Device\Harddisk0\Partition7             1026M
ORCLDISKDATA4                    \Device\Harddisk0\Partition8             1026M
ORCLDISKDATA5                    \Device\Harddisk0\Partition9             1026M
ORCLDISKDATA6                    \Device\Harddisk0\Partition10            1683M
 
D:\oracle\product\10.2.0\db_1\database>

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

localconfig add

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

D:\oracle\product\10.2.0\db_1\database>crsctl check css
CSS appears healthy
 
D:\oracle\product\10.2.0\db_1\database>

css appears healthy说明css运行正常。

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

*.instance_type='ASM'
*.asm_diskstring='D:\asmdisks\*'
*.large_pool_size=12M
*.db_unique_name='+ASM1'
*.asm_power_limit=1
*.remote_login_passwordfile='SHARED'
*.background_dump_dest='D:\oracle\admin\asm\bdump'
*.core_dump_dest='D:\oracle\admin\asm\cdump'
*.user_dump_dest='D:\oracle\admin\asm\udump'

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

orapwd file=orapw+ASM2 password=oracle

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

D:\oracle\product\10.2.0\db_1\database>oradim -new -asmsid +ASM1 -startmode auto
Instance created.
 
D:\oracle\product\10.2.0\db_1\database>

5.4 启动+ASM1的实例:

D:\oracle\product\10.2.0\db_1\database>sqlplus "/ as sysdba"
 
SQL*Plus: Release 10.2.0.1.0 - Production on Sat Feb 12 00:17:24 2011
 
Copyright (c) 1982, 2005, OracleAll rights reserved.
 
Connected to an idle instance.
 
SQL> startup
ASM instance started
 
Total System Global Area   83886080 bytes
Fixed Size                  1247420 bytes
Variable Size              57472836 bytes
ASM Cache                  25165824 bytes
ORA-15110: no diskgroups mounted
 
 
SQL>

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

6.1 检查asm disk的状态是否为cache
SQL> select path,mount_status from v$asm_disk;
 
PATH                           MOUNT_S
----------------------------
-- -------
D:\ASMDISKS\ASMDISK1           CLOSED
D:\ASMDISKS\ASMDISK2           CLOSED
D:\ASMDISKS\ASMDISK3           CLOSED
D:\ASMDISKS\ASMDISK7           CLOSED
D:\ASMDISKS\ASMDISK5           CLOSED
D:\ASMDISKS\ASMDISK6           CLOSED
D:\ASMDISKS\ASMDISK4           CLOSED
 
7 rows selected.

6.2 新建disk group:

SQL> create diskgroup dg_data_01
 
2  external redundancy
 
3  disk 'D:\ASMDISKS\ASMDISK1';
 
Diskgroup created.
 
SQL>
SQL> create diskgroup dg_data_02
 
2  normal redundancy
 
3  failgroup fg_dgdata02_01 disk 'D:\ASMDISKS\ASMDISK2'
 
4  failgroup fg_dgdata02_02 disk 'D:\ASMDISKS\ASMDISK3';
 
Diskgroup created.
 
SQL> create diskgroup dg_data_03
 
2  high redundancy
 
3  failgroup fg_dgdata03_01 disk 'D:\ASMDISKS\ASMDISK4'
 
4  failgroup fg_dgdata03_02 disk 'D:\ASMDISKS\ASMDISK5'
 
5  failgroup fg_dgdata03_03 disk 'D:\ASMDISKS\ASMDISK6';
 
Diskgroup created.
 
SQL>
SQL> create diskgroup dg_flashback
 
2  external redundancy
 
3  disk 'D:\ASMDISKS\ASMDISK7';
 
Diskgroup created.
 
SQL>

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

SQL> select path,mount_status from v$asm_disk order by disk_number;
 
PATH                           MOUNT_S
----------------------------
-- -------
D:\ASMDISKS\ASMDISK1           CACHED
D:\ASMDISKS\ASMDISK2           CACHED
D:\ASMDISKS\ASMDISK4           CACHED
D:\ASMDISKS\ASMDISK7           CACHED
D:\ASMDISKS\ASMDISK5           CACHED
D:\ASMDISKS\ASMDISK3           CACHED
D:\ASMDISKS\ASMDISK6           CACHED
 
7 rows selected.
 
SQL>
SQL> select group_number,name,sector_size,block_size,allocation_unit_size,state,type,total_mb,free_mb from v$asm_diskgroup;
 
GROUP_NUMBER NAME                           SECTOR_SIZE BLOCK_SIZE ALLOCATION_UNIT_SIZE STATE       TYPE     TOTAL_MB    FREE_MB
----------
-- ------------------------------ ----------- ---------- -------------------- ----------- ------ ---------- ----------
          
1 DG_DATA_01                             512       4096              1048576 MOUNTED     EXTERN   4097           4047
          
2 DG_DATA_02                             512       4096              1048576 MOUNTED     NORMAL   6142           6040
          
3 DG_DATA_03                             512       4096              1048576 MOUNTED     HIGH     3078           2925
          
4 DG_FLASHBACK                           512       4096              1048576 MOUNTED     EXTERN   1683           1633
 
SQL>

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

SQL> show parameter asm_disk
 
NAME                                 TYPE        VALUE
----------------------------------
-- ----------- ------------------------------
asm_diskgroups                       string      DG_DATA_01, DG_DATA_02, DG_DAT
                                                
A_03, DG_FLASHBACK
asm_diskstring                       string      D:\asmdisks\*
SQL>

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

*.asm_diskgroups='DG_DATA_01', 'DG_DATA_02', 'DG_DATA_03', 'DG_FLASHBACK'

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

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





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

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

C:\Documents and Settings\Administrator>asmtool -create d:\asmfiles\asmfile1 2048
 
C:\Documents and Settings\Administrator>asmtool -create d:\asmfiles\asmfile2 1024
 
C:\Documents and Settings\Administrator>asmtool -create d:\asmfiles\asmfile3 1024
 
C:\Documents and Settings\Administrator>asmtool -create d:\asmfiles\asmfile4 200
 
C:\Documents and Settings\Administrator>asmtool -create d:\asmfiles\asmfile5 200
 
C:\Documents and Settings\Administrator>asmtool -create d:\asmfiles\asmfile6 200
 
C:\Documents and Settings\Administrator>asmtool -create d:\asmfiles\asmfile7 400
 
C:\Documents and Settings\Administrator>

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

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

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

D:\oracle\product\10.2.0\db_1\database>asmtool -list
NTFS                             \Device\Harddisk0\Partition1            29996M
NTFS                             \Device\Harddisk0\Partition2            45005M
NTFS                             \Device\Harddisk0\Partition3           215238M
ORCLDISKDATA0                    \Device\Harddisk0\Partition4             4097M
ORCLDISKDATA1                    \Device\Harddisk0\Partition5             3071M
ORCLDISKDATA2                    \Device\Harddisk0\Partition6             3071M
ORCLDISKDATA3                    \Device\Harddisk0\Partition7             1026M
ORCLDISKDATA4                    \Device\Harddisk0\Partition8             1026M
ORCLDISKDATA5                    \Device\Harddisk0\Partition9             1026M
ORCLDISKDATA6                    \Device\Harddisk0\Partition10            1683M
 
D:\oracle\product\10.2.0\db_1\database>

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

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

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

*._asm_allow_only_raw_disks=FALSE
*.instance_type='ASM'
*.asm_diskstring='D:\asmfiles\*'
*.large_pool_size=12M
*.db_unique_name='+ASM2'
*.asm_power_limit=1
*.remote_login_passwordfile='SHARED'
*.background_dump_dest='D:\oracle\admin\asm\bdump'
*.core_dump_dest='D:\oracle\admin\asm\cdump'
*.user_dump_dest='D:\oracle\admin\asm\udump'

新建密码文件:

D:\oracle\product\10.2.0\db_1\database>orapwd file=orapw+ASM2 password=oracle
 
D:\oracle\product\10.2.0\db_1\database>

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

D:\oracle\product\10.2.0\db_1\database>oradim -new -asmsid +ASM2 -startmode auto
Instance created.
 
D:\oracle\product\10.2.0\db_1\database>set ORACLE_SID=+ASM2
 
D:\oracle\product\10.2.0\db_1\database>
D:\oracle\product\10.2.0\db_1\database>set ORACLE_SID=+ASM2
 
D:\oracle\product\10.2.0\db_1\database>sqlplus "/ as sysdba"
 
SQL*Plus: Release 10.2.0.1.0 - Production on 星期日 213 12:36:40 2011
 
Copyright (c) 1982, 2005, OracleAll rights reserved.
 
 
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
 
SQL> set line 1000
SQL> set pages 1000
SQL> col path for a30
SQL> select path,mount_status from v$asm_disk order by disk_number;
 
PATH                           MOUNT_STATUS
----------------------------
-- --------------
D:\ASMFILES\ASMFILE1           CLOSED
D:\ASMFILES\ASMFILE2           CLOSED
D:\ASMFILES\ASMFILE3           CLOSED
D:\ASMFILES\ASMFILE4           CLOSED
D:\ASMFILES\ASMFILE5           CLOSED
D:\ASMFILES\ASMFILE6           CLOSED
D:\ASMFILES\ASMFILE7           CLOSED
 
已选择
7行。
 
SQL> select group_number,name,sector_size,block_size,allocation_unit_size,state,type,total_mb,free_mb from v$asm_diskgroup;
 
未选定行
 
SQL> select instance_name from v$instance;
 
INSTANCE_NAME
------------------------------
--
+asm2

 
SQL> create diskgroup dg_fs_data_01
 
2  external redundancy
 
3  disk 'D:\ASMFILES\ASMFILE1';
 
磁盘组已创建。
 
SQL> create diskgroup dg_fs_data_02
 
2  normal redundancy
 
3  failgroup fg_dgfsdata02_01 disk 'D:\ASMFILES\ASMFILE2'
 
4  failgroup fg_dgfsdata02_02 disk 'D:\ASMFILES\ASMFILE3';
 
磁盘组已创建。
 
SQL> create diskgroup dg_fs_data_03
 
2  high redundancy
 
3  failgroup fg_dgfsdata03_01 disk 'D:\ASMFILES\ASMFILE4'
 
4  failgroup fg_dgfsdata03_02 disk 'D:\ASMFILES\ASMFILE5'
 
5  failgroup fg_dgfsdata03_03 disk 'D:\ASMFILES\ASMFILE6';
 
磁盘组已创建。
 
SQL>
SQL> create diskgroup dg_fs_flashback
 
2  external redundancy
 
3  disk 'D:\ASMFILES\ASMFILE7';
 
Diskgroup created.
 
SQL>
SQL>
SQL>

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

SQL> create diskgroup dg_flashback
 
2  external redundancy
 
3  disk 'D:\ASMFILES\ASMFILE7';
create diskgroup dg_flashback
*
ERROR at line 1:
ORA-15018: diskgroup cannot be created
ORA-15003: diskgroup "DG_FLASHBACK" already mounted in another lock name space

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

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

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

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

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

db_create_file_dest='+DG_FS_DATA_01'
nls_language="SIMPLIFIED CHINESE"
nls_territory="CHINA"
sga_target=167772160
job_queue_processes=10
dispatchers="(PROTOCOL=TCP) (SERVICE=oralocalXDB)"
compatible=10.2.0.1.0
audit_file_dest=D:\oracle\admin\oralocal\adump
remote_login_passwordfile=EXCLUSIVE
log_archive_format=oralocal_%S_%R_%T.arc
pga_aggregate_target=16777216
db_domain=""
db_name=oralocal
control_files=("+DG_FS_DATA_02\cfile\oralocal\control01.ctl", "+DG_FS_DATA_02\cfile\oralocal\control02.ctl", "+DG_FS_DATA_02\cfile\oralocal\control03.ctl")
db_recovery_file_dest=+DG_FS_FLASHBACK
db_recovery_file_dest_size=350m
open_cursors=300
undo_management=AUTO
undo_tablespace=UNDOTBS1
background_dump_dest=D:\oracle\admin\oralocal\bdump
core_dump_dest=D:\oracle\admin\oralocal\cdump
user_dump_dest=D:\oracle\admin\oralocal\udump
processes=150
db_block_size=8192
db_file_multiblock_read_count=16

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

SQL> startup nomount pfile='?/database/initoralocal.ora'
ORACLE instance started.
 
Total System Global Area  167772160 bytes
Fixed Size                  1247876 bytes
Variable Size              67110268 bytes
Database Buffers           92274688 bytes
Redo Buffers                7139328 bytes
SQL>
SQL>
SQL>
SQL> CREATE DATABASE "oralocal"
 
2  MAXINSTANCES 8
 
3  MAXLOGHISTORY 1
 
4  MAXLOGFILES 192
 
5  MAXLOGMEMBERS 3
 
6  MAXDATAFILES 100
 
7  DATAFILE  SIZE 500M
 
8  EXTENT MANAGEMENT LOCAL
 
9  SYSAUX DATAFILE  SIZE 300M
 
10  SMALLFILE DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE  SIZE 20M
 
11  SMALLFILE UNDO TABLESPACE "UNDOTBS1" DATAFILE SIZE 200M
 
12  CHARACTER SET ZHS16GBK
 
13  NATIONAL CHARACTER SET AL16UTF16
 
14  LOGFILE GROUP 1  SIZE 51200K,
 
15  GROUP 2  SIZE 51200K,
 
16  GROUP 3  SIZE 51200K;
 
Database created.
 
SQL>

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

SQL> select name from v$datafile;
 
NAME
-----------------------------------------------------------------
--
+DG_FS_DATA_01/oralocal/datafile/system.258.743030629

+
DG_FS_DATA_01/oralocal/datafile/undotbs1.264.743030639
+
DG_FS_DATA_01/oralocal/datafile/sysaux.260.743030643
+
DG_FS_DATA_01/oralocal/datafile/users.265.743030697

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

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

SQL> create tablespace test_02 datafile '+DG_DATA_01/oralocal/dfile/tbs_test_02.dbf' size 10m;
create tablespace test_02 datafile '+DG_DATA_01/oralocal/dfile/tbs_test_02.dbf' size 10m
*
ERROR at line 1:
ORA-01119: error in creating database file
'+DG_DATA_01/oralocal/dfile/tbs_test_02.dbf'
ORA-17502: ksfdcre:4 Failed to create file
+
DG_DATA_01/oralocal/dfile/tbs_test_02.dbf
ORA-15001: diskgroup "DG_DATA_01" does not exist or is not mounted
ORA-15001: diskgroup "DG_DATA_01" does not exist or is not mounted
 
 
SQL>

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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11417069/viewspace-687372/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-01-07

  • 博文量
    93
  • 访问量
    275368