暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle手工备份与恢复

木底木叉 2020-09-08
319

1、归档模式与非归档模式

非归档模式下只能进行冷备(RMAN也只能做冷备)。备份时许备份控制文件、数据文件并且干净的关闭数据(保证数据全部写入数据文件),redo文件不需要备份,非归档模式不能recover且干净关闭后数据已经进入数据文件,归档模式下有archivelog;

非归档模式下数据文件丢失只能做整库还原,因没有归档日志,不能做恢复。

alter database archivelog;--开归档
alter database noarchivelog;--关归档

db_recovery_file_dest  --该参数指定归档路径
db_recovery_file_dest_size;--执行归档区大小,开归档后注意调整该区域大小,否则归档区域爆满可能会宕机
复制

2、

还原:OS命令     恢复:recover

视图:v$datafile\v$datafile_header\v$controlfile\v$logfile\dba_tablespaces\dba_data_files

select name from v$datafile;
select file_id,file_name,tablespace_name from dba_data_files;
select name from v$controlfile;
复制

3、

只读表空间不能做热备(只读的,关机复制一份完事),临时表空间不需要备份(存放临时数据而已,即使删除开机也会重建)

因oracle block一般为多个os block,热备过程中可能前个os block为旧block,后面的os block为新block,这就是 split block;为保证一致性,前镜像会被刷入redo buffer,会导致日志急剧增大。(也就是说业务运行高峰期间进行热备会导致日志激增)手工热备不能也不必备份临时表空间。备份前后应用dbv检查是否有坏块。

alter database begin backup;
alter tablespace users begin backup;
select file#,checkpoint_change# from v$datafile_header;
select * from v$backup;--该视图监控备份情况,active表示可以备份(复制),备份完毕后未end backup,开机会报错,需要在mount模式下end backup;
alter database end backup;
/*
v$datafile读取控制文件中的信息;
v$datafile_header读取数据文件的信息;
*/
复制

4、手工完全恢复

命令:restore(手工备份时即OS复制粘贴命令)、 recover;

级别:database、tablespace、datafile。

非关键文件损坏可以在open恢复,关键文件损坏则需要在mount;

关键文件:system01.dbf /undo tablespace/controlfile/current log file;

非归档模式下只能做完全还原,所有需要清理日志

alter database clear logfile group 1;
复制

5.恢复过程视图

v$recover_file\v$revover_log\v$archived_log;

6、案例1

datafile全备、当前控制文件、日志完成

startup;--报错,但已经到mount状态
select file#,error from v$recover_file;
select file#,checkpoint_change# from v$datafile;--控制文件有记录
select file#,checkpoint_change# from v$datafile_header;--数据头文件无数据
cp *.dbf /u01/app/oracle/oradata/orcl/
alter database open;--报错,需要介质恢复
recover database;--输入auto
alter database open;
复制

案例2

alter system flush buffer_chache;
alter tablespace test offline immediate;--立即脱机,不检查数据文件
cp
recover tablespace online;
alter database open;
复制

7、手工不完全恢复

  • 恢复到过去某个时间点

  • 不能跳过损坏日志

  • 必须以sysdba身份运行

  • until指恢复在时间点停止

8、三种恢复类型:

  • until time   recover database until time '  '

  • until scn     recover database untime change

  • until cancel(能跑到哪算哪)

9、误删表恢复步骤

  1. 先通过logmnr找到错误时间点

  2. 对现在的database做新全备

  3. 还原时间点前的所有datafile

  4. 已当前时间点进入mount,做recover until

  5. 将恢复出来的表做逻辑备

  6. 再将全备还原

  7. 再将导出的表导入

10、使用backup controlfile

  1. recover database until [time|change] using backup controlfile;

auto:自动使用archivelog前滚恢复,但一般不包括前滚current log;

filename:输入当前文件的路径和文件名,是指current log 的恢复

cancel:退出

使用backup controlfile自己恢复后需要resetlogs;

案例

模式:所有数据文件备份(老)--新建表空间--备份控制文件(该控制文件记载了表空间信息)--日志文件(新)

startup;
select file#,checkpoint_change# from v$datafile;;
select file#,checkpoint_change# from v$datafile_header;
recover database using backup controlfile;--提示缺少数据文件5
alter database create datafile '/u01/app/oracle/oradata/orcl/abcd.dbf';
recover database using backup controlfile;
atuo --未恢复完全
recover database using backup controlfile;
/u01/app/oracle/oradata/orcl/redo01.log
alter database open resetlogs;      
复制

案例

模式:全备--备份控制文件--新建表空间--日志文件

 drop tablespace abcd including contents and datafiles;
alter database backup controlfile to '/u01/oradata/timran11g/con.bak2';
create tablespace timran datafile '/u01/oradata/timran11g/timran01.dbf' size
5m;
create table scott.r1 (id int) tablespace timran ;
insert into scott.r1 values(1);
commit;
select * from v$tablespace;
select * from scott.r1;
模拟新建数据文件损坏
shutdown abort;
cp /u01/back1/*.dbf ./
cp con.bak2 control01.ctl
startup;
select file#,checkpoint_change#,name from v$datafile;
select file#,checkpoint_change# from v$datafile_header;
recover database using backup controlfile;
ORA-00283: 恢复会话因错误而取消
ORA-01244: 未命名的数据文件由介质恢复添加至控制文件
ORA-01110: 数据文件 3: '/u01/oradata/timran11g/timran01.dbf
select file#,checkpoint_change#,name from v$datafile;
select file#,checkpoint_change# from v$datafile_header;
alter database create datafile '/u01/oracle/dbs/UNNAMED00003' as
'/u01/oradata/timran11g/timran01.dbf';--上面的命令一石二鸟,自动完成了两个动作 1)加了一个数据文件 timran01.dbf, 2)重命名控制文件 UNNAMED00003 为 timran01.dbf
select file#,checkpoint_change#,name from v$datafile;
recover database using backup controlfile;
alter database open resetlogs;
复制

 模式:全备(老) ------控制文件备份(次新) -----删除表空间------所需日志(新)  

drop tablespace xxx including contents and datafiles;
复制

注:该命令改变三个地方

  • 控制文件

  • 该表空间下的数据文件

  • 系统表空间(数据字典)

所以当前控制文件中已经没有该表空间信息,不能使用该控制稳。

恢复表空间需满足条件

  • 要有该表空间的数据文件备份

  • 使用不完全恢复

  • 使用备份的控制文件,该控制文件是删除表空间前的控制文件,不是当前的控制文件。控制文件记录记录了你需要恢复数据库结构。

select * from v$tablespace;
create table scott.t1(id int) tablespace test;
insert into scott.t1 values(1);
commit;
alter system switch logfile;
select current_scn from v$database;
alter database backup controlfile to '/u01/oradata/timran11g/con.bak'
drop tablespace test including contents and datafiles;
shutdown abort;
rm *.dbf;
rm *.ctl
cp /u01/back1/*.dbf ./
cp con.bak control01.ctl
cp con.bak control02.ctl
startup;
recover database until change 7222848 using backup controlfile;
alter database open resetlogs;
复制



文章转载自木底木叉,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论