您的位置:首页 > 数据库 > Oracle

在windows中搭建虚拟ASM环境创建Oracle 10G数据库

2012-01-11 20:37 756 查看
本文分四部分,1,创建虚拟的ASM磁盘,2在虚拟的ASM磁盘上创建数据库,3,asmcmd工具,4为磁盘组增加磁盘

第一部分:创建虚拟的ASM磁盘:(本例中Oracle安装在D:\oracle\product\10.2.0)

1,利用Oracle提供的asmtool创建ASM虚拟磁盘,asmtool在D:\oracle\product\10.2.0\db_1\BIN目录下,

在CMD中执行:

asmtool -create D:\oracle\asmdisk\disk1 1024

asmtool -create D:\oracle\asmdisk\disk2 1024

asmtool -create D:\oracle\asmdisk\disk3 1024

2,配置CSS(Cluster Synchronization Services)

CSS主要用来同步ASM instance和它的client,也即database instance。可以由Oracle自带的localconfig命令来完成。Localconfig命令也位于D:\oracle\product\10.2.0\db_1\BIN目录下.

在CMD中执行

localconfig add

output:

Step 1: creating new OCR repository

Successfully accumulated necessary OCR keys.

Creating OCR keys for user 'zhangrp', privgrp ''..

Operation successful.

Step 2: creating new CSS service

successfully created local CSS service

successfully added CSS to home

配置完成后,在Windows Services中会出现类似如下一个entry



--检查CSS守护进程的状态
D:oracle10g>crsctl check cssd

CSS appears healthy

D:oracle10g>
备注:如果后期要删除这个css服务,只需要在windows command下执行如下命令即可:
localconfig delete

3,在D:\oracle\product\10.2.0\admin下创建+asm文件夹,在其下创建bdump,cdump,udump三个文件夹.如下:

D:\oracle\product\10.2.0\admin\+asm\bdump

D:\oracle\product\10.2.0\admin\+asm\cump

D:\oracle\product\10.2.0\admin\+asm\udump

4,在D:\oracle\product\10.2.0\db_1\database\文件夹下创建文件: INIT+asm.ora

D:\oracle\product\10.2.0\db_1\database\INIT+asm.ora

文件内容如下:

*._asm_allow_only_raw_disks=FALSE

*.asm_diskstring='D:\oracle\asmdisk\*'

*.user_dump_dest='D:\oracle\product\10.2.0\admin\+asm\udump'

*.core_dump_dest='D:\oracle\product\10.2.0\admin\+asm\cdump'

*.background_dump_dest='D:\oracle\product\10.2.0\admin\+asm\bdump'

*.instance_type='ASM'

*.large_pool_size=12M

*.db_unique_name='+ASM'

*.asm_power_limit=1

*.remote_login_passwordfile='SHARED'

4,创建ASM虚拟磁盘实例的服务,

oradim -new -asmsid +asm -startmode auto -SRVCSTART system -pfile 'D:\oracle\product\10.2.0\db_1\database\init+asm.ora

成功后也会在Windows的服务中添加一个名为OracleASMService+asm的服务.

备注:如果后期要删除这个asm实例,只需要在windows command下执行如下命令即可:
oradim -delete -asmsid +asm

5,连接到ASM实例,如果是OS认证,
注意要设置ORACLE_SID=刚刚创建ASM实例

D:\>set oracle_sid=+asm

直接 sqlplus / as sysdba,如果不是的话改为OS认证或者创建一个pwd文件:
orapwd file=D:\oracle\product\10.2.0\db_1\database\PWD+asm.ora password=sys entries=5
重启OracleASMService+asm的服务,
D:\>sqlplus sys/sys as sysdba

Connected to an idle instance.

SQL> startup

ASM instance started

Total System Global Area 83886080 bytes

Fixed Size 1295152 bytes

Variable Size 57425104 bytes

ASM Cache 25165824 bytesORA-15110: no diskgroups mounted

SQL>
注意:这里有一个ORA-15110的错误信息,因为是首次启动asm实例,还没有创建diskgroup,所以显示15110错误是正常的,忽略掉该错误,继续后面的步骤。
查看instance的状态:
SQL> select host_name,instance_name,version,status from v$instance;

HOST_NAME                      INSTANCE_NAME    VERSION           STATUS

------------------------------ ---------------- ----------------- ------------

PC-625040                 +asm             10.2.0.1.0        STARTED
(ASM实例只会处于STARTED状态不能像普通DB instance那样OPEN)

这时候可以查看识别出来的的磁盘:

SQL> col path format a30;

SQL> select path,mount_status from v$asm_disk order by disk_number;

PATH                           MOUNT_S

------------------------------ -------

D:\ORACLE\ASMDISK\DISK1        CLOSED

D:\ORACLE\ASMDISK\DISK2        CLOSED

D:\ORACLE\ASMDISK\DISK3        CLOSED

6,创建ASM磁盘组,创建两个磁盘组.

a,创建一个由2块1000M的磁盘组成的磁盘组,采用2-way冗余

SQL> create diskgroup dg1

2 Normal Redundancy

3 failgroup DG1_0000 disk 'D:\oracle\asmdisk\disk1'

4 failgroup DG1_0001 disk 'D:\oracle\asmdisk\disk2';

b,--闪回用的磁盘组FLASH_DATA,由1块1000M的磁盘组成,采用外部冗余

SQL> create diskgroup dg2

2 External Redundancy

3 disk 'D:\oracle\asmdisk\disk3';

(这里我只用一个磁盘,正常也应该用多块)

还可以用DBCA创建

1,



2,这里我截的图因为是在做完之后的,在"select member disks"中没有可用的,没有做之前正常应该列出D:\oracle\asmdisk\disk1,disk2,disk3

选择disk1,disk2,group name为dg1,redundancy为normal创建一组.

选择disk3,group name为dg2,redundancy为external创建一组.



磁盘组创建完成查看状态:

SQL> select path,mount_status from v$asm_disk order by disk_number;

PATH                           MOUNT_S

------------------------------ -------

D:\ORACLE\ASMDISK\DISK1        CACHED

D:\ORACLE\ASMDISK\DISK3        CACHED

D:\ORACLE\ASMDISK\DISK2        CACHED

7,--重启ASM实例

SQL> shatdown immediate

SQL> startup

ASM instance started

Total System Global Area 83886080 bytes

Fixed Size 1295152 bytes

Variable Size 57425104 bytes

ASM Cache 25165824 bytes

ASM diskgroups mounted

SQL>

刚才的"ORA-15110: no diskgroups mounted"错误信息也没了。

--生成SPFILE

SQL> create spfile from pfile;

File created.

8,--配置listener.ora和tnsnames.ora,这样就可以通过pl/sql developer这样的工具连接访问你的ASM实例了。

在listener.ora的SID_LIST加上

    (SID_DESC =

      (GLOBAL_DBNAME = +asmdb)

      (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)

      (SID_NAME = +asm)

    )

在tnsnames.ora加上

ASM =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = NBK-DAL-625040.ap.bt.com)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = +ASMDB)

    )

  )

这样toad,pl/sql developer等工具也可以通过tns访问asm 实例了.

--------------------------------------------------------------------------

第二部分,在ASM磁盘组上创建数据库

创建完ASM磁盘组后:用DBCA创建数据库:下面把与创建常规DB不同的地方列出来

1,选择自定义类型的数据库



2,SID 写成ASMDB,不创建EM,在选择存储类型的时候:



3,选择安装的磁盘组:



4,指定数据库文件的磁盘组 dg1



5,指定flash recovery的磁盘组:dg2



6,为了节约空间,不安装下面这些组件



7,将SGA size设为合适的值300M,PGA 40M, UNDO对应的文件100M,其他根据需要做适当调整.

然后finish.



创建完成后

C:\>set oracle_sid=asmdb

注意和开始的ASM的instance不一样

连接到DB的实例,C:\>sqlplus sys/sys as sysdba

启动数据库,SQL> startup

这后面的操作和普通的数据库就一样了.注意在启动数据库实例的时候,ASM的实例要先启动起来.

在创建过程中,碰到一个错误 ORA-06553: PLS-213: package STANDARD not accessible

解决方法:

1. SQL>ALTER PACKAGE STANDARD COMPILE;

2. SQL>ALTER PACKAGE DBMS_STANDARD COMPILE;

3,@ORACLE_BASE\ORACLE_HOME\rdbms\admin\utlrp.sql

第三步会费时较长,

可以 SELECT COUNT(*) FROM obj$ WHERE status IN (4, 5, 6);查看,数字应该不断变小.

第三部分:ASMCMD.

asmcmd使用同样需要连接到ASM实例

1,设置ORACLE_HOME环境变量,注册表有的话也要设置

C:\>set oracle_home=D:\oracle\product\10.2.0\db_1

2,设置oralce_sid环境变量,如果注册表的oracle_sid不是asm实例的话

C:\>asmcmd

ORA-12560: TNS:protocol adapter error (DBD ERROR: OCIServerAttach)

C:\>set oracle_sid=+asm

3,操作asmcmd

C:\>asmcm

ASMCMD>

help查看帮助.提供的命令和unix命令

ASMCMD> pwd

+

ASMCMD> ls

DG1/

DG2/

ASMCMD> cd asmdb

ASMCMD> ls -l

Type           Redund  Striped  Time             Sys  Name

                                                 Y    CONTROLFILE/

                                                 Y    DATAFILE/

                                                 Y    ONLINELOG/

                                                 Y    PARAMETERFILE/

                                                 Y    TEMPFILE/

                                                 N    control01.ctl => +DG1/ASMDB/CONTROLFILE/Current.256.772306553

                                                 N    control02.ctl => +DG1/ASMDB/CONTROLFILE/Current.257.772306557

                                                 N    control03.ctl => +DG1/ASMDB/CONTROLFILE/Current.258.772306561

                                                 N    redo01.log => +DG1/ASMDB/ONLINELOG/group_1.259.772306567

                                                 N    redo02.log => +DG1/ASMDB/ONLINELOG/group_2.260.772306579

                                                 N    redo03.log => +DG1/ASMDB/ONLINELOG/group_3.261.772306591

                                                 N    spfileASMDB.ora => +DG1/ASMDB/PARAMETERFILE/spfile.267.772307483
上面看到的就是数据库文件的结构,下面的是数据文件.

ASMCMD> cd datafile

ASMCMD> ls -l

Type      Redund  Striped  Time             Sys  Name

DATAFILE  MIRROR  COARSE   JAN 11 21:00:00  Y    SYSAUX.264.772306671

DATAFILE  MIRROR  COARSE   JAN 11 21:00:00  Y    SYSTEM.262.772306615

DATAFILE  MIRROR  COARSE   JAN 11 21:00:00  Y    UNDOTBS1.263.772306657

DATAFILE  MIRROR  COARSE   JAN 11 21:00:00  Y    USERS.266.772306717

上面第一部分配置的CSS(Cluster Synchronization Services)服务,是为ASM实例(+asm)和ASMDB数据库实例提供服务的.

负责同步数据库的信息到+asm管理的磁盘上.

ASMCMD> lsct

DB_Name   Status        Software_Version  Compatible_version  Instance_Name

+ASM      CONNECTED           10.2.0.1.0          10.2.0.0.0  +asm

ASMDB     CONNECTED           10.2.0.1.0          10.2.0.1.0  asmdb

ASMCMD> find + cont*

+DG1/ASMDB/CONTROLFILE/

+DG1/ASMDB/control01.ctl

+DG1/ASMDB/control02.ctl

+DG1/ASMDB/control03.ctl

 mkalias可以为文件创建别名,该成我们在文件系统下熟悉的文件名,如 SYSTEM.262.772306615看起来不像system01.dbf那样熟悉,可以改完后将数据文件指向alias.

ASMCMD> mkalias SYSTEM.262.772306615 system01.dbf

SQL> startup mount

修改数据库

SQL> alter database rename file '+DG1/asmdb/datafile/system.262.772306615' to '+DG1/asmdb/datafile/system01.dbf';

SQL> alter database open;

SQL> select file_name from dba_data_files;

FILE_NAME

-------------------------------------------

+DG1/asmdb/datafile/system01.dbf

+DG1/asmdb/datafile/undotbs1.263.772306657

+DG1/asmdb/datafile/sysaux.264.772306671

+DG1/asmdb/datafile/users.266.772306717

第四部分:为磁盘组增加磁盘

1,创建两个ASM磁盘

D:\>asmtool -create D:\oracle\asmdisk\disk4 200

D:\>asmtool -create D:\oracle\asmdisk\disk5 200

2,连接到ASM实例,

SQL> col path format a30;

SQL> col name format a20

SQL> col failgroup format a20;

SQL> select group_number,mount_status,name,failgroup,path from v$asm_disk;

GROUP_NUMBER MOUNT_S NAME                 FAILGROUP            PATH

------------ ------- -------------------- -------------------- ---------------------------

           0 CLOSED                                            D:\ORACLE\ASMDISK\DISK4

           0 CLOSED                                            D:\ORACLE\ASMDISK\DISK5

           1 CACHED  DG1_0000             DG1_0000             D:\ORACLE\ASMDISK\DISK1

           1 CACHED  DG1_0001             DG1_0001             D:\ORACLE\ASMDISK\DISK2

           2 CACHED  DG2_0000             DG2_0000             D:\ORACLE\ASMDISK\DISK3

可以看到新建的两块磁盘已经识别

3,添加磁盘disk4到DG1_0000

SQL> ALTER DISKGROUP dg1 ADD failgroup DG1_0000 disk 'D:\oracle\asmdisk\disk4';

Diskgroup altered.

SQL> ALTER DISKGROUP dg1 ADD failgroup DG1_0001 disk 'D:\oracle\asmdisk\disk5

Diskgroup altered.

SQL> select group_number,mount_status,name,failgroup,path from v$asm_disk;

GROUP_NUMBER MOUNT_S NAME                 FAILGROUP            PATH

------------ ------- -------------------- -------------------- ------------------------

           1 CACHED  DG1_0000             DG1_0000             D:\ORACLE\ASMDISK\DISK1

           1 CACHED  DG1_0001             DG1_0001             D:\ORACLE\ASMDISK\DISK2

           2 CACHED  DG2_0000             DG2_0000             D:\ORACLE\ASMDISK\DISK3

           1 CACHED  DG1_0002             DG1_0000             D:\ORACLE\ASMDISK\DISK4

           1 CACHED  DG1_0003             DG1_0001             D:\ORACLE\ASMDISK\DISK5

这样磁盘组dg1的容量就加大了.

更多细节:http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_1006.htm#SQLRF01113

本文是参考 Thomas Zhang在ITPUB的文章和warehouse的OCP讲课完成的.
http://tomszrp.itpub.net/post/11835/487501
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息