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

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

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

通过SQL查看ASM参数:

set lines
col name for a30
col value for a10
col DESCRIPTION for a50 SQL> select x.ksppinm name,y.ksppstvl value,x.ksppdesc description
from x$ksppi x,x$ksppcv y
where x.inst_id=userenv('Instance')
and y.inst_id=userenv('Instance')
and x.indx=y.indx
and x.ksppinm like '_asm_allow_only_raw_disks%'
order by name; NAME VALUE DESCRIPTION
------------------------------ ---------- --------------------------------------------------
_asm_allow_only_raw_disks TRUE Discovery only raw devices

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

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

[oracle@std u02]$ mkdir asmfile
[oracle@std u02]$ cd asmfile/
[oracle@std asmfile]$ dd if=/dev/zero of=cp1 bs=1M count=
+ records in
+ records out
bytes ( MB) copied, 5.50622 seconds, 95.2 MB/s
[oracle@std asmfile]$ dd if=/dev/zero of=cp2 bs=1M count=
+ records in
+ records out
bytes ( MB) copied, 7.13052 seconds, 73.5 MB/s
[oracle@std asmfile]$ dd if=/dev/zero of=cp3 bs=1M count=
+ records in
+ records out
bytes ( MB) copied, 6.60984 seconds, 79.3 MB/s
[oracle@std asmfile]$ dd if=/dev/zero of=cp4 bs=1M count=
+ records in
+ records out
bytes ( MB) copied, 5.31099 seconds, 98.7 MB/s
[oracle@std asmfile]$ ls -l
total
-rw-r--r-- oracle oinstall Feb : cp1
-rw-r--r-- oracle oinstall Feb : cp2
-rw-r--r-- oracle oinstall Feb : cp3
-rw-r--r-- oracle oinstall Feb : cp4

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

--注意asm_diskstrint参数设置

[oracle@std dbs]$ cp init+ASM.ora  init+ASM2.ora
[oracle@std dbs]$ vi init+ASM2.ora
[oracle@std dbs]$ cat init+ASM2.ora
*.asm_diskstring='/u02/asmfile/cp*'
*.instance_type='asm'
*.large_pool_size=24M
*.remote_login_passwordfile='SHARED'
*.background_dump_dest='/u02/app/admin/+ASM2/bdump'
*.core_dump_dest='/u02/app/admin/+ASM2/cdump'
*.user_dump_dest='/u02/app/admin/+ASM2/bdump'

3.启动ASM实例

[oracle@std dbs]$ export ORACLE_SID=+ASM2
[oracle@std dbs]$ sqlplus '/as sysdba' SQL*Plus: Release 10.2.0.4. - Production on Mon Feb :: Copyright (c) , , Oracle. All Rights Reserved. Connected to an idle instance. SQL> startup
ASM instance started Total System Global Area bytes
Fixed Size bytes
Variable Size bytes
ASM Cache bytes
ORA-: no diskgroups mounted SQL> select path from v$asm_disk; no rows selected

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

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

[oracle@std dbs]$ vi init+ASM2.ora
[oracle@std dbs]$ cat init+ASM2.ora
*.asm_diskstring='/u02/asmfile/cp*'
*.instance_type='asm'
*.large_pool_size=24M
*.remote_login_passwordfile='SHARED'
*.background_dump_dest='/u02/app/admin/+ASM2/bdump'
*.core_dump_dest='/u02/app/admin/+ASM2/cdump'
*.user_dump_dest='/u02/app/admin/+ASM2/bdump'
_asm_allow_only_raw_disks= FALSE
[oracle@std dbs]$ export ORACLE_SID=+ASM2
[oracle@std dbs]$ sqlplus '/as sysdba' SQL*Plus: Release 10.2.0.4. - Production on Mon Feb :: Copyright (c) , , Oracle. All Rights Reserved. Connected to an idle instance. SQL> startup
ASM instance started Total System Global Area bytes
Fixed Size bytes
Variable Size bytes
ASM Cache bytes
ORA-: no diskgroups mounted SQL> select path from v$asm_disk; PATH
--------------------------------------------------------------------------------
/u02/asmfile/cp4
/u02/asmfile/cp1
/u02/asmfile/cp2
/u02/asmfile/cp3

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

5.创建磁盘组

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

SQL> create diskgroup dg normal redundancy disk
'/u02/asmfile/cp1','/u02/asmfile/cp2' name dg_data; Diskgroup created. SQL> create diskgroup back normal redundancy
disk '/u02/asmfile/cp3','/u02/asmfile/cp4' name backup_data; Diskgroup created.

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

SQL> select name,path from v$asm_disk;

