oracle-dba-手工管理的备份恢复

手工管理的备份恢复
备份
物理备份
将数据库文件(数据文件,控制文件,重做日志文件)复制到指定目录作为数据文件备份的方式。2种实现方式
使用操作系统工具CP and dd来本分和管理数据文件
使用ORACLE实用工具RMAN来备份和管理数据文件。可以使用命令行,也可以使用GC or EM图像化工具。
逻辑备份
指使用oracle体用的数据迁移工具,如EXPDP,EXP等。导出数据库对象的逻辑结构以及数据。恢复时需要数据库创建所有的数据库对象并插入相应的数据。
冷备份和热备份
冷:数据库关闭的情况下的备份如果数据库是正常关闭的如shutdown immediate。此时冷备份是一致的数据库备份、
热:在数据库打开的状态下的备份,此时用户可以继续访问数据库,执行DML操作。但是要求必须归档模式。归档模式下可以对整个数据库,单独的表以及数据文件进行备份。
数据库恢复
实例恢复
实例突然失败造成的数据库故障,在启用数据库会实例失败,实例恢复使用当前数据文件以及当前的重做日志文件实现数据恢复。由oracle自动完成。
实例恢复2步骤,
前滚:将重做日志文件中记录的用户提交和未提交的事务涉及的数据写入联机数据文件。
RoolForwardcommit records(uncommit records)datafiles
回滚:将未提交的事务涉及的修改通过UNDO中的记录回退回去,
重做日志文件很大,恢复时间会很长,因此引入fast_start_mttr_target使得oracle定时将脏数据写入数据文件,来调整检查点。检查点之前的提交事务不需要回滚,间接提交速度。

介质恢复
由于磁盘损坏或者数据文件损坏而需要的数据库恢复方式。oracle不自动完成,需要用户恢复。介质恢复需要具有备份的数据文件,如果完全恢复还需要自备份依赖的归档日志文件,当前日志文件。
介质恢复2步骤
复原:将备份的数据文件复制到相应目录,如果不是该文件以前的目录需要使用alter database rename datafile指令告诉数据库新的数据文件位置。
恢复:使用归档重做日志以及当前的日志文件恢复数据库到最新状态,使用前滚后在使用后滚恢复。
完全和不完全恢复
完全恢复:当前数据发生故障后,通过备份将数据库恢复到最新状况,不丢失任何数据,如果数据库有数据文件备份和自备份以来全部的归档日志文件和当前的日志文件,就不会丢失数据。可以不同粒度实现恢复,如数据库级,表空间级,数据文件级。
不完全恢复:不能把数据库恢复到最新状况,会丢失数据。可以将数据库恢复到指定的时间点,通常这种事是由于丢失归档日志or当前日志造成。只能在数据库级实现不完全恢复,不能再表空间级or数据文件级实现不完全恢复。
非归档模式下的冷备与恢复
因为数据完全关闭,所以冷备是一致的数据库备份。
缺点:备份全部数据文件,数据文件过大,则需要更多的存储空间。变化过小,则不划算。
准备步骤
查看数据库文件的存储目录
Select file_name from dba_data_files;
查看控制文件
Select name from vcontrolfile;  
查看重做日志文件  
Select group#,number,status from v
logfile;
关闭数据库
Shutdown immediate;
创建备份目录,并把所有数据文件,控制文件,重做日志文件复制到该目录
打开数据库
Startup;
非归档模式备份的数据库会造成从备份开始到故障发生之间的所有用户提交的数据丢失,所以备份只能恢复到冷备开始时。
冷备下恢复
创建表并插入数据
Create table temps(name number(10));
Insert into temps values (123);
删除文件模拟故障
重启数据库报错,关闭数据库
Startup;shutdown immediate;
复制回相关文件
打开数据库
Startup;
查看数据文件是否存在
Select file_name from dba_data_files;
创建的表丢失。
Desc temps;

模拟缺少重做日志文件的恢复方法
 将备份的数据文件和控制文件复制到相应目录
 删除数据库文件
 Startup;启动数据库,提示没有控制文件错误
 使用备份控制文件恢复数据库,需要在mount状态
