如何 在UNIX裸设备和文件系统之间移动ORACLE

一、关于裸设备

1.1 什么是裸设备(RAW DEVICE)

裸设备是指未创建文件系统的磁盘分区(raw partition)或逻辑卷(raw logical volume),应用程序直接通过一
个字符设备驱动程序对它进行访问。如何对设备上的数据读写决定于使用它的应用程序。由于对裸设备的操作不通过UNIX的缓冲区,数据在ORACLE的数据缓冲区(BUFFER CACHE)和磁盘之间直接传递,所以使用裸设备在一定程度上能够提高I/O性能,适合I/O量大的系统。另外OPS/RAC (Oracle Parallel Server/Real Application Cluster)环境下,多个节点同时访问同一个数据库,所以CONTROL FILE、DATA FILE、REDO LOG都必须建在RAW DEVICE上。

1.2 裸设备的可用空间

不同的UNIX对裸设备的管理不完全相同,特别要注意的是某些UNIX在每个裸设备的头部要保留一定的空间,应用程序在使用裸设备时不可以覆盖这一部分,否则会对裸设备造成损坏。所以一个裸设备的实际可用空间是分配给裸设备的空间再减去这部分操作系统保留空间。下面是常用UNIX的OS Reserved Size列表:

UNIX     OS Reserved Size

------------ ----------------

SUN Solaris       0

HP-UX          0

IBM AIX         4k

Tru64 UNIX       64k

Linux          0

1.3 dd命令

UNIX上读写裸设备不能使用cp, cpio, tar等命令,必须用dd,下面是几个dd常用参数的简单说明,更详细的信息请参考UNIX使用手册或用命令man dd。

dd [ operand=value ... ]

if=file 指定输入文件,缺省值是标准输入

of=file 指定输出文件,缺省值是标准输出

bs=n 设置输入和输出的块大小为n字节,也可以用“k”作单位

skip=n 在拷贝之前跳过n个输入块,缺省值是0

seek=n 在拷贝之前从输出文件首部跳过n块,缺省值是0

count=n 指定拷贝的块数,缺省拷贝到输入文件结束

1.4 对本文中示例的说明

a. 所有例子中ORACLE的DB_BLOCK_SIZE都是8k

b. /oradata是一文件系统目录

c. /dev/rlv_data,/dev/rlv_redo和/dev/rlv_ctrl是三个RAW DEVICE,大小均为8MB(8192k)

d. 在未提到操作系统时,默认是AIX,OS_RESERVED_SIZE=4K

二、移动数据文件(DATAFILE)

2.1 在裸设备上建立数据文件

用以下命令建立表空间:

SQL> CREATE TABLESPACE ts_test DATAFILE '/dev/rlv_data' SIZE 8180k;

SIZE指定的数值必须小于或等于8180k,否则语句将会失败:

ORA-01119: error in creating database file '/dev/rlv_data'

ORA-27042: not enough space on raw partition to fullfill request

这个最大值的计算方法如下:

8192k(RAW DEVICE SIZE) - 4k (OS_RESERVED_SIZE) - 8k (DB_BLOCK_SIZE) = 8180k

为什么还要减去一个DB_BLOCK_SIZE呢?这是因为ORACLE建立DATAFILE时,在命令中SIZE指定的大小之外,还要在文件头另加一个BLOCK,叫作“Oracle OS Header Block”,里面保存有这个文件的逻辑块大小和文件块数等信息。这一点并不是在RAW DEVICE上建DATAFILE特有的,如果你在文件系统上建一个DATAFILE,指定SIZE 1000k的话,你用ls -l或dir命令看到的文件大小将是1008k (DB_BLOCK_SIZE=8K)。

2.2 在文件系统和裸设备之间移动数据文件

2.2.1 从文件系统到裸设备

a. 在文件系统上建一个4M的DATAFILE

SQL> CREATE TABLESPACE test DATAFILE '/oradata/test.dbf' SIZE 4M;

b. 查看一下这个新建的DATAFILE的大小 (注:4202496 = 4M + 8K)

$ ls -l /oradata/test.dbf

-rw-r----- 1 oracle dba 4202496 Aug 29 15:01 /oradata/test.dbf

c. 按下表公式确定dd的参数

d. 在数据库没有OPEN的状态下,用dd进行拷贝,下面给出命令及输出

