码迷,mamicode.com
首页 > 其他好文 > 详细

Making User-Managed Backups-17.4、Making User-Managed Backups of Online Tablespaces and Datafiles

时间:2014-06-20 10:04:43      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:end backup   shutdown abort   recover database   scn的改变   

17.4、Making User-Managed Backups of Online Tablespaces and Datafiles
当数据库打开时,可以备份一个在线表空间所有和一个指定的数据文件。备份过程的区别依赖于在线表空间是read、write或者read-only。
注意:不应该备份临时表空间

17.4.1、Making User-Managed Backups of Online Read/Write Tablespaces
当表空间是在线状态时,必须把一个read/write表空间置为备份模式,才能备份数据文件。在备份模式,数据把改变的数据块拷贝到redo stream。在执行alter tablespace ... end
backup或alter database end backup后,数据库把数据文件头提高到当前数据库检查点。当还原以上方式备份的数据文件,如果需要恢复,数据库会索要适当的重做日志集来应用
重做日志。

在打开的数据库中,备份在线的read/write表空间:
(1)在备份之前,使用DBA_DATA_FILES识别在表空间中的数据文件
(2)标记在线表空间备份的开始
注意:拷贝在线表空间前,如果没有begin backup做标记,或没有等到begin backup的语句执行完,那么随后的恢复操作,拷贝的数据文件是不能用的。尝试恢复这样的备份文件
是危险的,它会返回"fuzzy files"警告,导致一个不一致的、不能打开的数据库
(3)使用操作系统命令备份在线表空间的在线数据文件
(4)标记在线表空间备份的结束
(5)归档未归档的重做日志
SQL> alter system archive log current;
注意:如果标记在线表空间备份的结束失败,oracle把表空间对应的改变写入到在线重做日志,引起性能问题。关闭数据库时,会接受一个ORA-01149的错误

模拟1、表空间testtbs01在线,然后备份在线的数据文件
(1)
SQL> col file_name for a40
SQL> select tablespace_name,file_name from dba_data_files where tablespace_name=‘TESTTBS01‘;

TABLESPACE_NAME                FILE_NAME
------------------------------ ----------------------------------------
TESTTBS01                      /oracle/oradata/boss/testtbs01_01.dbf
TESTTBS01                      /oracle/oradata/boss/testtbs01_02.dbf

(2)
SQL> alter tablespace testtbs01 begin backup;

(3)
##新启动一个会话
SQL> create table test01 (id number, name varchar2(30)) tablespace testtbs01;
SQL> insert into test01 values(1,‘aaa‘);
SQL> insert into test01 values(2,‘bbb‘);
SQL> commit;

##原始会话
SQL> select * from test01;

        ID NAME
---------- ------------------------------
         1 aaa
         2 bbb

$ cp -rf /oracle/oradata/boss/testtbs01_01.dbf /oradata/bossbak/20140605/testtbs01_01_`date "+%y_%m_%d"`.dbf
$ cp -rf /oracle/oradata/boss/testtbs01_02.dbf /oradata/bossbak/20140605/testtbs01_02_`date "+%y_%m_%d"`.dbf

(4)
SQL> alter tablespace testtbs01 end backup;

(5)
SQL> alter system archive log current;

17.4.2、Ending a Backup After an Instance Failure or SHUTDOWN ABORT--实例失败时,没有end backup
以下情况引起表空间备份失败和不一致:
(1)备份完成,没有执行end backup
(2)实例失败或shutdown abort,没有执行end backup
数据文件在备份模式,数据库尝试打开它,数据库直到执行一个恢复命令或把数据文件end backup,数据库才能打开。

HA环境,当没有dba监视数据库的情况下,需要人工干预。可以写一个崩溃恢复的脚本:
(1)mount数据库
(2)执行alter database end backup
(3)alter database open

17.4.2.1、Ending Backup Mode with the SQL*Plus RECOVER Command
recover命令的方法比end backup的方法慢,因为数据库必须浏览在线备份开始后产生的重做日志。

模拟1、表空间testtbs01没有end backup,此时shutdown abort,使用recover。总结:没有end backup,实例失败或shutdown abort,需要恢复
(1)
SQL> col file_name for a40
SQL> select tablespace_name,file_name from dba_data_files where tablespace_name=‘TESTTBS01‘;

TABLESPACE_NAME                FILE_NAME
------------------------------ ----------------------------------------
TESTTBS01                      /oracle/oradata/boss/testtbs01_01.dbf
TESTTBS01                      /oracle/oradata/boss/testtbs01_02.dbf

(2)
SQL> alter tablespace testtbs01 begin backup;

(3)
##新启动一个会话
SQL> insert into test01 values(3,‘ccc‘);
SQL> insert into test01 values(4,‘ddd‘);
SQL> commit;
$ cp -rf /oracle/oradata/boss/testtbs01_01.dbf /oradata/bossbak/20140605/testtbs01_01_`date "+%y_%m_%d"`.dbf
$ cp -rf /oracle/oradata/boss/testtbs01_02.dbf /oradata/bossbak/20140605/testtbs01_02_`date "+%y_%m_%d"`.dbf

