DD备份复制裸设备上的数据库Word文档下载推荐.docx
《DD备份复制裸设备上的数据库Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《DD备份复制裸设备上的数据库Word文档下载推荐.docx(10页珍藏版)》请在冰豆网上搜索。
SUNSolaris 0
HP-UX 0
IBMAIX 4k#如果是ScalableVG或带-TO参数的bigVG测为0
Tru64UNIX 64k
Linux 0
1.3dd命令
UNIX上读写裸设备不能使用cp,cpio,tar等命令,必须用dd,下面是几个dd常用参数的简单说明,更详细的信息请参考UNIX使用手册或用命令mandd。
dd[perand=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是三个RAWDEVICE,大小均为8MB(8192k)
d.在未提到操作系统时,默认是AIX,OS_RESERVED_SIZE=4K
二、移动数据文件(DATAFILE)
2.1在裸设备上建立数据文件
用以下命令建立表空间:
CREATETABLESPACEts_testDATAFILE'
SIZE8180k;
SIZE指定的数值必须小于或等于8180k,否则语句将会失败:
ORA-01119:
errorincreatingdatabasefile'
ORA-27042:
notenoughspaceonrawpartitiontofullfillrequest
这个最大值的计算方法如下:
8192k(RAWDEVICESIZE)-4k(OS_RESERVED_SIZE)-8k(DB_BLOCK_SIZE)=8180k
为什么还要减去一个DB_BLOCK_SIZE呢?
这是因为ORACLE建立DATAFILE时,在命令中SIZE指定的大小之外,还要在文件头另加一个BLOCK,叫作“OracleOSHeaderBlock”,里面保存有这个文件的逻辑块大小和文件块数等信息。
这一点并不是在RAWDEVICE上建DATAFILE特有的,如果你在文件系统上建一个DATAFILE,指定SIZE1000k的话,你用ls-l或dir命令看到的文件大小将是1008k(DB_BLOCK_SIZE=8K)。
2.2在文件系统和裸设备之间移动数据文件
2.2.1从文件系统到裸设备
a.在文件系统上建一个4M的DATAFILE
CREATETABLESPACEtestDATAFILE'
SIZE4M;
b.查看一下这个新建的DATAFILE的大小(注:
4202496=4M+8K)
$ls-l/oradata/test.dbf
-rw-r-----1oracledba4202496Aug2915:
01/oradata/test.dbf
c.按下表公式确定dd的参数
d.在数据库没有OPEN的状态下,用dd进行拷贝,下面给出命令及输出
AIX
ddif=/oradata/test.dbfof=/dev/rlv_databs=4kseek=1
1026+0recordsin
1026+0recordsout
Tru64
ddif=/oradata/test.dbfof=/dev/rlv_databs=64kseek=1
64+1recordsin
64+1recordsout
Other
$ddif=/oradata/test.dbfof=/dev/rlv_databs=1024k
4+1recordsin
4+1recordsout
2.2.2从裸设备到文件系统
从裸设备dd到文件系统时一定要指定count。
a.确定数据文件实际大小file_size,用于下一步计算dd的参数count。
如果count计算不对,拷贝出的数据文件无效,数据库无法打开。
SELECTbytes,blocks,bytes/blocksdb_block_size,bytes+bytes/blocksfile_size
FROMdba_data_filesWHEREfile_name='
BYTES BLOCKS DB_BLOCK_SIZE FILE_SIZE
---------------------------------------
4194304 512 8192 4202496
b.按下表公式确定dd的参数,min表示二者之中取较小的
c.在数据库没有OPEN的状态下,用dd进行拷贝,下面给出命令及输出
ddif=/dev/rlv_dataof=/oradata/test2.dbfbs=4kskip=1count=1026
ddif=/dev/rlv_dataof=/oradata/test2.dbfbs=8kskip=8count=513
513+0recordsin
513+0recordsout
ddif=/dev/rlv_dataof=/oradata/test2.dbfbs=8kcount=513
2.2.3重命名数据文件,必须进行RENAME操作
oldfilename'
newfilename'
三、移动联机重作日志(ONLINEREDOLOG)
3.1在裸设备上建ONLINEREDOLOG
用以下命令增加一组ONLINEREDOLOG:
ALTERDATABASEADDLOGFILEGROUP4'
/dev/rlv_redo'
SIZExxxxk;
在裸设备上建REDOLOG时也要计算SIZE子句可使用的最大值,方法类似于在2.1中建DATAFILE时的计算方法,唯一不同的是要把公式中的DB_BLOCK_SIZE换成REDO_BLOCK_SIZE(即REDOLOG的逻辑块大小)。
这个REDO_BLOCK_SIZE在不同操作系统上取值不同,用以下两种方法均可得到这个值,同时还可计算出REDOLOG的实际文件大小file_size):
方法1:
dump现有的REDOLOGFILE
ALTERSYSTEMDUMPLOGFILE'
/oradata/redo01.log'
SHOWPARAMETERuser_dump_dest
查看user_dump_dest目录下刚产生的trc文件:
FILEHEADER:
Softwarevsn=135294976=0x8107000,CompatibilityVsn=135290880=0x8106000
DbId=3227187598=0xc05af98e,DbName='
V817'
ControlSeq=12474=0x30ba,Filesize=8192=0x2000
FileNumber=5,Blksiz=512,FileType=2LOG
方法2:
用ORACLE提供的工具dbfsize,对文件系统和RAWDEVICE上的文件都适用
$dbfsize/oradata/redo01.log
Databasefile:
/oradata/redo01.log
Databasefiletype:
filesystem
Databasefilesize:
8192512byteblocks
从以上两个输出都可得知REDO_BLOCK_SIZE=512,blocks=8192
file_size=(blocks+1)*REDO_BLOCK_SIZE=(8192+1)*512=4194816
如果已知所在平台的REDO_BLOCK_SIZE,也可以通过查询数据字典来计算file_size:
SELECTb.member,b.bytes,b.bytes+512file_sizeFROMv$logfilea,v$logb
WHEREa.group#=b.group#anda.member='
/oradata/redo01.log'
MEMBER BYTES FILE_SIZE
-------------------- -------- ---------
/oradata/redo01.log 4194304 4194816
下表列出了常用OS上的ORACLEREDO_BLOCK_SIZE:
OS REDO_BLOCK_SIZE
--------------------------------
Windows 512
SUNSolaris 512
HP-UX 1024
IBMAIX 512
CompaqTru64UNIX 1024
Linux 512
3.2在文件系统和裸设备之间移动ONLINEREDOLOG
参见2.2拷贝DATAFILE的过程,唯一不同是要把DB_BLOCK_SIZE换成REDO_BLOCK_SIZE。
另外,REDOLOG也可以不用dd进行拷贝,而采用删除重建的方法:
SELECT*FROMv$log;
--besureit'
snotcurrentandarchived
ALTERSYSTEMSWITCHLOGFILE;
--ifit'
scurrent,forceswitch
ALTERDATABASEDROPLOGFILEGROUPn;
ALTERDATABASEADDLOGFILEGROUPn'
newlogfilename'
SIZExxxxM;
四、移动控制文件(CONTROLFILE)
4.1在裸设备上建控制文件
ORACLE的控制文件是执行CREATEDATABASE或CREATECONTROLFILE语句时生成的,其名字是由初始化参数文件init$ORACLE_SID.ora中的control_files参数指定。
CONTROLFILE的大小不能显式指定,而且随着数据库的运行,它还会自动增长,所以为控制文件划分裸设备时要根据经验,留好足够的余量,以免不必要的麻烦。
CONTROLFILE的逻辑块大小和DB_BLOCK_SIZE相同,而且文件头部也和DATAFILE一样有一块“OracleOSHeaderBlock”。
4.2在文件系统和裸设备之间移动控制文件
4.2.1使用dd复制
拷贝CONTROLFILE的方法基本与2.2中拷贝DATAFILE相同,唯一不同是当由裸设备向文件系统拷贝时,如何确定CONTROLFILE的实际大小file_size(ORACLE数据字典里没有CONTROLFILE大小的数据)。
下面介绍两个方法:
执行完下面的SQL语句,再到user_dump_dest目录查看刚产生的trc文件
ALTERSESSIONSETEVENTS'
IMMEDIATETRACENAMECONTROLFLEVEL10'
Softwarevsn=135266304=0x8100000,CompatibilityVsn=134217728=0x8000000
DbId=1937054535=0x73751b47,DbName='
O817'
ControlSeq=5838=0x16ce,Filesize=476=0x1dc
FileNumber=0,Blksiz=8192,FileType=1CONTROL
用ORACLE提供的工具dbfsize
$dbfsize/oradata/control01.ctl
/oradata/control01.ctl
4768192byteblocks
从以上两个方法的输出结果都可得到file_size=(476+1)*8192=3907584
4.2.2使用SQL命令复制
相对于4.2.1介绍的用dd拷贝CONTROLFILE,下面用SQL语句进行复制的方法更为简洁:
STARTUPMOUNT
ALTERDATABASEBACKUPCONTROLFILETO'
newcontrolfile'
语句中newcontrolfile既可以是文件系统文件,也可以是RAWDEVICE,所以在MOUNT状态下运行这个命令就可以生成一个与现有CONTROLFILE完全相同CONTROLFILE复件。
4.2.3修改初始化参数文件(init$ORACLE_SID.ora)
无论用4.2.1还是4.2.2的方法产生了新的CONTROLFILE,为了让数据库使用新的CONTROLFILE,只要修改init$ORACLE_SID.ora里的control_files参数即可。
第二篇
试了一下DD备份复制裸设备上的数据库,并重命名重建库:
以下为步骤:
1.在原库上createpfile及生成dd命今
sql>
createpfile='
/app/oracle/product/10.2.0/db_1/dbs/inittestbk.ora'
fromspfile;
select'
ddif='
||file_name||'
f=/backup/testbk/'
||substr(file_name,20,30)||'
bs=8k'
fromdba_data_files;
selectmemberfromv$logfile;
||member||'
||substr(member,20,30)||'
fromv$logfile;
selectnamefromv$controlfile;
||name||'
||'
control0.dbf
fromv$controlfile;
shutdownimmediate;
2.在原库上备份目标数据库控制文件
alterdatabasebackupcontrolfiletotrace;
3.dd出来裸设备上的数据文件
ddif=/app/oracle/testdb/system01.dbfof=/backup/testbk/system01.dbfbs=8k
ddif=/app/oracle/testdb/undotbs01.dbfof=/backup/testbk/undotbs01.dbfbs=8k
ddif=/app/oracle/testdb/sysaux01.dbfof=/backup/testbk/sysaux01.dbfbs=8k
ddif=/app/oracle/testdb/redo01.dbfof=/backup/testbk/redo01.dbfbs=8k
ddif=/app/oracle/testdb/redo02.dbfof=/backup/testbk/redo02.dbfbs=8k
ddif=/dev/raw/raw6of=/backup/testbk/control01.dbf
bs=8k
ddif=/dev/raw/raw7of=/backup/testbk/control02.dbf
4.修改inittestbk.ora
testbk.__db_cache_size=88080384
testbk.__java_pool_size=4194304
testbk.__large_pool_size=4194304
testbk.__shared_pool_size=67108864
testbk.__streams_pool_size=0
*.audit_file_dest='
/app/oracle/admin/testbk/adump'
*.background_dump_dest='
/app/oracle/admin/testbk/bdump'
*.compatible='
10.2.0.1.0'
*.control_files='
/backup/testbk/control01.dbf'
'
/backup/testbk/control02.dbf'
*.core_dump_dest='
/app/oracle/admin/testbk/cdump'
*.cursor_sharing='
EXACT'
*.db_block_size=8192
*.db_domain='
'
*.db_file_multiblock_read_count=16
*.db_name='
testbk'
*.job_queue_processes=10
*.log_archive_dest_1='
LOCATION=/arch'
*.nls_language='
SIMPLIFIEDCHINESE'
*.nls_territory='
CHINA'
*.open_cursors=300
*.pga_aggregate_target=16777216
*.processes=150
*.remote_login_passwordfile='
EXCLUSIVE'
*.sga_target=167772160
*.undo_management='
AUTO'
*.undo_tablespace='
UNDOTBS1'
*.user_dump_dest='
/app/oracle/admin/testbk/udump'
5.建密码文件:
$orapwdfile=/app/oracle/product/10.2.0/db_1/dbs/orapwtestbkpassword=oracleentries=10
6.从原库的udump拿出trace的controlfile修改以作新库重建controlfile
$exportNLS_LANG=AMERICAN_AMERICA.ZHS16GBK
$exportORACLE_SID=testbk
$sqlplus"
/assysdba"
startupnomount
ORACLEinstancestarted.
TotalSystemGlobalArea
167772160bytes
FixedSize
1218316bytes
VariableSize
75499764bytes
DatabaseBuffers
88080384bytes
RedoBuffers
2973696bytes
CREATECONTROLFILEREUSEsetDATABASE"
TESTBK"
RESETLOGS
ARCHIVELOG
2
MAXLOGFILES16
3
MAXLOGMEMBERS3
4
MAXDATAFILES100
5
MAXINSTANCES8
6
M