尽管Oracle缺省都是使用裸设备来创建ASM磁盘,但其实Oracle也允许使用普通文件来创建ASM磁盘,

当然这种方法最好只用在测试环境下或者学习环境下,不能用在生产环境下。之所以必须要用裸设备,

是因为有一个隐含参数_asm_allow_only_raw_disks在起作用。

通过SQL查看ASM参数:

  1. set lines
  2. col name for a30
  3. col value for a10
  4. col DESCRIPTION for a50
  5.  
  6. SQL> select x.ksppinm name,y.ksppstvl value,x.ksppdesc description
  7. from x$ksppi x,x$ksppcv y
  8. where x.inst_id=userenv('Instance')
  9. and y.inst_id=userenv('Instance')
  10. and x.indx=y.indx
  11. and x.ksppinm like '_asm_allow_only_raw_disks%'
  12. order by name;
  13.  
  14. NAME VALUE DESCRIPTION
  15. ------------------------------ ---------- --------------------------------------------------
  16. _asm_allow_only_raw_disks TRUE Discovery only raw devices

只要把这个参数改成FALSE,我们就可以使用文件来创建ASM了。试验如下:

1.使用dd命令创建几个文件

  1. [oracle@std u02]$ mkdir asmfile
  2. [oracle@std u02]$ cd asmfile/
  3. [oracle@std asmfile]$ dd if=/dev/zero of=cp1 bs=1M count=
  4. + records in
  5. + records out
  6. bytes ( MB) copied, 5.50622 seconds, 95.2 MB/s
  7. [oracle@std asmfile]$ dd if=/dev/zero of=cp2 bs=1M count=
  8. + records in
  9. + records out
  10. bytes ( MB) copied, 7.13052 seconds, 73.5 MB/s
  11. [oracle@std asmfile]$ dd if=/dev/zero of=cp3 bs=1M count=
  12. + records in
  13. + records out
  14. bytes ( MB) copied, 6.60984 seconds, 79.3 MB/s
  15. [oracle@std asmfile]$ dd if=/dev/zero of=cp4 bs=1M count=
  16. + records in
  17. + records out
  18. bytes ( MB) copied, 5.31099 seconds, 98.7 MB/s
  19. [oracle@std asmfile]$ ls -l
  20. total
  21. -rw-r--r-- oracle oinstall Feb : cp1
  22. -rw-r--r-- oracle oinstall Feb : cp2
  23. -rw-r--r-- oracle oinstall Feb : cp3
  24. -rw-r--r-- oracle oinstall Feb : cp4

2.创建asm参数文件并修改asm_diskstring

--注意asm_diskstrint参数设置

  1. [oracle@std dbs]$ cp init+ASM.ora init+ASM2.ora
  2. [oracle@std dbs]$ vi init+ASM2.ora
  3. [oracle@std dbs]$ cat init+ASM2.ora
  4. *.asm_diskstring='/u02/asmfile/cp*'
  5. *.instance_type='asm'
  6. *.large_pool_size=24M
  7. *.remote_login_passwordfile='SHARED'
  8. *.background_dump_dest='/u02/app/admin/+ASM2/bdump'
  9. *.core_dump_dest='/u02/app/admin/+ASM2/cdump'
  10. *.user_dump_dest='/u02/app/admin/+ASM2/bdump'

3.启动ASM实例

  1. [oracle@std dbs]$ export ORACLE_SID=+ASM2
  2. [oracle@std dbs]$ sqlplus '/as sysdba'
  3.  
  4. SQL*Plus: Release 10.2.0.4. - Production on Mon Feb ::
  5.  
  6. Copyright (c) , , Oracle. All Rights Reserved.
  7.  
  8. Connected to an idle instance.
  9.  
  10. SQL> startup
  11. ASM instance started
  12.  
  13. Total System Global Area bytes
  14. Fixed Size bytes
  15. Variable Size bytes
  16. ASM Cache bytes
  17. ORA-: no diskgroups mounted
  18.  
  19. SQL> select path from v$asm_disk;
  20.  
  21. no rows selected

启动ASM实例后还看不到我们asm_diskstring参数指定的设置!!!