AIX$ dd if=/oradata/test.dbf of=/dev/rlv_data bs=4k seek=1

1026+0 records in

1026+0 records out

Tru64$ dd if=/oradata/test.dbf of=/dev/rlv_data bs=64k seek=1

64+1 records in

64+1 records out

Other$ dd if=/oradata/test.dbf of=/dev/rlv_data bs=1024k

4+1 records in

4+1 records out

2.2.2 从裸设备到文件系统

a. 确定数据文件实际大小file_size,用于下一步计算dd的参数count。如果count计算不对,拷贝出的数据文件无效,数据库无法打开。

SQL> SELECT bytes, blocks, bytes/blocks db_block_size, bytes+bytes/blocks file_size

FROM dba_data_files WHERE file_name='/dev/rlv_data';

BYTES   BLOCKS  DB_BLOCK_SIZE FILE_SIZE

---------- -------- ------------- ---------

4194304  512    8192     4202496

b. 按下表公式确定dd的参数,min表示二者之中取较小的

c. 在数据库没有OPEN的状态下,用dd进行拷贝,下面给出命令及输出

AIX$ dd if=/dev/rlv_data of=/oradata/test2.dbf bs=4k skip=1 count=1026

1026+0 records in

1026+0 records out

Tru64$ dd if=/dev/rlv_data of=/oradata/test2.dbf bs=8k skip=8 count=513

513+0 records in

513+0 records out

Other$ dd if=/dev/rlv_data of=/oradata/test2.dbf bs=8k count=513

513+0 records in

513+0 records out

2.2.3 无论从FILE SYSTEM拷贝到RAW DEVICE还是反之,想让ORACLE以新的数据文件打开数据库,必须进行RENAME操作

SQL> STARTUP MOUNT;

SQL> ALTER DATABASE RENAME FILE 'oldfilename' TO 'newfilename';

SQL> ALTER DATABASE OPEN;

三、移动联机重作日志(ONLINE REDO LOG)

3.1 在裸设备上建ONLINE REDO LOG

用以下命令增加一组ONLINE REDO LOG:

SQL> ALTER DATABASE ADD LOGFILE GROUP 4 '/dev/rlv_redo' SIZE xxxxk;

在裸设备上建REDO LOG时也要计算SIZE子句可使用的最大值,方法类似于在2.1中建DATAFILE时的计算方法,唯一不同的是要把公式中的DB_BLOCK_SIZE换成REDO_BLOCK_SIZE(即REDO LOG的逻辑块大小)。这个REDO_BLOCK_SIZE在不同操作系统上取值不同,用以下两种方法均可得到这个值,同时还可计算出REDO LOG的实际文件大小file_size):

方法1:dump现有的REDO LOG FILE

SQL> ALTER SYSTEM DUMP LOGFILE '/oradata/redo01.log';

SQL> SHOW PARAMETER user_dump_dest

查看user_dump_dest目录下刚产生的trc文件:

FILE HEADER:

Software vsn=135294976=0x8107000, Compatibility Vsn=135290880=0x8106000

Db Id=3227187598=0xc05af98e, Db Name='V817'

Control Seq=12474=0x30ba, File size=8192=0x2000

File Number=5, Blksiz=512, File Type=2 LOG

方法2:用ORACLE提供的工具dbfsize,对文件系统和RAW DEVICE上的文件都适用

$ dbfsize /oradata/redo01.log

Database file: /oradata/redo01.log

Database file type: file system

Database file size: 8192 512 byte blocks

从以上两个输出都可得知REDO_BLOCK_SIZE=512,blocks=8192

file_size=(blocks + 1) * REDO_BLOCK_SIZE = (8192+1)*512=4194816

如果已知所在平台的REDO_BLOCK_SIZE,也可以通过查询数据字典来计算file_size:

SQL> SELECT b.member, b.bytes, b.bytes+512 file_size FROM v$logfile a, v$log b

WHERE a.group#=b.group# and a.member='/oradata/redo01.log ';

MEMBER        BYTES    FILE_SIZE

-------------------- --------  ---------

/oradata/redo01.log  4194304  4194816

下表列出了常用OS上的ORACLE REDO_BLOCK_SIZE:

OS        REDO_BLOCK_SIZE

