十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
裸设备是指一个磁盘或者分区,它不包含文件系统,所以一个裸设备只能包含一个文件。
成都服务器托管,创新互联提供包括服务器租用、内蒙古服务器托管、带宽租用、云主机、机柜租用、主机租用托管、CDN网站加速、国际域名空间等业务的一体化完整服务。电话咨询:18982081108
通过操作系统来备份raw设备上的文件,需要注意一些细节问题。下面具体讨论一下。
Backing Up to Raw Devices on UNIX
Unix下备份raw设备,最常用的就是dd命令。
使用dd命令需要制定一些正确的参数,这些参数是基于你的os以及database的。
Unix和Linux下对裸设备的备份是不同的。我们首先来了解三个概念
Data | Explanation |
Block size | 也就是bs选项。这个大小是指dd一次拷贝数据大小。这个和Oracle的数据块大小是没有关联的,和os也没有关联。 需要注意的是:这个数值的大小影响到你拷贝数据的速度。bs大,拷贝速度会变快。 |
Raw offset | 在一些os上,在裸设备上的文件的开头是被os使用的。这些存储空间被叫做raw offset,oracle不会备份和恢复这些内容(字节)。 Note:1.备份的时候要跳过含有offset的字节。 2.现在的一些新的系统,已经没有offset。 |
Size of Oracle block 0 | 在每个oracle文件的开头,os系统放置了一个块叫做block 0。 这个块的大小和其所在数据文件的oracle块大小相同。 一般的oracle 代码不能识别这个块,但是这个块是包含在os上的文件大小里面的。就是说oracle认为datafile1大小为100块,但是os看来,datafile1大小为101块(100+block 0). |
下面来看一下dd的一些参数意义。
Options | Specifies |
if | 输入文件的名字,也就是你要读取(备份)的文件 |
of | 输出文件的名字,也就是,你要写入的文件 |
bs | 用dd拷贝数据的缓存大小(一次拷贝的数据量) |
skip | 如果要备份的raw设备存在offset,用来跳过offset。例如,你要备份的raw设备offset大小为64kB,而你设定的bs为8KB,那么你可以指定specify skip=8 ,这样你就可以从64KB的地方开始拷贝。 |
seek | 如果你要把数据拷贝到含有offset的raw设备里面,需要设定这个值, 同skip类似。 |
count | 你要拷贝的raw设备的block数。主要还是要看你bs的大小。假如你的数据文件含有100个oracle块,oracle块大小为8K,那么你的count就设为100. 也就是说 bs × count = size of your datafile1 当然,count也可以不设定,这样就把整个raw设备都拷贝下来。有空间的浪费。建议设定count大小。 |
因为raw设备可以作为备份的输入文件,也可以作为输出文件,下面给出了不同情况下的参数使用情况。
backing up from …….. | backing up to …….. | 涉及到的dd参数 |
raw device | raw device | if, of, bs, skip, seek, count |
raw device | file system | if, of, bs, skip, count |
file system | raw device | if, of, bs, seek |
file system | file system | if, of, bs |
How to know the size of your file?(确定count)
非常简单,使用oracle提供的一个小工具:dbfsize (oracle自带,对数据文件和裸设备都有效)
语法:在oracle用户下使用 dbfsize your_file_name or raw device
[oracle@standby test]$ dbfsize system01.dbf
Database file: system01.dbf Database file type: file system Database file size: 49920 8192 byte blocks |
我们可以知道,system01.dbf这个数据文件大小:49920 × 8K
那么count=49920+1 – 不要忘记block 0 (上面提到过哦:)
Backing Up with the dd utility on UNIX: Examples
为了使用dd,我们假设了如下的情况:
Note:“=”左右不要有空格
1) 从raw设备备份到raw设备
% dd if=/dev/rsd1b of=/dev/rsd2b bs=8k skip=8 seek=8 count=3841
2) 裸设备到文件系统
% dd if=/dev/rsd1b of=/backup/df1.dbf bs=8k skip=8 count=3841
3) 文件系统到裸设备
% dd if=/backup/df1.dbf of=/dev/rsd2b bs=8k seek=8
4) 文件系统到文件系统,你可以为了提升I/O把bs设为较高的数值
% dd if=/oracle/dbs/df1.dbf of=/backup/df1.dbf bs=1024k
Backing Up to Raw Devices on LNUIX
linux一般是没有offset的,其他与Unix相同。
Backing Up to Raw Devices on Windows
参考:p://download.oracle.com/docs/cd/B19306_01/backup.102/b14191/osbackup008.htm
验证dd备份
使用oracle提供的工具 dbv ,支持文件系统文件和裸设备。
语法:dbv file=file_name blocksize=8192
[oracle@standby test]$ dbv file=tools01.dbf blocksize=8192
DBVERIFY: Release 9.2.0.4.0 - Production on Mon Aug 13 12:26:05 2007
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
DBVERIFY - Verification starting : FILE = tools01.dbf
DBVERIFY - Verification complete
Total Pages Examined : 1280 Total Pages Processed (Data) : 0 Total Pages Failing (Data) : 0 Total Pages Processed (Index): 0 Total Pages Failing (Index): 0 Total Pages Processed (Other): 8 Total Pages Processed (Seg) : 0 Total Pages Failing (Seg) : 0 Total Pages Empty : 1272 Total Pages Marked Corrupt : 0 |
如果文件有问题,会有错误提示。
对应中文:
检查的页总数: 1280
处理的页总数 (数据): 150
失败的页总数 (数据): 0
处理的页总数 (索引): 127
失败的页总数 (索引): 0
处理的页总数 (其它): 1001
处理的总页数 (段) : 0
失败的总页数 (段) : 0
空的页总数: 0
标记为损坏的总页数: 2
流入的页总数: 0
Highest block SCN : 428223 (0.428223)