NAME                 PATH
-------------------- --------------------------------------------------
BACKUP_DATA /u02/asmfile/cp4
BACK_0000 /u02/asmfile/cp3
DG_DATA /u02/asmfile/cp2
DG_0000 /u02/asmfile/cp1

6.查看磁盘组的属性

SQL> select name,block_size,allocation_unit_size from v$asm_diskgroup;

NAME                 BLOCK_SIZE ALLOCATION_UNIT_SIZE
-------------------- ---------- --------------------
DG
BACK

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

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

SQL> set lines
SQL> col name for a30
SQL> col value for a10
SQL> col DESCRIPTION for a50
SQL> select x.ksppinm name,y.ksppstvl value,x.ksppdesc description
from x$ksppi x,x$ksppcv y
where x.inst_id=userenv('Instance')
and y.inst_id=userenv('Instance')
and x.indx=y.indx
and x.ksppinm like '_asm%'
order by name; NAME VALUE DESCRIPTION
------------------------------ ---------- --------------------------------------------------
_asm_acd_chunks initial ACD chunks created
_asm_allow_only_raw_disks FALSE Discovery only raw devices
_asm_allow_resilver_corruption FALSE Enable disk resilvering for external redundancy
_asm_ausize allocation unit size --指定了分配单元
_asm_blksize metadata block size --指定了数据块大小
_asm_disk_repair_time seconds to wait before dropping a failing disk
_asm_droptimeout timeout before offlined disks get dropped (in 3s t
icks) _asm_emulmax max number of concurrent disks to emulate I/O erro
rs NAME VALUE DESCRIPTION
------------------------------ ---------- -------------------------------------------------- _asm_emultimeout timeout before emulation begins (in 3s ticks)
_asm_kfdpevent KFDP event
_asm_libraries ufs library search order for discovery
_asm_maxio Maximum size of individual I/O request
_asm_skip_resize_check FALSE skip the checking of the clients for s/w compatibi
lity for resize _asm_stripesize ASM file stripe size
_asm_stripewidth ASM file stripe width
_asm_wait_time Max/imum time to wait before asmb exits NAME VALUE DESCRIPTION
------------------------------ ---------- --------------------------------------------------
_asmlib_test Osmlib test event
_asmsid asm ASM instance id rows selected. 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. Hadoop Mapreduce分区、分组、二次排序过程详解[转]

    原文地址:Hadoop Mapreduce分区.分组.二次排序过程详解[转]作者: 徐海蛟 教学用途 1.MapReduce中数据流动   (1)最简单的过程:  map - reduce   (2) ...

  2. eclipse文本域内只能输入繁体中文

    背景:在文本编辑器下写纯文本时不知怎么回事儿,原来能输入简体字,但过了之后只能输入繁体中文了!我用的是sogou拼音输入法,我检查过,输入法设置的是简体中文,eclipse默认的编码方式是utf-8. ...

  3. Struts2请求参数校验

    校验的分类 客户端数据校验 和 服务器端数据校验 客户端数据校验 ,通过JavaScript 完成校验 (改善用户体验,使用户减少出错 ) 服务器数据校验 ,通过Java代码 完成校验 struts2 ...

  4. c#写windows服务(转)

    序言 前段时间做一个数据迁移项目,刚开始用B/S架构做的项目,但B/S要寄存在IIs中,而IIs又不稳定因素,如果重启IIs就要打开页面才能运行项目.有不便之处,就改用Windows服务实现.这篇就总 ...

  5. node.js整理 02文件操作-常用API

    NodeJS不仅能做网络编程,而且能够操作文件. 拷贝 小文件拷贝 var fs = require('fs'); function copy(src, dst) { fs.writeFileSync ...

  6. docker push到本地仓库失败

    开启registry的方法: docker run -d -p : -v /data/registry:/tmp/registry registry 出错内容: Error: Status tryin ...

  7. Linux 命令集合

    1.find /etc -name "*" | xargs grep "hello abcserver" 按照内容过滤2.grep -v "^#&qu ...

  8. Java 语言细节

    1.  if(x = 1) 为什么java不会因为这样的笔误代码犯错?  // meant x == 1 因为在C++中,整数0代表布尔值false,非0值相当于布尔值true,在Java中int与布 ...

  9. three.js阴影

    <!DOCTYPE html> <html> <head> <title>Example 01.03 - Materials and light< ...

  10. 21045308刘昊阳 《Java程序设计》第十周学习总结

    21045308刘昊阳 <Java程序设计>第十周学习总结 教材学习内容总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据. 狭义的网络编程范畴:程序员所作的事情 ...