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

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

时间: 2024-10-13 22:05:28

Making User-Managed Backups-17.4、Making User-Managed Backups of Online Tablespaces and Datafiles的相关文章

Making User-Managed Backups-17.3、Making User-Managed Backups of Offline Tablespaces and Datafiles

17.3.Making User-Managed Backups of Offline Tablespaces and Datafiles 备份离线的表空间时,需要注意以下指导原则: (1)不能离线system表空间或活动回滚段的表空间 (2)假设一个表在表空间x中,它的索引在表空间y中.y离线,x在线,当执行dml语句时会报错. 备份离线表空间: (1)备份表空间前,查询dba_data_files识别表空间的数据文件. (2)尽量使用normal选项离线表空间,因为它确保把表空间置为在线时不

[c/c++] programming之路(17)、高级指针

一.二级指针 二级指针的作用:1.函数改变外部变量指针2.外挂改变一个指针的值 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 void main(){ 5 int a = 10; 6 int b = 20; 7 int *p1 = &a; 8 int *p2 = &b; 9 int **pp = &p1; 10 printf("%d,", **pp); 11 printf("\n%x,

opencv学习之路(17)、边缘检测

一.概述 二.canny边缘检测 1 #include "opencv2/opencv.hpp" 2 using namespace cv; 3 4 void main() 5 { 6 //Canny边缘检测 7 Mat srcImg = imread("E://1.png",0); //0表示以灰度图读入,彩色图和灰度图进行边缘检测时略有不同,建议使用灰度图 8 //medianBlur(srcImg, srcImg,5);//中值滤波 9 imshow(&quo

TCP/IP协议详解 卷一:协议 17章、TCP传输控制协议

1.TCP服务 尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务.TCP提供一种面向连接的.可靠的字节流服务. (1)面向连接 两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接.过程与打电话相似,先拨号振铃,等待对方摘机说"喂",然后才说明是谁. 说明:在一个TCP连接中,仅有两方彼此进行通信.广播和多播不能用于TCP. (2)可靠性 TCP通过下列方式来提供可靠性: 1)应用数据被分割成TCP认为最适

Activiti5.17 Vaadin、Spring和Activiti的整合和继承关系

Activiti使用 Vaadin作为前端开发框架,Spring作为后台的支撑环境. 下图是Vaadin.Activiti和Spring的关系. 请求数据通过servlet 接受,进入Activiti 环境; Spring为 Activiti 提供支撑资源.

java基础(17)、集合类(1:Collection)

一. 什么是集合类? 二. Collection接口 2.1 Collection子接口(List接口和Set接口) 2.1 Collection的常用方法 三. 迭代器(Iterator) 3.1 关于迭代器 3.2 迭代其的用法 3.3 迭代器的简化:增强for循环 3.4 使用迭代器向集合添加元素 四. List接口 4.1 List接口的方法 4.2 List接口的实现类 4.3 List遍历的方法 4.4 并发修改异常 一. 什么是集合类? 放了方便对多个对象操作,需要一个能对对象存储

零基础学python-2.17 文件、open()、file()

今天我们来说说文件,以及跟文件有关的内建函数open和file 首先我们在python的根目录下建一个名为"123"的txt文本文件 文件里面我们输入一些文本 我们把新建文件与源代码都放到python根目录下面 下面我们来看看代码: handler=open("123.txt")#由于把文件跟源代码建立在python的根目录, #所以这里的路径只需打名字即可 for eachLine in handler: print(eachLine,end='') handle

Java集合(17)--HashMap、Hashtable和ConcurrentHashMap的比较

1. 数据结构 都是数组+拉链实现的哈希表,但是具体实现上差别大了 2. 并发 Hashtable全表锁 HashMap多线程不安全,需要自己封装 ConcurrentHashMap加细粒度锁,读不加锁,如果读到空值再加锁.注意这三个关键字final,transient,volatile 3. null Hashtable不允许用 null作为键和值 HashMap允许全局最多一个null键,但是允许无数个null值 ConcurrentHashMap不允许用 null作为键和值

Head first java chapter 17 包、jar存档文件和部署