加载中…
个人资料
小居
小居
  • 博客等级:
  • 博客积分:0
  • 博客访问:2,997
  • 关注人气:0
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

数据库-管理-WINDOWS平台下搭建ASM

(2011-08-19 10:59:30)
标签:

oracle

windows

asm

分类: 学习笔记

浏览指引:

数据库-管理-WINDOWS平台下搭建ASM

 

1. ASM介绍

1.1  主要功能

自动存储管理(ASM)提供一个数据镜像与条带化的管理平台。ASM 将文件分成1MB 大小的区(extent),并将所有文件的区平均分布到磁盘组的所有磁盘中。文件的镜像是通过区来体现的。ASM 在所有可用的资源中分布I/O 负载,在免除手动I/O 调节需要(通过分散数据库文件来避免热点)的同时优化性能

数据库-管理-WINDOWS平台下搭建ASM   图源:《Oracle Database 10g:数据库管理 - 课堂练习 II 学生指南第 1 册》

 

1.2  RAID级别与ASM镜像模式

     题外:选择RAID的级别

SYSTEM UNDO 表空间因为经常用到,放到RAID1

联机重做日志因为有多路复用进行保护,更注重性能,放到 RADI0 卷上

而数据文件 可放到 RAID5 卷上

 

ASM镜像模式有三种:

HIGH(三向镜像,即3副本)

NORMAL(双向镜像,即双副本)

EXTERNAL(无副本)

 

1.3  故障组

另外当建立ASM磁盘组时,可以指定故障组,默认情况下,ASM将文件的一个主分配区分配到磁盘组中的一个磁盘时,会将该分配区的副本分配至该磁盘组的另一个磁盘中。如果指定了故障组,那么也确定了其镜像位置的范围。至于是默认还是制定故障组,看具体需要,有些磁盘是在硬件级别连接的,他们有共同的控制器,如果控制器损坏,整组磁盘将损坏,在这时不希望在同一控制器的磁盘组内部存放镜像,而采用另一控制器的磁盘组存放镜像。

数据库-管理-WINDOWS平台下搭建ASM
 图源:《Oracle Database 10g:数据库管理 - 课堂练习 II 学生指南第 1 册》

以下是建立一个指定故障组的 ASM磁盘组 dgroup1 的例子

SQL> create diskgroup dgroup1 normal redundancy

  failgroup controller1 disk /dev/rdsk/c2*

  failgroup controller2 disk /dev/rdsk/c3*

那么组controller1的镜像只能会存在于组controller2 的磁盘中,而不会在自己组内

 

2. 搭建ASM平台

2.1  创建ASM实例

  1  配置CSSCluster Synchronization Services

oracle_home/bin 目录下执行,添加css服务

C:\oracle\product\10.2.0\db_1\BIN> localconfig add

检查css是否ok

C:\>crsctl check cssd

结果:

CSS appears healthy

2  运行oradim 创建一个ASM实例的服务

C:\> oradim -new -asmsid +ASM -startmode manual

这样在系统服务里就存在 OracleASMService+ASM,之后可以设置让其自动启动

3  oracle_home/database 目录下,创建  INIT+ASM.ORA

内容为:

instance_name='+ASM'

instance_type='asm'

asm_diskstring='c:\asmdisks\*' #asm磁盘的路径,如果不指定,asm实例将无法发现磁盘

_asm_allow_only_raw_disks=false

ASM_DISKGROUPS='DGROUP1', 'DGROUP2'  #注意:此处为将要建立的两个磁盘组,若是重启计算机后启动asm实例有问题:ORA-00205 error in identifying control file(发现是磁盘组没有加载),可能是这里没有添加的缘故

 

2.2  创建ASM磁盘组

1)调用asmtoolc:\asmdisks目录下建立虚拟磁盘:

C:\ >asmtool create c:\asmdisks\disk1 1000;

C:\>asmtool create c:\asmdisks\disk2 1000;

C:\>asmtool create c:\asmdisks\disk3 1000;

C:\>asmtool create c:\asmdisks\disk4 1000;

C:\>asmtool create c:\asmdisks\disk5 1000;

C:\>asmtool create c:\asmdisks\disk6 1000;

2 创建磁盘组

       1. 设置环境变量 ORACLE_HOME , ORACLE_SID

       C:\> set ORACLE_HOME=C:\oracle\product\10.2.0\db_1;

       C:\> set ORACLE_SID=+ASM;

       2. sysdba登录,然后创建磁盘组 DGROUP1

       C:\>sqlpuls /nolog

       Sql>conn as sysdba

       检查磁盘情况

Sql>select path,mount_status from v$asm_disk;

       先建立GROUP1,普通冗余(双镜像)

sql>create diskgroup DGROUP1 normal redundancy disk 'c:\asmdisks\disk1','c:\asmdisks\disk2','c:\asmdisks\disk3','c:\asmdisks\disk4';

再建立GROUP2,外部冗余(无镜像)

sql>create diskgroup DGROUP2 external redundancy disk 'c:\asmdisks\disk5','c:\asmdisks\disk6';

 

2.3  利用INIT+ASM.ORA 重新生成spfile,启动ASM实例

先关闭实例:

Sql>shutdown immediate;

重新生成spfile

Sql>create spfile from pfile=C:\oracle\product\10.2.0\db_1\database\INIT+ASM.ORA;

启动ASM实例

