归档模式下的备份
归档模式下可以热备(不停库)也可以冷备(方法同非归档模式)
冷备:
把数据库关闭掉,把数据文件、控制文件、日志文件、临时文件、参数文件、密码文件等拷贝到另一位置。
方法和脚本与非归档一样
热备
基本方法:
1) 先看一下有没有其他在进行的备份,如果有其他在进行的备份,仔细考虑下,是否要继续
SYS> select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- ---------
1 NOT ACTIVE 0
2 NOT ACTIVE 0
3 NOT ACTIVE 0
4 NOT ACTIVE 0
2) 热备时建议一个表空间一个表空间的进行,不建议全库一起进行。如果是一个表空间一个表空间
的进行,查一下该表空间对应的数据文件
SYS> select TABLESPACE_NAME,FILE_NAME,BYTES/1024/1024 "SIZE(MB)",STATUS
from dba_data_files order by TABLESPACE_NAME;
3)把要备份的对象置入备份模式
SYS> alter tablespace users begin backup;
或
SYS> alter database begin backup;
4)把对应的数据文件文件拷贝到备份位置
5)结束备份对象的备份模式
SYS> alter tablespace users end backup;
或
SYS> alter database end backup;
归档模式下的恢复
完全恢复
基本过程:
1)将恢复的对象offline,如果不能offline的对象(如system表空间),要启到mount状态
2)从备份中拷贝备份文件到原有的位置 (restore)
3)应用日志把要恢复的对象前滚
4)把恢复对象online
recover datafile ...
recover tablespace ...
recover database ...
例1、
SYS> host rm /u01/app/oracle/oradata/orcl/users01.dbf
SYS> shutdown abort
SYS> startup
SYS> alter database datafile 4 offline; -- 数据库启不了,把找不到的数据文件offline
SYS> alter database open; -- 再启数据库
SYS> host cp /u03/backup/users01.dbf /u01/app/oracle/oradata/orcl/users01.dbf
--还原备份的文件
SYS> recover datafile 4; --恢复4号文件
Specify log: {=suggested | filename | AUTO | CANCEL}
auto
SYS> alter database datafile 4 online;
例2:
SYS> host rm /u01/app/oracle/oradata/orcl/users01.dbf
SYS> host rm /u01/app/oracle/oradata/orcl/users02.dbf
SYS> shutdown abort
SYS> alter database datafile 4 offline;
SYS> alter database datafile 8 offline;
-- 数据库启不了,把找不到的数据文件offline
SYS> alter database open;
SYS> host cp /u03/backup/users01.dbf /u01/app/oracle/oradata/orcl/users01.dbf
SYS> host cp /u03/backup/users02.dbf /u01/app/oracle/oradata/orcl/users02.dbf
还原数据文件
SYS> recover tablespace users;
Specify log: {=suggested | filename | AUTO | CANCEL}
auto
SYS> alter tablespace users online;
例3:磁盘损坏,导致数据文件丢失,且原有的路径无法访问
SYS> host rm /u01/app/oracle/oradata/orcl/users01.dbf
SYS> host rm /u01/app/oracle/oradata/orcl/users02.dbf
模拟 /u01磁盘损坏,且以后 /u01也无法访问(不能把备份还原到/u01了)
SYS> shutdown abort;
SYS> startup;
出错了,无法启动
SYS> alter database datafile 4 offline;
SYS> alter database datafile 8 offline;
-- 数据库启不了,把找不到的数据文件offline
SYS> alter database open; --先把数据库启来
SYS> host cp /u03/backup/users01.dbf /u02
SYS> host cp /u03/backup/users02.dbf /u02/
由于数据文件的位置已经变了,此时不能直接recover,必须告诉oracle,数据文件位置变了
SYS> alter database rename file
'/u01/app/oracle/oradata/orcl/users01.dbf' to '/u02/users01.dbf';
SYS> alter database rename file
'/u01/app/oracle/oradata/orcl/users02.dbf' to '/u02/users02.dbf';
SYS> recover tablespace users;
ORA-00279: change 1391133 generated at 09/23/2012 16:12:04 needed for thread 1
ORA-00289: suggestion : /u02/arch_log/1_166_792775447.dbf
ORA-00280: change 1391133 for thread 1 is in sequence #166
Specify log: {=suggested | filename | AUTO | CANCEL}
auto
SYS> alter tablespace users online;
例4:数据还没来得及备份,就损坏了
恢复前提:
数据库文件创建以来的所有日志都在
SYS> create tablespace xx datafile '/u03/xx01.dbf' size 50m;
SYS> create table scott.aa tablespace xx as select * from scott.dept;
SYS> select * from scott.aa;
SYS> host rm /u03/xx01.dbf
SYS> shutdown abort;
SYS> startup ;
如果启动不了,就把相应的文件 offline ,之后再open
SYS> alter database create datafile '/u03/xx01.dbf';
由于文件不存在,又没有备份,所以只能创建一个空的数据文件
SYS> alter database datafile '/u03/xx01.dbf' offline;
SYS> recover datafile '/u03/xx01.dbf';
SYS> alter database datafile '/u03/xx01.dbf' online;
例5:数据文件没有备份,也没有创建以来的所有日志,但有近期的日志(故障发生以来)
SYS> host rm /u02/bf_t101.dbf
模拟数据文件丢了,此时千万不要停库 !!!!!!
1)找dbw 进程,查看其进程号
[oracle@t183 fd]$ ps -ef | grep ora_dbw
oracle 10522 1 0 16:55 ? 00:00:00 ora_dbw0_orcl
oracle 10710 8515 0 17:08 pts/4 00:00:00 grep ora_dbw
2)到进程目录的fd 下找到删除文件
[oracle@t183 fd]$ cd /proc/10522/fd
[oracle@t183 fd]$ ll
29 -> /u02/bf_t101.dbf (deleted)
3)把在进程目录中的删除文件复制到原有位置
[oracle@t183 fd]$ cp 29 /u02/bf_t101.dbf
4)恢复
SYS> alter database datafile '/u02/bf_t101.dbf' offline;
SYS> recover datafile '/u02/bf_t101.dbf';
SYS> alter database datafile '/u02/bf_t101.dbf' online;
归档模式下可以热备(不停库)也可以冷备(方法同非归档模式)
冷备:
把数据库关闭掉,把数据文件、控制文件、日志文件、临时文件、参数文件、密码文件等拷贝到另一位置。
方法和脚本与非归档一样
热备
基本方法:
1) 先看一下有没有其他在进行的备份,如果有其他在进行的备份,仔细考虑下,是否要继续
SYS> select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- ---------
1 NOT ACTIVE 0
2 NOT ACTIVE 0
3 NOT ACTIVE 0
4 NOT ACTIVE 0
2) 热备时建议一个表空间一个表空间的进行,不建议全库一起进行。如果是一个表空间一个表空间
的进行,查一下该表空间对应的数据文件
SYS> select TABLESPACE_NAME,FILE_NAME,BYTES/1024/1024 "SIZE(MB)",STATUS
from dba_data_files order by TABLESPACE_NAME;
3)把要备份的对象置入备份模式
SYS> alter tablespace users begin backup;
或
SYS> alter database begin backup;
4)把对应的数据文件文件拷贝到备份位置
5)结束备份对象的备份模式
SYS> alter tablespace users end backup;
或
SYS> alter database end backup;
归档模式下的恢复
完全恢复
基本过程:
1)将恢复的对象offline,如果不能offline的对象(如system表空间),要启到mount状态
2)从备份中拷贝备份文件到原有的位置 (restore)
3)应用日志把要恢复的对象前滚
4)把恢复对象online
recover datafile ...
recover tablespace ...
recover database ...
例1、
SYS> host rm /u01/app/oracle/oradata/orcl/users01.dbf
SYS> shutdown abort
SYS> startup
SYS> alter database datafile 4 offline; -- 数据库启不了,把找不到的数据文件offline
SYS> alter database open; -- 再启数据库
SYS> host cp /u03/backup/users01.dbf /u01/app/oracle/oradata/orcl/users01.dbf
--还原备份的文件
SYS> recover datafile 4; --恢复4号文件
Specify log: {=suggested | filename | AUTO | CANCEL}
auto
SYS> alter database datafile 4 online;
例2:
SYS> host rm /u01/app/oracle/oradata/orcl/users01.dbf
SYS> host rm /u01/app/oracle/oradata/orcl/users02.dbf
SYS> shutdown abort
SYS> alter database datafile 4 offline;
SYS> alter database datafile 8 offline;
-- 数据库启不了,把找不到的数据文件offline
SYS> alter database open;
SYS> host cp /u03/backup/users01.dbf /u01/app/oracle/oradata/orcl/users01.dbf
SYS> host cp /u03/backup/users02.dbf /u01/app/oracle/oradata/orcl/users02.dbf
还原数据文件
SYS> recover tablespace users;
Specify log: {=suggested | filename | AUTO | CANCEL}
auto
SYS> alter tablespace users online;
例3:磁盘损坏,导致数据文件丢失,且原有的路径无法访问
SYS> host rm /u01/app/oracle/oradata/orcl/users01.dbf
SYS> host rm /u01/app/oracle/oradata/orcl/users02.dbf
模拟 /u01磁盘损坏,且以后 /u01也无法访问(不能把备份还原到/u01了)
SYS> shutdown abort;
SYS> startup;
出错了,无法启动
SYS> alter database datafile 4 offline;
SYS> alter database datafile 8 offline;
-- 数据库启不了,把找不到的数据文件offline
SYS> alter database open; --先把数据库启来
SYS> host cp /u03/backup/users01.dbf /u02
SYS> host cp /u03/backup/users02.dbf /u02/
由于数据文件的位置已经变了,此时不能直接recover,必须告诉oracle,数据文件位置变了
SYS> alter database rename file
'/u01/app/oracle/oradata/orcl/users01.dbf' to '/u02/users01.dbf';
SYS> alter database rename file
'/u01/app/oracle/oradata/orcl/users02.dbf' to '/u02/users02.dbf';
SYS> recover tablespace users;
ORA-00279: change 1391133 generated at 09/23/2012 16:12:04 needed for thread 1
ORA-00289: suggestion : /u02/arch_log/1_166_792775447.dbf
ORA-00280: change 1391133 for thread 1 is in sequence #166
Specify log: {=suggested | filename | AUTO | CANCEL}
auto
SYS> alter tablespace users online;
例4:数据还没来得及备份,就损坏了
恢复前提:
数据库文件创建以来的所有日志都在
SYS> create tablespace xx datafile '/u03/xx01.dbf' size 50m;
SYS> create table scott.aa tablespace xx as select * from scott.dept;
SYS> select * from scott.aa;
SYS> host rm /u03/xx01.dbf
SYS> shutdown abort;
SYS> startup ;
如果启动不了,就把相应的文件 offline ,之后再open
SYS> alter database create datafile '/u03/xx01.dbf';
由于文件不存在,又没有备份,所以只能创建一个空的数据文件
SYS> alter database datafile '/u03/xx01.dbf' offline;
SYS> recover datafile '/u03/xx01.dbf';
SYS> alter database datafile '/u03/xx01.dbf' online;
例5:数据文件没有备份,也没有创建以来的所有日志,但有近期的日志(故障发生以来)
SYS> host rm /u02/bf_t101.dbf
模拟数据文件丢了,此时千万不要停库 !!!!!!
1)找dbw 进程,查看其进程号
[oracle@t183 fd]$ ps -ef | grep ora_dbw
oracle 10522 1 0 16:55 ? 00:00:00 ora_dbw0_orcl
oracle 10710 8515 0 17:08 pts/4 00:00:00 grep ora_dbw
2)到进程目录的fd 下找到删除文件
[oracle@t183 fd]$ cd /proc/10522/fd
[oracle@t183 fd]$ ll
29 -> /u02/bf_t101.dbf (deleted)
3)把在进程目录中的删除文件复制到原有位置
[oracle@t183 fd]$ cp 29 /u02/bf_t101.dbf
4)恢复
SYS> alter database datafile '/u02/bf_t101.dbf' offline;
SYS> recover datafile '/u02/bf_t101.dbf';
SYS> alter database datafile '/u02/bf_t101.dbf' online;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21175589/viewspace-755948/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/21175589/viewspace-755948/