前提:
归档模式 拥有所有归档文件,后增加数据文件无备份,丢失这个文件,拥有控制文件及所有其他文件
以下是一种恢复情况.
1.启用归档模式,备份
E:\sqlplus "sys/test as sysdba"
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
数据库装载完毕。
SQL> alter database archivelog;
数据库已更改。
SQL> shutdown immediate;
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
E:\Oracle\oradata\myoracle>dir
...
2004-10-13
2004-10-13
2004-10-13
2004-10-13
2004-10-13
2004-10-13
2004-10-13
2004-10-13
2004-10-13
2004-07-03
2004-10-13
E:\Oracle\oradata\myoracle>mkdir bak
E:\Oracle\oradata\myoracle>cp *.* bak
E:\Oracle\oradata\myoracle>exit
2.创建文件、建表
SQL> startup;
ORACLE 例程已经启动。
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
数据库装载完毕。
数据库已经打开。
SQL> archive log start;
已处理的语句
SQL> archive log list;
数据库日志模式
自动存档
存档终点
最早的概要日志序列
下一个存档日志序列
当前日志序列
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
E:\ORACLE\ORADATA\myoracle\SYSTEM01.DBF
E:\ORACLE\ORADATA\myoracle\UNDOTBS01.DBF
E:\ORACLE\ORADATA\myoracle\myoracle01.DBF
SQL> create tablespace test datafile 'e:\oracle\oradata\myoracle\test01.dbf'
表空间已创建。
SQL> alter system switch logfile; --手工强制归档当前日志
系统已更改。
SQL> create table t tablespace test as select * from dba_users;
表已创建。
SQL> alter system switch logfile;--手工强制归档当前日志
系统已更改。
SQL> shutdown abort;
ORACLE 例程已经关闭。
SQL> exit
从Oracle9i Enterprise Edition Release 9.2.0.5.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.5.0 - Production中断开
E:\Oracle\oradata\myoracle>mv TEST01.DBF bak
3.恢复
E:\Oracle\oradata\myoracle>sqlplus "sys/oracle as sysdba"
SQL*Plus: Release 9.2.0.5.0 - Production on 星期三 10月 13 22:41:48 2004
Copyright (c) 1982, 2002, Oracle Corporation.
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 4 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 4: 'E:\ORACLE\ORADATA\myoracle\TEST01.DBF'
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
E:\ORACLE\ORADATA\myoracle\SYSTEM01.DBF
E:\ORACLE\ORADATA\myoracle\UNDOTBS01.DBF
E:\ORACLE\ORADATA\myoracle\myoracle01.DBF
E:\ORACLE\ORADATA\myoracle\TEST01.DBF
SQL> alter database create datafile 'E:\ORACLE\ORADATA\myoracle\TEST01.DBF'; --使用create datafile 重建数据文件
数据库已更改。
SQL> recover datafile 'E:\ORACLE\ORADATA\myoracle\TEST01.DBF';--使用recover命令恢复数据文件中的数据,应该是从归档日志中
完成介质恢复。
SQL> alter database open;
数据库已更改。
SQL> host
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
E:\Oracle\oradata\myoracle>ls -l
total 1105221
-rwxrwxrwa
-rwxrwxrwa
-rwxrwxrwa
-rwxrwxrwa
-rwxrwxrwa
-rwxrwxrwa
-rwxrwxrwa
-rwxrwxrwa
-rwxrwxrwa
-rwxrwxrwa
-rwxrwxrwa
drwxrwxrwx
-rwxrwxrwa
E:\Oracle\oradata\myoracle>ls -l TEST01.DBF
-rwxrwxrwa
E:\Oracle\oradata\myoracle>
总结:
此案例拥有当前控制文件,控制文件中包含了丢失文件信息,所以可以通过create datafile方式重新创建文件,通过控制文件中记录的文件信息、SCN、检查点等信息,应用归档日志进行恢复,可以完成完全恢复.
注意:创建该数据文件后的归档日志必须完整,否则无法重建该数据文件!