Sql>startup;

 

 

3. 数据库迁移(模拟数据库ORCLTEST迁移到ASM

3.1  登录进ORCLTEST ,修改基础参数,然后关闭,将数据库置于 nomount 状态

C:\>set ORACLE_SID=orcltest;

C:\>sqlplus /nolog

SQL> conn sys/oracle@orcltest as sysdba;

 

SQL> alter system set db_create_file_dest='+DGROUP1' scope=spfile; 

SQL> alter system set db_recovery_file_dest='+DGROUP2' scope=spfile;

SQL> alter system set db_recovery_file_dest_size=2000m scope=spfile;

SQL> alter system reset control_files  scope=spfile sid='*';

SQL> shutdown immediate;

SQL> startup nomount;

SQL> quit;

 

ALTER SYSTEM RESET命令用来在SPFILE中删除(unset)参数,此处用来删除control_file参数,因为移到ASM上后需要重建control file

3.2   启动RMAN,迁移数据库文件

          C:\>rman target sys/oracle@orcltest

注意,这里如果直接 rman target / 会报错:

    RMAN-00554: 内部恢复管理器程序包初始化失败

RMAN-04005: 目标数据库中存在错误:

ORA-01017: 用户名/口令无效; 登录被拒绝

RMAN>restore controlfile from 'c:\oracle\product\10.2.0\oradata\orcltest\CONTROL01.CTL';

RMAN> alter database mount;

#迁移数据文件

RMAN> backup as copy database format '+DGROUP1';

RMAN> switch database to copy;

RMAN> alter database open;

 

登录ORCLTEST实例,检查控制文件,数据文件,日志文件,临时文件

C:\ >sqlplus /nolog

SQL> conn sys/oracle@orcltest as sysdba;

 

#检查控制文件

SQL> select  name from v$controlfile;

 

NAME

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

+DGROUP1/orcltest/controlfile/backup.266.759515047

+DGROUP2/orcltest/controlfile/backup.262.759515049

 

#检查数据文件

SQL> select  name from v$datafile;

 

 

NAME

--------------------------------------------------------------+DGROUP1/orcltest/datafile/system.267.759515291

+DGROUP1/orcltest/datafile/undotbs1.269.759515351

+DGROUP1/orcltest/datafile/sysaux.268.759515327

+DGROUP1/orcltest/datafile/users.270.759515355

 

#检查日志文件

SQL> select member from v$logfile;

 

 

MEMBER

C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLTEST\REDO03.LOG

C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLTEST\REDO02.LOG

C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLTEST\REDO01.LOG

 

#检查临时文件

SQL> select name from v$tempfile;

 

 

NAME

C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLTEST\TEMP01.DBF

注意:

检查完各文件后,发现除了 日志文件,临时文件 没有迁移,其他文件都已经迁移进ASM磁盘组中

#要迁移临时文件,技巧是在磁盘组中创建新的文件,然后删除旧的临时文件

SQL> alter temporary tablespace temp add tempfile '+DGROUP2';

SQL> alter database default temporary tablespace temp;

SQL> drop tablespace temp including contents and datafiles;

 

 

SQL> select name from v$tempfile;

 

 

NAME

+DGROUP1/orcltest/tempfile/temp.273.759517129

 

#迁移日志文件,在磁盘组中创建新成员,并删除旧成员(只有当日志文件状态为INACTIVE 时才能删除,所以在删除第1 个日志时,先切换日志,然后关闭数据库,重启后再删除

#新增日志成员

SQL> alter database add logfile size 50m;

SQL> alter database add logfile size 50m;

SQL> alter database add logfile size 50m;

#删除旧日志

SQL> select group#,status form v$log order by group#;

SQL> alter database drop logfile group 2;

SQL> alter database drop logfile group 3;

SQL> alter system switch logfile;

SQL> shutdown immediate;

SQL> startup;

SQL> select group#,status form v$log order by group#;

SQL> alter database drop logfile group 1;

SQL> select group#,status form v$log order by group#;

 

4.  ASMCMD实用程序

      要运行ASMCMD程序,要先设置 ORACLE_HOME,ORACLE_SID

     C:\> set ORACLE_HOME=C:\ORACLE\PRODUCT\10.2.0\DB_1

     C:\> set ORACLE_SID=+ASM

     C:\> asmcmd

     查看ASM磁盘组内的文件

     ASMCMD> ls

 

部分常用的ASMCMD命令列表

命令

说明

du

显示指定的ASM目录下ASM文件占用的所有磁盘空间

ls

列出ASM目录下的内容及其属性

lsct

列出当前ASM客户端的信息

lsdg

列出所有磁盘组及其属性

mkalias

为系统生成的文件名创建别名

rm

删除文件

cp

复制文件oracle11g才有)

lsdsk

列出发现的磁盘oracle11g才有)

 

 

5.  其他重要补充

       ASM支持 数据文件、控制文件、归档日志文件、spfileRMAN备份文件、Change Tracking文件、数据泵Dump文件以及OCR文件

       注意,ASM不存储 二进制文件,预警日志,跟踪文件及口令文件

       在 数据库实例 连接到ASM实例的情况下,是不允许关闭ASM实例的,若对该实例执行 shutdown abort 命令,那么 数据库实例 也同时将关闭,并且报错。单单关闭 数据库实例 对 ASM实例不影响。 

 

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有