您的位置:首页 > 其它

基于用户管理的备份与恢复—noarchivelog模式下的备份与恢复

2011-08-05 14:20 645 查看
1. NOARCHIVELOG 模式

NOARCHIVELOG 是指不保留重做历史记录的日志操作模式。这种操作模式只能用于保护例程失败(例如系统断电),而不能保护介质失败。NOARCHIVELOG 模式具有以下特点:

当检查点完成之后,后台进程LGWR 可以覆盖原有重做日志内容。

如果在数据库备份之后的重做日志内容已经被覆盖,那么当数据文件出现介质失败时,只能恢复到过去的完全备份点。

当数据库处于OPEN 状态时,不能备份数据库。

当执行数据库备份时,必须使用SHUTDOWN NORMAL 或 SHUTDOWN IMMEDIATE 关闭数据库。

当执行数据库备份时,必须备份所有数据文件和控制文件。

2. 在 NOARCHIVELOG 模式下的备份

(1) 列出要备份的数据文件和控制文件。

(2) 关闭数据库。

(3) 复制所有数据文件和控制文件到备份目录。

(4) 启动例程并打开数据库。

SQL> select log_mode from v$database;

LOG_MODE
------------
NOARCHIVELOG

SQL> select name from v$datafile
2  union
3  select name from v$controlfile;

NAME
----------------------------------------------------------------------------------------

F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\CONTROL01.CTL
F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\CONTROL02.CTL
F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\CONTROL03.CTL
F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\SYSAUX01.DBF
F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\SYSTEM01.DBF
F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\TESTSPACE01.DBF
F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\UNDOTBS01.DBF
F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\USERS01.DBF

已选择8行。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host copy F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\CONTROL01.CTL F:\ORACLE\PRODUCT\10.2.0\backup_ing
SQL> host copy F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\CONTROL02.CTL F:\ORACLE\PRODUCT\10.2.0\backup_ing
SQL> host copy F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\CONTROL03.CTL F:\ORACLE\PRODUCT\10.2.0\backup_ing
SQL> host copy F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\SYSAUX01.DBF F:\ORACLE\PRODUCT\10.2.0\backup_ing
SQL> host copy F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\SYSTEM01.DBF F:\ORACLE\PRODUCT\10.2.0\backup_ing
SQL> host copy F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\TESTSPACE01.DBF F:\ORACLE\PRODUCT\10.2.0\backup_ing
SQL> host copy F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\UNDOTBS01.DBF F:\ORACLE\PRODUCT\10.2.0\backup_ing
SQL> host copy F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\USERS01.DBF F:\ORACLE\PRODUCT\10.2.0\backup_ing
SQL> startup
ORACLE 例程已经启动。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             222301060 bytes
Database Buffers          381681664 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。
数据库已经打开。
SQL>
3 在NOARCHIVELOG 模式下的恢复

1) 数据文件出现介质失败但重做日志未被覆盖。


(1) 装载数据库到mount状态。

(2) 确定需要恢复的数据文件。

(3) 复制数据文件备份。

(4) 恢复数据文件。

(5) 打开数据库。

SQL> desc t_t;
名称                                                              是否为空? 类型
----------------------------------------------------------------- -------- ------------

TEXT                                                                       VARCHAR2(20)

SQL> insert into t_t values('evan');

已创建 1 行。

SQL> commit;

提交完成。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host del F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\USERS01.DBF

SQL> startup
ORACLE 例程已经启动。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             226495364 bytes
Database Buffers          377487360 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 4 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 4: 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\USERS01.DBF'

SQL> select status from v$instance;

STATUS
------------
MOUNTED

SQL> select file#,error from v$recover_file;

FILE# ERROR
---------- -----------------------------------------------------------------
4 FILE NOT FOUND

SQL> recover datafile 4;
ORA-00283: 恢复会话因错误而取消
ORA-01110: 数据文件 4: 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\USERS01.DBF'
ORA-01157: 无法标识/锁定数据文件 4 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 4: 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\USERS01.DBF'

SQL> host copy F:\ORACLE\PRODUCT\10.2.0\backup_ing\USERS01.DBF F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE
已复制         1 个文件。

SQL> recover datafile 4;
完成介质恢复。
SQL> alter database open;

数据库已更改。

SQL> select * from t_t;

TEXT
--------------------
evan
2) 次要数据文件出现介质失败

次要数据文件是指只包含次要数据的数据文件。如果次要数据文件出现介质失败,并且备份以来的重做日志内容已经被覆盖,那么可以删除次要数据文件。

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------------------------------------------

F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\SYSTEM01.DBF
F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\UNDOTBS01.DBF
F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\SYSAUX01.DBF
F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\USERS01.DBF
F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\TESTSPACE01.DBF

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host del F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\TESTSPACE01.DBF

SQL> startup
ORACLE 例程已经启动。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             243272580 bytes
Database Buffers          360710144 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 5 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 5: 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\TESTSPACE01.DBF'

SQL> select status from v$instance;

STATUS
------------
MOUNTED

SQL>  select name from v$datafile where file#=5;

NAME
--------------------------------------------------------------------------------------------------------------------

F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORALIFE\TESTSPACE01.DBF

SQL> alter database datafile 5 offline drop;

数据库已更改。

SQL> alter database open;

数据库已更改。
3)重要数据文件出现介质失败

(1) 关闭数据库。

(2) 复制所有数据文件和控制文件备份。

(3) 装载数据库到mount状态。

(4) 用RESETLOGS 选项打开数据库。

SQL> create table t (id int);

表已创建。

SQL> insert into t values(1);

已创建 1 行。

SQL> commit;

提交完成。

SQL> insert into t values(2);

已创建 1 行。

SQL> commit;

提交完成。

SQL> set linesize 120
SQL> select * from v$log;

GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------------
1          1         38   52428800          1 NO  INACTIVE               8081483 21-8月 -12
2          1         39   52428800          1 NO  CURRENT                8109794 22-8月 -12
3          1         37   52428800          1 NO  INACTIVE               8052682 20-8月 -12

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

--删除数据文件,模拟数据文件丢失
SQL> ho del G:\oracle\product\10.2.0\oradata\orcl\USERS01.DBF

SQL> startup
ORACLE 例程已经启动。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             209718148 bytes
Database Buffers          394264576 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 4 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 4: 'G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF'

SQL>  select * from v$log;

GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------------
1          1         38   52428800          1 NO  INACTIVE               8081483 21-8月 -12
3          1         37   52428800          1 NO  INACTIVE               8052682 20-8月 -12
2          1         39   52428800          1 NO  CURRENT                8109794 22-8月 -12

SQL> shutdown immediate
ORA-01109: 数据库未打开

已经卸载数据库。
ORACLE 例程已经关闭。

SQL> --复制所有控制文件与数据文件到指定的位置,这里要复制所有的控制文件与数据文件,因为是非归档模式

SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             209718148 bytes
Database Buffers          394264576 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。

SQL> recover database until cancel;
完成介质恢复。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项

SQL> alter database open resetlogs;

数据库已更改。

--只能恢复到我们备份的时间点,所以表t不存在
SQL> desc t
ERROR:
ORA-04043: 对象 t 不存在
在NOARCHIVELOG模式下,RECOVER DATABASE UNTIL CANCEL 命令并未执行任何恢复操作,只是提示控制文件不再使用原有重做日志。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: