热备份 数据库需要打开归档模式 参数文件无所谓冷备份热备份 备份控制文件热备份 alter database backup controlfile to '/home/oracle/hotbk/ctl.bk'; 模拟控制文件丢失 select name from v$controlfile; host rm -fr /u01/app/oracle/oradata/huayd/*.ctl startup force nomount 还原controlfile cp /home/oracle/hotbk/ctl.bk /u01/app/oracle/oradata/huayd/control01.ctl 恢复controlfile recover database using backup controlfile [until cancel]; 备份表空间 SQL> alter tablespace system begin backup; alter tablespace system begin backup * ERROR at line 1: ORA-01123: cannot start online backup; media recovery not enabled 在noarchive模式下不能做alter tablespace XXX begin backup,联机备份只有在数据库位于archivelog模式中才能进行。 select file_name from dba_data_files where tablespace_name='USERS'; alter tablespace users begin backup; ho cp -v /u1/oracle/oradata/madrid/users01.dbf /home/oracle/hotbk alter tablespace users end backup; 思考:begin backup 做了什么? 当数据文件置于backup模式时,oracle会去锁定数据文件头,这时候数据库发生检查点的话将不会修改文件头的checkpoint scn,而只是增加checkpoint cnt,所以不管执行cp的时候操作系统块的拷贝顺序是如何,oracle总会从文件头的scn开始恢复,这样的话也就避免了数据丢失和数据块corruption.如果大家用的是rman来备份,那么就不会有这个问题,因为rman备份的时候rman会去对比数据块的头尾标志,如果发现不一致,那么它将会再去读这个块,直到读到一致的块才往备份集里写。 'block split',当数据文件在备份cp时,因为oracle数据块和操作系统块的差异,一个数据块可能由16个操作系统块组成(8k 数据块,512bytes 系统块),这样的话可能出现一个数据块包含了几个不同版本的操作系统块,会导致数据块的不一致,所以在备份模式下如果有语句对备份块产生更新,那么oracle会先把当前块复制一份到redo,当恢复的时候如果碰到数据块不一致就从redo把这个镜像拷贝回去,然后在这个一致性的镜像开始恢复。 如果使用rman来备份可以避免产生过多的块,就像上面所说的,rman会去建议块的一致性,所以不用复制镜像块到日志。 恢复表空间 system / undo表空间 startup mount; cprecover datafile 1 alter database open 普通表空间 SYS>alter database datafile 4 offline; SYS>select * from v$recover_file; # 查看需作恢复的datafile SYS>ho cp '/tmp/bk/users01.dbf' '/u01/app/oracle/oradata/10gdb/users01.dbf' SYS>select * from v$recovery_log # 查看恢复需用到的日志文件 SYS>recover datafile 4 SYS>alter tablespace users online; 全库备份 生成备份所有数据文件的脚本: select 'alter tablespace '||tablespace_name||' begin backup;'||chr(10)|| 'ho cp -v '||file_name||' /home/oracle/hotbk/'||chr(10)|| 'alter tablespace '||tablespace_name||' end backup;' from dba_data_files;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/203348/viewspace-1281239/ ,如需转载,请注明出处,否则将追究法律责任。