文章目录

  • 一、备份与恢复的概念
    • 1、什么是备份
    • 2、备份的方法
    • 3、备份的策略
    • 4、什么是恢复
    • 5、恢复分类
  • 二、逻辑备份和恢复
    • 1、exp命令
    • 2、imp命令
    • 3、数据库实例导出和导入
    • 4、用户的导出和导入
    • 5、表的导出和导入
    • 6、注意事项
  • 三、应用经验
  • 四、版权声明

Oracle数据库的备份和恢复有很多种方法,是一个很大的话题,足可以写一本书,但是,本文只介绍采用exp和imp进行数据备份和恢复,这也是程序员最常用的方法。

本文涉及的备份与恢复的其它概念都是狭义的,不完整的或不完全准确的,仅供参考。

一、备份与恢复的概念

1、什么是备份

备份就是把数据库中的数据复制到存储设备的过程,存储设备包括磁盘、磁带、光盘等,随着存储技术的发展,磁带和光盘已经很少使用。

2、备份的方法

1)物理备份

对数据库操作系统的物理文件(数据文件,控制文件和日志文件)的备份。物理备份又可以分为脱机备份(冷备份)和联机备份(热备份),前者是在关闭数据库的时候进行的,后者是以归档日志的方式对运行的数据库进行备份。可以使用oracle的恢复管理器(rman)或操作系统命令进行数据库的物理备份。

2)逻辑备份

对数据库逻辑组件(如表和存储过程等数据库对象)的备份。逻辑备份的手段很多,如传统的exp,数据泵(expdp),数据库闪回技术等第三方工具,都可以进行数据库的逻辑备份。

3、备份的策略

1)完全备份

每次对数据库进行完整备份,当发生数据丢失的灾难时,完全备份无需依赖其他信息即可实现100%的数据恢复,其恢复时间最短且操作最方便。

2)增量备份

只有那些在上次完全备份或增量备份后被修改的文件才会被备份。优点是备份数据量小,需要的时间短,缺点是恢复的时候需要依赖以前备份记录,出问题的风险较大。

3)差异备份

备份那些自从上次完全备份之后被修改过的文件。从差异备份中恢复数据的时间较短,只需要最后一次完整备份和最后一次差异备份的数据,缺点是每次备份需要的时间较长。

4、什么是恢复

恢复就是发生故障后,利用已备份的数据文件或控制文件,重新建立一个完整的数据库。

5、恢复分类

1)实例恢复

当oracle实例出现失败后,oracle自动进行的恢复。

2)介质恢复

当存放数据库的介质出现故障时所作的恢复,介质恢复又分为完全恢复和不完全恢复。

完全恢复:将数据库恢复到数据库失败时的状态。这种恢复是通过装载数据库备份并应用全部的重做日志做到的。

不完全恢复:将数据库恢复到数据库失败前的某一时刻的状态。这种恢复是通过装载数据库备份并应用部分的重做日志做到的。进行不完全恢复后,必须在启动数据库时用resetlogs选项重设联机重做日志。

二、逻辑备份和恢复

Oracle逻辑备份和恢复的工具是exp(导出)和imp(导入),我根据应用场景来介绍这两个命令使用方法。

1、exp命令

在shell下输入exp -help或exp help=y获取exp命令帮助,如下:

exp -helpExport: Release 11.2.0.4.0 - Production on 星期四 2月 6 10:04:26 2020
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.通过输入 EXP 命令和您的用户名/口令, 导出
操作将提示您输入参数:例如: EXP SCOTT/TIGER或者, 您也可以通过输入跟有各种参数的 EXP 命令来控制导出
的运行方式。要指定参数, 您可以使用关键字:格式:  EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)例如: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)或 TABLES=(T1:P1,T1:P2), 如果 T1 是分区表USERID 必须是命令行中的第一个参数。关键字   说明 (默认值)         关键字      说明 (默认值)
--------------------------------------------------------------------------USERID   用户名/口令           FULL        导出整个文件 (N)
BUFFER   数据缓冲区大小        OWNER        所有者用户名列表
FILE     输出文件 (EXPDAT.DMP)  TABLES     表名列表
COMPRESS  导入到一个区 (Y)   RECORDLENGTH   IO 记录的长度
GRANTS    导出权限 (Y)          INCTYPE     增量导出类型
INDEXES   导出索引 (Y)         RECORD       跟踪增量导出 (Y)
DIRECT    直接路径 (N)         TRIGGERS     导出触发器 (Y)
LOG      屏幕输出的日志文件    STATISTICS    分析对象 (ESTIMATE)
ROWS      导出数据行 (Y)        PARFILE      参数文件名
CONSISTENT 交叉表的一致性 (N)   CONSTRAINTS  导出的约束条件 (Y)
OBJECT_CONSISTENT    只在对象导出期间设置为只读的事务处理 (N)
FEEDBACK             每 x 行显示进度 (0)
FILESIZE             每个转储文件的最大大小
FLASHBACK_SCN        用于将会话快照设置回以前状态的 SCN
FLASHBACK_TIME       用于获取最接近指定时间的 SCN 的时间
QUERY                用于导出表的子集的 select 子句
RESUMABLE            遇到与空格相关的错误时挂起 (N)
RESUMABLE_NAME       用于标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT    RESUMABLE 的等待时间
TTS_FULL_CHECK       对 TTS 执行完整或部分相关性检查
VOLSIZE              写入每个磁带卷的字节数
TABLESPACES          要导出的表空间列表
TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)
TEMPLATE             调用 iAS 模式导出的模板名

2、imp命令

在shell下输入imp -help 或 imp help=y获取imp命令帮助,如下:

imp -helpImport: Release 11.2.0.4.0 - Production on 星期四 2月 6 10:06:42 2020
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.通过输入 IMP 命令和您的用户名/口令, 导入
操作将提示您输入参数: 例如: IMP SCOTT/TIGER或者, 可以通过输入 IMP 命令和各种参数来控制导入
的运行方式。要指定参数, 您可以使用关键字: 格式:  IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)例如: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N或 TABLES=(T1:P1,T1:P2), 如果 T1 是分区表USERID 必须是命令行中的第一个参数。关键字   说明 (默认值)        关键字      说明 (默认值)
--------------------------------------------------------------------------
USERID   用户名/口令           FULL       导入整个文件 (N)
BUFFER   数据缓冲区大小        FROMUSER    所有者用户名列表
FILE     输入文件 (EXPDAT.DMP)  TOUSER     用户名列表
SHOW     只列出文件内容 (N)     TABLES      表名列表
IGNORE   忽略创建错误 (N)    RECORDLENGTH  IO 记录的长度
GRANTS   导入权限 (Y)          INCTYPE     增量导入类型
INDEXES   导入索引 (Y)         COMMIT       提交数组插入 (N)
ROWS     导入数据行 (Y)        PARFILE      参数文件名
LOG     屏幕输出的日志文件    CONSTRAINTS    导入限制 (Y)
DESTROY                覆盖表空间数据文件 (N)
INDEXFILE              将表/索引信息写入指定的文件
SKIP_UNUSABLE_INDEXES  跳过不可用索引的维护 (N)
FEEDBACK               每 x 行显示进度 (0)
TOID_NOVALIDATE        跳过指定类型 ID 的验证
FILESIZE               每个转储文件的最大大小
STATISTICS             始终导入预计算的统计信息
RESUMABLE              在遇到有关空间的错误时挂起 (N)
RESUMABLE_NAME         用来标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT      RESUMABLE 的等待时间
COMPILE                编译过程, 程序包和函数 (Y)
STREAMS_CONFIGURATION  导入流的一般元数据 (Y)
STREAMS_INSTANTIATION  导入流实例化元数据 (N)
DATA_ONLY              仅导入数据 (N)
VOLSIZE                磁带的每个文件卷上的文件的字节数下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE 导入可传输的表空间元数据 (N)
TABLESPACES 将要传输到数据库的表空间
DATAFILES 将要传输到数据库的数据文件
TTS_OWNERS 拥有可传输表空间集中数据的用户

3、数据库实例导出和导入

导出数据库实例需要DBA权限,包括Oracle系统和全部的用户、索引、存储过程、权限等。应用场景极少,不建议。