----------------- ---------------

Windows      512

SUN Solaris    512

HP-UX       1024

IBM AIX      512

Compaq Tru64 UNIX 1024

Linux       512

3.2在文件系统和裸设备之间移动ONLINE REDO LOG

参见2.2拷贝DATAFILE的过程,唯一不同是要把DB_BLOCK_SIZE换成REDO_BLOCK_SIZE。另外,REDO LOG也可以不用dd进行拷贝,而采用删除重建的方法:

SQL> SELECT * FROM v$log; --be sure it's not current and archived

SQL> ALTER SYSTEM SWITCH LOGFILE; --if it's current, force switch

SQL> ALTER DATABASE DROP LOGFILE GROUP n;

SQL> ALTER DATABASE ADD LOGFILE GROUP n 'newlogfilename' SIZE xxxxM;

四、移动控制文件(CONTROL FILE)

4.1在裸设备上建控制文件

ORACLE的控制文件是执行CREATE DATABASE或CREATE CONTROLFILE语句时生成的,其名字是由初始化参数文件init$ORACLE_SID.ora中的control_files参数指定。CONTROL FILE的大小不能显式指定,而且随着数据库的运行,它还会自动增长,所以为控制文件划分裸设备时要根据经验,留好足够的余量,以免不必要的麻烦。CONTROL FILE的逻辑块大小和DB_BLOCK_SIZE相同,而且文件头部也和DATAFILE一样有一块“Oracle OS Header Block”。

4.2在文件系统和裸设备之间移动控制文件

4.2.1 使用dd复制

拷贝CONTROL FILE的方法基本与2.2中拷贝DATAFILE相同,唯一不同是当由裸设备向文件系统拷贝时,如何确定CONTROL FILE的实际大小file_size (ORACLE数据字典里没有CONTROL FILE大小的数据)。下面介绍两个方法:

方法1:执行完下面的SQL语句,再到user_dump_dest目录查看刚产生的trc文件

SQL> ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME CONTROLF LEVEL 10';

FILE HEADER:

Software vsn=135266304=0x8100000, Compatibility Vsn=134217728=0x8000000

Db Id=1937054535=0x73751b47, Db Name='O817'

Control Seq=5838=0x16ce, File size=476=0x1dc

File Number=0, Blksiz=8192, File Type=1 CONTROL

方法2:用ORACLE提供的工具dbfsize

$ dbfsize /oradata/control01.ctl

Database file: /oradata/control01.ctl

Database file type: file system

Database file size: 476 8192 byte blocks

从以上两个方法的输出结果都可得到file_size=(476+1)*8192=3907584

4.2.2 使用SQL命令复制

相对于4.2.1介绍的用dd拷贝CONTROL FILE,下面用SQL语句进行复制的方法更为简洁:

SQL> STARTUP MOUNT

SQL> ALTER DATABASE BACKUP CONTROLFILE TO 'newcontrolfile';

语句中newcontrolfile既可以是文件系统文件,也可以是RAW DEVICE,所以在MOUNT状态下运行这个命令就可以生成一个与现有CONTROL FILE完全相同CONTROL FILE复件。

4.2.3 修改初始化参数文件(init$ORACLE_SID.ora)

无论用4.2.1还是4.2.2的方法产生了新的CONTROL FILE,为了让数据库使用新的CONTROL FILE,只要修改init$ORACLE_SID.ora里的control_files参数即可。

五、Recovery Manager (RMAN)

RMAN是ORACLE8开始提供的备份与恢复工具,它能自动正确地跳过裸设备头部的OS Reserved Block,通过使用RMAN的BACKUP和RESTORE功能,可以方便地达到把DATAFILE和CONTROL FILE在文件系统和裸设备之间移动的目的,具体操作过程在这里不再详述,请参见RMAN手册。'

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29987/viewspace-51678/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29987/viewspace-51678/

