Oracle在linux上使用裸设备.docx
《Oracle在linux上使用裸设备.docx》由会员分享,可在线阅读,更多相关《Oracle在linux上使用裸设备.docx(23页珍藏版)》请在冰豆网上搜索。
Oracle在linux上使用裸设备
Linux裸设备(RAW)
1、
裸设备的概念
裸设备,也叫裸分区(原始分区),是一种没有经过格式化,不被unix通过文件系统来读取的特殊字符设备。
本文收集裸设备和oracle问答20例。
1.什么叫做裸设备?
裸设备,也叫裸分区(原始分区),是一种没有经过格式化,不被unix通过文件系统来读取的特殊字符设备。
它由应用程序负责对它进行读写操作。
不经过文件系统的缓冲。
2.如何辨别裸设备?
在unix的/dev目录下,有许多文件,其中有两个大类:
字符设备文件和块设备文件。
字符设备特殊文件进行i/o操作不经过操作系统的缓冲区,而块设备特殊文件用来同外设进行定长的包传输。
字符特殊文件与外设进行i/o操作时每次只传输一个字符。
而对于块设备特殊文件来说,它用了cache机制,在外设和内存之间一次可以传送一整块数据。
裸设备使用字符特殊文件。
在/dev目录下,你可以看到许多这样的文件。
3.使用裸设备的好处
因为使用裸设备避免了再经过unix操作系统这一层,数据直接从disk到oracle进行传输,所以使用裸设备对于读写频繁的数据库应用来说,可以极大地提高数据库系统的性能。
当然,这是以磁盘的i/o非常大,磁盘i/o已经称为系统瓶颈的情况下才成立。
如果磁盘读写确实非常频繁,以至于磁盘读写成为系统瓶颈的情况成立,那么采用裸设备确实可以大大提高性能,最大甚至可以提高至40%,非常明显。
而且,由于使用的是原始分区,没有采用文件系统的管理方式,对于unix维护文件系统的开销也都没有了,比如不用再维护i-node,空闲块等,这也能够导致性能的提高。
4.如何决定是否应该使用裸设备?
判断是否使用裸设备要从以下方面进行考虑:
首先,数据库系统本身需要已经被比较好的经过了优化。
优化是一门很有些技术的话题,很难简单地讲述。
其次,使用unix命令来辨别是否存在磁盘读写瓶颈。
比如unix的vmstat,sar等命令都可以较好的进行鉴别。
如果决定采用裸设备,需要磁盘上还有空闲的分区。
否则,就要新添磁盘,或者对原有系统重新规划。
5.什么系统必须使用裸设备?
如果使用了oracle并行服务器选项,则必须采用裸设备来存放所有的数据文件,控制文件,重做日志文件。
只有把这些文件放到裸设备上,才能保证所有oracle实例都可以读取这个数据库的文件。
这是由unix操作系统的特性决定的。
还有一种情况是,如果你想使用异步i/o,那么在有些unix上也必须采用裸设备。
这个需要参考具体unix的相关文档。
6.能够使用一个磁盘的第一个分区作为裸设备吗?
可以,但是不推荐。
在unix的比较旧的版本是银行,磁盘的第一个分区常常包含这个磁盘的一些信息,以及逻辑卷的一些控制信息。
若这些部分被裸设备覆盖的话,磁盘就会变得不可识别,导致系统崩溃。
较新的unix版本不会发生这样的情况,因为它们采用了更复杂的技术来管理磁盘,逻辑卷的一些信息。
但是,除非很确信不要使用磁盘的第一个分区来作为裸设备。
7.我可以把整个裸设备都作为oracle的数据文件吗?
不行。
必须让数据文件的大小稍微小于该裸设备的实际大小。
至少要空出两个oracle块的大小来。
8.裸设备应该属于那个用户?
应该由root来创建裸设备,然后再分配给oracle用户以供使用。
同时还要把它归入oracle用户所在的那个组里边(通常都是dba)。
9.在创建数据文件时如何指定裸设备?
和普通文件没有什么太大的区别,一样都是在单引号里边写上裸设备的详细路径就可以了。
举一个例子:
要在创建一个表空间,使用两个裸设备,每个分别为30m的大小,oracle块的大小为4k,可以用下面的命令:
createtablespaceraw_ts
datafile'/dev/raw1'size30712k
datafile'/dev/raw2'size30712k;
10.oracle块的大小和裸设备有什么关系吗?
oracle块必须是裸设备上物理块大小的倍数。
11.如何在裸设备上进行备份?
在裸设备上,不能使用unix实用程序来进行备份,唯一的办法是使用最基本的unix命令:
dd来进行备份。
比如:
ddif=/dev/raw1of=/dev/rmt0bs=16k。
dd的具体语法可以参考unix手册,或者联机帮助。
你也可以先用dd把裸设备上的数据文件备份到磁盘上,然后再利用unix实用程序进一步处理。
12.如果我没有使用oracle并行服务器选项,我可以在数据库上让一部分数据文件使用文件系统,另一部分使用裸设备吗?
可以。
但是这样的话,会使备份过程更加复杂。
13.我应该把联机重做日志文件放到裸设备上吗?
这是一个极好的选择。
联机重做日志文件是写操作非常频繁的文件,放到裸设备上非常合适。
如果你使用了并行服务器选项,那么联机重做日志文件必须放到裸设备上面。
14.可以把归档日志文件放到裸设备上吗?
不行。
归档日志文件必须放到常规的unix文件系统上面,或者直接放到磁带上面去。
15.我可以在裸设备上边放置多个数据文件吗?
不行。
所以你必须在设置裸设备时非常小心。
太小的话,会导致空间很快用完,太大的话,空间就白白浪费了。
16.因应该把几个裸设备放到同一个物理磁盘上吗?
这样做不好。
因为使用裸设备就是为了提高磁盘读写速度。
而把多个裸设备放到同一个物理磁盘上会导致读写竞争,这样对于提高i/o速度是不利的。
应该尽量分散裸设备到不同的物理磁盘上,最好是分散到不同的磁盘控制器上。
这是最佳选择。
17.需要把所有裸设备都定义成同样的大小吗?
这不是必须得,但是划分成同样的大小对于管理数据库比较有利。
18.为了在unix上使用裸设备,我需要改变unix核心参数吗?
不需要。
但可以选择减小缓冲区的大小,如果没有别的应用也在同一台unix机器上运行。
因为运用了裸设备以后,不再使用unix的系统缓冲区。
19.为了提高读写速度,在操作系统级别上,还有什么办法可以采取吗?
使用raid(廉价冗余磁盘阵列)也是非常有效的办法,尤其实那种读写非常频繁的系统。
20.在考虑了以上所有方面后,还能有什么办法可以提高性能的吗?
这就需要对oracle进行优化,并且购买更多的磁盘和磁盘控制器,来分散i/o到不同的磁盘上。
源文档<
2、
Linux裸设备管理
1、什么是Linux裸设备?
字符设备?
块设备?
裸设备:
也叫裸分区(原始分区),是一种没有经过格式化,不被Unix/Linux通过文件系统来读取的特殊字符设备。
裸设备可以绑定一个分区,也可以绑定一个磁盘。
字符设备:
对字符设备的读写不需要通过OS的buffer。
它不可被文件系统mount。
块设备:
对块设备的读写需要通过OS的buffer,它可以被mount到文件系统中。
2、一个系统可以有多少个裸设备?
这个与linux的版本相关,在旧版本中,最多只可以有256个裸设备,Linux4下做多可以绑定8192个裸设备。
但是在linux下,最多只能有255个分区,所以,如果用裸设备绑定分区,最多只能绑定255个裸设备。
如果是用lvm,则没有这个限制。
3、Linux下单个磁盘最多可以有多少个分区?
15个。
3个主分区+1个扩展分区+11个逻辑分区。
建议的分区方法是:
先分3个主分区,第四个分区为扩展分区,然后在扩展分区中再分成11个逻辑分区。
注意,裸设备不要绑定在扩展分区上。
4、linux下是否需要绑定裸设备?
unix呢?
linux下如果需要使用裸设备,则需要手工进行绑定。
unix下则不用。
因为Unix中每一个块设备都会有一个对应的字符设备用于非缓存(unbuffered)I/O,这就是他对应的裸设备了。
而Linux中rawio的则实现了一套非绑定(unbound)的裸设备/dev/rawN或者/dev/raw/rawN和一个控制设备/dev/rawct用来把他们绑定到块设备上。
所以当需要使用一个裸设备的时候,就需要把他和一个真实存在的块设备对应起来,这一个步骤实际上就是完成了Unix里的自动对应一个非缓存字符设备。
5、linux如何绑定裸设备?
两种方式:
1)命令绑定
raw/dev/raw/raw[n]/dev/xxx
其中n的范围是0-8191。
raw目录不存在可以创建。
执行这个命令,就会在/dev/raw下生成一个对应的raw[n]文件
用命令方式绑定裸设备在系统重启后会失效。
2)修改文件
修改/etc/sysconfig/rawdevices文件如下,以开机时自动加载裸设备,如:
/dev/raw/raw1/dev/sdb1
这种方式是通过启动服务的方式来绑定裸设备。
也可以把这个命令写在/etc/rc.local上,使每次启动都执行这些命令。
6、如何把裸设备作为oracle数据文件?
有什么需要注意的?
1)绑定裸设备
参考上文
2)改变裸设备属主
两种方法:
.把命令卸载/etc/rc.local上
chownoracle:
oinstall/dev/raw/raw1
.修改/etc/udev/permissions.d/50-udev.permissions文件
将/etc/udev/permissions.d/50-udev.permissions的113行
从
raw/*:
root:
disk:
0660
修改为
raw/*:
oracle:
oinstall:
0660
这个的意思是修改裸设备的默认属主为oracle:
oinstall,默认的mode是0660。
如果是用lvm,也需要把逻辑卷绑定到裸设备上,过程和绑定到普通分区类似。
7、使用裸设备作为oracle数据文件有什么需要注意的?
使用裸设备作为oracle的数据文件必须注意以下几点:
1)一个裸设备只能放置一个数据文件
2)数据文件的大小不能超过裸设备的大小
如果是日志文件,则裸设备最大可用大小=裸设备对应分区大小-1*512(保留一个redolock)
如果是数据文件,则裸设备最大可用大小=裸设备对应分区大小-2*db_block_size(保留两个block)
为了简单起见,对所有的文件设置称比裸设备小1M即可。
3)数据文件最好不要设置称自动扩展,如果设置称自动扩展,一定要把maxsize设置设置为比裸设备小
8、是否可以直接用逻辑卷作为oracle数据文件?
linux下oracle不能直接把逻辑卷作为裸设备,也要进行绑定。
unix下就不需要。
9、如何知道当前绑定了什么裸设备?
raw-qa命令列出当前绑定的所有裸设备。
10、如何知道某个裸设备的大小
比较笨的办法是,找出看裸设备对应的是那个实际的块设备,然后用fdisk-l/dev/[h,s]dXN看那个块设备的大小就好了。
比较简单的办法是用blockdev命令来计算,如:
#blockdev--getsize/dev/raw/raw1
11718750
11718750表示有多少OSBLIOCK。
一般一个OSBLOCK大小是512字节,所以11718750*512/1024/1024/1024=5722(m)就是裸设备的大小。
3、
LinuxLVM裸设备
一:
这部分是网上搜到的,扫盲,我的操作在第二部分。
1.创建pv
pvcreate-M2--metadatasize100M/dev/sda
pvcreate-M2--metadatasize100M/dev/sdb1
pvcreate-M2--metadatasize100M/dev/sdb2
pvcreate-M2--metadatasize100M/dev/sdc
物理卷可以是整个硬盘(lun),也可以是硬盘上的一个分区
补充:
元数据(MetaData)是关于数据仓库的数据,指在数据仓库建设过程中所产生的有关数据源定义,目标定义,转换规则等相关的关键数据。
元数据(metadata),关于数据库中表的定义、字段的定义,元组的定义等等,是数据库中最基础的描述,所以称之为元数据。
又称为数据目录,关于数据库的数据库。
一个数据存储在共享卷里时,我们可以直接看到它是一个文档、或图片、或视频、或数据库文件,这些都是数据本身。
然而在存储该数据时,文件系统还会产生很多无法直接看到的,与该数据有关的数据,如文件系统中文件检索表,路径信息、地址信息等,而这些数据就称之为文档、图片、视频等在共享卷中的元数据。
SAN网络存储共享软件管理的主要内容就是元数据,控制元数据在多主机之间的传输。
我们可以在很多地方看到元数据的存储,网上DOWN下来的电影本身一个视频文件数据,而点击右键查到看的视频文件属性,如存储路径、码率、文件大小、及导演、演员、制作单位等就是视频文件的元数据。
-M2指定metadata使用lvm2格式?
?
2.创建vg
vgcreatevg_db/dev/sda/dev/sdb1/dev/sdb2/dev/sdc-s128m
-s,--physicalextentsizePhysicalExtentSize[kKmMgGtT]
Setsthephysicalextentsizeonphysicalvolumesofthisvolumegroup.
3.创建lv
lvcreate-L2048m-i4-I64kvg_db-nlv_2g_001
lvcreate-L2048m-i4-I64kvg_db-nlv_2g_002
4.绑定
raw/dev/raw/raw1/dev/mapper/vg_db-lv_2g_001
raw/dev/raw/raw2/dev/mapper/vg_db-lv_2g_002
要注意的是lv的命名方式,命名方式分解如下:
/dev/mapper/vgname'-'lvname.
使用raw命令绑定的裸设备在重启后会失效。
*对于AS4
所以需要修改/etc/sysconfig/rawdevices配置文件,在文件中加入如下内容(每个裸设备一行):
/dev/raw/raw1/dev/mapper/vg_db-lv_2g_001
/dev/raw/raw2/dev/mapper/vg_db-lv_2g_002
执行/etc/init.d/rawdevicesrestart使配置文件中的裸设备生效
执行/sbin/chkconfigrawdeviceson保证机器启动的时候裸设备能够加载
*对于AS5
raw设备映射
raw设备接口在红帽企业Linux5里已经被取消了;raw设备映射现在通过udev规则进行配置。
要配置raw设备映射,可以在/etc/udev/rules.d/60-raw.rules里加入以下格式的条目:
设备名称:
ACTION=="add",KERNEL="",RUN+="raw/dev/raw/rawX%N"
主/次号码:
ACTION=="add",ENV{MAJOR}="A",ENV{MINOR}="B",RUN+="raw/dev/raw/rawX%M%m"
用你需要绑定的设备名称替换(如:
/dev/sda1)。
"A"和"B"是设备的主/次号码,X是系统使用的raw设备号码。
另外关于此处的配置有一点非常奇怪,我看到redhat官方文档中关于raw.rule的示例中说KERNEL==..或ENV{MAJOR}...只需要任意配置一个就可以,但我在具体配置过程中发现百试不爽,我尝试了各种组合发现都不生效,必须二者同时配置才可以
5.授权
chown-Roracle.dba/dev/mapper
修改配置文件/etc/udev/permissions.d/50-udev.permissions
注释掉raw/*:
root:
disk:
0660
添加新行raw/*:
oracle:
dba:
0660
6.链接(可选)
ln-s/dev/raw/raw1/oradata/ningoo/system01.dbf
ln-s/dev/raw/raw2/oradata/ningoo/undo01.dbf
二我的操作
注:
查看pv,vg,lv命令:
pvdisplay,vgdisplay,lvdisplay
创建pv
[root@RHEL5opt]#pvcreatepvcreate-M2--metadatasize100M/dev/hdc
Devicepvcreatenotfound(orignoredbyfiltering).
Physicalvolume"/dev/hdc"successfullycreated
创建vg
[root@RHEL5opt]#vgcreatevg_oradata/dev/hdc-s128m
Volumegroup"vg_oradata"successfullycreated
创建LV
[root@RHEL5opt]#lvcreate-L384m-I64kvg_oradata-ncontrol_1
Ignoringstripesizeargumentwithsinglestripe
Logicalvolume"control_1"created
另外还需要创建的裸设备有:
lvcreate-L384M-ncontrol_2-I64kvg_oradata
lvcreate-L384M-ncontrol_3-I64kvg_oradata
lvcreate-L128M-nredo01_1-I64kvg_oradata
lvcreate-L128M-nredo01_2-I64kvg_oradata
lvcreate-L128M-nredo02_1-I64kvg_oradata
lvcreate-L128M-nredo02_2-I64kvg_oradata
lvcreate-L128M-nredo03_1-I64kvg_oradata
lvcreate-L128M-nredo03_2-I64kvg_oradata
lvcreate-L1024M-nsystem-I64kvg_oradata
lvcreate-L1024M-nsysaux-I64kvg_oradata
lvcreate-L1024M-ntemp-I64kvg_oradata
lvcreate-L2048M-nundodbs-I64kvg_oradata
lvcreate-L1024M-ntools-I64kvg_oradata
lvcreate-L3072M-ndata-I64kvg_oradata
绑定
raw/dev/raw/raw1/dev/mapper/vg_oradata-control_1
raw/dev/raw/raw2/dev/mapper/vg_oradata-control_2
raw/dev/raw/raw3/dev/mapper/vg_oradata-control_3
raw/dev/raw/raw4/dev/mapper/vg_oradata-redo01_1
raw/dev/raw/raw5/dev/mapper/vg_oradata-redo01_2
raw/dev/raw/raw6/dev/mapper/vg_oradata-redo02_1
raw/dev/raw/raw7/dev/mapper/vg_oradata-redo02_2
raw/dev/raw/raw8/dev/mapper/vg_oradata-redo03_1
raw/dev/raw/raw9/dev/mapper/vg_oradata-redo03_2
raw/dev/raw/raw10/dev/mapper/vg_oradata-system
raw/dev/raw/raw11/dev/mapper/vg_oradata-sysaux
raw/dev/raw/raw12/dev/mapper/vg_oradata-temp
raw/dev/raw/raw13/dev/mapper/vg_oradata-undodbs
raw/dev/raw/raw14/dev/mapper/vg_oradata-tools
raw/dev/raw/raw15/dev/mapper/vg_oradata-data
使用裸设备作为oracle数据文件有什么需要注意的?
使用裸设备作为oracle的数据文件必须注意以下几点:
1)一个裸设备只能放置一个数据文件
2)数据文件的大小不能超过裸设备的大小
如果是日志文件,则裸设备最大可用大小=裸设备对应分区大小-1*512(保留一个redolock)
如果是数据文件,则裸设备最大可用大小=裸设备对应分区大小-2*db_block_size(保留两个block)
为了简单起见,对所有的文件设置称比裸设备小1M即可。
3)数据文件最好不要设置称自动扩展,如果设置称自动扩展,一定要把maxsize设置设置为比裸设备小
如创建错了,删除!
!
!
lvremove/dev/vg_oradata/lv_10g_02
绑定
[root@RHEL5opt]#raw/dev/raw/raw1/dev/mapper/vg_oradata-lv_10g_01
/dev/raw/raw1:
boundtomajor253,minor3
[root@RHEL5opt]#raw/dev/raw/raw2/dev/mapper/vg_oradata-lv_10g_02
/dev/raw/raw2:
boundtomajor253,minor2
避免重起失效:
编辑/etc/udev/rules.d/60-raw.rules,添加
ACTION=="add",KERNEL=="/dev/mapper/vg_oradata-lv_10g_01",RUN+="/bin/raw/dev/raw/raw1