8.1 NOARCHIVE 模式简介
1. NOARCHIVELOG 模式
NOARCHIVELOG 是指不保留重做历史记录的日志操作模式。这种操作模式只能用于保护例程失败(例如系统断电),而不能保护介质失败。NOARCHIVELOG 模式具有以下特点:
- 当检查点完成之后,后台进程LGWR 可以覆盖原有重做日志内容。
- 如果在数据库备份之后的重做日志内容已经被覆盖,那么当数据文件出现介质失败时,只能恢复到过去的完全备份点。
- 当数据库处于OPEN 状态时,不能备份数据库。
- 当执行数据库备份时,必须使用SHUTDOWN NORMAL 或 SHUTDOWN IMMEDIATE 关闭数据库。
- 当执行数据库备份时,必须备份所有数据文件和控制文件。
2. 改变为NOARCHIVELOG 模式
关闭数据库:SHUTDOWN IMMEDIATE
装载数据库:STARTUP MOUNT
改变日志操作模式:ALTER DATABASE NOARCHIVELOG;
打开数据库:ALTER DATABASE OPEN;
SQL> conn / as sysdba
已连接。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 75498852 bytes
Database Buffers 88080384 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
SQL> alter database noarchivelog ;
数据库已更改。
SQL> alter database open;
数据库已更改。
8.2 在 NOARCHIVELOG 模式下的备份
(1) 列出要备份的数据文件和控制文件。
(2) 关闭数据库。
(3) 复制所有数据文件和控制文件到备份目录。
(4) 启动例程并打开数据库。
SQL> select name from v$datafile
2 union
3 select name from v$controlfile;
NAME
----------------------------------------------------------------------------------
C:\DEMO\CONTROL02.CTL
D:\DEMO\CONTROL01.CTL
D:\DEMO\SYSAUX01.DBF
D:\DEMO\SYSTEM01.DBF
D:\DEMO\UNDOTBS01.DBF
D:\DEMO\USERS01.DBF
已选择6行。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host copy C:\DEMO\CONTROL02.CTL d:\0927
SQL> host copy D:\DEMO\CONTROL01.CTL d:\0927
SQL> host copy D:\DEMO\SYSAUX01.DBF d:\0927
SQL> host copy D:\DEMO\SYSTEM01.DBF d:\0927
SQL> host copy D:\DEMO\UNDOTBS01.DBF d:\0927
SQL> host copy D:\DEMO\USERS01.DBF d:\0927
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 75498852 bytes
Database Buffers 88080384 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
数据库已经打开。
8.3 在NOARCHIVELOG 模式下的恢复
8.3.1 数据文件出现介质失败但重做日志未被覆盖
(1) 装载数据库。
(2) 确定需要恢复的数据文件。
(3) 复制数据文件备份。
(4) 恢复数据文件。
(5) 打开数据库。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host del d:\demo\system01.dbf
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 75498852 bytes
Database Buffers 88080384 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 1 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 1: 'D:\DEMO\SYSTEM01.DBF'
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> select file#,error from v$recover_file;
FILE# ERROR
---------- -----------------------------------------------------------------
1 FILE NOT FOUND
SQL> host copy d:\0927\system01.dbf d:\demo
SQL> recover datafile 1
完成介质恢复。
SQL> alter database open;
数据库已更改。
8.3.2 次要数据文件出现介质失败
次要数据文件是指只包含次要数据的数据文件。如果次要数据文件出现介质失败,并且备份以来的重做日志内容已经被覆盖,那么可以删除次要数据文件。
SQL> select name from v$datafile;
NAME
----------------------------------------------------------------------------------------------------
D:\DEMO\SYSTEM01.DBF
D:\DEMO\UNDOTBS01.DBF
D:\DEMO\SYSAUX01.DBF
D:\DEMO\USERS01.DBF
D:\DEMO\USER01.DBF
D:\DEMO\USER02.DBF
已选择6行。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host del D:\DEMO\USER02.DBF
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 75498852 bytes
Database Buffers 88080384 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 6: 'D:\DEMO\USER02.DBF'
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> alter database datafile 6 offline drop;
数据库已更改。
SQL> alter database open;
数据库已更改。
8.3.3 重要数据文件出现介质失败
(1) 关闭数据库。
(2) 复制所有数据文件和控制文件备份。
(3) 装载数据库。
(4) 用RESETLOGS 选项打开数据库。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 62915940 bytes
Database Buffers 100663296 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 4 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 4: 'D:\DEMO\USERS01.DBF'
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> shutdown immediate
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host copy d:\0927\SYSTEM01.DBF D:\DEMO
SQL> host copy d:\0927\UNDOTBS01.DBF D:\DEMO
SQL> host copy d:\0927\SYSAUX01.DBF D:\DEMO
SQL> host copy d:\0927\USERS01.DBF D:\DEMO
SQL> host copy d:\0927\CONTROL01.CTL D:\DEMO
SQL> host copy d:\0927\CONTROL02.CTL C:\DEMO
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 62915940 bytes
Database Buffers 100663296 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
SQL> recover database until cancel;
完成介质恢复。
在NOARCHIVELOG模式下,RECOVER DATABASE UNTIL CANCEL 命令并未执行任何恢复操作,只是提示控制文件不再使用原有重做日志。
SQL> alter database open resetlogs;
数据库已更改。