HOWTO--在UNIX裸设备和文件系统之间移动ORACLE相关推荐

  1. oracle裸设备文件复制,在裸设备和文件系统之间转换ORACLE数据

    一.关于裸设备 1.1 什么是裸设备(RAW DEVICE) 裸设备是指未创建文件系统的磁盘分区(raw partition)或逻辑卷(raw logical volume),应用程序直接通过一 个字 ...

  2. linux裸设备文件系统,关于裸设备,文件系统,CIO/DIO

    我们在创建DMS表空间容器时可以选择使用裸设备或文件系统,下面我们来看看两者的区别.我们知道,内存的读写效率比磁盘高近万倍,因此数据库通常会在内存中开辟一片区域,称为Buffer Pool,使数据的读 ...

  3. 利用RMAN转移裸设备到文件系统

    本文只是为了个人备忘. 参考eagyle的:http://www.eygle.com/archives/2005/12/oracle_howto_move_datafile_raw.html 我首先挂 ...

  4. Redhat 中裸设备(raw) 的配置和oracle中使用

    1.对磁盘进行分区 fdisk -l 查看磁盘情况 fdisk /dev/sdb 进行分区操作 2.配置裸设备(修改/etc/udev/rules.d/60-raw.rules文件) 在redhat5 ...

  5. oracle怎么判断是裸设备安装,Oracle 9i下以裸设备方式安装数据库

    一直都在Oracle 10G下以裸设备方式手工建库,今天尝试在oracle 9i下同样以裸设备方式手工建库,遇到点麻烦,不过好一番折腾之后,终于还是解决了,详尽记录如下. 一直都在oracle10G下 ...

  6. 生产上oracle扩展表空间,oracle基于裸设备(raw device)扩充表空间

    首先在oracle中查询表空间的使用情况,确认是哪个表空间不足. select df.tablespace_name "Tablespace",df.bytes/(1024*102 ...

  7. oracle在linux上使用裸设备,在linux下构建基于LVM的裸设备数据库

    我的环境很简单,vm workstation下面装了一个linux 4,oracle 10g版本,由于不属于trouble shooting和performance tuning 而只是搭建一套裸设备 ...

  8. linux裸设备文件系统,Linux当中的文件系统

    1. 设备专用文件(设备文件) 设备专用文件与系统的某个设备相对应.在内核中,每种设备类型都有阈值向对应的设备驱动程序,用来处理设备的所有I/O请求.可以将设备划分为字符设备和块设备两种. 每个设备文 ...

  9. pv vg lv 裸盘 裸设备 文件系统

    之前以为理解的没错,其实随着不断的学习,有了很多新的认识: 裸盘是最初的硬盘,没有做过分区和格式化的,即下图的硬盘. 之前的lvm文档中把制作pv的第一步认为是fdisk格式化,其实pv和格式化并无直 ...

最新文章

  1. 编译是检查C语言什么的错误,c语言编译过程
  2. 关于appcan自动升级功能
  3. spring aop 应用实例
  4. SQL Server中的事务与锁
  5. 开源一个ShellCode生成框架
  6. SSM Automation 更新AMI镜像
  7. Linux字符串三剑客笔试题集合
  8. 如何在React Native中使用Redux Saga监视网络更改
  9. SRTP参数及数据包处理过程
  10. 站在物联网风口,如何抢滩千亿级智能家居市场?
  11. Oracle P6 配置SQLServer数据库报FileStream错误
  12. 堪称Python入门新华字典的《Python背记手册》高清无码版,开源免费下载
  13. windows网络和共享中心“查看基本网络信息并设置连接”为“未知”的解决方案
  14. WPF Resource资源
  15. 苹果怎么用微信链接服务器,苹果手机如何设置微信登陆锁
  16. 华为HCNA网络技术学习指南-读书笔记
  17. 5种类型的图像注释简介
  18. python控制nao机器人身体动作实例
  19. excel 表做下拉框_Excel工作表的组合框下拉列表
  20. 物联网是什么?_物联网怎么定义

热门文章

  1. iOS - 多线程分析之 DispatchQueue Ⅰ
  2. zookeeper客户端管理工具
  3. Visual Paradigm敏捷开发教程(13):如何创建燃烬图
  4. 故障电路指示器(FCI)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  5. 七年级计算机期末考试题带答案,七年级信息技术试题及答案
  6. 44从零开始学Java之详解容易让初学者懵圈的abstract抽象类、抽象方法
  7. 人工智能,深度学习,机器学习平台,界面UI
  8. 20世纪物理学最后一位巨人、黑洞命名者、费曼老师惠勒:万物源自比特
  9. 博达路由器常见功能教学1
  10. Python有用嘛?