dd命令的解释
dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=;c=1;k=;w=2
参数注释:
1.if=文件名:输入文件名,缺省为标准输入。即指定源文件。if=inputfile
2.of=文件名:输出文件名,缺省为标准输出。即指定目的文件。of=outputfile
3.ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
4.cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
5.skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
6.seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。
7.count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
8.conv=conversion:用指定的参数转换文件。
ascii:转换ebcdic为ascii
ebcdic:转换ascii为ebcdic
ibm:转换ascii为alternateebcdic
block:把每一行转换为长度为cbs,不足部分用空格填充
unblock:使每一行的长度都为cbs,不足部分用空格填充
lcase:把大写字符转换为小写字符
ucase:把小写字符转换为大写字符
swab:交换输入的每对字节
noerror:出错时不停止
notrunc:不截短输出文件
sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
在AIX平台下,我们可以使用$ORACLE_HOME/bin路径下的dbfsize命令确认裸设备是否包含offset下面是包含offset的裸设备#dbfsize/dev/rlv_data01_10gDatabasefile:/dev/rlv_data01_10gDatabasefiletype:rawdeviceDatabasefilesize:byteblocks下面是不包含offset的裸设备#dbfsize/dev/rlv_data01_10gDatabasefile:/dev/rlv_data01_10gDatabasefiletype:rawdevicewithout4KstartingoffsetDatabasefilesize:byteblocksblock0在每个oracle文件的开头,os系统放置了一个块叫做block0。这个块的大小和其所在数据文件的oracle块大小相同。一般的oracle代码不能识别这个块,但是这个块是包含在os上的文件大小里面的。就是说oracle认为datafile1大小为块,但是os看来,datafile1大小为块(+block0).注意,利用dd备份时,需要包含block0。因为block0位于offset之后,而block0是所有数据文件都需要的,无论它是基于裸备还是文件系统,且block0的大小只与oracle的blocksize有关,所以,把block0也dd出来是必要的,不需要skip数据文件的block0。
计算数据文件的占用的实际空间大小实际的数据文件大小是在dba_data_files中的bytes+1*blocksizeSQLselectfile_name,bytesfromdba_data_files;FILE_NAMEBYTESBLOCKSIZE------------------------------------------------------------/opt/oracle/oradata/test1/system01.dbf360744在操作系统查看文件大小:#ls-lsystem01.dbf-rw-r--r--1oracleoinstallNov:53system01.dbf=360744+(是数据文件所在表空间的blocksize)那么一个裸设备的数据文件最多可以是多大?这个和具体的操作系统和数据文件所在表空间的blocksize有关。假设裸设备的大小是r,操作系统裸设备的offset为f,数据文件所在表空间的blocksize是b,则数据文件的最大大小为:d=r–f–b*1(1为block0)如裸设备大小为8k,offset为0,表空间的blocksize为4k,则在此裸设备的数据文件的最大大小为:d=8-0-1*4=4(k)。