(4)
SQL> shutdown immediate;  
ORA-01149: cannot shutdown - file 6 has online backup set
ORA-01110: data file 6: ‘/oracle/oradata/boss/testtbs01_01.dbf‘

SQL> shutdown abort
ORACLE instance shut down.

SQL> startup open;
ORA-01113: file 6 needs media recovery
ORA-01110: data file 6: ‘/oracle/oradata/boss/testtbs01_01.dbf‘

SQL> recover datafile 6;  ##把红色部分改为:recover database

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 7 needs media recovery
ORA-01110: data file 7: ‘/oracle/oradata/boss/testtbs01_02.dbf‘

SQL> recover datafile 7;
SQL> alter database open;
SQL> select status from v$instance;

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

17.4.2.2、Ending Backup Mode with the ALTER DATABASE END BACKUP Statement
当有多个表空间处在备份模式,mount阶段运行alter database end backup。

模拟1、表空间testtbs01没有end backup,此时shutdown abort,使用end backup
(1)
SQL> col file_name for a40
SQL> select tablespace_name,file_name from dba_data_files where tablespace_name=‘TESTTBS01‘;

TABLESPACE_NAME                FILE_NAME
------------------------------ ----------------------------------------
TESTTBS01                      /oracle/oradata/boss/testtbs01_01.dbf
TESTTBS01                      /oracle/oradata/boss/testtbs01_02.dbf

SQL> select dbid,name,log_mode,checkpoint_change# from v$database;

      DBID NAME                                     LOG_MODE     CHECKPOINT_CHANGE#
---------- ---------------------------------------- ------------ ------------------
1375601832 BOSS                                     ARCHIVELOG               625063

SQL> select file#,name,status,CHECKPOINT_CHANGE#,recover from v$datafile_header;

     FILE# NAME                                     STATUS  CHECKPOINT_CHANGE# REC
---------- ---------------------------------------- ------- ------------------ ---
         1 /oracle/oradata/boss/system01.dbf        ONLINE              625063 NO
         2 /oracle/oradata/boss/undotbs01.dbf       ONLINE              625063 NO
         3 /oracle/oradata/boss/sysaux01.dbf        ONLINE              625063 NO
         4 /oracle/oradata/boss/users01.dbf         ONLINE              625063 NO
         5 /oracle/oradata/boss/example01.dbf       ONLINE              625063 NO
         6 /oracle/oradata/boss/testtbs01_01.dbf    ONLINE              625063 NO
         7 /oracle/oradata/boss/testtbs01_02.dbf    ONLINE              625063 NO
(2)
SQL> alter tablespace testtbs01 begin backup;  ##执行后,立刻会使对应的数据文件头的scn提升
SQL> select dbid,name,log_mode,checkpoint_change# from v$database;

      DBID NAME                                     LOG_MODE     CHECKPOINT_CHANGE#
---------- ---------------------------------------- ------------ ------------------
1375601832 BOSS                                     ARCHIVELOG               625063
SQL> select file#,name,status,CHECKPOINT_CHANGE#,recover from v$datafile_header;

     FILE# NAME                                     STATUS  CHECKPOINT_CHANGE# REC
---------- ---------------------------------------- ------- ------------------ ---
         1 /oracle/oradata/boss/system01.dbf        ONLINE              625063 NO
         2 /oracle/oradata/boss/undotbs01.dbf       ONLINE              625063 NO
         3 /oracle/oradata/boss/sysaux01.dbf        ONLINE              625063 NO
         4 /oracle/oradata/boss/users01.dbf         ONLINE              625063 NO
         5 /oracle/oradata/boss/example01.dbf       ONLINE              625063 NO
         6 /oracle/oradata/boss/testtbs01_01.dbf    ONLINE              625806 NO
         7 /oracle/oradata/boss/testtbs01_02.dbf    ONLINE              625806 NO

(3)
##新启动一个会话
SQL> insert into test01 values(5,‘eee‘);
insert into test01 values(6,‘fff‘);
SQL> commit;
$ cp -rf /oracle/oradata/boss/testtbs01_01.dbf /oradata/bossbak/20140605/testtbs01_01_`date "+%y_%m_%d"`.dbf
$ cp -rf /oracle/oradata/boss/testtbs01_02.dbf /oradata/bossbak/20140605/testtbs01_02_`date "+%y_%m_%d"`.dbf

(4)
SQL> shutdown abort
ORACLE instance shut down.

SQL> startup open;
ORA-01113: file 6 needs media recovery
ORA-01110: data file 6: ‘/oracle/oradata/boss/testtbs01_01.dbf‘

