oracle归档备份详细步骤.docx
《oracle归档备份详细步骤.docx》由会员分享,可在线阅读,更多相关《oracle归档备份详细步骤.docx(14页珍藏版)》请在冰豆网上搜索。
oracle归档备份详细步骤
归档模式下的热备份前期准备
常用数据字典
v$datafile
v$backup
v$controlfile
v$archived_log
v$archive_dest
dba_data_file
数据库备份和恢复的物理结构有以下组成
数据文件
控制文件
重做日志文件
归档日志文件
备份类型
完全备份:
用于建立增量备份和累积备份的一个基点,备份所有数据块
增量备份:
只备份上次增量备份,累积备份或者完全备份以后已改变的数据块
累积备份:
只备份上次完全备份以后已经更改的数据块
一般累计备份是为rman提供的.
归档模式下的全库备份可以open下做全库不一致备份也可以是在数据库关闭下做全库冷备份
归档模式下的热备份备份结构
数据文件
归档重做日文
控制文件
参数文件
网络配置文件--------可选
口令文件------------可选
归档模式下的热备份是在数据库open的装下备份此时的备份叫做不一致性备份,再恢复数据库时必须要用归档重做日志来恢复完整性的
SQL>colnamefora50
SQL>selectname,statusfromv$datafile;查看数据文件状态和位置
NAMESTATUS
---------------------------------------------------------
/u01/app/oracle/oradata/sheng/system01.dbfSYSTEM
/u01/app/oracle/oradata/sheng/undotbs01.dbfONLINE
/u01/app/oracle/oradata/sheng/sysaux01.dbfONLINE
/u01/app/oracle/oradata/sheng/users01.dbfONLINE
/u01/app/oracle/oradata/sheng/example01.dbfONLINE
SQL>selectnamefromv$controlfile;得到控制文件的位置
NAME
--------------------------------------------------
/u01/app/oracle/oradata/sheng/control01.ctl
/u01/app/oracle/oradata/sheng/control02.ctl
/u01/control/control03.ctl
SQL>colfile_namefora50
SQL>selectfile_name,tablespace_namefromdba_data_files;查看表空间所对应的数据文件
FILE_NAMETABLESPACE_NAME
----------------------------------------------------------------------
/u01/app/oracle/oradata/sheng/users01.dbfUSERS
/u01/app/oracle/oradata/sheng/sysaux01.dbfSYSAUX
/u01/app/oracle/oradata/sheng/undotbs01.dbfUNDOTBS1
/u01/app/oracle/oradata/sheng/system01.dbfSYSTEM
/u01/app/oracle/oradata/sheng/example01.dbfEXAMPLE
SQL>select*fromv$backup;查看备份状态.
FILE#STATUSCHANGE#TIME
-----------------------------------------------
1NOTACTIVE0
2NOTACTIVE0
3NOTACTIVE0
4NOTACTIVE0
5NOTACTIVE0
12rowsselected.
notactive表示没有备份状态active表示为备份状态
change表示表空间备份的上次scn号time为备份时间
SQL>selectdestination,binding,target,statusfromv$archive_dest;归档日志文件的路径
DESTINATIONBINDINGTARGETSTATUS
---------------------------------------------
/u01/archive/disk1MANDATORYPRIMARYVALID
/u01/archive/disk2OPTIONALPRIMARYVALID
/u01/archive/disk3OPTIONALPRIMARYVALID
/u01/archive/disk4OPTIONALPRIMARYVALID
OPTIONALPRIMARYINACTIVE
OPTIONALPRIMARYINACTIVE
OPTIONALPRIMARYINACTIVE
OPTIONALPRIMARYINACTIVE
OPTIONALPRIMARYINACTIVE
OPTIONALPRIMARYINACTIVE
10rowsselected.
SQL>
SQL>selectdest_id,namefromv$archived_log;查看归档日志文件会很多
SQL>selectcount(*)fromv$archived_log;统计下一共多少条归档重做日志
COUNT(*)
----------
104
归档模式下的冷备份操作归档模式可以关闭做一个冷备份也可以开机热备
归档模式下的冷备份还需要redolog的文件的位置需要使用数据字典
v$logfile
SQL>selectmemberfromv$logfile;
MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/sheng/redo03.log
/u01/app/oracle/oradata/sheng/redo02.log
/u01/app/oracle/oradata/sheng/redo01.log
/u01/logfiles/redo04.log
/u01/logfiles/redo04a.log
冷备份正常关闭数据库shutdownimmediate这样所有的数据文件的scn是一致的
这时备份redologfiles可以选择不备份但也最好备份
优点
操作简单
操作
shutdownimmediate
hostcp
cp参数文件
cp口令文件
cp数据文件SQL>selectname,statusfromv$datafile;这条语句得出的所有的文件
最好用tar打包复制到磁盘或是磁带
归档模式下的全库备份------------表空间级别的备份数据库在open装下时如果直接cp数据文件时,因为此时数据库是打开的状态,数据文件此时是可以被读写的,所以在cp时,数据文件此时会被访问或是修改,造成数据文件内包含新数据或是老数据.会产生数据文件的不一致性,这时候直接cp的数据文件是不可以作为恢复数据库的备份文件
要想备份表空间级别的数据文件必须要先冻结数据文件的SCN号然后再cp数据文件,但此时依然会产生数据的不一致,但在归档模式下,这些数据文件的所有被更改的信息会写入redolog里,然后执行归档重做日志,当需要恢复数据库时,当需要这些产生变化的数据时,使用归档重做日志恢复即可
所以在归档模式下全库备份,就要备份归档重做日志,好达到数据文件的一致性.
不备份联机重做日志的原因是因为open状态下的LGWR会一直运行的,所以重做日志是有变化的而且数据文件也是在随时变化的
步骤
beginbackup冻结表空间的scn
CP数据文件到备份目录
endbackup解冻表空间的scn
整个数据库备份就是表空间里的数据文件一个一个的cp
SQL>altertablespaceexamplebeginbackup;
Tablespacealtered.
SQL>select*fromv$backup;
FILE#STATUSCHANGE#TIME
-----------------------------------------------
1NOTACTIVE61947415-MAY-10
2NOTACTIVE61955615-MAY-10
3NOTACTIVE61969215-MAY-10
4NOTACTIVE61972115-MAY-10
5ACTIVE71294916-MAY-10
SQL>!
cp/u01/app/oracle/oradata/sheng/example01.dbf(到备份路径)
SQL>altertablespaceexampleendbackup;
Tablespacealtered.
SQL>
SQL>select*fromv$backup;
FILE#STATUSCHANGE#TIME
-----------------------------------------------
1NOTACTIVE61947415-MAY-10
2NOTACTIVE61955615-MAY-10
3NOTACTIVE61969215-MAY-10
4NOTACTIVE61972115-MAY-10
5NOTACTIVE71294916-MAY-10
SQL>
SQL>altertablespaceT1beginbackup;begin为冻结此数据文件备份时不能是活动的
Tablespacealtered.
SQL>hostcp/u01/tablespace/usertable/t1_01.dbf/u01/hostbackup/disk1OS命令热备份
SQL>select*fromv$backup;
FILE#STATUSCHANGE#TIME
-----------------------------------------------
1NOTACTIVE0
2NOTACTIVE0
3NOTACTIVE0
4NOTACTIVE0
5NOTACTIVE0
6NOTACTIVE0
7NOTACTIVE0
8NOTACTIVE0
9NOTACTIVE0
10ACTIVE95499005-MAY-10以备份的数据文件
11NOTACTIVE0
12NOTACTIVE0
12rowsselected.
SQL>altertablespaceT1endbackup;解冻此数据文件
Tablespacealtered.
SQL>
归档模式下的全库备份------------表空间级别的备份------冻结与解冻SCN中间的产生的变化beginbackup与endbackup中间产生的过程
tablespaceischeckpointed表空间在内存的sgadatabasebuffercache里的脏数据都会可靠的写到这个表空间的数据文件上
会产生一个数据文件的scn号这个scn号就是刚才表空间产生检查点的scn号,并且停止增长scn号.被冻结
如果此时这个数据文件有被改变,那产生变化的数据块就会写到redologs里然后redolog会被归档当恢复时发现有变化的数据块时
可以做一个实验:
来验证这个过程
(
SQL>selectfile_name,tablespace_namefromdba_data_files;
FILE_NAMETABLESPACE_NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/sheng/users01.dbfUSERS
/u01/app/oracle/oradata/sheng/sysaux01.dbfSYSAUX
/u01/app/oracle/oradata/sheng/undotbs01.dbfUNDOTBS1
/u01/app/oracle/oradata/sheng/system01.dbfSYSTEM
/u01/app/oracle/oradata/sheng/example01.dbfEXAMPLE
SQL>createuseru1identifiedbyu1defaulttablespaceexample;
Usercreated.
SQL>grantconnect,resourcetou1;
Grantsucceeded.
SQL>connu1/u1
Connected.
SQL>createtablefruit(namevarchar2(32));
Tablecreated.
SQL>insertintofruitvalues('orange');
1rowcreated.
SQL>commit
2;
Commitcomplete.
ERRORatline1:
ORA-00936:
missingexpression
SQL>select*fromfruit;
NAME
--------------------------------
orange
SQL>
SQL>conn/assysdba
Connected.
SQL>altersystemcheckpoint;登录sys用户产生检查点把以上操作写到数据文件中(从databasebuffercache中写到磁盘中的数据文件)
Systemaltered.
SQL>
SQL>connu1/u1
Connected.
SQL>selectdbms_rowid.rowid_block_number(rowid)blk,namefromfruit;
BLKNAME
------------------------------------------
1012orange
就是我想看下这条记录在文件上的那个块上通过rowid来查看在那个块上
SQL>showparameterdb_block
NAMETYPEVALUE
-----------------------------------------------------------------------------
db_block_buffersinteger0
db_block_checkingstringFALSE
db_block_checksumstringTRUE
db_block_sizeinteger8192
SQL>!
[oracle@fs11sheng]$ddif=example01.dbfibs=8192skip=1011count=2|strings
2+0recordsin
32+0recordsout
16384bytes(16kB)copied,0.000611604seconds,26.8MB/s
orange
SQL>connu1/u1
Connected.
SQL>updatefruitsetname='apple';
1rowupdated.
SQL>commit;
Commitcomplete.
SQL>select*fromfruit;
NAME
--------------------------------
apple
SQL>conn/assysdba
SQL>altersystemcheckpoint;
Systemaltered.
[oracle@fs11~]$cd/u01/app/oracle/oradata/sheng/
[oracle@fs11sheng]$ddif=example01.dbfibs=8192skip=1011count=2|strings
2+0recordsin
32+0recordsout
16384bytes(16kB)copied,0.000338887seconds,48.3MB/s
apple,新值
orange老值为什么会有老值就是oracle的内部细节问题
[oracle@fs11sheng]$
)
归档模式下的全库备份------------表空间级别的备份------------beginbackup时出现的断电意外处理 如果此时正在对某个表空间进行beginbackup时而且这个表空间已经处在beginbackup状态计算机突然断电,再次重启数据库时会产生报错
做一个断电实验来看下这样的问题如何解决
先查看下表空间和数据文件的对应关系
SQL>selectfile_id,file_name,tablespace_namefromdba_data_files;
FILE_IDFILE_NAMETABLESPACE_NAME
------------------------------------------------------------------------------------------
4/u01/app/oracle/oradata/sheng/users01.dbfUSERS
3/u01/app/oracle/oradata/sheng/sysaux01.dbfSYSAUX
2/u01/app/oracle/oradata/sheng/undotbs01.dbfUNDOTBS1
1/u01/app/oracle/oradata/sheng/system01.dbfSYSTEM
5/u01/app/oracle/oradata/sheng/example01.dbfEXAMPLE
SQL>altertablespaceusersbeginbackup;把users表空间设置为beginbackup状态
Tablespacealtered.
SQL>shutdownabort;abort立即关机相当于断电
ORACLEinstanceshutdown.
SQL>startup启动数据库
ORACLEinstancestarted.
TotalSystemGlobalArea285212672bytes
FixedSize1218992bytes
VariableSize125830736bytes
DatabaseBuffers155189248bytes
RedoBuffers2973696bytes
Databasemounted.
ORA-01113:
file4needsmediarecovery此时在mount数据库后会报错必须媒介恢复意思是文件4需要恢复
ORA-01110:
datafile4:
'/u01/app/oracle/oradata/sheng/users01.dbf'
SQL>select*fromv$backup;查看数据字典v$backup查看备份状态
FILE#STATUSCHANGE#TIME
-----------------------------------------------
1NOTACTIVE61947415-MAY-10
2NOTACTIVE61955615-MAY-10
3NOTACTIVE61969215-MAY-10
4ACTIVE71370116-MAY-10
5NOTACTIVE71294916-MAY-10
此时显示的是数据文件4是在备份状态下也就是在beginbackup状态所以endbackup就可以啦
SQL>alterdatabasedatafile4endbackup;
Databasealtered.
SQL>alterdatabaseopen;此时在open就可以啦
Databasealtered.
SQL>
设置表空间为只读模式与读写备份时可以把一些不会被更改的表空间设置成只读模式下这样在做全库备份时备份一次即可以后增量或是再次全库备份时这个被设置成只读状态的表空间就不用在备份啦这样做是为了检查备份量和恢复时间
在修改表空间为只读或是读写时都会产生对控制文件的更改,所以在设置表空间的只读和读写时最好都备份下控制文件,虽然有归档重做日志文件,也要立即备份控制文件
SQL>altertablespacet1readonly;只读
Tablespacealtered.
SQL>
当对一个表空间设置成只读对产生一个检查点
然后冻结表头的scn号
这个表空间就不能写入
SQL>altertablespacet1readwrite;读写
Tablespacealtered.
logging与nologginglogging与nologging
logging
全部更改都会写到redo
一个全库备份+归档日志就能恢复到最新的状态
只要归档日志没有损坏
nologging
不记录redo信息或产生少量
yologging不产生redo也就没有归档重做日志
如果操作nologging后