DD备份复制裸设备上的数据库.docx
- 文档编号:5485454
- 上传时间:2022-12-17
- 格式:DOCX
- 页数:10
- 大小:23.94KB
DD备份复制裸设备上的数据库.docx
《DD备份复制裸设备上的数据库.docx》由会员分享,可在线阅读,更多相关《DD备份复制裸设备上的数据库.docx(10页珍藏版)》请在冰豆网上搜索。
DD备份复制裸设备上的数据库
DD备份复制裸设备上的数据库,并重命名重建库及DD的使用
前几天一个客户将raw环境的RAC数据库,一个数据库文件建在某个节点的本地了!
!
而且是sysaux表空间下的一个数据文件,已经过去2个月才发现这个问题,so新加的数据文件已经使用了40%,解决办法就是将文件系统和裸设备之间转换。
其实办法很简单,就是一个copy+rename的过程:
1、关闭所有数据库节点,使用shutdownimmediate命令关闭
2、使用dd命令copy文件到裸设备,例如:
ddif=/oradata/test.dbff=/dev/rlv_databs=4kseek=1
3、启动某个节点的数据库到mount状态,然后修改datafile路径,例如:
SQL>STARTUPMOUNT;
SQL>ALTERDATABASERENAMEFILE'/oradata/test.dbf'TO'/dev/rlv_data';
4、启动数据库到open状态
SQL>ALTERDATABASEOPEN;
一、关于裸设备
1.1什么是裸设备(RAWDEVICE)
裸设备是指未创建文件系统的磁盘分区(rawpartition)或逻辑卷(rawlogicalvolume),应用程序直接通过一个字符设备驱动程序对它进行访问。
如何对设备上的数据读写决定于使用它的应用程序。
由于对裸设备的操作不通过UNIX的缓冲区,数据在ORACLE的数据缓冲区(BUFFERCACHE)和磁盘之间直接传递,所以使用裸设备在一定程度上能够提高I/O性能,适合I/O量大的系统。
另外OPS/RAC(OracleParallelServer/RealApplicationCluster)环境下,多个节点同时访问同一个数据库,所以CONTROLFILE、DATAFILE、REDOLOG都必须建在RAWDEVICE上。
1.2裸设备的可用空间
不同的UNIX对裸设备的管理不完全相同,特别要注意的是某些UNIX在每个裸设备的头部要保留一定的空间,应用程序在使用裸设备时不可以覆盖这一部分,否则会对裸设备造成损坏。
所以一个裸设备的实际可用空间是分配给裸设备的空间再减去这部分操作系统保留空间。
下面是常用UNIX的OSReservedSize列表:
UNIX OSReservedSize
------------ ----------------
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在裸设备上建立数据文件
用以下命令建立表空间:
SQL>CREATETABLESPACEts_testDATAFILE'/dev/rlv_data'SIZE8180k;
SIZE指定的数值必须小于或等于8180k,否则语句将会失败:
ORA-01119:
errorincreatingdatabasefile'/dev/rlv_data'
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
SQL>CREATETABLESPACEtestDATAFILE'/oradata/test.dbf'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计算不对,拷贝出的数据文件无效,数据库无法打开。
SQL>SELECTbytes,blocks,bytes/blocksdb_block_size,bytes+bytes/blocksfile_size
FROMdba_data_filesWHEREfile_name='/dev/rlv_data';
BYTES BLOCKS DB_BLOCK_SIZE FILE_SIZE
---------------------------------------
4194304 512 8192 4202496
b.按下表公式确定dd的参数,min表示二者之中取较小的
c.在数据库没有OPEN的状态下,用dd进行拷贝,下面给出命令及输出
AIX
ddif=/dev/rlv_dataof=/oradata/test2.dbfbs=4kskip=1count=1026
1026+0recordsin
1026+0recordsout
Tru64
ddif=/dev/rlv_dataof=/oradata/test2.dbfbs=8kskip=8count=513
513+0recordsin
513+0recordsout
Other
ddif=/dev/rlv_dataof=/oradata/test2.dbfbs=8kcount=513
513+0recordsin
513+0recordsout
2.2.3重命名数据文件,必须进行RENAME操作
SQL>STARTUPMOUNT;
SQL>ALTERDATABASERENAMEFILE'oldfilename'TO'newfilename';
SQL>ALTERDATABASEOPEN;
三、移动联机重作日志(ONLINEREDOLOG)
3.1在裸设备上建ONLINEREDOLOG
用以下命令增加一组ONLINEREDOLOG:
SQL>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
SQL>ALTERSYSTEMDUMPLOGFILE'/oradata/redo01.log';
SQL>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:
SQL>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进行拷贝,而采用删除重建的方法:
SQL>SELECT*FROMv$log;--besureit'snotcurrentandarchived
SQL>ALTERSYSTEMSWITCHLOGFILE;--ifit'scurrent,forceswitch
SQL>ALTERDATABASEDROPLOGFILEGROUPn;
SQL>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大小的数据)。
下面介绍两个方法:
方法1:
执行完下面的SQL语句,再到user_dump_dest目录查看刚产生的trc文件
SQL>ALTERSESSIONSETEVENTS'IMMEDIATETRACENAMECONTROLFLEVEL10';
FILEHEADER:
Softwarevsn=135266304=0x8100000,CompatibilityVsn=134217728=0x8000000
DbId=1937054535=0x73751b47,DbName='O817'
ControlSeq=5838=0x16ce,Filesize=476=0x1dc
FileNumber=0,Blksiz=8192,FileType=1CONTROL
方法2:
用ORACLE提供的工具dbfsize
$dbfsize/oradata/control01.ctl
Databasefile:
/oradata/control01.ctl
Databasefiletype:
filesystem
Databasefilesize:
4768192byteblocks
从以上两个方法的输出结果都可得到file_size=(476+1)*8192=3907584
4.2.2使用SQL命令复制
相对于4.2.1介绍的用dd拷贝CONTROLFILE,下面用SQL语句进行复制的方法更为简洁:
SQL>STARTUPMOUNT
SQL>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;
sql>select'ddif='||file_name||'f=/backup/testbk/'||substr(file_name,20,30)||'bs=8k'fromdba_data_files;
sql>selectmemberfromv$logfile;
sql>select'ddif='||member||'f=/backup/testbk/'||substr(member,20,30)||'bs=8k'fromv$logfile;
sql>selectnamefromv$controlfile;
select'ddif='||name||'f=/backup/testbk/'||'control0.dbf bs=8k'fromv$controlfile;
sql>shutdownimmediate;
2.在原库上备份目标数据库控制文件
SQL>alterdatabasebackupcontrolfiletotrace;
SQL>shutdownimmediate;
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 bs=8k
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"
SQL>startupnomount
ORACLEinstancestarted.
TotalSystemGlobalArea 167772160bytes
FixedSize 1218316bytes
VariableSize 75499764bytes
DatabaseBuffers 88080384bytes
RedoBuffers 2973696bytes
SQL>CREATECONTROLFILEREUSEsetDATABASE"TESTBK"RESETLOGS ARCHIVELOG
2 MAXLOGFILES16
3 MAXLOGMEMBERS3
4 MAXDATAFILES100
5 MAXINSTANCES8
6 M
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DD 备份 复制 设备 数据库