oracle的备份与恢复(一)

2023-11-02

author:skate

time:2010-09-06


 

oracle的备份与恢复

 

基于我个人的理解把恢复分为来两大类:

 

1. 基于备份的恢复

这种基于备份饿恢复是指通过备份文件,redo,archivelog等来实现备份。

 

2. 没有备份的恢复

没有备份的恢复是指不利用备份文件(备份文件,redo,archivelog)的恢复。也就是非常规的恢复,强制打开数据库

但是根据恢复时丢失数据的多少,也可以分为完全恢复和不完全恢复

 

 

1. 基于备份的恢复

基于备份的恢复相对很简单,根据损坏的文件和恢复时间,oracle提供很多方式

 

A。数据文件的恢复(包括datafile,undofile)
B。表空间的恢复,假如损坏多个数据文件,可以通过表空间来恢复比较当便
C。数据库的恢复,基于数据库的恢复,这个恢复动作较大
D。数据块恢复
E。没有备份文件,利用redo,archivelog恢复数据文件

 

 

 

A。数据文件的恢复(包括datafile,undofile)


创建测试表
SQL> create table tabtest1 tablespace tbs_test1 as select * from tab;

表已创建。

 

SQL> select count(1) from tabtest1;

  COUNT(1)
----------
      3678

SQL>

 

关闭数据库

SQL> shutdown abort;
ORACLE 例程已经关闭。
SQL>
SQL>

 

这个是时候在退出sqlplus窗口,否则你更改数据文件名时会提示文件正在被使用

 

SQL> quit
从 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断

 


修改数据文件名称,模拟数据文件损坏,在这里我修改UNDOTBS01.DBF和TBS_TEST03.DBF,意思是这里有两个数据文件损坏

登录数据库,打开数据库会报错

 

C:/Documents and Settings/Administrator>sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.4.0 - Production on 星期一 9月 6 14:29:44 2010

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

已连接到空闲例程。

 

SQL> startup
ORACLE 例程已经启动。

Total System Global Area  574619648 bytes
Fixed Size                  1297944 bytes
Variable Size             234881512 bytes
Database Buffers          331350016 bytes
Redo Buffers                7090176 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 2 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 2: 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/UNDOTBS01.DBF'

 


SQL> select * from v$recover_file;

     FILE# ONLINE  ONLINE_
---------- ------- -------
ERROR                                                                CHANGE#
----------------------------------------------------------------- ----------
TIME
--------------
         2 ONLINE  ONLINE
FILE NOT FOUND                                                             0


         6 ONLINE  ONLINE
FILE NOT FOUND                                                             0


     FILE# ONLINE  ONLINE_
---------- ------- -------
ERROR                                                                CHANGE#
----------------------------------------------------------------- ----------
TIME
--------------

 

 

从alertlog日志也可以了解到错误信息:

 

.....
ALTER DATABASE OPEN
Mon Sep 06 14:30:17 2010
Errors in file e:/oracle/product/10.2.0/admin/test/bdump/test_dbw0_3544.trc:
ORA-01157: cannot identify/lock data file 2 - see DBWR trace file
ORA-01110: data file 2: 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/UNDOTBS01.DBF'
ORA-27041: unable to open file
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。

.......


通过错误信息可以知道数据文件2,6已经损坏,其中文件2是回滚段数据,再有备份条件下,可以把它当成普通的数据文件来恢复。

 

SQL> recover datafile 2;
ORA-00283: 恢复会话因错误而取消
ORA-01110: 数据文件 2: 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/UNDOTBS01.DBF'
ORA-01157: 无法标识/锁定数据文件 2 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 2: 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/UNDOTBS01.DBF'


把UNDOTBS01.DBF文件名改回程原来的名字,也就相当于把备份文件copy回来,接下来就在备份文件UNDOTBS01.DBF的基础上,利用log来恢复

 

 

SQL> recover datafile 2;
完成介质恢复。


SQL> select name ,open_mode from v$database;

NAME      OPEN_MODE
--------- ----------
TEST      MOUNTED

 

在查看你下,现在还有几个需要恢复的文件

 

SQL> select * from v$recover_file;

     FILE# ONLINE  ONLINE_
---------- ------- -------
ERROR                                                                CHANGE#
----------------------------------------------------------------- ----------
TIME
--------------
         6 ONLINE  ONLINE
