原创作品,转自请在文字开头显眼位置注明出处:https://www.cnblogs.com/sunshine5683/p/10052949.html

数据备份恢复在数据库管理中至关重要,今天,总结一下数据库备份与恢复需要注意的方面和实际操作!、

一、在备份之前首先应该执行commit语句,将所有未提交的数据进行提交,(提交了的数据也有可能在内存),执行alter system checkpoint语句,所有的脏数据(内存中所有修改过的数据,这些数据有可能被提交,也有可能未被提交)都会被写入到了磁盘上,但是如果被写入磁盘的数据块处于未提交状态,那么另外一个会话登入后是不可见的!

commit:标志了事务的提交,数据的生效,其他用户或者会话才是可见的,不管该数据是在磁盘上还是在内存中。

commit后首先将redo保存到磁盘,首先保存redo而不保存数据的原因是redo的保存比修改数据的保存快很大,保证了数据提交的速度,而且一旦redo被保存,那么即使数据没有被保存,也可以通过redo将该数据恢复,所以,redo的保存保证了数据的安全。

redo保证了数据的安全,此时再执行checkpoint,并不是多此一举,将内存数据写入磁盘,一是保证内存的利用率,不至于内存脏数据太大,二是对于数据恢复有很大的作用

二、实例恢复发生在oracle启动的第三个阶段

第一阶段:startup nomount(读取spfile),没有进行实例恢复

第二阶段:alter database mount(读取控制文件),没有进行实例恢复

第三阶段:alter database open(检查控制文件,数据文件头,检查数据完整性),进行实例恢复

下面将数据库强制关闭,shutdown abort(强制关闭,这样关闭快速,但是一些内存数据不会被保存到数据库磁盘,在数据库下次启动的时候就会进行实例恢复,在实际环境中不建议这样关闭),然后分阶段启动数据库:

数据库实例恢复的大概原理:Oracle在打开数据库时(alter database open),会检查每个文件头上的信息(SCN),并同控制文件中相应的信息(SCN)比较,如果不一致,则进行实例恢复。

实例恢复的过程 :

首先:前滚 rolling forward ,读取状态为current和active状态的日志(redo log),将发生crash时,没有来得及写到磁盘上的数据块,使用redo的信息来恢复。

其次:打开数据库(alter database open)

最后:回滚 rolling back: 将没有提交的事务进行回滚。

三:介质恢复

当发生以下情况时,实例恢复无效,需要进行介质恢复:

1、数据文件丢失,损坏

2、在线日志文件(online redo)丢失,损坏

3、数据文件太旧 (比如从一个备份集中恢复过来的文件)

4、文件太新(比如,其它所有的文件都是从备份中恢复过来的)

如下图:将数据文件11号文件offline之后,进行11号文件恢复,显示出错,这种错误就是数据文件太旧无法恢复

四、数据库的备份方式

1、Rman(物理备份):针对 数据库,表空间,数据文件,数据块,这种方案备份的速度很慢。通常在备份数据时候不建议备份在线日志文件,其他文件都可以备份

2、exp,expdp(逻辑备份):针对 用户,数据库对象(表,分区...),这种备份方案对数据的完整性保证不是很好

3、只读表空间+传递表空间,这种备份方案要求将某些表空间置为只读形式,类似与数据仓库,不能再改变

4、Data guard,这种备份方案比较常用

五、数据库备份操作

1、Rman备份:首先建议将数据运行在归档模式下

其次,以rman模式登录数据库,如果全库备份,直接使用下面命令备份就好

如果备份个别表空间,则首先我们看看有哪些表空间

随便选择一个表空间,我们就选择users表空间进行备份,可以看到速度很快

接下来恢复该表空间,过程都是很快的

2、export

备份:export  用户名/密码 file=用户名.dmp  导出该用户下的所有表

恢复: import  用户名/密码 file=用户名.dmp full=y(表示全部导入)

import  用户名/密码 file=用户名.dmp tables=tt(表示导入tt表)

对于此种方式,暂时先不做演示了,其方式也是很简单的,由于此次总结是针对真正问题的解决需要而测试的,此次并不涉及export备份,所以将在后续总结中继续完善与演示此部分的操作,用到的时候将会继续在本篇博客中添加此部分内容。

六、Oracle数据库的闪回技术--flashback

当我们在进行数据表的修改或者删除后,并且对数据表进行了提交,那么一般情况下数据库的表示很难再回复的,但是当有了闪回技术之后,同样的问题便变得可以实现了,不得不说数据库的闪回技术是非常重要的一种操作,给了很多dba感觉人生是多么美好的瞬间!下面就数据库的闪回技术进行测试实验

1、查看数据库的闪回功能是否打开,一般情况下是没有打开的,因为会消耗多余的磁盘占用和内存资源等,下图可以看到,本人数据库的闪回功能并没有打开

2、打开flashback_on,首先将数据库关闭,然后打开到mount阶段,开启flashback

3、此时查看该视图是否打开,可以看到已经打开

4、此时,如果误将数据表t1删除,可以在回收站找到并还原(表的闪回)

并使用flashback table t1 to before drop;语句将其还原,但是如果删除时候使用drop table t1 purge,删除的同时情况回收站,那么就不能够再使用闪回命令将其还原了,就真正删除了。

同样还有ddl语句等的闪回操作,都是可以执行的,这里就不做介绍了,总之,对于从事数据库工作的同仁们,一定得小心行事,数据一旦丢失,会造成不可预知的后果,所以,在不断提升自己的同时,操作上的细致也是至关重要的,希望我们在工作学习的路上越走越远,越走越好!