4.修改隐含参数,重启ASM实例

  1. [oracle@std dbs]$ vi init+ASM2.ora
  2. [oracle@std dbs]$ cat init+ASM2.ora
  3. *.asm_diskstring='/u02/asmfile/cp*'
  4. *.instance_type='asm'
  5. *.large_pool_size=24M
  6. *.remote_login_passwordfile='SHARED'
  7. *.background_dump_dest='/u02/app/admin/+ASM2/bdump'
  8. *.core_dump_dest='/u02/app/admin/+ASM2/cdump'
  9. *.user_dump_dest='/u02/app/admin/+ASM2/bdump'
  10. _asm_allow_only_raw_disks= FALSE
  1. [oracle@std dbs]$ export ORACLE_SID=+ASM2
  2. [oracle@std dbs]$ sqlplus '/as sysdba'
  3.  
  4. SQL*Plus: Release 10.2.0.4. - Production on Mon Feb ::
  5.  
  6. Copyright (c) , , Oracle. All Rights Reserved.
  7.  
  8. Connected to an idle instance.
  9.  
  10. SQL> startup
  11. ASM instance started
  12.  
  13. Total System Global Area bytes
  14. Fixed Size bytes
  15. Variable Size bytes
  16. ASM Cache bytes
  17. ORA-: no diskgroups mounted
  18.  
  19. SQL> select path from v$asm_disk;
  20.  
  21. PATH
  22. --------------------------------------------------------------------------------
  23. /u02/asmfile/cp4
  24. /u02/asmfile/cp1
  25. /u02/asmfile/cp2
  26. /u02/asmfile/cp3

现在可以看到修改参数后可以看到asm_diskstring参数指定的磁盘了,现在看一下是否能够创建磁盘组

5.创建磁盘组

--注意这些创建的磁盘组不会写入init+ASM2.ora,因为我们当前使用的是pfile,重启实例会丢失。

  1. SQL> create diskgroup dg normal redundancy disk
  2. '/u02/asmfile/cp1','/u02/asmfile/cp2' name dg_data;
  3.  
  4. Diskgroup created.
  5.  
  6. SQL> create diskgroup back normal redundancy
  7. disk '/u02/asmfile/cp3','/u02/asmfile/cp4' name backup_data;
  8.  
  9. Diskgroup created.

--每个磁盘都分配了名字

  1. SQL> select name,path from v$asm_disk;
  2.  
  3. NAME PATH
  4. -------------------- --------------------------------------------------
  5. BACKUP_DATA /u02/asmfile/cp4
  6. BACK_0000 /u02/asmfile/cp3
  7. DG_DATA /u02/asmfile/cp2
  8. DG_0000 /u02/asmfile/cp1

6.查看磁盘组的属性

  1. SQL> select name,block_size,allocation_unit_size from v$asm_diskgroup;
  2.  
  3. NAME BLOCK_SIZE ALLOCATION_UNIT_SIZE
  4. -------------------- ---------- --------------------
  5. DG
  6. BACK

上面的SQL查询了磁盘组的数据块大小及分配单元,其实这两个属性也是由隐含参数控制的,

--查询ASM的隐含参数,这些参数没有十足的把握尽量不要修改

  1. SQL> set lines
  2. SQL> col name for a30
  3. SQL> col value for a10
  4. SQL> col DESCRIPTION for a50
  5. SQL> select x.ksppinm name,y.ksppstvl value,x.ksppdesc description
  6. from x$ksppi x,x$ksppcv y
  7. where x.inst_id=userenv('Instance')
  8. and y.inst_id=userenv('Instance')
  9. and x.indx=y.indx
  10. and x.ksppinm like '_asm%'
  11. order by name;
  12.  
  13. NAME VALUE DESCRIPTION
  14. ------------------------------ ---------- --------------------------------------------------
  15. _asm_acd_chunks initial ACD chunks created
  16. _asm_allow_only_raw_disks FALSE Discovery only raw devices
  17. _asm_allow_resilver_corruption FALSE Enable disk resilvering for external redundancy
  18. _asm_ausize allocation unit size --指定了分配单元
  19. _asm_blksize metadata block size --指定了数据块大小
  20. _asm_disk_repair_time seconds to wait before dropping a failing disk
  21. _asm_droptimeout timeout before offlined disks get dropped (in 3s t
  22. icks)
  23.  
  24. _asm_emulmax max number of concurrent disks to emulate I/O erro
  25. rs
  26.  
  27. NAME VALUE DESCRIPTION
  28. ------------------------------ ---------- --------------------------------------------------
  29.  
  30. _asm_emultimeout timeout before emulation begins (in 3s ticks)
  31. _asm_kfdpevent KFDP event
  32. _asm_libraries ufs library search order for discovery
  33. _asm_maxio Maximum size of individual I/O request
  34. _asm_skip_resize_check FALSE skip the checking of the clients for s/w compatibi
  35. lity for resize
  36.  
  37. _asm_stripesize ASM file stripe size
  38. _asm_stripewidth ASM file stripe width
  39. _asm_wait_time Max/imum time to wait before asmb exits
  40.  
  41. NAME VALUE DESCRIPTION
  42. ------------------------------ ---------- --------------------------------------------------
  43. _asmlib_test Osmlib test event
  44. _asmsid asm ASM instance id
  45.  
  46. rows selected.
  47.  
  48. SQL>

致谢:本文章参考了张晓明<<大话Oracle RAC 集群 高可用性 备份与恢复>>