Recover database until cancel using backup controlfile;
Cancel:让oracle到归档日志中寻找需要的日志数据,满足条件自动停止
 打开数据库
Alter database open;提示错误
Alter database open resetlog;
 查看当前重做日志信息
Select group#,status,member from vlogfile;  
Oracle通过控制文件中记录的重做日志文件的信息重建了重做日志文件组以及重做日志成员。  
   查看重做日志状态信息  
Select group#,sequence#,bytes,status from v
log;
自备份以来所有提交数据丢失
归档模式与非归档模式
Oracle重做日志文件是循环使用的。再切换日志时,如果启动了归档模式,后台归档进程ARCH会启动,当前重做日志中的记录会存储到归档目录下,形成归档文件。
设置数据库的归档模式
Alter database open;
 查看是否是归档模式
Archive log list;
 查看PROD库进程信息
Ps –ef|grep arc;
 手工归档当前的重做日志
Alter system archive log current;
 数据库运行时使用指令设置数据库自动归档模式
Alter system archive log start;
 Oracle 10g之前,重启数据库后归档进程不自动启动,设置静态参数,重启数据生效,该参数使得每次启动数据库归档进程自动启动.10g以上版本不需要设置。
Alter system set log_archive_start=true scope=spfile;
设置归档进程相关参数
LGWR进程将内存中的数据写入重做日志文件,是内存读磁盘写。而ARC进程是将重做日志文件写入归档文件,是磁盘读磁盘写。效率比前者慢。当大量DML操作时,频繁写入归档文件,归档慢重做日志写入快,会导致挂起。此时数据库什么不做等待归档完成。针对这情况多开归档进程解决。
查看当前归档进程数量
Show parameter log_archive_max_processes;
修改归档进程数量
Alter system set log_archive_max_processes=3;
查看归档进程
Ps –ef|grep arc

备份多份归档日志目录,解决一旦一份文件出错无法恢复数据库情况
查看归档日志目录or状态
Show parameter log_archive_dest;
创建多个归档目录
指定多个归档目录
Alter system set log_archive_dest_n=’目录名 mandatory’;
Alter system set log_archive_dest_n=’目录名 optional;
Mandatory:要求改归档日志必须写成功,即oracle要求日志数据文件必须归档到该目录成功后才可以切换。
Optional:没有归档成功也可以切换日志。
查看当前目录设置状态
Show parameter log_archive;
执行日志切换启动归档
Alter system switch logfile;
去相应的目录下是否存在归档文件
设置必须要归档成功的最小数量
Alter system set log_archive_min_successed_dest=2;
手工热备份数据库步骤
热备:数据库运行过程中的数据库备份。可备份某表空间一个或者多个数据文件。备份过程中表空间依然可用,支持DML操作。
热备过程中数据文件头SCN锁定,不会有任何数据写入数据文件。之所以还支持DML操作是因为此时数据的变化都写入了重做日志文件,当表空间or数据文件结束备份模式时,会触发恢复过程,将涉及到该表空间的所有变化数据写入该表空间,提升数据文件头的SCN,使得控制文件和数据文件中记录的SCN一致。
步骤:
 表空间处于备份模式
 使用操作系统工具将表空间对应的数据文件备份到指定目录
 结束备份模式
 归档当前日志,备份归档日志。
查看表空间对应的数据文件
Select file_id,file_name,tablespace_name from dba_data_files;
将表空间置于备份模式
Alter tablespace 表空间名 begin backup;
查看数据文件是否处于备份状态
Select * from vbackup;  
复制数据文件到其他目录  
结束表空间的备份模式  
Alter tablespace 表空间名 end backup;  
将当前重做日志文件信息写入归档日志文件  
Alter system archive log current;  
查看当前数据文件检查点信息  
Select checkpoint_change#,file# from v
datafile;
热备过程中的对数据库崩溃的处理方法
模拟过程,步骤如下
启动表空间备份模式
Alter tablespace users begin backup;
查看表空间是否开启
Select * from vbackup;  
Change#表示scn号  
查看数据文件起始校验点(SCN号)  
Select checkpoint_change#,file# from v
datafile;
重启数据库,因为数据文件头与控制文件scn不一致,无法启动,此时数据库处于mount
Shutdown abort;
Startup;
查看那些文件处于备份状态,记录编号
Select * from v backup;使reconverRecoverdatafile;Alterdatabaseopen;Selectfromv backup;
方法2:结束表空间备份模式,解锁数据文件头SCN,oralce会自动恢复
Alter tablespace users end backup;