ORACLE数据库数据的备份与恢复的更多相关文章

  1. oracle 数据库数据备份

    oracle 数据库数据备份 1.使用oracle用户应该就可以进行数据备份(不需要root用户):su oracle 查oracle实例名:echo $ORACLE_SID       例如查出来的 ...

  2. oracle数据库数据导入导出步骤(入门)

    oracle数据库数据导入导出步骤(入门) 说明: 1.数据库数据导入导出方法有多种,可以通过exp/imp命令导入导出,也可以用第三方工具导出,如:PLSQL 2.如果熟悉命令,建议用exp/imp ...

  3. ORACLE数据库学习之备份与恢复

     oracle数据库的备份与恢复 第一部分:数据库的备份 备份的必要性 因为各种人为或外界的因素可能会造成数据库中灾难性的数据丢失,为了保证数据库中数据的安全,必须采取备份措施保证RDBMS中包含 ...

  4. Oracle数据库数据同步方案

    一.比较原始的方案:触发器/Job/快照+dblink的方式,可实现同步和定时刷新: 二台不同的数据库服务器,从一台数据库服务器A的一个用户读取另一台数据库服务器B下某个用户的数据,可以通过dblin ...

  5. 4. Oracle数据库用户管理备份与恢复

    一. Oracle用户管理备份介绍 Oracle物理备份核心就是将物理文件拷贝一份副本:存放在磁盘上.物理文件指的是:数据文件,控制文件,日志文件,参数文件等等. 根据数据库状态而分:备份可分为热备份 ...

  6. Oracle使用——Linux系统下使用命令实现oracle数据库数据导入

    背景 在工作当中,数据库的备份及数据导入是必不可少的操作,在完全无界面的Linux操作系统中,我们应该怎样实现oracle数据库的导入呢 前提 服务器已配置ftp 模拟环境 一台linux应用服务器上 ...

  7. cmd导出oracle数据库数据

    今天弄了下oracle数据库导入导出命令exp,imp 首先这个命令是在cmd直接执行,不是sqlplus登录后再执行,见下图: 再次,注意结尾不能有分号(;): exp scott/scott@su ...

  8. SSIS获取Oracle数据库数据

    获取Oracle数据库步骤如下: 1.目标服务器获取连接Oracle数据库权限2.安装Oracle客户端,名称为win32_11gR2_client 安装管理员版本的.3.将配置文件tnsnames. ...

  9. windows计划任务+批处理文件实现oracle数据库的定时备份与恢复

    1.  备份: PS:2014-1-15 如果导出的dmp数据文件不大的话,就直接每天导出好了,不要只保存七天的数据.然后顶起通过winrar对文件进行打包,我发现dmp文件的压缩包还是很高的. 那么 ...

随机推荐

  1. Flask从入门到精通之重定向和用户会话

    最新版的hello.py 存在一个可用性问题.用户输入名字后提交表单,然后点击浏览器的刷新按钮,会看到一个莫名其妙的警告,要求在再次提交表单之前进行确认.之所以出现这种情况,是因为刷新页面时浏览器会重 ...

  2. Java对象的大小及应用类型

    基础类型数据的大小是固定的,对于非基本类型的java对象,其大小就值得商榷了.      在java中一个空Object对象的大小是8byte,这个大小只是保存堆中没有任何属性的对象的大小,看下面的语 ...

  3. C# 5.0-.Net新特性

    调用者信息特性 CallerMemberNameAttribute | CallerFilePathAttribute | CallerLineNumberAttribute .NET Framewo ...

  4. Window Screen对象

    window.screen 对象包含有关用户屏幕的信息. window.screen对象在编写时可以不使用 window 这个前缀.一些属性: screen.availWidth // 可用的屏幕宽度 ...

  5. thymeleaf的常见问题汇总

    thymeleaf的常见问题汇总 1.thymeleaf th:href 多个参数传递格式 th:href="@{/Controller/update(param1=1,param2=${p ...

  6. [转] 使用 MVC 5 的 EF6 Code First 入门 系列

    译文:http://www.cnblogs.com/Bce-/category/573301.html 原文:http://www.asp.net/mvc/overview/getting-start ...

  7. 【C#小知识】C#中一些易混淆概念总结(四)---------解析Console.WriteLine() 分类: C# 2014-02-05 17:18 1060人阅读 评论(0) 收藏

    目录: [C#小知识]C#中一些易混淆概念总结 [C#小知识]C#中一些易混淆概念总结(二) [C#小知识]C#中一些易混淆概念总结(三) ------------------------------ ...

  8. 如何VMare虚拟机里安装Mac操作系统(图文详解)

    不多说,直接上干货! 大部分用户玩的是windows,现在,跟随我来玩玩Mac. 1. VMware Workstation 11 2. unlocker 206(for OS X 插件补丁),这是V ...

  9. PHP-note

    func_get_arg - Return an item from the argument list func_get_args - Returns an array comprising a f ...

  10. 《Head First 设计模式》读后总结:基础,原则,模式

    基础 抽象 封装 多态 继承 原则 封装变化 多用组合,少用继承 针对接口编程,不针对实现编程 为交互对象之间的松耦合设计而努力 类应该对扩展开放,对修改关闭 依赖抽象,不要依赖具体类 只和朋友交谈 ...