使用文件模拟ASM磁盘的更多相关文章

  1. 【翻译自mos文章】将expdp的dmp文件从asm磁盘组里边放到本地文件系统里边

    将expdp的dmp文件从asm磁盘组里边放到本地文件系统里边 參考原文: How To Extract Datapump File From ASM Diskgroup To Local Files ...

  2. 普通文件迁移ASM

    1.ASM Access Through FTP and HTML Using XDB Configuration 2.rman 3.dbms_file_transfer 4.11g asmcmd 利 ...

  3. 单机静默安装GI软件并创建ASM实例和ASM磁盘组

    环境:RHEL 6.4 + Oracle 11.2.0.4 需求:单机静默安装GI软件并创建ASM实例和ASM磁盘组,为后续迁移数据库文件到ASM做准备 1. 安装配置GI软件 2. 创建ASM实例 ...

  4. 99-oracle-asmdevices.rules(udev方式创建asm磁盘)

    一.创建asm磁盘的几种方式 创建asm方式很多主要有以下几种 1.Faking方式 2.裸设备方式 3.udev方式(它下面有两种方式) 3.1 uuid方式. 3.2 raw方式(裸设备方式) 4 ...

  5. ORACLE误删除ASM磁盘修复

    在数据库运维中,总会遇到一些粗心大意的DBA,一不小心删除一些东西,这里举例讲解在误删除ASM磁盘之后,如果用KFED工具进行恢复: [grid@RAC1 ~]$ sqlplus / as sysas ...

  6. 使用asmcmdcp命令把datafile从文件系统移动(move)到asm磁盘组中 针对11gR2

    使用asmcmd cp命令 把datafile从文件系统移动(move)到asm磁盘组中--针对11gR2 参考原文:How to Move a Datafile from Filesystem to ...

  7. 11G ORACLE RAC DBCA 无法识别asm磁盘组

    ASM磁盘无法识别几种现象: 1) gi家目录或者其子目录权限错误 2)asm磁盘的权限错误 3)asm实例未启动或者asm磁盘组没有mount上 4)asm磁盘组资源没有在线 5)oracle用户的 ...

  8. 【翻译自mos文章】回收 asm磁盘空间的方法

    回收 asm磁盘空间的方法 參考原文: How To Reclaim Asm Disk Space? (Doc ID 351866.1) 适用于: Oracle Database - Enterpri ...

  9. 案例:Oracle报错ASM磁盘组不存在或没有mount

    案例:Oracle报错ASM磁盘组不存在或没有mount 环境:RHEL 6.5 + Oracle Standby RAC 11.2.0.4 我做Standby RAC实验时,在恢复控制文件时,报错无 ...

随机推荐

  1. KMP模式匹配算法

    KMP模式匹配算法 相信很多人对于这个还有点不了解,或者说是不懂,下面,通过一道题,来解决软考中的这个问题! 正题: aaabaaa,其next函数值为多少? 对于这个问题,我们应该怎么做呢? 1.整 ...

  2. Servlet部分细节介绍

    1 Servlet与线程安全    因为一个类型的Servlet只有一个实例对象,那么就有可能会出现一个Servlet同时处理多个请求,那么Servlet是否为线程安全的呢?答案是:"不是线 ...

  3. 【POI word】使用POI实现对Word的读取以及生成

    项目结构如下: 那第一部分:先是读取Word文档 package com.it.WordTest; import java.io.FileInputStream; import java.io.Fil ...

  4. Adobe Flash Media Server安装

    Flash Media Server(FMS)是一个流媒体服务器 使用 实时消息传送协议(RTMP),RTMP是一种未加密的TCP/IP协议,专门设计用来高速传送音频.视频和数据信息. 3.5版32位 ...

  5. PHP 二分查找(详细)

    <?php //        PHP 二分查找 function search($arr, $sea){ $low = 0;                // 确定数组的开始的下标 $len ...

  6. HDU4067 Random Maze(最小费用最大流)

    题目大概说,给一张图,删除其中一些单向边,使起点s出度比入度多1,终点t入度比出度多1,其他点出度等于入度.其中删除边的费用是bi,保留边的费用是ai,问完成要求最小的费用是多少. 一开始我想到和混合 ...

  7. ReSharper 配置及用法(一)

    ReSharper是一个JetBrains公司出品的著名的代码生成工具,其能帮助Microsoft Visual Studio成为一个更佳的IDE.它包括一系列丰富的能大大增加C#和Visual Ba ...

  8. iOSDay27之界面通信

    1. 属性传值(前面的界面给后面传值) 第一步: 在 SecondViewController.h 文件里定义一个存放传过来值的变量 contents #import <UIKit/UIKit. ...

  9. (转)Ubuntu samba配置服务文件包

    转:http://os.51cto.com/art/201001/176366.htm Ubuntu samba服务配置是很不错的文件应用很有学习价值,这里我主要讲解Ubuntu samba服务配置的 ...

  10. 【转】crontab定时任务中文乱码问题

    转载:http://blog.163.com/rettar@126/blog/static/1216503422012135511740/ 手动执行都很正常的的脚步,添加到定时任务中一直执行失败,日志 ...