备份控制文件
1:二进制备份
 备份到指定目录
Alter database backup controlfile to ‘目录/文件名.bak’;
查看目录下文件
Host ls 目录;
 备份到trace文件(user_dump_dest参数指定的目录下)
Alter database backup controlfile to tracel;
确认用户的dump目录
Show parameter user_dump_dest;
查找trace文件
Select spid from v processwhereaddr=(Selectpaddrfromv session where sid=(Select sid from vmystat where rownum=1));  
使用控制文件脚本即可生成控制文件;  
2:使用Rman自动备份  
备份的触发条件是控制文件的内容发生变化,如创建了新表空间。  
设置Rman的控制文件自动备份  
Configure controlfile autobackup on;  
设置控制文件的备份目录  
Configure controlfile autobackup format for device type disk to ‘目录/%F’;  
创建表空间  
Create tablespace test datafile ‘目录/文件.dbf’ size 100m;  
再去控制文件备份目录查看备份文件是否存在。  
介质恢复原理  
数据库文件损坏or数据文件所在磁盘故障,需要数据库恢复称为介质恢复。  
步骤如下  
1:还原,使用备份的文件替换丢失or损坏的文件。将备份的文件复制到坏文件目录,或者复制到不同目录,在修改控制文件配置  
2:恢复,将归档的日志文件以及联机重做日志文件里的重做记录应用到还原出来的文件上,使用recover命令完成。  
打开数据库时,oracle读取控制文件,对控制文件以及数据文件中的SCN比较,不一致则恢复。数据文件,控制文件,联机重做日志文件不同步,恢复。SCN基于系统时间戳,所以不会跟本机时间不一致。SCN是唯一的。  
控制文件记录了3种SCN,如下:  
1:系统检查点SCN  
检查点进程启动时,将检查点结束时间转换为SCN号记录在控制文件中。发生文件级别检查点时,不会更新该系统检查点SCN。因为他是全局范围的。  
查看系统检查点,该视图就是从控制文件中读取信息  
Select  name,checkpoint_change# from v
database;
2:数据文件检查点
检查点进程启动时,包括全局范围以及文件级别的检查点都会在控制文件里面记录每个数据文件上所发生的检查点SCN。
将表空间设置只读,begin backup,或某个数据文件设置为offline会触发文件级别的检查点并将该检查点更新到控制文件和数据文件头部,并以后不再变化。
查看当前的文件检查点
Select file#,checkpoint_change#,last_change# from vdatafile;  
last_change:表示数据文件结束的SCN  
将表空间offline,测试检查点是否修改  
Alter tablespace uers offline;  
Select file#,checkpoint_change#,last_change# from v
datafile;
3:结束SCN
每个数据文件都会有结束SCN。在数据库正常运行期间,在线的,可读写数据文件,终止SCN都为空。而对非正常关闭数据库时,或者将数据文件正常离线,或只读时,都会触发检查点进程,从而在控制文件里记录每个数据文件上的结束时的SCN号。
将表空间users设置为ONLINE;
ALTER TABLESPACE USERS online;
查看文件检查点SCN信息
Select file#,checkpoint_change#,last_change# from vdatafile;  
表空间设置为只读状态  
Alter tablespace audit_tbs read only;  
查看检查点,修改的表空间起始和结束scn相同  
Select file#,checkpoint_change#,last_change# from v
datafile;
表空间修改为读写模式,结束SCN为空
Alter tablespace tudit_tbs read write;
Select file#,checkpoint_change#,last_change# from vdatafile;  
查看数据文件头部的SCN信息  
Select file#,checkpoint_change# from v
datafile_header;
发现上述检查点SCN不一致,触发系统检查点,保证一致
ALTER SYSTEM CHECKPOINT;
Select file#,checkpoint_change# from vdatafile;  
Select checkpoint_change# from v
database;
归档模式下的完全恢复
设置归档目录
Alter system set log_archive_dest_1=’location=目录 mandatory’;
Alter system set log_archive_dest_2=’location=目录 mandatory’;
查询归档模式
Archive log list;
数据文件在有备份情况下恢复
备份表空间users的数据文件
Alter tablespace users begin backup;
创建表t1,插入数据并提交
Create table t1(idnumber )tablespace users;
删除users表空间文件,模拟文件损坏
重启数据库,故障
Startup;
将数据文件or数据文件对应表空间离线
Alter database datafile 4 offline;
将备份文件复制到损坏的数据文件目录,如果数据文件所在磁盘损坏可以复制到其他目录,使用alter Database rename datafile修改控制文件中对该损坏数据文件的记录
查看哪些数据文件需要恢复
Select * from vrecover_file;  
Change#:SCN号  
查看数据文件信息,这里的4对应的是v
recover_file的file#
Select file#,checkpoint_change#,last_change# from v%datafile where file#=4;
将4对应的表空间users设置为online,提示需要介质恢复
Alter tablespace users online;
Recover datafile 4;
查看表失败,因为该表空间设置的是离线状态
Select * from t1;
Alter database datafile 4 online;
查看控制文件与数据文件中的SCN,一致
SELECT FILE#,CHECKPOINT_CHANGE#,LAST_CHANGE# FROM VDATABASE WHERE FILE#=4;  
Select file#,checkpoint_change# from v
datafile_header where file#=4;