SQL> select dbid,name,log_mode,checkpoint_change# from v$database;   ##scn没有改变

      DBID NAME                                     LOG_MODE     CHECKPOINT_CHANGE#
---------- ---------------------------------------- ------------ ------------------
1375601832 BOSS                                     ARCHIVELOG               625063

SQL> select file#,name,status,CHECKPOINT_CHANGE#,recover from v$datafile_header;

     FILE# NAME                                     STATUS  CHECKPOINT_CHANGE# REC
---------- ---------------------------------------- ------- ------------------ ---
         1 /oracle/oradata/boss/system01.dbf        ONLINE              625063 NO
         2 /oracle/oradata/boss/undotbs01.dbf       ONLINE              625063 NO
         3 /oracle/oradata/boss/sysaux01.dbf        ONLINE              625063 NO
         4 /oracle/oradata/boss/users01.dbf         ONLINE              625063 NO
         5 /oracle/oradata/boss/example01.dbf       ONLINE              625063 NO
         6 /oracle/oradata/boss/testtbs01_01.dbf    ONLINE              625806 NO
         7 /oracle/oradata/boss/testtbs01_02.dbf    ONLINE              625806 NO

SQL> col "文件号" for a40;
SQL>
select
  ts.name "表空间名"
  , df.file# "文件号"
  , df.checkpoint_change# "检查点"
  , df.name "文件名"
  , df.status "在线状态"
  , rf.error "恢复原因"
  , rf.change# "系统变更号"
  , rf.time
  from v$tablespace ts,v$datafile df,v$recover_file rf
where ts.ts#=df.ts# and df.file#=rf.file#
order by df.file#;

表空间名                           文件号     检查点
------------------------------ ---------- ----------
文件名
------------------------------------------------------------------------------------------------------------------------------------------------------
在线状  恢复原因           系统变更号 TIME
------- ------------------ ---------- ------------
TESTTBS01                      ##########     625806
/oracle/oradata/boss/testtbs01_01.dbf
ONLINE                         625806 05-JUN-14

TESTTBS01                      ##########     625806
/oracle/oradata/boss/testtbs01_02.dbf
ONLINE                         625806 05-JUN-14

表空间名                           文件号     检查点
------------------------------ ---------- ----------
文件名
------------------------------------------------------------------------------------------------------------------------------------------------------
在线状  恢复原因           系统变更号 TIME
------- ------------------ ---------- ------------

SQL> alter database end backup;

SQL> alter database open;

SQL> select dbid,name,log_mode,checkpoint_change# from v$database;

      DBID NAME                                     LOG_MODE     CHECKPOINT_CHANGE#
---------- ---------------------------------------- ------------ ------------------
1375601832 BOSS                                     ARCHIVELOG               646384

SQL> select file#,name,status,CHECKPOINT_CHANGE#,recover from v$datafile_header;

     FILE# NAME                                     STATUS  CHECKPOINT_CHANGE# REC
---------- ---------------------------------------- ------- ------------------ ---
         1 /oracle/oradata/boss/system01.dbf        ONLINE              646384 NO
         2 /oracle/oradata/boss/undotbs01.dbf       ONLINE              646384 NO
         3 /oracle/oradata/boss/sysaux01.dbf        ONLINE              646384 NO
         4 /oracle/oradata/boss/users01.dbf         ONLINE              646384 NO
         5 /oracle/oradata/boss/example01.dbf       ONLINE              646384 NO
         6 /oracle/oradata/boss/testtbs01_01.dbf    ONLINE              646384 NO
         7 /oracle/oradata/boss/testtbs01_02.dbf    ONLINE              646384 NO

17.4.2.3、Making User-Managed Backups of Read-Only Tablespaces
当备份一个在线read-only表空间,备份在线数据文件非常简单。不必把表空间置为备份模式,因为数据库不允许把变更写入这些数据文件。如果read-only表空间是独立的,那么使用操作系统命令拷贝数据文件,也可以使用传输表空间导出表空间的元数据。介质失败或用户错误时,把表空间传输到数据库。
Administrator‘s Guide提供了怎么传输表空间的信息;Reference提供了dba_data_files和dba_tablespaces的更多信息

一个打开的数据库中,备份在线read-only表空间
(1)查询dba_tablespaces,查看哪些表空间是read-only
(2)备份表空间前,查询dba_data_files识别表空间的数据文件
(3)使用操作系统命令备份read-only表空间的在线数据文件
注意:还原read-only表空间的数据文件时,把表空间离线,还原数据文件,然后把表空间置为在线。

Making User-Managed Backups-17.4、Making User-Managed Backups of Online Tablespaces and Datafiles,布布扣,bubuko.com

Making User-Managed Backups-17.4、Making User-Managed Backups of Online Tablespaces and Datafiles

标签:end backup   shutdown abort   recover database   scn的改变   

原文地址:http://blog.csdn.net/offbeatmine/article/details/28603049

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!