不完全恢复只适用于ARCHIVELOG 模式。
6.1 不完全恢复简介
6.1.1 不完全恢复分类
1. 基于时间恢复
将数据库恢复到备份点与失败点之间某个特定时间点的状态。主要适用于以下情况:
- 误删除表
- 误截断表
- 提交了错误数据
2. 基于取消恢复
将数据库恢复到备份点与失败点之间某个日志序列号之前的状态。主要适用于以下情况:
- 归档日志丢失导致完全恢复失败
- 丢失了数据文件和未归档的重做日志
3. 基于SCN 恢复
将数据库恢复到备份点与失败点之间特定SCN 值的状态。主要适用于以下情况:
- 分布式数据库的不完全恢复
4. 基于备份控制文件恢复
使用备份控制文件将数据库恢复到备份点与失败点之间某个时刻的状态。主要适用于以下情况:
- 表空间被意外删除。
- 所有控制文件全部损坏。
6.1.2 不完全恢复命令
1. RECOVER DATABASE UNTIL TIME
用于执行基于时间的不完全恢复。日期格式:YYYY-MM-DD HH24:MI:SS。时间点之间的所有归档日志和重做日志全部存在。
2. RECOVER DATABASE UNTIL CHANGE
用于执行基于SCN 的不完全恢复。SCN 之间的所有归档日志和重做日志全部存在。
3. RECOVER DATABASE UNTIL CANCEL
用于执行基于取消的不完全恢复。如果发现所需的归档日志和重做日志不存在,那么指定CANCEL 选项取消恢复。
4. RECOVER DATABASE ...USING BACKUP CONTROLFILE
用于执行基于备份控制文件的不完全恢复。通过查看ALERT 文件可以确定误操作的时间点和SCN 值,然后可以根据时间点或SCN 值进行恢复。
6.2 基于时间恢复
(1) 关闭数据库。
(2) 装载数据库。
(3) 复制所有数据文件备份。
(4) 执行RECOVER DATABASE UNTIL TIME 命令。
(5) 以RESETLOGS 方式打开数据库,并检查恢复结果。
(6) 备份数据库所有数据文件和控制文件,并归档当前日志组。
SQL> conn / as sysdba
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 67110244 bytes
Database Buffers 96468992 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
数据库已经打开。
SQL> create table test_recover_time(col1 int) tablespace users;
表已创建。
SQL> insert into test_recover_time values(1);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into test_recover_time values(2);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into test_recover_time values(3);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into test_recover_time values(4);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into test_recover_time values(5);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into test_recover_time values(6);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2008-09-14 16:56:04
SQL> truncate table test_recover_time;
表被截断。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup force mount
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 67110244 bytes
Database Buffers 96468992 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
SQL> host copy d:\0914\SYSAUX01.DBF d:\demo
SQL> host copy d:\0914\system01.dbf d:\demo
SQL> host copy d:\0914\UNDOTBS01.DBF d:\demo
SQL> host copy d:\0914\users01.dbf d:\demo
SQL> desc v$recover_file;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
FILE# NUMBER
ONLINE VARCHAR2(7)
ONLINE_STATUS VARCHAR2(7)
ERROR VARCHAR2(18)
CHANGE# NUMBER
TIME DATE
SQL> select file#,to_char(time,'yyyy-mm-dd hh24:mi:ss') from v$recover_file;
FILE# TO_CHAR(TIME,'YYYY-
---------- -------------------
1 2008-09-14 16:24:02
2 2008-09-14 16:24:02
3 2008-09-14 16:24:02
4 2008-09-14 16:24:02
SQL> recover database until time '2008-09-14 16:56:04'
ORA-00279: 更改 952594 (在 09/14/2008 16:24:02 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE\48_1_664374623.LOG
ORA-00280: 更改 952594 (用于线程 1) 在序列 #48 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 更改 952780 (在 09/14/2008 16:47:08 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE\1_1_665426828.LOG
ORA-00280: 更改 952780 (用于线程 1) 在序列 #1 中
ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\48_1_664374623.LOG'
ORA-00279: 更改 953350 (在 09/14/2008 16:53:08 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE\2_1_665426828.LOG
ORA-00280: 更改 953350 (用于线程 1) 在序列 #2 中
ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\1_1_665426828.LOG'
ORA-00279: 更改 953361 (在 09/14/2008 16:53:34 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE\3_1_665426828.LOG
ORA-00280: 更改 953361 (用于线程 1) 在序列 #3 中
ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\2_1_665426828.LOG'
ORA-00279: 更改 953368 (在 09/14/2008 16:53:48 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE\4_1_665426828.LOG
ORA-00280: 更改 953368 (用于线程 1) 在序列 #4 中
ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\3_1_665426828.LOG'
已应用的日志。
完成介质恢复。
SQL> alter database open resetlogs;
数据库已更改。
SQL> select * from test_recover_time;
COL1
----------
1
2
3
4
5
6
已选择6行。
SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 d:\demo\archive
最早的联机日志序列 1
下一个存档日志序列 1
当前日志序列 1
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
D:\DEMO\SYSTEM01.DBF
D:\DEMO\UNDOTBS01.DBF
D:\DEMO\SYSAUX01.DBF
D:\DEMO\USERS01.DBF
SQL> alter database begin backup;
数据库已更改。
SQL> host copy D:\DEMO\SYSTEM01.DBF d:\backup
SQL> host copy D:\DEMO\UNDOTBS01.DBF d:\backup
SQL> host copy D:\DEMO\SYSAUX01.DBF d:\backup
SQL> host copy D:\DEMO\USERS01.DBF d:\backup
SQL> alter database end backup;
数据库已更改。
SQL> alter database backup controlfile to 'd:\backup\demo.ctl' reuse;
数据库已更改。
SQL> alter system archive log current;
系统已更改。
6.3 基于SCN 恢复
(1) 关闭数据库。
(2) 装载数据库。
(3) 复制所有数据文件备份。
(4) 执行RECOVER DATABASE UNTIL CHANGE 命令。
(5) 以RESETLOGS 方式打开数据库,并检查恢复结果。
(6) 备份数据库所有数据文件和控制文件,并归档当前日志组。
SQL> conn / as sysdba
已连接。
SQL> create table test_recover_change(col int) tablespace users;
表已创建。
SQL> insert into test_recover_change values(1);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into test_recover_change values(2);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into test_recover_change values(3);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into test_recover_change values(4);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into test_recover_change values(50);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
954557
SQL> drop table test_recover_change;
表已删除。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 67110244 bytes
Database Buffers 96468992 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
SQL> host copy D:\backup\SYSAUX01.DBF d:\demo
SQL> host copy D:\backup\system01.dbf d:\demo
SQL> host copy D:\backup\UNDOTBS01.DBF d:\demo
SQL> host copy D:\backup\users01.dbf d:\demo
SQL> desc v$recover_file;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
FILE# NUMBER
ONLINE VARCHAR2(7)
ONLINE_STATUS VARCHAR2(7)
ERROR VARCHAR2(18)
CHANGE# NUMBER
TIME DATE
SQL> select file#,change# from v$recover_file;
FILE# CHANGE#
---------- ----------
1 953716
2 953716
3 953716
4 953716
SQL> recover database until change 954557
ORA-00279: 更改 953716 (在 09/14/2008 17:09:26 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE\1_1_665427937.LOG
ORA-00280: 更改 953716 (用于线程 1) 在序列 #1 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 更改 953833 (在 09/14/2008 17:14:27 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE\2_1_665427937.LOG
ORA-00280: 更改 953833 (用于线程 1) 在序列 #2 中
ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\1_1_665427937.LOG'
ORA-00279: 更改 954476 (在 09/14/2008 17:29:22 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE\3_1_665427937.LOG
ORA-00280: 更改 954476 (用于线程 1) 在序列 #3 中
ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\2_1_665427937.LOG'
ORA-00279: 更改 954488 (在 09/14/2008 17:29:51 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE\4_1_665427937.LOG
ORA-00280: 更改 954488 (用于线程 1) 在序列 #4 中
ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\3_1_665427937.LOG'
已应用的日志。
完成介质恢复。
SQL> alter database open resetlogs;
数据库已更改。
SQL> select * from test_recover_change;
COL
----------
1
2
3
4
50
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
D:\DEMO\SYSTEM01.DBF
D:\DEMO\UNDOTBS01.DBF
D:\DEMO\SYSAUX01.DBF
D:\DEMO\USERS01.DBF
SQL> alter database begin backup;
数据库已更改。
SQL> host copy D:\DEMO\SYSTEM01.DBF D:\backup
SQL> host copy D:\DEMO\UNDOTBS01.DBF D:\backup
SQL> host copy D:\DEMO\SYSAUX01.DBF D:\backup
SQL> host copy D:\DEMO\USERS01.DBF d:\backup
SQL> alter database end backup;
数据库已更改。
SQL> alter database backup controlfile to 'D:\backup\demo.ctl' reuse;
数据库已更改。
SQL> alter system archive log current;
系统已更改。
6.4 基于取消恢复
(1) 关闭数据库。
(2) 装载数据库。
(3) 提制所有数据文件备份。
(4) 执行RECOVER DATABASE UNTIL CANCEL 命令。
(5) 以RESETLOGS 方式打开数据库。
(6) 备份所有数据文件和控制文件。
SQL> conn / as sysdba
已连接。
SQL> create table test_recover_cancel(col int) tablespace users;
表已创建。
SQL> insert into test_recover_cancel values(1);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into test_recover_cancel values(2);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into test_recover_cancel values(3);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into test_recover_cancel values(4);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into test_recover_cancel values(4);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into test_recover_cancel values(6);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host del d:\demo\archive\5_1_665430886.LOG
SQL> host del d:\demo\users01.dbf
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 67110244 bytes
Database Buffers 96468992 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01157: 无法标识/锁定数据文件 4 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 4: 'D:\DEMO\USERS01.DBF'
SQL> select file# from v$recover_file;
FILE#
----------
4
SQL> host copy d:\backup\users01.dbf d:\demo
SQL> recover datafile 4;
ORA-00279: 更改 954874 (在 09/14/2008 18:00:00 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE\1_1_665430886.LOG
ORA-00280: 更改 954874 (用于线程 1) 在序列 #1 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 更改 955132 (在 09/14/2008 18:10:18 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE\2_1_665430886.LOG
ORA-00280: 更改 955132 (用于线程 1) 在序列 #2 中
ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\1_1_665430886.LOG'
ORA-00279: 更改 955761 (在 09/14/2008 18:25:42 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE\3_1_665430886.LOG
ORA-00280: 更改 955761 (用于线程 1) 在序列 #3 中
ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\2_1_665430886.LOG'
ORA-00279: 更改 955767 (在 09/14/2008 18:25:53 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE\4_1_665430886.LOG
ORA-00280: 更改 955767 (用于线程 1) 在序列 #4 中
ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\3_1_665430886.LOG'
ORA-00279: 更改 955772 (在 09/14/2008 18:26:02 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE\5_1_665430886.LOG
ORA-00280: 更改 955772 (用于线程 1) 在序列 #5 中
ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\4_1_665430886.LOG'
ORA-00308: 无法打开归档日志 'D:\DEMO\ARCHIVE\5_1_665430886.LOG'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> host copy D:\backup\SYSAUX01.DBF d:\demo
SQL> host copy d:\backup\system01.dbf d:\demo
SQL> host copy D:\backup\UNDOTBS01.DBF d:\demo
SQL> host copy D:\backup\users01.dbf d:\demo
SQL> select file#,change# from v$recover_file;
FILE# CHANGE#
---------- ----------
1 954874
2 954874
3 954874
4 954874
SQL> desc v$log_history
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
RECID NUMBER
STAMP NUMBER
THREAD# NUMBER
SEQUENCE# NUMBER
FIRST_CHANGE# NUMBER
FIRST_TIME DATE
NEXT_CHANGE# NUMBER
RESETLOGS_CHANGE# NUMBER
RESETLOGS_TIME DATE
SQL> select max(first_change#) from v$log_history where sequence#=5;
MAX(FIRST_CHANGE#)
------------------
955772
SQL> recover database until cancel
ORA-00279: 更改 954874 (在 09/14/2008 18:00:00 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE\1_1_665430886.LOG
ORA-00280: 更改 954874 (用于线程 1) 在序列 #1 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
ORA-00279: 更改 955132 (在 09/14/2008 18:10:18 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE\2_1_665430886.LOG
ORA-00280: 更改 955132 (用于线程 1) 在序列 #2 中
ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\1_1_665430886.LOG'
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
ORA-00279: 更改 955761 (在 09/14/2008 18:25:42 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE\3_1_665430886.LOG
ORA-00280: 更改 955761 (用于线程 1) 在序列 #3 中
ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\2_1_665430886.LOG'
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
ORA-00279: 更改 955767 (在 09/14/2008 18:25:53 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE\4_1_665430886.LOG
ORA-00280: 更改 955767 (用于线程 1) 在序列 #4 中
ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\3_1_665430886.LOG'
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
ORA-00279: 更改 955772 (在 09/14/2008 18:26:02 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE\5_1_665430886.LOG
ORA-00280: 更改 955772 (用于线程 1) 在序列 #5 中
ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\4_1_665430886.LOG'
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> alter database open resetlogs;
数据库已更改。
SQL> select * from test_recover_cancel;
COL
----------
1
2
3
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
D:\DEMO\SYSTEM01.DBF
D:\DEMO\UNDOTBS01.DBF
D:\DEMO\SYSAUX01.DBF
D:\DEMO\USERS01.DBF
SQL> alter database begin backup;
数据库已更改。
SQL> host copy D:\DEMO\SYSTEM01.DBF d:\backup
SQL> host copy D:\DEMO\UNDOTBS01.DBF d:\backup
SQL> host copy D:\DEMO\SYSAUX01.DBF d:\backup
SQL> host copy D:\DEMO\USERS01.DBF d:\backup
SQL> alter database end backup;
数据库已更改。
SQL> alter database backup controlfile to 'd:\backup\demo.ctl' reuse;
数据库已更改。
SQL> alter system archive log current;
系统已更改。
6.5 基于备份控制文件恢复
(1) 关闭数据库。
(2) 复制所有数据文件和控制文件备份。
(3) 装载数据库。
(4) 执行RECOVER DATABASE ... USING BACKUP CONTROLFILE 命令。
(5) 以RESETLOGS 方式打开数据库。
(6) 备份数据库所有数据文件和控制文件。
SQL> conn / as sysdba
已连接。
SQL> select * from test;
COL
----------
3
SQL> drop tablespace user01 including contents;
表空间已删除。
SQL> select * from test;
select * from test
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> show parameter background_dump_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
background_dump_dest string D:\ORACLE\PRODUCT\10.2.0\ADMIN
\DEMO\BDUMP
Sun Sep 14 19:22:50 2008
drop tablespace user01 including contents
Sun Sep 14 19:22:53 2008
Completed: drop tablespace user01 including contents
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host copy D:\backup\SYSAUX01.DBF d:\demo
SQL> host copy d:\backup\system01.dbf d:\demo
SQL> host copy d:\backup\UNDOTBS01.DBF d:\demo
SQL> host copy d:\backup\users01.dbf d:\demo
SQL> host copy d:\backup\USER01.DBF d:\demo
SQL> host copy d:\backup\demo.ctl d:\demo\CONTROL01.CTL
SQL> host copy d:\backup\demo.ctl c:\demo\CONTROL02.CTL
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 67110244 bytes
Database Buffers 96468992 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
SQL> select file#,to_char(time,'yyyy-mm-dd hh24:mi:ss') from v$recover_file;
FILE# TO_CHAR(TIME,'YYYY-
---------- -------------------
1 2008-09-14 19:15:31
2 2008-09-14 19:15:31
3 2008-09-14 19:15:31
4 2008-09-14 19:15:31
5 2008-09-14 19:15:31
SQL> recover database until time '2008-09-14 19:22:53' using backup controlfile;
ORA-00279: 更改 981545 (在 09/14/2008 19:15:31 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE\6_1_665433709.LOG
ORA-00280: 更改 981545 (用于线程 1) 在序列 #6 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
已应用的日志。
完成介质恢复。
SQL> alter database open resetlogs;
数据库已更改。
SQL> select * from test;
COL
----------
3
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
SQL> alter database begin backup;
数据库已更改。
SQL> host copy D:\DEMO\SYSTEM01.DBF d:\backup
SQL> host copy D:\DEMO\UNDOTBS01.DBF d:\backup
SQL> host copy D:\DEMO\SYSAUX01.DBF d:\backup
SQL> host copy D:\DEMO\USERS01.DBF d:\backup
SQL> host copy D:\DEMO\USER01.DBF d:\backup
SQL> alter database end backup;
数据库已更改。
SQL> alter database backup controlfile to 'd:\backup\demo.ctl';
alter database backup controlfile to 'd:\backup\demo.ctl'
*
第 1 行出现错误:
ORA-01580: 创建控制备份文件 d:\backup\demo.ctl 时出错
ORA-27038: 所创建的文件已存在
OSD-04010: 指定了 <create> 选项, 但文件已经存在
SQL> alter database backup controlfile to 'd:\backup\demo.ctl' reuse;
数据库已更改。
SQL> alter system archive log current;
系统已更改。