1)导出

exp scott/tiger file=/tmp/expdata.dmp full=y

2)导入

imp scott/tiger file=/tmp/expdata.dmp full=y

4、用户的导出和导入

导出/导入某用户全部的对象。普通用户只能操作本用户,DBA用户可以操作其他用户。

1)用scott/tiger登录数据库,导出scott用户,数据保存在/tmp/expscott.dmp文件中,日志保存在/tmp/expscott.log文件中。

exp scott/tiger owner=scott file=/tmp/expscott.dmp log=/tmp/expscott.log

2)用scott/tiger登录数据库,从/tmp/expscott.dmp文件中导入数据,指明是从scott用户导出的,现在要导入到scott用户中。

imp scott/tiger file=/tmp/expscott.dmp fromuser=scott touser=scott

3)用system/systempwd登录数据库(system具有DBA权限),,从/tmp/expscott.dmp文件中导入数据,指明是从scott用户导出的,现在要导入到girl用户中。

imp system/systempwd file=/tmp/expscott.dmp fromuser=scott touser=girl

5、表的导出和导入

导出/导入某用户全部的表。普通用户只能操作本用户的表,DBA用户可以操作其他用户的表。如果要导出多个表,需要把表名写在括号中,括号需要用\转义。

1)用scott/tiger登录数据库,导出EMP和DEPT表,数据保存在/tmp/empdept.dmp文件中,日志保存在/tmp/empdtpe.log文件中。

exp scott/tiger file=/tmp/empdept.dmp log=/tmp/empdept.log tables=\(EMP,DEPT\)

2)用scott/tiger登录数据库,从/tmp/empdept.dmp文件中导入数据,指明是从scott用户导出的,现在要导入到scott用户中。

imp scott/tiger file=/tmp/empdept.dmp fromuser=scott touser=scott

3)用system/systempwd登录数据库(system具有DBA权限),,从/tmp/expscott.dmp文件中导入数据,指明是从scott用户导出的,现在要导入到girl用户中。

imp system/systempwd file=empdept.dmp fromuser=scott touser=girl

6、注意事项

1)exp和imp的参数比较多,但用到的却很少,您可以多尝试。

2)exp和imp的时候,如果没有任何警告和错误,会出现成功终止导出/导入,没有出现警告

3)log参数很重要,把导出/导入的信息写在日志文件中,您可以用程序来判断导出是否成功。备份工作很重要,必须保证成功。

4)owner参数支持多个用户名的书写,要用括号,括号前加\转义。

5)tables参数支持多个表名的书写,要用括号,括号前加\转义。

6)rows参数很重要,如果rows=n,则只导出/导入表结构,不导出数据。

7)imp的ignore参数很重要,如果ignore=n,导入数据的时候,如果表已存在,就报错并且不会向表中导入数据,如果ignore=y,导入数据的时候,如果表已存在,会报错但是仍会向表中导入数据。

8)增量导出功能看上去很棒,但是可操作性很差。

9)其它的参数看看就行,了解了解。

三、应用经验

重要的业务系统一定会有非常完善的备份方案,由DBA去执行。

对程序员来说,采用exp/imp的场景主要有:

1)对一些数据量比较小的系统做备份,例如备份某数据库用户;

2)只备份数据库对象(不备份数据),缩短故障恢复的时间;

3)用于表的数据迁移;

4)程序员还可能自己编写程序来备份数据。

四、版权声明

C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。
来源:C语言技术网(www.freecplus.net)
作者:码农有道

如果文章有错别字,或者内容有错误,或其他的建议和意见,请您留言指正,非常感谢!!!