FILE NOT FOUND                                                             0

 

SQL> select name ,status from v$datafile;

NAME
--------------------------------------------------------------------------------

STATUS
-------
E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/SYSTEM01.DBF
SYSTEM

E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/UNDOTBS01.DBF
ONLINE

E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/SYSAUX01.DBF
ONLINE


NAME
--------------------------------------------------------------------------------

STATUS
-------
E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/USERS01.DBF
ONLINE

E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/EXAMPLE01.DBF
ONLINE

E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TBS_TEST03.DBF
ONLINE


已选择6行。

 

 

SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 6: 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TBS_TEST03.DBF'

 


SQL> select name ,status from v$datafile;

NAME
--------------------------------------------------------------------------------

STATUS
-------
E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/SYSTEM01.DBF
SYSTEM

E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/UNDOTBS01.DBF
ONLINE

E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/SYSAUX01.DBF
ONLINE


NAME
--------------------------------------------------------------------------------

STATUS
-------
E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/USERS01.DBF
ONLINE

E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/EXAMPLE01.DBF
ONLINE

E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TBS_TEST03.DBF
ONLINE


已选择6行。

 


把TBS_TEST03.DBF的文件名也copy回来,在这里就是把文件名改回来,然后再恢复

 

SQL> recover datafile 6;
完成介质恢复。


SQL> select name ,status from v$datafile;

NAME
--------------------------------------------------------------------------------

STATUS
-------
E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/SYSTEM01.DBF
SYSTEM

E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/UNDOTBS01.DBF
ONLINE

E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/SYSAUX01.DBF
ONLINE


NAME
--------------------------------------------------------------------------------

STATUS
-------
E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/USERS01.DBF
ONLINE

E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/EXAMPLE01.DBF
ONLINE

E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TBS_TEST03.DBF
ONLINE


已选择6行。

 


看看还有需要恢复的文件吗?

 

SQL> select * from v$recover_file;

未选定行


即然没有需要再恢复的文件了,那就打开数据库

 

SQL> alter database open;

数据库已更改。

 


数据打开了,那就检查下数据库是否正常,数据是有丢失

 

SQL> select name,open_mode from v$database;

NAME      OPEN_MODE
--------- ----------
TEST      READ WRITE

SQL> select count(1) from tabtest;

  COUNT(1)
----------
      3678

SQL>

 

ok!!!

 

需要考虑,普通的数据文件都可以通过备份来恢复,但是回滚段数据文件,在里没有未提交的事务可以当作普通数据文件,那如果里面
有未提交的食物该如何处理?

 

理论分析,在回滚段里有未提交的事务时,回滚段数据出问题;这个时候,数据的更改已经记录到redo中。在数据库再次启动的时候,oracle会通过控制文件和数据文件的cnt和scn比对来确定哪些文件需要恢复,如果确定undo数据文件需要恢复,oracle就执行instance recover ,smon进程读取log文件通过前滚/回滚来完成数据库的自动恢复,但是如果这个时候发现undo数据文件无法锁定读取的时候,可以通过备份来恢复。即,由dba手动完成读取log来恢复数据库。

 

那接下来就在实验下:

 

会话1:

 

SQL> select object_name from tabtest3 where object_name='testx';

未选定行

 

SQL> update tabtest3 set object_name='testx' where object_name='TABTEST2';

已更新 1 行。

 

SQL> update tabtest3 set object_name='testx' where object_name='TABTEST3';

已更新 1 行。

 

SQL> select object_name from tabtest3 where object_name='testx';

OBJECT_NAME
--------------------------------------------------------------------------------

testx
testx

SQL>

 

会话2:

SQL> select object_name from tabtest3 where object_name='testx';

未选定行

 

模拟断电故障

SQL> shutdown abort
ORACLE 例程已经关闭。


SQL> exit
从 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断

 

更改UNDOTBS01.DBF的名字模拟undo数据文件损坏

 

C:/Documents and Settings/Administrator>sqlplus "sys/aibo as sysdba"

SQL*Plus: Release 10.2.0.4.0 - Production on 星期一 9月 6 15:15:14 2010

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

已连接到空闲例程。

 

SQL> startup
ORACLE 例程已经启动。

