NOARCHIVELOG 模式下的备份与恢复

NOARCHIVELOG 模式下的备份和恢复;

理论:

noarchivelog 模式具有以下特点:
该模式下只能在shutdown数据库后进行一致性备份,并且不能以abort形式(该模式出现数据库不一致)关闭数据库;
该模式下必须备份数据文件和控制文件;
在检查点完成之后,后台进程LGWR可以覆盖原有重做日志内容;
如果上一条成立,那么当数据文件出现介质失败时,只能恢复到过去的完全备份点;

该模式下相应数据文件出现介质失败的恢复分为以下几种情况:
介质失败时,自从备份以来的在线重做日志还没有被循环使用(即没有被覆盖过);这时可以完全恢复该数据文件;
介质失败时,在线重做日志已经被循环使用过,这时不能对该数据文件进行完全恢复,如果该数据文件不是特别重要,
那么可以删除该数据文件(之后再重建),是数据库的其他数据文件保持当前状态(这些数据文件数据不会丢失);如果是比较重要的数据文件,
那么就要使整个数据库回到备份点的状态;

具体步骤(备份):
1)首先查询数据字典找出数据文件和控制文件;
select * from v$datafile;
select * from v$controlfile;

2)然后以非abort模式关闭数据库;
shutdown immediate|normal|transactional;

3)拷贝刚才列出的数据文件和控制文件到备份目的地;
--直接用操作系统命令或操作进行普通的拷贝即可;

4)备份完成,启动数据库;
startup;


具体步骤(恢复)
按照理论里列出的三种情况进行恢复;

一、介质失败时,自从备份以来的在线重做日志还没有被循环使用(即没有被覆盖过);这时可以完全恢复该数据文件;

1)首先,进行恢复的前提是数据文件介质出现失败;
在数据库open阶段时会出现ORA-01157: 和 ORA-01110: 错误;大概意思就是“无法标识/锁定数据文件”,
其中alert.log里会出现类似于下列的告警记录:

ALTER DATABASE OPEN
Tue Jul 02 21:46:43 2013
Errors in file e:\oracle\product\10.2.0\admin\orcl\bdump\orcl_dbw0_5788.trc:
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF'
ORA-27041: unable to open file
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。

Tue Jul 02 21:46:44 2013
ORA-1157 signalled during: ALTER DATABASE OPEN...

上述错误也表明了数据库处在了mount状态,如果数据库不是这个状态,那么需要执行startup force mount 使之处于mount状态(视图v$instantce 的 STATUS 字段可以判定当前状态);
2)查询需要恢复的数据文件的文件列表:select file#,error from v$recover_file;(只有需要恢复的数据文件才会出现在该视图中)
3)这时就可以进行对需要恢复的数据文件进行反向拷贝了(像备份时一样,直接用操作系统命令或操作进行普通的拷贝即可),如果数据文件原位置磁盘损坏,那么可以拷贝至其他磁盘,
只是需要做一个改变该数据文件路径的操作: alter database rename  file  '源路径及文件名' to '新路径及文件名';
4)如果多个数据文件出现了介质失败,那么直接执行 recover database ; 如果是单个数据文件,那么执行recover datafile file#;
5)介质恢复完成,打开数据库即可,alter database open;

注: 才介质恢复的时候,会应用在线重做日志,需要几组,就应用几组;这时alert.log中也会有类似于下列的记录:
Tue Jul 02 21:50:05 2013
ALTER DATABASE RECOVER  datafile 4  
Tue Jul 02 21:50:05 2013
Media Recovery Start
 parallel recovery started with 2 processes
Tue Jul 02 21:50:06 2013
Recovery of Online Redo Log: Thread 1 Group 3 Seq 769 Reading mem 0
  Mem# 0: E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG
Completed: ALTER DATABASE RECOVER  datafile 4  

二、介质失败时,在线重做日志已经被循环使用过,这时不能对该数据文件进行完全恢复,如果该数据文件不是特别重要,
那么可以删除该数据文件(之后再重建),是数据库的其他数据文件保持当前状态(这些数据文件数据不会丢失);

 其中前两步骤与 第一种情况 一样;
 3) 对相应的数据文件进行删除 alter database datafile 4 offline drop ;
 4) 启动数据库即可 alter database open;

三、如果是比较重要的数据文件,那么就要使整个数据库回到备份点的状态;
 
  其中前三步骤与 第一种情况 一样;
 4) 执行数据库全恢复命令 RECOVER DATABASE UNTIL CANCEL ;由于该命令告诉数据库不再使用原有重做日志,所以需要在打开库的时候使用resetlogs 选项;


实战(第一种恢复情况)

--窗口 1
Microsoft Windows XP [版本 5.1.2600]

