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

来源:互联网 发布:罗技m100r 知乎 编辑:程序博客网 时间:2024/05/18 02:43

本文分四部分,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

asm


--检查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 bytes
ORA-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

原创粉丝点击