Total System Global Area  574619648 bytes
Fixed Size                  1297944 bytes
Variable Size             234881512 bytes
Database Buffers          331350016 bytes
Redo Buffers                7090176 bytes
数据库装载完毕。
ORA-01113: 文件 2 需要介质恢复
ORA-01110: 数据文件 2: 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/UNDOTBS01.DBF'

 

把UNDOTBS01.DBF' copy回来,这里把名字改回来就可以

 

 

SQL> recover datafile 2;
完成介质恢复。
SQL> select name,status from v$datafile;

NAME
--------------------------------------------------------------------------------

STATUS
-------
E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/SYSTEM01.DBF
SYSTEM

E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/UNDOTBS01.DBF
ONLINE

E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/SYSAUX01.DBF
ONLINE


NAME
--------------------------------------------------------------------------------

STATUS
-------
E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/USERS01.DBF
ONLINE

E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/EXAMPLE01.DBF
ONLINE

E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TBS_TEST03.DBF
ONLINE


已选择6行。

 

SQL> alter database open;

数据库已更改。

 

SQL> select object_name from tabtest3 where object_name='testx';

未选定行

 


数据已经打开,并回复到数据库故障点状态,未提交的也都回滚


总的来说,在有备份条件下,数据文件(包括undo数据文件)的恢复还是很简单的。

数据文件恢复的条件:数据文件必须处于offlie状态或者数据库mount

 

 

 

 

------end------

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

oracle的备份与恢复(一) 的相关文章

  • Oracle如何将UTC时间转换为本地时间(缺少偏移信息)

    我有一个包含日期列的表 我认为该列中的日期是以 UTC 格式保存的 我希望检索日期时以当地时间打印 这意味着当我从德国调用日期时 结果应该是这样的 2015 04 29 11 24 06 0200UTC EUROPE BERLIN 我尝试了
  • 如何销毁一个物体?

    据我所知 很少 有两种方法 var new object Then Method 1 Set to null var null Method 2 Unset unset var 还有其他更好的方法吗 我在这里吹毛求疵吗 您正在寻找unset
  • toUpperCase() 方法什么时候创建一个新对象?

    public class Child public static void main String args String x new String ABC String y x toUpperCase System out println
  • Oracle 删除约束级联等效于 Sql Server

    在Oracle中 删除约束PK SAI我使用语法 ALTER TABLE SAISIE DROP CONSTRAINT PK SAI CASCADE SQL Server 中与此等效的是什么 您正在考虑与实际 DELETE 语句相关的 FO
  • 与 SQL 中的 IN 运算符相反

    我怎么能做相反的事情 换句话说 选择所有姓氏不是 Hansen 或 Pettersen 的人 WHERE lastname NOT IN Hansen Pettersen 请参阅 IN 和 NOT IN 运算符 部分SQLite 所理解的
  • 唯一约束与唯一索引?

    之间有区别吗 CREATE TABLE p product no integer name text UNIQUE price numeric and CREATE TABLE p product no integer name text
  • 在 SQL 中按键组对行进行顺序编号?

    SQL中有没有办法按顺序添加行号按关键组 假设一个表包含任意 CODE NAME 元组 示例表 CODE NAME A Apple A Angel A Arizona B Bravo C Charlie C Cat D Dog D Dopp
  • 如何计算 Postgres 上图表中所有连接的节点(行)?

    我的桌子有account id and device id One account id可以有多个device ids 反之亦然 我正在尝试计算每个连接的多对多关系的深度 Ex account id device id 1 10 1 11
  • Magento --“SQLSTATE[23000]:违反完整性约束..”客户更新

    迁移服务器后 每次尝试更新客户信息时都会出现错误 我正在使用一个客户激活插件 http www magentocommerce com magento connect vinai extension 489 customer activat
  • 自动提取数据 - Oracle SQL Developer

    我通过 SQL Developer 连接到 Oracle 数据库 我想编写一个返回每月数据集的查询 然后将该数据提取到分隔文本文件中 我知道如何做到这一点就好了 我想知道是否有一种方法可以编写一个脚本来运行查询并在一年内逐月提取数据 这样我
  • 如何获取对象的所有属性?

    如何在 JavaScript 中使用反射获取对象的所有属性 循环遍历对象并获取属于该对象且不属于该对象的每个键 一个函数 var properties for var key in obj if obj hasOwnProperty key
  • 使用 .NET 中的类型化数据集将 SQL 参数传递给 IN() 子句

    首先道歉 因为该网站上有类似的问题 但没有一个直接回答这个问题 我在 VS 2010 中使用类型化数据集 我在数据集中创建一个 TableAdapter 查询如下 SELECT from Table WHERE ID IN IDs 现在如果
  • TSQL - 生成文字浮点值

    我理解比较浮点数时遇到的许多问题 并对它们在这种情况下的使用感到遗憾 但我不是表格作者 只有一个小障碍需要克服 有人决定使用浮点数 就像您期望使用 GUID 一样 我需要检索具有特定浮点值的所有记录 sp help MyTable Colu
  • ASP SQL Server 连接

  • Spring Data JPA 选择不同

    我有一个情况 我需要建立一个select distinct a address from Person a 其中地址是 Person 内的地址实体 类型的查询 我正在使用规范动态构建我的 where 子句并使用findAll Specifi
  • MySQL:如何获取每个分组的x个结果数[重复]

    这个问题在这里已经有答案了 可能的重复 mysql 在 GROUP BY 中使用 LIMIT 来获取每组 N 个结果 https stackoverflow com questions 2129693 mysql using limit w
  • 自动删除主键序列中的间隙

    我正在创建一个网页 该网页根据用户操作将数据存储到 MySQL 数据库中 数据库有很多行 行的主键是列 rowID 它只是按顺序对行进行编号 例如 1 2 3 4 用户可以选择删除行 问题是当用户删除最后一行以外的行时 rowID 中有一个
  • SQL Server 2008 错误 233

    我正在使用以下 sql 脚本在 SQL Server 2008 中创建新登录名 CREATE LOGIN xyz WITH PASSWORD xyz DEFAULT DATABASE master DEFAULT LANGUAGE us e
  • 没有为 1 个或多个必需参数给出值。更新SQL

    我正在编写一个程序 当用户在列表视图上选择记录时 该程序会更新密码或积分 我收到错误 没有为 1 个或多个必需参数给出值 我不知道如何纠正 我是否遗漏了一些明显的东西 Dim sql As String UPDATE Users SET P
  • 将数据从 oracle 移动到 HDFS,处理并从 HDFS 移动到 Teradata

    我的要求是 将数据从 Oracle 移至 HDFS 处理HDFS上的数据 将处理后的数据移至 Teradata 还需要每 15 分钟执行一次整个处理 源数据量可能接近50GB 处理后的数据也可能相同 在网上搜索了很多之后 我发现 PRARO

