声明:
此文仅仅只是为了方便初学者理解rawdevice的使用过程,请勿用于生产环境。
// 查看当前lv的配置情况
[root@projectm rules.d]# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
pkges ext -wi-ao 16.00G
lv_test_dbf system -wi-a- 64.00M
oracle system -wi-ao 37.00G
root system -wi-ao 6.78G
swap system -wi-ao 1.00G
// 查看当前主机的vg
[root@projectm rules.d]# vgs
VG #PV #LV #SN Attr VSize VFree
ext 1 1 0 wz--n- 16.00G 0
system 6 4 0 wz--n- 55.62G 10.78G
// 创建100M大小的一个逻辑卷。生产环境中此处应该是存储划拨的磁盘,使用逻辑卷只是为了方便获取和展示。
// 事实上,lv是可以直接添加为数据文件来使用的,这里不验证,有兴趣自行验证。
[root@projectm rules.d]# lvcreate -L +100M -n lv_create4raw system;
Rounding up size to full physical extent 128.00 MB
Logical volume "lv_create4raw" created
// 查看当前现有的所有rawdevices
[root@projectm rules.d]# raw -aq
// 绑定rawdevice
[root@projectm rules.d]# raw /dev/raw/raw1 /dev/mapper/system-lv_create4raw
/dev/raw/raw1: bound to major 253, minor 5
// 查看rawdevice绑定情况
[root@projectm rules.d]# raw -aq
/dev/raw/raw1: bound to major 253, minor 5
// 查看rawdevice文件对象,由于该裸设备将交予oracle使用,所以你需要修改一下权限。
[root@projectm rules.d]# ls -lrt /dev/raw/raw1
crw------- 1 root root 162, 1 Aug 11 18:29 /dev/raw/raw1
// 此修改权限及绑定rawdevice的方式在Linux中只是此次开机有效,重启以后需要重新赋权。
// 该方式已经淘汰,勿用于生产,生产中目前使用udev方式通过识别uuid来绑定设备。
[root@projectm rules.d]# id oracle
uid=1987(oracle) gid=1987(dba) groups=1987(dba)
[root@projectm rules.d]# chown oracle:dba /dev/raw/raw1
[root@projectm rules.d]# chmod 660 /dev/raw/raw1
[root@projectm rules.d]# ls -lrt /dev/raw/raw1
crw-rw---- 1 oracle dba 162, 1 Aug 11 18:29 /dev/raw/raw1
// 登录oracle用户使用rawdevices
[root@projectm rules.d]# su - oracle
// 查看当前运行的oracle实例。这是我的实验机,上面同时安装有9i, 10g, 11g, 12c。
// 为了方便区分环境我分别编写了.profile_9i, .profile_10g, .profile_11g, .profile_12c。
// 生产环境中请使用.profile 或者 .bash_profile(请根据不同系统确认使用哪个)。
// 只有这两个文件中的配置会自动加载, 因此我自定义的4个需要手动加载,以下你会看到。
[oracle@projectm ~]$ ps -ef | grep smon
oracle 4436 1 0 10:19 ? 00:00:00 ora_smon_orcl12c
oracle 4610 4581 0 18:31 pts/0 00:00:00 grep smon
[oracle@projectm ~]$ . .profile_12c // 加载12c的环境变量
[oracle@projectm ~]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Thu Aug 11 18:31:19 2016
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
// 创建表空间并以rawdevice为数据文件,由于rawdevice大小是固定的,你可以不指定size,如果报错请补上。
I am sys@ORCL12C> create tablespace raw_tbs datafile '/dev/raw/raw1' size 100M;
Tablespace created.
// 查看是否创建成功
I am sys@ORCL12C> select file_name from dba_data_files where tablespace_name='RAW_TBS';
FILE_NAME
-----------------------------------------
/dev/raw/raw1
// 在基于rawdevice的表空间上正常地创建表
I am sys@ORCL12C> create table raw_tab1 (id number, text varchar2(8)) tablespace raw_tbs;
Table created.
// 以正常的方式插入数据
I am sys@ORCL12C> insert into raw_tab1 values(1,'Yeah');
1 row created.
I am sys@ORCL12C> commit;
Commit complete.
// 验证数据插入情况
I am sys@ORCL12C> select * from raw_tab1;
ID TEXT
---------- --------
1 Yeah
// 删除表
I am sys@ORCL12C> drop table raw_tab1 purge;
Table dropped.
// 删除表空间及表空间中的数据及数据文件
I am sys@ORCL12C> drop tablespace raw_tbs including contents and datafiles;
Tablespace dropped.
I am sys@ORCL12C>
// 解绑刚刚创建的rawdevice,0是个强大的破坏者。
[root@projectm rules.d]# raw /dev/raw/raw1 0 0
/dev/raw/raw1: bound to major 0, minor 0
// 确认解绑
[root@projectm rules.d]# raw -aq
// 删除lv, 此种访问lv的路径与此前提到的是等价的。
[root@projectm rules.d]# lvremove /dev/system/lv_create4raw
Do you really want to remove active logical volume lv_create4raw? [y/n]: y
Logical volume "lv_create4raw" successfully removed
[root@projectm rules.d]# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
pkges ext -wi-ao 16.00G
lv_test_dbf system -wi-a- 64.00M
oracle system -wi-ao 37.00G
root system -wi-ao 6.78G
swap system -wi-ao 1.00G
// 系统各项配置已还原,实验结束。