设为首页 收藏本站
查看: 916|回复: 0

[经验分享] 在windows中搭建虚拟ASM环境创建Oracle 10G数据库

[复制链接]
YunVN网友  发表于 2016-8-17 06:28:51 |阅读模式
  本文分四部分,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
DSC0000.gif

--检查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,

DSC0001.gif

  2,这里我截的图因为是在做完之后的,在"select member disks"中没有可用的,没有做之前正常应该列出D:\oracle\asmdisk\disk1,disk2,disk3
  选择disk1,disk2,group name为dg1,redundancy为normal创建一组.
  选择disk3,group name为dg2,redundancy为external创建一组.

DSC0002.gif
  磁盘组创建完成查看状态:
  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,选择自定义类型的数据库
DSC0003.gif

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

  3,选择安装的磁盘组:
DSC0005.gif

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

DSC0006.gif

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

DSC0007.gif

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

  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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-258721-1-1.html 上篇帖子: [转]PHP 5 数据对象 (PDO) 抽象层与 Oracle 下篇帖子: Oracle性能优化基础知识及小技巧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表