(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\Administrator>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.3.0 - Production on 星期二 7月 2 21:19:24 2013

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> archive log list;
数据库日志模式             非存档模式
自动存档             禁用
存档终点            USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列     767
当前日志序列           769

SQL> select file_name ,tablespace_name,bytes/1024/1024 as MB from dba_data_files;

FILE_NAME                                                                        TABLESPACE_NAME                MB
-------------------------------------------------------------------------------- ------------------------------ ----------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF                                USERS                      508.75
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF                               SYSAUX                        380
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF                              UNDOTBS1                      405
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF                               SYSTEM                        520
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF                              EXAMPLE                       100
E:\TEST_TS.DBF                                                                   TEST_TS                        10
E:\RMAN.DBF                                                                      RMAN_TAB                       20

已选择7行。

SQL> select name from v$controlfile;

NAME
------------------------------------------------------------------------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL

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

...... 拷贝上面列出的数据文件和控制文件;
......
......

SQL> startup
ORACLE 例程已经启动。

Total System Global Area  838860800 bytes
Fixed Size                  1293384 bytes
Variable Size             734004152 bytes
Database Buffers           96468992 bytes
Redo Buffers                7094272 bytes
数据库装载完毕。
数据库已经打开。

---窗口 2
SQL> conn  scott/tiger
已连接。
SQL> create table youjinge(id number);

表已创建。

SQL> insert into youjinge values (1);

已创建 1 行。

SQL> insert into youjinge values (2);

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from youjinge;

        ID
----------
         1
         2

--窗口 1

SQL> select * from scott.youjinge;

        ID
----------
         1
         2

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

删除users01.dbf 

SQL> startup
ORACLE 例程已经启动。

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

SQL> select * from v$instance;

INSTANCE_NUMBER INSTANCE_NAME    HOST_NAME                                                        VERSION           STARTUP_TIME   STATUS
--------------- ---------------- ---------------------------------------------------------------- ----------------- -------------- ------------
LOG_SWITCH_WAIT LOGINS     SHU DATABASE_STATUS   INSTANCE_ROLE      ACTIVE_ST BLO
--------------- ---------- --- ----------------- ------------------ --------- ---
              1 orcl             45394BCD93E1473                                                  10.2.0.3.0        02-7月 -13     MOUNTED
                ALLOWED    NO  ACTIVE            PRIMARY_INSTANCE   NORMAL    NO

--说明数据库已经在mount状态;

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

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

SQL> host copy f:\database\user01.dbf e:\oracle\product\10.2.0\oradata\orcl\user01.dbf;
系统找不到指定的文件。

SQL> host copy f:\database\users01.dbf e:\oracle\product\10.2.0\oradata\orcl\users01.dbf;
已复制         1 个文件。

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

数据库已更改。

SQL> select * from scott.youjinge;

        ID
----------
         1

         2



实战(第二种恢复情况)

--窗口 1
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

删除users01.dbf 

SQL> startup
ORACLE 例程已经启动。

Total System Global Area  838860800 bytes
Fixed Size                  1293384 bytes
Variable Size             734004152 bytes
Database Buffers           96468992 bytes
Redo Buffers                7094272 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 6: 'E:\TEST_TS.DBF'


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

     FILE# ERROR
---------- -----------------------------------------------------------------
         6 FILE NOT FOUND

SQL> alter database datafile 6 offline drop;

数据库已更改。

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
E:\TEST_TS.DBF
E:\RMAN.DBF

已选择7行。

SQL> alter database open;

数据库已更改。

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
E:\TEST_TS.DBF
E:\RMAN.DBF

已选择7行。

SQL> select file_name from dba_data_files;

FILE_NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
E:\TEST_TS.DBF
E:\RMAN.DBF

已选择7行。


SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
TEMP
USERS
EXAMPLE
RMAN_TAB
TEST_TS

已选择8行。

SQL> select file#,status from v$datafile;

     FILE# STATUS
---------- -------
         1 SYSTEM
         2 ONLINE
         3 ONLINE
         4 ONLINE
         5 ONLINE
         6 OFFLINE
         7 ONLINE

已选择7行。


--说明虽然执行了 类似的删除操作,但是只是修改了一下该数据文件的状态;控制文件和数据字典里都还存储在文件及相应表空间的信息;现在重启一下看看情况:

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

Total System Global Area  838860800 bytes
Fixed Size                  1293384 bytes
Variable Size             734004152 bytes
Database Buffers           96468992 bytes
Redo Buffers                7094272 bytes
数据库装载完毕。
数据库已经打开。
SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
TEMP
USERS
EXAMPLE
RMAN_TAB
TEST_TS

已选择8行。

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
E:\TEST_TS.DBF
E:\RMAN.DBF

已选择7行。


SQL> select file#,status from v$datafile;

     FILE# STATUS
---------- -------
         1 SYSTEM
         2 ONLINE
         3 ONLINE
         4 ONLINE
         5 ONLINE
         6 OFFLINE
         7 ONLINE

已选择7行。

--说明该数据文件与重启前一样; 具体参考:http://blog.csdn.net/tianlesoftware/article/details/6305600


实战(第三种恢复情况)

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

删除SYSTEM01.DBF

SQL> startup
ORACLE 例程已经启动。

Total System Global Area  838860800 bytes
Fixed Size                  1293384 bytes
Variable Size             734004152 bytes
Database Buffers           96468992 bytes
Redo Buffers                7094272 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 1 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 1: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF'

反向拷贝所有数据文件和控制文件到原有位置,然后进行数据库恢复:

SQL> recover database until cancel;
完成介质恢复。

SQL> alter database open resetlogs;

数据库已更改。

SQL> select status from v$instance;

STATUS
------------
OPEN

SQL> select file# ,status from v$datafile;

     FILE# STATUS
---------- -------
         1 SYSTEM
         2 ONLINE
         3 ONLINE
         4 ONLINE
         5 ONLINE
         6 ONLINE
         7 ONLINE

已选择7行。

SQL> select * from scott.youjinge;
select * from scott.youjinge
                    *
第 1 行出现错误:
ORA-00942: 表或视图不存在

说明回到备份点的位置

你可能感兴趣的:(备份与恢复,一致性备份,noarchivelog,冷备份与冷恢复)