1. 对read only tbs进行热备份时不需要执行begin backup;
2.从9i开始通过备份的controlfile对只读表空间进行恢复时不再需要把read only tbs对应的数据文件设置为offline
[@more@]http://www.hackhome.com/InfoView/Article_164468.html
也可以参考这个,写的更周全详细一些!
1.
SQL> alter tablespace users read only;
表空间已更改。
SQL> alter tablespace users begin backup;
alter tablespace users begin backup
*
第 1 行出现错误:
ORA-01642: 只读表空间 'USERS' 无需开始备份
SQL> alter database backup controlfile to trace;
数据库已更改。
-- 在控制文件的创建script中没有包含tablespace user所对应的datafile
CREATE CONTROLFILE REUSE DATABASE "TEST" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 (
'E:ORACLEPRODUCT10.2.0ORADATATESTREDO01.LOG',
'E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO01.LOG'
) SIZE 10M,
GROUP 2 (
'E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO02.LOG',
'E:ORACLEPRODUCT10.2.0ORADATATESTREDO02.LOG'
) SIZE 10M,
GROUP 3 (
'E:ORACLEPRODUCT10.2.0ORADATATESTREDO03.LOG',
'E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO03.LOG'
) SIZE 10M
-- STANDBY LOGFILE
DATAFILE
'E:ORACLEPRODUCT10.2.0ORADATATESTSYSTEM01.DBF',
'E:ORACLEPRODUCT10.2.0ORADATATESTUNDOTBS01.DBF',
'E:ORACLEPRODUCT10.2.0ORADATATESTSYSAUX01.DBF'
CHARACTER SET ZHS16GBK
;
SQL> connect / as sysdba
已连接。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> --backup database;
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 71304548 bytes
Database Buffers 92274688 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
数据库已经打开。
SQL> select file# , status , enabled,checkpoint_change# from v$datafile;
FILE# STATUS ENABLED CHECKPOINT_CHANGE#
---------- ------- ---------- ------------------
1 SYSTEM READ WRITE 836487
2 ONLINE READ WRITE 836487
3 ONLINE READ WRITE 836487
4 ONLINE READ ONLY 836098
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 5
下一个存档日志序列 7
当前日志序列 7
SQL> select group# ,member from v$logfile order by group#;
GROUP# MEMBER
---------- ------------------------------------------------------------
1 E:ORACLEPRODUCT10.2.0ORADATATESTREDO01.LOG
1 E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO01.LOG
2 E:ORACLEPRODUCT10.2.0ORADATATESTREDO02.LOG
2 E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO02.LOG
3 E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO03.LOG
3 E:ORACLEPRODUCT10.2.0ORADATATESTREDO03.LOG
已选择6行。
SQL> select group#,sequence#,status from v$log;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 7 CURRENT
2 5 INACTIVE
3 6 INACTIVE
SQL> alter system switch logfile;
系统已更改。
SQL> alter system switch logfile;
系统已更改。
SQL> alter system switch logfile;
系统已更改。
SQL> create table t(id int);
表已创建。
SQL> insert into t values(1);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> alter system switch logfile;
系统已更改。
SQL> alter system switch logfile;
系统已更改。
SQL> alter system switch logfile;
系统已更改。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> --resotore datafile and controlfile from backup;
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 71304548 bytes
Database Buffers 92274688 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-00314: 日志 1 (用于线程 1) 要求的序号 与 不匹配
ORA-00312: 联机日志 1 线程 1:
'E:ORACLEPRODUCT10.2.0ORADATATESTREDO01.LOG'
ORA-00312: 联机日志 1 线程 1:
'E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO01.LOG'
SQL> recover database using backup controlfile;
ORA-00279: 更改 836486 (在 06/24/2008 09:15:54 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_
7_%U_.ARC
ORA-00280: 更改 836486 (用于线程 1) 在序列 #7 中
指定日志: {
ORA-00279: 更改 836791 (在 06/24/2008 10:47:59 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_
8_%U_.ARC
ORA-00280: 更改 836791 (用于线程 1) 在序列 #8 中
ORA-00278: 此恢复不再需要日志文件
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1
_7_460R3098_.ARC'
指定日志: {
ORA-00279: 更改 836793 (在 06/24/2008 10:48:00 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_
9_%U_.ARC
ORA-00280: 更改 836793 (用于线程 1) 在序列 #9 中
ORA-00278: 此恢复不再需要日志文件
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1
_8_460R31WB_.ARC'
指定日志: {
ORA-00279: 更改 836796 (在 06/24/2008 10:48:05 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_
10_%U_.ARC
ORA-00280: 更改 836796 (用于线程 1) 在序列 #10 中
ORA-00278: 此恢复不再需要日志文件
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1
_9_460R35QX_.ARC'
指定日志: {
ORA-00279: 更改 836819 (在 06/24/2008 10:48:32 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_
11_%U_.ARC
ORA-00280: 更改 836819 (用于线程 1) 在序列 #11 中
ORA-00278: 此恢复不再需要日志文件
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1
_10_460R412X_.ARC'
指定日志: {
ORA-00279: 更改 836822 (在 06/24/2008 10:48:40 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_
12_%U_.ARC
ORA-00280: 更改 836822 (用于线程 1) 在序列 #12 中
ORA-00278: 此恢复不再需要日志文件
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1
_11_460R4900_.ARC'
指定日志: {
ORA-00279: 更改 836825 (在 06/24/2008 10:48:44 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_
13_%U_.ARC
ORA-00280: 更改 836825 (用于线程 1) 在序列 #13 中
ORA-00278: 此恢复不再需要日志文件
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1
_12_460R4F0H_.ARC'
指定日志: {
ORA-00279: 更改 836827 (在 06/24/2008 10:48:45 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_
14_%U_.ARC
ORA-00280: 更改 836827 (用于线程 1) 在序列 #14 中
ORA-00278: 此恢复不再需要日志文件
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1
_13_460R4FYR_.ARC'
指定日志: {
ORA-00308: 无法打开归档日志
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1
_14_%U_.ARC'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
SQL> select group#,sequence#,status from v$log;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 7 CURRENT
3 6 INACTIVE
2 5 INACTIVE
SQL> recover database using backup controlfile;
ORA-00279: 更改 836827 (在 06/24/2008 10:48:45 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_
14_%U_.ARC
ORA-00280: 更改 836827 (用于线程 1) 在序列 #14 中
指定日志: {
E:ORACLEPRODUCT10.2.0ORADATATESTREDO02.LOG
已应用的日志。
完成介质恢复。
SQL> select group#,sequence#,status from v$log;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 7 CURRENT
3 6 INACTIVE
2 5 INACTIVE
SQL> select file# , status , enabled,checkpoint_change# from v$datafile;
FILE# STATUS ENABLED CHECKPOINT_CHANGE#
---------- ------- ---------- ------------------
1 SYSTEM READ WRITE 836996
2 ONLINE READ WRITE 836996
3 ONLINE READ WRITE 836996
4 ONLINE READ ONLY 836098
SQL> alter database open resetlogs;
数据库已更改。
SQL>
SQL> select file# , status , enabled,checkpoint_change# from v$datafile;
FILE# STATUS ENABLED CHECKPOINT_CHANGE#
---------- ------- ---------- ------------------
1 SYSTEM READ WRITE 836999
2 ONLINE READ WRITE 836999
3 ONLINE READ WRITE 836999
4 ONLINE READ ONLY 836098
SQL> select * from t;
ID
----------
1
SQL>
--================================================
以上试验过程出现了失误,因为在备份之前users tbs就是read only的,所以在恢复的时候其实对users
tbs对应的datafile没有任何影响,恢复和直接拷贝备份没有任何区别。
2.
SQL> alter tablespace users read write;
表空间已更改。
SQL> alter system checkpoint;
系统已更改。
SQL> select file# , status , enabled,checkpoint_change# from v$datafile;
FILE# STATUS ENABLED CHECKPOINT_CHANGE#
---------- ------- ---------- ------------------
1 SYSTEM READ WRITE 840362
2 ONLINE READ WRITE 840362
3 ONLINE READ WRITE 840362
4 ONLINE READ WRITE 840362
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> desc tt
ERROR:
ORA-01034: ORACLE not available
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 71304548 bytes
Database Buffers 92274688 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
数据库已经打开。
SQL> create table tt(id int) tablespace users;
表已创建。
SQL> insert into tt values(1);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> alter system switch logfile;
系统已更改。
SQL> alter system switch logfile;
系统已更改。
SQL> alter tablespace users read only;
表空间已更改。
SQL> select * from t;
ID
----------
1
SQL> insert into t values(2);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into t values(3);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into t values(4);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select file# , status , enabled,checkpoint_change# from v$datafile;
FILE# STATUS ENABLED CHECKPOINT_CHANGE#
---------- ------- ---------- ------------------
1 SYSTEM READ WRITE 840527
2 ONLINE READ WRITE 840527
3 ONLINE READ WRITE 840527
4 ONLINE READ ONLY 840530
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>
SQL> -- copy datafile and controlfile from backup
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 71304548 bytes
Database Buffers 92274688 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
ORA-00314: 日志 1 (用于线程 1) 要求的序号 与 不匹配
ORA-00312: 联机日志 1 线程 1:
'E:ORACLEPRODUCT10.2.0ORADATATESTREDO01.LOG'
ORA-00312: 联机日志 1 线程 1:
'E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO01.LOG'
SQL> recover database using backup controlfile;
ORA-00279: 更改 840401 (在 06/24/2008 12:58:55 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_
2_%U_.ARC
ORA-00280: 更改 840401 (用于线程 1) 在序列 #2 中
指定日志: {
ORA-00279: 更改 840522 (在 06/24/2008 13:03:59 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_
3_%U_.ARC
ORA-00280: 更改 840522 (用于线程 1) 在序列 #3 中
ORA-00278: 此恢复不再需要日志文件
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1
_2_46101ZKL_.ARC'
指定日志: {
ORA-00279: 更改 840524 (在 06/24/2008 13:03:59 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_
4_%U_.ARC
ORA-00280: 更改 840524 (用于线程 1) 在序列 #4 中
ORA-00278: 此恢复不再需要日志文件
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1
_3_461020Y8_.ARC'
指定日志: {
ORA-00279: 更改 840527 (在 06/24/2008 13:04:04 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_
5_%U_.ARC
ORA-00280: 更改 840527 (用于线程 1) 在序列 #5 中
ORA-00278: 此恢复不再需要日志文件
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1
_4_4610253X_.ARC'
指定日志: {
ORA-00279: 更改 840551 (在 06/24/2008 13:04:42 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_
6_%U_.ARC
ORA-00280: 更改 840551 (用于线程 1) 在序列 #6 中
ORA-00278: 此恢复不再需要日志文件
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1
_5_46103CCQ_.ARC'
指定日志: {
ORA-00279: 更改 840556 (在 06/24/2008 13:04:51 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_
7_%U_.ARC
ORA-00280: 更改 840556 (用于线程 1) 在序列 #7 中
ORA-00278: 此恢复不再需要日志文件
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1
_6_46103NPY_.ARC'
指定日志: {
ORA-00308: 无法打开归档日志
'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1
_7_%U_.ARC'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
SQL> select member from v$logfile;
MEMBER
------------------------------------------------------------
E:ORACLEPRODUCT10.2.0ORADATATESTREDO01.LOG
E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO02.LOG
E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO01.LOG
E:ORACLEPRODUCT10.2.0ORADATATESTREDO02.LOG
E:ORACLEPRODUCT10.2.0ORADATATESTREDO03.LOG
E:ORACLEPRODUCT10.2.0ORADATATESTLOGREDO03.LOG
已选择6行。
SQL> recover database using backup controlfile;
ORA-00279: 更改 840556 (在 06/24/2008 13:04:51 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_
7_%U_.ARC
ORA-00280: 更改 840556 (用于线程 1) 在序列 #7 中
指定日志: {
E:ORACLEPRODUCT10.2.0ORADATATESTREDO01.LOG
ORA-00310: 归档日志包含序列 5; 要求序列 7
ORA-00334: 归档日志: 'E:ORACLEPRODUCT10.2.0ORADATATESTREDO01.LOG'
SQL> recover database using backup controlfile;
ORA-00279: 更改 840556 (在 06/24/2008 13:04:51 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREATESTARCHIVELOG2008_06_24O1_MF_1_
7_%U_.ARC
ORA-00280: 更改 840556 (用于线程 1) 在序列 #7 中
指定日志: {
E:ORACLEPRODUCT10.2.0ORADATATESTREDO02.LOG
已应用的日志。
完成介质恢复。
SQL> alter database open resetlogs;
数据库已更改。
SQL> select file# , status , enabled,checkpoint_change# from v$datafile;
FILE# STATUS ENABLED CHECKPOINT_CHANGE#
---------- ------- ---------- ------------------
1 SYSTEM READ WRITE 840703
2 ONLINE READ WRITE 840703
3 ONLINE READ WRITE 840703
4 ONLINE READ ONLY 840530
SQL> select * from t;
ID
----------
1
2
3
4
SQL> select * from tt;
ID
----------
1
SQL>
发现users tbs对应的datafile只恢复到了read only时的checkpoint change840530,当然想一想也很容易理解
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/19602/viewspace-1006065/ ,如需转载,请注明出处,否则将追究法律责任。