dd工具使用Word文档格式.docx
- 文档编号:18636421
- 上传时间:2022-12-30
- 格式:DOCX
- 页数:10
- 大小:19.02KB
dd工具使用Word文档格式.docx
《dd工具使用Word文档格式.docx》由会员分享,可在线阅读,更多相关《dd工具使用Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
ifofbs
dd拷贝oracle数据文件需要考虑的因素
因素
blocksize
dd一次io的buffer大小
offset
只适用于裸设备,有些操作系统在裸设备上保留一定的空间给内部使用,拷贝时要跳过这部分内容
block0
每一个oracle数据文件的头都包含一个与数据文件所在表空间的blocksize的相等的block
这个block是不计算入oracle数据文件的bytes的,但在操作系统中,它是会占用空间的。
如何用dd测试磁盘速度?
首先要了解两个特殊的设备:
/dev/null:
回收站、无底洞
/dev/zero:
产生字符
Ø
测试磁盘写能力
timeddif=/dev/zeroof=/test.dbfbs=8kcount=300000
因为/dev//zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。
测试磁盘读能力
timeddif=/dev/sdb1of=/dev/nullbs=8k
因为/dev/sdb1是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sdb1上,也相当于测试磁盘的读能力。
测试同时读写能力
timeddif=/dev/sdb1of=/test1.dbfbs=8k
这个命令下,一个是物理分区,一个是实际的文件,对它们的读写都会产生IO(对/dev/sdb1是读,对/test1.dbf是写),假设他们都在一个磁盘中,这个命令就相当于测试磁盘的同时读写能力。
是否需要skip数据文件的block0?
不需要。
因为block0位于offset之后,而block0是所有数据文件都需要的,无论它是基于裸备还是文件系统,且block0的大小只与oracle的blocksize有关,所以,把block0也dd出来是必要的,不需要skip数据文件的block0。
是否所有系统都有offset?
不是。
aix和Turbounix要注意offset,其他的一般没有。
如何计算数据文件的占用的实际空间大小?
实际的数据文件大小是在dba_data_files中的bytes+1*blocksize。
如:
SQL>
selectfile_name,bytesfromdba_data_files;
FILE_NAMEBYTESBLOCKSIZE
------------------------------------------------------------
/opt/oracle/oradata/test1/system01.dbf3607101448192
在操作系统查看文件大小:
[root@suk1soft]#ls-lsystem01.dbf
-rw-r--r--1oracleoinstall360718336Nov1511:
53system01.dbf
360718336=360710144+8192(8192是数据文件所在表空间的blocksize)
一个裸设备的数据文件最多可以是多大?
这个和具体的操作系统和数据文件所在表空间的blocksize有关。
假设裸设备的大小是r,操作系统裸设备的offset为f,数据文件所在表空间的blocksize是b,则数据文件的最大大小为:
d=r–f–b*1(1为block0)
如裸设备大小为1008k,offset为0,表空间的blocksize为4k,则在此裸设备的数据文件的最大大小为:
d=1008-0-1*4=1004(k)
在裸设备之间拷贝数据文件
本例测试在裸设备之间拷贝oracle数据文件的步骤,并考虑两个问题:
1)假设旧设备比新设备小,把大的裸设备数据文件拷贝到小的裸设备是否可行?
2)旧裸设备比新裸设备小,是否可以拷贝数据文件到新裸设备上?
测试步骤:
#创建逻辑卷
[root@suk1~]#lvcreate-L10m-nlv10_oldvgdata
Logicalvolume"
lv10_old"
created
[root@suk1~]#lvcreate-L20m-nlv20_newvgdata
lv20_new"
[root@suk1~]#lvcreate-L40m-nlv40_oldvgdata
lv40_old"
[root@suk1~]#lvcreate-L30m-nlv30_newvgdata
lv30_new"
#绑定裸设备
[root@suk1~]#raw/dev/raw/raw100/dev/vgdata/lv10_old
/dev/raw/raw100:
boundtomajor253,minor2
[root@suk1~]#raw/dev/raw/raw200/dev/vgdata/lv20_new
/dev/raw/raw200:
boundtomajor253,minor3
[root@suk1~]#raw/dev/raw/raw400/dev/vgdata/lv40_old
/dev/raw/raw400:
boundtomajor253,minor4
[root@suk1~]#raw/dev/raw/raw300/dev/vgdata/lv30_new
/dev/raw/raw300:
boundtomajor253,minor5
#基于裸设备创建表空间
createtablespacemytestdatafile'
/dev/raw/raw100'
size9m,'
/dev/raw/raw400'
size20m;
Tablespacecreated.
#从小裸设备到大裸设备
[root@suk1~]#ddif='
of='
/dev/raw/raw200'
20480+0recordsin
20480+0recordsout
#从大裸设备到小裸设备,但数据文件比小裸设备小
/dev/raw/raw300'
bs=1024kcount=25
25+0recordsin
25+0recordsout
注意:
这里bs*count要大于原裸设备上的数据文件尺寸
startupmount
ORACLEinstancestarted.
TotalSystemGlobalArea167772160bytes
FixedSize1260696bytes
VariableSize138412904bytes
DatabaseBuffers25165824bytes
RedoBuffers2932736bytes
Databasemounted.
#重命名数据文件
alterdatabaserenamefile'
to'
;
Databasealtered.
alterdatabaseopen;
从这个测试可以看出:
1)从小裸设备到大裸设备,只需把小裸设备的所有数据块dd到大裸设备即可
2)是否可以把大裸设备上的数据文件dd到小裸设备,取决于位于大裸设备上的数据文件尺寸(+block0)是否比小裸设备小。
如果数据文件小于小裸设备,则可以把数据文件从大裸设备dd到小裸设备上,在dd过程中不需要太准确计算原来数据文件的大小,只要保证dd的总量大于数据文件并小于小裸设备的尺寸即可。
3)如果数据文件大于小裸设备的尺寸,则肯定不能把它从大裸设备拷贝到小裸设备上
4)裸设备之间拷贝数据文件比裸设备到文件系统之间拷贝的有点在于:
不需要精确计算要拷贝多少数据,只需要保证覆盖了数据文件+block0即可;
而从裸设备到文件系统拷贝数据文件时,必须准确计算出要拷贝的数据量(数据文件+block0),dd多一点或者少一点都会报错。
5)如果有offset的话,在裸设备之间拷贝数据文件的时候都要考虑(skip、seek)
从文件系统到裸设备拷贝ORACLE数据文件
这个比较简单,首先要保证裸设备的大小要大于等于oracle数据文件大小+block0,如果裸设备需要offset的话,则要保证更大,然后直接用dd就可以。
#源文件大小为10m
[root@suk1~]#ls-l/opt/oracle/oradata/test1/users02.dbf
-rw-r-----1oracleoinstall10493952Nov3011:
07/opt/oracle/oradata/test1/users02.dbf
#创建一个20m的裸设备
[root@suk1~]#lvcreate-L20m-nlv20vgdata
lv20"
[root@suk1~]#raw/dev/raw/raw20/dev/vgdata/lv20
/dev/raw/raw20:
boundtomajor253,minor1
#dd文件到裸设备上
[root@suk1~]#ddif=/opt/oracle/oradata/test1/users02.dbfof=/dev/raw/raw20
20496+0recordsin
20496+0recordsout
从文件系统到裸设备不用设置count
#重命名数据文件,打开数据库
/opt/oracle/oradata/test1/users02.dbf'
/dev/raw/raw20'
Databasealtered
从裸设备到文件系统拷贝ORACLE数据文件
这里用用到两个工具:
dbfsize求出在裸设备或者文件系统上的oracle数据文件的大小,由oracle提高。
blockdev求出裸设备的大小,操作系统自带。
要计算出要要拷贝的大小,否则报错,如:
[oracle@suk1soft]$dbfsize/dev/raw/raw1
Databasefile:
/dev/raw/raw1
Databasefiletype:
rawdevice
Databasefilesize:
440328192byteblocks
[oracle@suk1soft]$timeddif=/dev/raw/raw1of=system01.dbfbs=8kcount=44032
/opt/oracle/oradata/test1/system01.dbf'
/soft/system01.dbf'
alterdatabaseopen
*
ERRORatline1:
ORA-01122:
databasefile1failedverificationcheck
ORA-01110:
datafile1:
'
ORA-01200:
actualfilesizeof44031issmallerthancorrectsizeof44032blocks
--不要忘了block0
[oracle@suk1soft]$rmsystem01.dbf
[oracle@suk1soft]$ddif=/dev/raw/raw1of=system01.dbfbs=8kcount=44033
startup
VariableSize100664168bytes
DatabaseBuffers62914560bytes
Databaseopened.
selectfile_namefromdba_data_files;
FILE_NAME
------------------------------------------------------------
/soft/system01.dbf
/opt/oracle/oradata/test1/undotbs01.dbf
/opt/oracle/oradata/test1/sysaux01.dbf
/opt/oracle/oradata/test1/users01.dbf
/opt/oracle/oradata/test1/users02.dbf
是否可以把整个裸设备拷贝到文件中?
有时候可能需要把裸设备的数据文件迁移到文件系统中,那迁移的时候是否可以把整个裸设备拷出来?
不一定,要看裸设备是否有offset,如果有offset,则肯定不能全拷贝出来;
如果没有offset,也要分情况:
1)裸设备中的数据文件+block0比裸设备小。
如果数据文件大小+block0比裸设备小,则不能将整个裸设备拷到文件系统的文件中。
[root@suk1soft]#ddif=/dev/raw/raw1of=system01.dbfbs=8k
VariableSize75498344bytes
DatabaseBuffers88080384bytes
ORA-01157:
cannotidentify/lockdatafile1-seeDBWRtracefile
Errorsinfile/opt/oracle/admin/test1/bdump/test1_dbw0_9564.trc:
ORA-27046:
filesizeisnotamultipleoflogicalblocksize
Additionalinformation:
1
ORA-1157signalledduring:
ALTERDATABASEOPEN...
这是因为裸设备已被数据文件使用部分的逻辑块与未使用部分的逻辑块大小不一致。
这种情况下,只能拷贝裸设备中数据文件大小+block0部分。
2)裸设备中的数据文件+block0等于裸设备大小
这种情况是可以完全拷贝的。
[root@suk1soft]#lvcreate-L1008k-ntest1008vgdata
test1008"
[root@suk1soft]#raw/dev/raw/raw1008/dev/vgdata/test1008
/dev/raw/raw1008:
boundtomajor253,minor0
createtablespacetestblocksize4kdatafile'
/dev/raw/raw1008'
size1004k;
selectfile_name,bytes,bytes/blocksblocksizefromdba_data_files;
---------------------------------------------
/dev/raw/raw100810280964096
1028096+4096=1008(k)
[oracle@suk1soft]$ddif=/dev/raw/raw1008of=test.dbf
2016+0recordsin
2016+0recordsout
VariableSize130024296bytes
DatabaseBuffers33554432bytes
/soft/test.dbf'
各种拷贝方式的比较
裸设备到裸设备
需要考虑裸设备的offset;
要保证新设备的大小满足数据文件的需求;
不需要精确计算要拷贝的尺寸,保证大于等于数据文件大小+block0即可(必须从数据字段中才能查出oracle数据文件的大小)
裸设备到文件系统
必须精确计算要拷贝的尺寸,包括的尺寸必须刚好等于数据文件大小+block0(因为无法通过操作系统命令看数据文件的大小,必须通过oracle数据字典查看)
文件系统到裸设备
不需要精确计算要拷贝的尺寸,把文件全部拷到裸设备即可。
文件系统到文件系统
不用考虑offset。
不需要精确计算要拷贝的尺寸,把文件全部拷贝过去就可以。
验证备份
Oracle提高dbv工具来验证备份文件是否有损坏:
[oracle@suk1~]$dbvfile=/dev/raw/raw300
DBVERIFY:
Release10.2.0.3.0-ProductiononFriNov3016:
49:
592007
Copyright(c)1982,2005,Oracle.Allrightsreserved.
DBVERIFY-Verificationstarting:
FILE=/dev/raw/raw300
DBVERIFY-Verificationcomplete
TotalPagesExamined:
2560
TotalPagesProcessed(Data):
0
TotalPagesFailing(Data):
TotalPagesProcessed(Index):
TotalPagesFailing(Index):
TotalPagesProcessed(Other):
8
TotalPagesProcessed(Seg):
TotalPagesFailing(Seg):
TotalPagesEmpty:
2552
TotalPagesMarkedCorrupt:
TotalPagesInflux:
HighestblockSCN:
487492(0.487492)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- dd 工具 使用