随机推荐

  • 遗传算法解决TSP问题

    一 背景 遗传算法是基于自然选择和自然遗传机制的一种随机搜索算法 具有良好的并行性和全局寻优能力 能够自适应地调整搜索方向 这是一种相对来说比较简单的算法 因为它不需要问题求解者具备非常完备的问题领域知识 它能够通过类似生物体繁殖后代的机制
  • FreeRTOS学习笔记—任务创建和删除

    文章目录 一 任务创建和删除API函数 1 1 xTaskCreate 函数 1 2 xTaskCreateStatic 函数 1 3 vTaskDelete 函数 二 任务创建和删除 动态方法 2 1 任务要求 2 2 程序设计 2 2
  • 关于Collection下的removeAll方法抛出UnsupportedOperationException分析

    起因 这周在开发的过程遇到了以下这个错误 之前一直规范运用Collection的接口 所以这个异常比较少见 所以我就纳闷了 做个一个实验 package src import com google common collect Sets i
  • 《小家:越住越大2》

    第一章 餐厅如何避免杂乱 一般家庭的餐桌物品占用餐桌桌面面积普遍较高 显得餐桌杂乱 可以采用餐边柜与餐桌零距离接触方式方便杂物摆放 也可以采用移动是多层收纳车 如何避免孤单在厨房做饭 厨房与餐厅采用玻璃吊轨门连接 可以使用卡座代替普通餐椅
  • 12,verilog移位操作

    注 学习 交流就在博主的个人weixin公众号 FPGA动力联盟 留言或直接 博主weixin fpga start 私信 Verilog中的移位操作有两类 逻辑移位和算术移位 逻辑右移 gt gt 1个操作数向右移位 产生的空位用0填充
  • 毕业设计-基于深度学习的病理图像细胞核分割

    目录 前言 课题背景和意义 实现技术思路 一 相关技术介绍 二 基于双通路解码的病理图像细胞核分割 三 基于无锚检测的病理图像细胞核分割 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学
  • 函数递归

    函数递归 1 递归是什么 2 递归的限制条件 3 递归举例 4 递归与迭代 1 递归是什么 递归是指函数可以调用自身来解决问题的一种编程技巧 在C语言中 递归是通过函数调用自己来实现的 使用递归可以使某些问题更容易理解和处理 例如 计算一个
  • nginx服务器access_log日志详解

    前言 nginx的log日志分为 access log 和 error log 其中access log 记录了哪些用户 哪些页面以及用户浏览器 ip和其他的访问信息 error log 则是记录服务器错误日志 log format 日志格
  • 服务器上部署前端Vue项目代码

    服务器上部署前端Vue项目代码 本人自己感觉部署前端代码比部署后端难 主要是我在部署的过程中遇到了各种报错 写这篇文章主要是记录一下自己艰难的踩坑过程 最终部署成功 前端框架使用的是Vue3 服务器系统是CentOS7 部署的整个过程主要分
  • SpringBoot各个版本使用Redis之间的区别

    今天在springboot中使用数据库 springboot版本为2 0 2 RELEASE 通过pom引入jar包 配置文件application properties中的redis配置文件报错 提示例如deprecated config
  • 阿里云 MongoDB 的连接使用规范

    阿里云 MongoDB 的连接使用规范 概述 我们在阿里云上的 MongoDB 有两种 副本集 主 被两个节点 分片集 集群 在多个业务同时连接 MongoDB 使用时 最重要的连接数问题 一旦超过最大值即影响其它业务的使用 所以必须要规范
  • Mysql 开源数据源笔记

    DBCP C3P0数据源 tomcat内置的数据源DBCP DBCP 方式1 BasicDataSource source new BasicDataSource source setDriverClassName com mysql jd
  • allegro 遇到的问题汇总 避免忘记

    目录 目录 1 已经布板后如何更新封装 2 如何批量放置VIA 3 如何替换某个过孔 4 OrCAD跟Allegro交互设置 5 在制作封装时 如何修改封装引脚的PIN Number 6 ORCAD画原理图时 off page connec
  • Linux关机命令详解

    在linux下一些常用的关机 重启命令有shutdown halt reboot 及init 它们都可以达到重启系统的目的 但每个命令的内部工作过程是不同的 Linux centos重启命令 1 reboot 2 shutdown r no
  • 表格与表单的嵌套关系

    表格与表单的嵌套关系 想要用表格与表单做一个注册界面 却对这两个元素的嵌套关系挡住的脚步 到底是表格里面放置表单呢 还是表单里面放置表格呢 没关系 小马哥带你答疑解惑 1 首先我们可以创建一个空表单 在这个表单里面不用放任何东西 2 然后我
  • selenium自动化环境搭建(Windows)

    一 selenium介绍 selenium主要用于web应用程序的自动化测试 还支持所有基于web的管理任务自动化 selenium经历了2个版本 selenium1 0和selenium2 0 selenium不是一个单独的工具 而是由一
  • 如何对Docker容器进行健康检查

    如何对 Docker 容器进行健康检查 熟悉使用过kubernetes的人应该知道 kubernetes支持对pod进行健康检查的功能 这对生产业务来说其实是非常有用处的 能快速发现服务不可用 并进行快速重启恢复 其实不使用kubernet
  • 局域网设备查找和发现,局域网软件在线更新,Qt udp组播

    使用udp组播原因 想要实现查找局域网自己的设备 但是不知道存在设备的ip 局域网软件在线更新 不想固定服务器的ip地址 因为是开发人员电脑 ip可能随时在变化 比较了广播 组播的优缺点 最终选择组播 组播优点 组播技术的初衷是在IP网络中
  • C++14新特性

    C 14 维基百科 C 14是C 的现行标准的非正式名称 正式名称为 International Standard ISO IEC 14882 2014 E Programming Language C C 14旨在作为C 11的一个小扩展
  • oracle的备份与恢复(一)

    author skate time 2010 09 06 oracle的备份与恢复 基于我个人的理解把恢复分为来两大类 1 基于备份的恢复 这种基于备份饿恢复是指通过备份文件 redo archivelog等来实现备份 2 没有备份的恢复