Oracle数据库安装时支持文件系统、裸设备、ASM等存储方式。裸设备是指未创建文件系统的磁盘分区或逻辑卷,应用
程序直接通过字符设备驱动器对它进行访问。由于对裸设备的操作跳过了UNIX的缓存,数据在Oracle的data buffer
cache和磁盘之间直接传递,所以裸设备能提高I/O性能。另外在Oracle RAC等环境下,多个节点同时访问一个数据库,
所以控制文件、redo log、数据文件等必须搭建在裸设备之上。
UNIX下读写裸设备不适用cp、tar等文件系统的命令,而是适用dd,适用dd可以在linux、AIX等UNIX系统下实现数据文件
和裸设备的双向复制。
rawdb是我linux系统下的一个裸设备数据库,下面我把users表空间的裸设备数据文件复制为文件系统数据文件,然后用文件系统的数据文件
重新打开数据库.
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/oracle/oradata/rawdb/system01.dbf
/oracle/oradata/rawdb/undo01.dbf
/oracle/oradata/rawdb/sysaux01.dbf
/oracle/oradata/rawdb/users01.dbf
SQL> ! ls -l /oracle/oradata/rawdb/
鎬荤敤閲?40
lrwxrwxrwx 1 oracle oinstall 13 8鏈?16 10:58 control01.ctl -> /dev/raw/raw2
lrwxrwxrwx 1 oracle oinstall 13 8鏈?16 10:58 control02.ctl -> /dev/raw/raw3
lrwxrwxrwx 1 oracle oinstall 13 8鏈?16 10:58 redo01.log -> /dev/raw/raw4
lrwxrwxrwx 1 oracle oinstall 13 8鏈?16 10:58 redo02.log -> /dev/raw/raw5
lrwxrwxrwx 1 oracle oinstall 13 8鏈?16 10:58 spfile -> /dev/raw/raw1
lrwxrwxrwx 1 oracle oinstall 13 8鏈?16 10:58 sysaux01.dbf -> /dev/raw/raw7
lrwxrwxrwx 1 oracle oinstall 13 8鏈?16 10:58 system01.dbf -> /dev/raw/raw6
lrwxrwxrwx 1 oracle oinstall 14 8鏈?16 10:58 temp01.dbf -> /dev/raw/raw10
lrwxrwxrwx 1 oracle oinstall 13 8鏈?16 10:58 undo01.dbf -> /dev/raw/raw9
lrwxrwxrwx 1 oracle oinstall 13 8鏈?16 10:58 users01.dbf -> /dev/raw/raw8
SQL>
然后我关闭数据库,进行拷贝user表空间对应的裸设备/dev/oradatavg/lv_users01。
dd if=/oracle/oradata/rawdb/users01.dbf f=/oracle/users01fs.dbf bs=8k
复制完成后:
[oracle@localhost raw]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Aug 16 12:20:34 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup mount
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 88082000 bytes
Database Buffers 192937984 bytes
Redo Buffers 2973696 bytes
Database mounted.
SQL> ALTER DATABASE RENAME FILE '/oracle/oradata/rawdb/users01.dbf' TO '/oracle/users01fs.dbf';
Database altered.
SQL> alter database open;
Database altered.
SQL>
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/oracle/oradata/rawdb/system01.dbf
/oracle/oradata/rawdb/undo01.dbf
/oracle/oradata/rawdb/sysaux01.dbf
/oracle/users01fs.dbf
SQL>
裸设备到数据文件的移动成功。