数据文件在无备份情况下的恢复
创建表空间,创建一个表并插入数据
Create tablespace test datafile ‘目录/test.dbf’ size50m;
Create table tsb(id number)tablespace test;
Insert into tsb values(1);
删除该目录下文件
修改系统刷新缓存,并查看表数据,显示错误
Alter system flush buffer_cache;
Select * from tsb;
将无法打开的文件离线
Alter database datafile 文件编号 offline;
创建新的数据文件
Alter database create datafile ‘目录/test.dbf’;
将文件在线,失败
Alter database datafile 文件编号 online;
恢复数据文件并将数据文件online
Recover datafile 文件编号;
Alter database datafile 文件编号 online;
查看表信息,完全恢复,因为启动了数据库归档模式,并且自该表空间创建后,所有插入的数据都被重做日志或者归档日志保护。
Select * from tsb;

系统表空间数据文件损坏的完全恢复
备份系统表空间,复制一份文件到其他目录,然后删除系统表空间文件
启动数据库,失败
Startup;
将数据文件offline,再打开数据库失败,
Alter database datafile 文件编号 offline;
Alter database open;
此时数据库处于mount状态,复制备份文件到系统表空间目录
将数据文件online,打开数据库失败
Alter database datafile 文件编号 online;
Alter database open;
介质恢复,并打开
Recover datafile 文件编号
Alter database open;
当前undo表空间损坏的完全恢复
Undo表空间损坏,无法回滚。
查询当前undo信息
Show parameter undo;
查看相关数据文件信息
Select file_name,tablespace_name,online_status,status from dba_data_files where tablespace_name like ‘UNDO%’;
热备2数据文件
Alter tablespace 文件名 begin backup;
Host 手动复制Exit;
Alter tablespace 文件名 end backup;
删除还原表空间文件
创建用户,授权并创建表
Create user udo identified by oracle;
Grant resource ,connect to udo;
Create table ut(age number);
失败,因为非sys用户无法使用系统还原段
启动数据库到mount状态
Startup mount;
将备份文件cp到原来目录
恢复数据文件
Recover datafile 文件编号;
打开数据库,并查看还原表空间以及数据文件状态信息
Alter database open;
Select file_name,tablespace_name,online_status,status from dba_data_files where tablespace_name like ‘UNDO%’;
非当前undo表空间损坏的完全恢复
创建还原表空间,查看表信息, 并查看还原表空间以及数据文件状态信息
Create undo tablespace undotbs2 datafile ‘目录/文件名.dbf’ size 100m extent management local;
Show parameter undo;
Select file_name,tablespace_name,online_status,status from dba_data_files where tablespace_name like ‘UNDO%’;
关闭数据库,删除表空间对应的数据文件,
重启数据库,报错。
Startup;
将数据文件离线,然后打开数据库
Alter database datafile 文件编号 offline;
Alter database open;
查看还原表空间以及数据文件状态信息
Select file_name,tablespace_name,online_status,status from dba_data_files where tablespace_name like ‘UNDO%’;
表空间数据文件依然记录在数据字典汇总,重建该表空间时会由于重名报错,删除
Drop tablespace 表空间。
通过重建方式恢复非当前的还原表空间
Create undo tablespace undotbs2 datafile ‘目录/undotbs2.dbf’ size 100m extent management local;
不完全恢复
场合:
 应用归档日志过程中,丢失多个归档日志文件,只能将数据库恢复到最后丢失的日志文件为止
 丢失当前正在使用的日志文件or丢失了没有归档的非当前日志文件
 使用备份的控制文件完成恢复
 误操作,如删除表,可以使用不完全恢复将数据恢复到误操作之前的时间点。