Oracle数据备份和恢复相关推荐

  1. oracle数据备份 恢复,Oracle数据备份和恢复

    Oracle数据库的备份和恢复有很多种方法,是一个很大的话题,足可以写一本书,但是,本文只介绍采用exp和imp进行数据备份和恢复,这也是程序员最常用的方法. 本文涉及的备份与恢复的其它概念都是狭义的 ...

  2. oracle导入备份失败怎么办,ORACLE 数据备份、恢复以及导入时表空间不存在的解决方案...

    一.数据备份(导出) 1.exp命令导出dmp文件(exp -help查看帮助信息) 命令:exp username/userpasswd@orcl file=G:/test.dmp log=G:/t ...

  3. ocr oracle,Oracle RAC备份和恢复OCR-Oracle

    Oracle RAC备份和恢复OCR Oracle RAC 备份和恢复OCR voting disks备份恢复参考: /database/201303/195593.html 1.OCR有两种备份方式 ...

  4. Salesforce 数据备份和恢复小知识

    数据备份的类型 在Salesforce中可以使用多种API进行数据备份,它们是: REST API SOAP API Buik API Metadata API 数据备份有三种选择: 完全备份(Ful ...

  5. Oracle 无备份情况恢复ocr和olr

    Oracle 无备份情况恢复ocr和olr Oracle 11.2 GI中OLR损坏的修复方法 一.先关闭GI,命令不再贴出来了,参见: http://blog.csdn.net/msdnchina/ ...

  6. mysql TMM_mysql使用命令导出导入数据(数据备份、恢复)

    1.使用mysql进行数据备份.恢复我们使用最多是的Navicat for MySQL客户端工具: 数据备份: DataBase(选中数据) – > Dump SQL File(转储SQL文件) ...

  7. 宝塔如何备份网站_宝塔面板教程:网站数据备份和恢复操作方法

    宝塔面板对于老站长而言操作还是比较简单的,但是对于普通用户来说,操作服务器并不简单,关注了一下宝塔面板相关问题,发现有不少用户对于宝塔面板网站数据恢复方法不会操作,别担心,小编整理了一下可以操作方法, ...

  8. python之mysql数据备份和恢复

    python之mysql数据备份和恢复 1. 数据的备份和恢复 1.1 数据备份 1.2 数据恢复 1. 数据的备份和恢复 下面的命令属于mysql特有的,不属于sql句. 1.1 数据备份 操作步骤 ...

  9. oracle数据备份与还原

    oracle数据备份与还原 备份 exp命令用于把数据从远程数据库服务器导出至本地,生成dmp文件; imp命令用于把本地的数据库dmp文件从本地导入到远程的Oracle数据库中. 1.数据库完全导出 ...

最新文章

  1. sqlalchemy.exc.InternalError: (pymysql.err.InternalError) Packet sequence number wrong - got 40 expe
  2. Curr Biol:间隔学习可巩固记忆的奥秘
  3. 2021 4th ICICT conference presentation notes!
  4. Centos7安装Python3并更改默认版本为python3(编译安装)
  5. android 成长日记 8.Fragment学习之方法回调
  6. 团队-中国象棋-最终程序
  7. linux update语句,关于Update语句的调整(5-1)
  8. 华为服务器清除系统日志,清空服务器日志
  9. 《算法导论》学习笔记——快速排序
  10. spring自定义生命周期的几种方法
  11. 具有审计表的实体框架
  12. 大数据预测分析是否对企业有影响
  13. 51Nod 1117 - 聪明的木匠(贪心)
  14. CSS 实现文字头像(圆角头像文字内容)
  15. 电子系统中的品质因数
  16. cxf框架Demo1
  17. 处理不连续单元格,如sum,sumif,countif
  18. 你知道吗?计算机界也有诺贝尔奖!
  19. 图片如何转为GIF?gif格式的图片怎么做?
  20. html5游戏需求文档,游戏PRD丨狼人杀APP产品需求文档

热门文章

  1. 改造Python中文拼音扩展库pypinyin补充自定义声母全过程
  2. Python简易验证码生成程序
  3. python的基本语法if语句_Python基础之条件控制操作示例【if语句】
  4. 如何将android连接到pc,如何将Android屏幕镜像到PC
  5. sql select 抛异常_mysql数据库及sql注入
  6. 力扣344. 反转字符串(JavaScript)
  7. C 设计语言编译生成的是中间语言IL,一、源代码-面向CLR的编译器-托管模块-(元数据IL代码)...
  8. 最新全国暴雨强度公式2019_2019-2020最新全国高中排名
  9. linux 优化 sysctl.conf,Linux内核sysctl.conf的优化设置
  10. linux之使用grep搜索文本