不完全恢复类型
 基于时间点的不完全恢复
Recover database until time ‘yyyy-mm-dd hh24:mi:ss’;
 基于撤销的不完全恢复,恢复到输入cancel命令时,用于丢失联机重做日志or归档日志文件。
Recover database until cancel;
 基于SCN号的不完全恢复。恢复到指定,历史上的SCN
Recover database until cancel scn scn号;
建议使用不完全恢复时,对数据库进行冷备。恢复失败可以还原。
所有控制文件丢失的恢复方法
模拟所有控制文件丢失,使用备份的控制文件实现完全恢复
创建表
Create table t1 tablespace users as select * from scott.emp;
备份控制文件
Alter database backup controlfile to ‘目录/control.ctl.bak’;
创建表2
Create table t2 tablespace users as select * from scott.dept;
将所有控制文件删除,启动数据库,报错。此时数据库处于nomount状态
Startup;
将备份的控制文件复制到指定目录
启动数据库到mount状态,查看控制文件和数据文件中的SCN,是否需要恢复,以提高控制文件中的SCN
Startup mount;
Select file#,checkpoint_change# from vdatafile;  
Select file#,checkpoint_change# from v
datafile_header;
不一致,则通过归档or当前日志文件记录来提升SCN恢复
Recover database using backup controlfile;
使用当前重做日志恢复,如果不是当前重做日志组,则需要切换
Recover database using backup controlfile;
打开数据库
Alter database open resetlogs;
Select * from t1;
Select * from t2;
完全恢复。
重建控制文件方式2
在没有备份也没有冗余情况下,使用。但是需要一些数据库信息,这些信息可以存放在trace文件中。
获取重建需要的数据库信息,并保存到指定trace文件,文件在user_dump_file目录下
Alter database backup contrilfile to trace;
创建表
Create table t2 tablespace users as select * from scott.emp;
关闭数据库,删除所有控制文件,重启数据库报错。
使用trace文件的内容运行,作用重建控制文件
获取当前控制文件SCN.
Select checkpoint_change# from vdatabase;  
从当前日志文件的first_change#获取,当前控制文件SCN.  
Select group#,first_change#,status from v
log;
从数据文件获取scn
Select filr#,checkpoint_change# from vdatafile;  
从数据文件头部获取scn  
Select file#,checkpoint_change# from v
datafile_header;
恢复数据库
Recover database using backup controlfile;
此时使用完了归档日志,使用当前重做日志文件
Recover database using backup controlfile;
打开数据库
Alter database open resetlogs;
查看表是否存在
Desc t2;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值