DB基本概念之 --- 数据库备份与恢复(实际项目运用)

原创 2013年12月01日 21:42:37


(一)问题:

初次接触数据库备份与恢复,目前是应用在这样一个场景:

我们平时开发都是在自己的开发环境中进行,开发完成之后,需要将oracle数据库(安装在Linux服务器上)转到位客户部署的服务器(也是Linux)之上。

所以就需要将开发环境中的数据库备份出来,然后恢复到新的服务器机器上。


(二)解决方案:使用expdp/impdp数据泵

按照以下步骤进行:

(1)备份表空间创建脚本:

将要备份的数据库的所有表空间的创建语句拷贝出来,待会要用来在新数据库上创建对应的表空间;

(2)在自己的windows机器上利用expdp命令按照用户导出数据库:

expdp system/password@172.16.1.61/baseinfo dumpfile=user1.dmp directory=backup schemas=user1
以管理员system的身份登录,导出用户服务器172.16.1.61上的数据库baseinfo实例下的user1用户所属的数据库,dmp文件放在远端服务器172.16.1.61的oradata目录下(注意,这个目录是相对于Oracle的工作目录而言的,如果导出出现“无效操作,不能操作日志文件”的错误,那就换一个导出目录把,或者不要directory这项了)。

(3)dmp文件传输:

利用PenguiNet等windows连接linux的软件将服务器上导出的dmp文件拷贝到windows上来,在将这个dmp文件上传到目标linux服务器(新数据库),也可以直接用scp命令在源Linux和目标Linux上互传这个dmp文件。

注意:如果是覆盖已经存在的数据库,即你要导入的目标数据库已经存在了user1这个用户,那么(4)(5)两步跳过,直接到第(6)步。

(4)创建存放表空间的目录:

PenguiNet连接到目标Linux服务器,创建一个新的目录来存放新数据库的表空间:

mkdir -p /oradata/newDataBase
chown -R oracle:oogroup /oradata/newDataBase
创建一个目录,然后将这个目录的所有权赋给oogroup组的oracle用户,因为是oracle用户下创建的数据库实例,所以需要给它读写这个目录的权限。

(5)创建表空间:

使用Toad连接到目标Linux服务器(System用户登录),将第一步中备份的创建表空间的脚本拷进去,修改表空间文件的路径为上一步创建的目录路径,然后执行,创建好数据库需要的所有表空间;

(6)在自己的windows机器上使用impdp命令导入数据导入到目标Linux服务器指定实例下:

注意:在导入之前最好先执行drop user userName cascade删除即将要导入的用户,然后再执行下面的导入命令。

另外顺便提一句,如果你是要导入多个用户,可以删除一个,导一个,因为它们之间可能会有以来,如果全部删除了再一个个导入,那么可能会出现错误。

但是最好的办法是全部所有用户一起导出,然后一起导入,用户名之间用逗号分隔。

impdp system/password@192.168.9.226/baseinfo dumpfile=user1.dmp schemas=user1

注意:用Penguinet的SCP方式连接,导航到user1.dmp文件所在的目录,那么直接执行上面的imp命令就可以找到这个dmp文件。

如果出现错误,一般是因为没有找到dmp文件,你可以看看错误提示,它是在哪儿去找dmp文件,那么你就把dmp文件放到哪儿。


至此数据库导出,导入工作结束,你在新机器上已经拥有了一个同样的数据库,接下来用Toad测试一下,用user1用户登录。


(三)与exp/imp的区别:

1、Oracle 的导出导入是一个很常用的迁移工具。 Oracle 10g中,Oracle 推出了数据泵(expdp/impdp). 它可以通过使用并行,从而在效率上要比exp/imp 要高。

2、expdp/impdp调用Server端的API在执行操作,是数据库内部的job任务。可以远程使用,但是生成的dump 文件存在于服务器上的directory里。

3、据泵与exp/imp 来说性能有很大的提高, 其中影响最大的就是paralle 可以这么来看:  expdp/impdp=exp/imp+direct moe + paralle. 所以, 使用数据泵,要想提高速度,就要设置并行参数。


(四)下面附上两篇转来的文章,分别是关于exp/imp 和 expdp/impdp的:

================================ 转自http://express.ruanko.com/ruanko-express_23/technologyexchange8.html =====================

Oracle数据库逻辑备份和恢复——用exp和imp命令来实现

作者:陈海彬

EXP和IMP是Oracle提供的一种逻辑备份工具。逻辑备份创建数据库对象的逻辑拷贝并存入一个二进制转储文件。这种逻辑备份需要在数据库启动的情况下使用, 其导出实质就是读取一个数据库记录集(甚至可以包括数据字典)并将这个记录集写入一个文件,这些记录的导出与其物理位置无关,导入实质就是读取转储文件并执行其中的命令。此备份方式是通过Oracle的实用工具export和import来实施的, export是把数据库中的数据导出,import是把export卸出的数据导入数据库中。通过此工具可以衍生出多种功能, 比如整个数据库的备份、表结构重建、数据的传输、用户的改变等等。

Oracle Export/Import工具提供了灵活多样的功能和导出/导入模式,最常使用的三种模式是User、table和full database。除此以外,还可以在导出/导入时决定是否包含与对象有关的数据字典信息,如索引、约束、权限等等。

注意:通过逻辑备份可以备份整个数据库, 或仅备份部分重要数据。因为是逻辑上的备份,故只能用于逻辑的恢复数据, 一旦数据库被物理损坏, 导致不能启动,逻辑备份的数据不能帮助恢复数据库。

首先介绍下 Export/Import的命令用法:

(一)将一个用户的对象导入到另一个用户模式中

把数据库中原有的用户Export至一个dmp文件(如把用户olduser的对象导出到文件*****.dmp中):

命令: exp sys/password file=******.dmp owner=olduser grant=N
      indexes=Y rows=Y 

从dmp文件中把一个用户的对象import至一个用户的模式中(从******.dmp中,把用户user的对象导入到用户newuser中):

命令:imp sys/password file=******,dmp fromuser=olduser
     touser=newuser indexes=Y rows=Y 

导入时避免出现ORA-00942(表或是图不存在)错误

因为,导出是按照在数据库中对象建立的顺序进行的,从而在导入时,数据库对象之间的依赖性会引起某些先导入对象找不到其依赖对象(如view、procedure等等),就会引起ORA-00942(表或是图不存在)错误。通常解决这种问题的方法是,做两次导入工作,第一遍导入时设置如下:

命令: imp sys/password file=******.dmp full=Y commit=y rows=Y 

导入时如果出现错误,就修改设置:rows=n,ignore=n:

命令: imp sys/password file=******.dmp full=Y rows=N
      commit=Y ignore=N 

(二)做无增量的全数据库备份及恢复的例子

全数据库Export至dmp文件(如******.dmp):

命令: exp sys/password file=******.dmp Full=y -- rows确省为Y 

把整个数据库备份的******.dmp文件至数据库中:

命令: imp sys/password file=******.dmp ignore=y full=y-- rows确省为Y 

注意:导入/导出是最彻底的减少磁盘碎片的方法。

其次介绍下数据库备份策略:

(三)做全数据库增量备份和恢复的方法:

全数据库Export至dmp文件(如******.dmp)

命令: exp sys/manager file= ******.dmp Full=y inctype=complete 

第一天增量备份Export至dmp文件(如第一天1.dmp):

命令: exp sys/manager file= 第一天1.dmp inctype=incremental 

第二天增量备份Export至dmp文件(如第二天2.dmp):

命令: exp sys/manager file= 第二天2.dmp inctype=incremental 

第三天增量备份Export至dmp文件(如第三天3.dmp):

命令: exp sys/manager file= 第三天3.dmp inctype=incremental 

现假设Oracle数据库在第三天被破坏了重新建一个Oracle数据库,先把最后的一个dmp文件imp至数据库中:

命令: imp sys/manager file= 第三天3.dmp full=y ignore=y inctype=system 

把整个数据库备份的dmp文件imp至数据库中:

命令: imp sys/manager file= ******.dmp ignore=y full=y
      inctype=restore 

把第一天增量备份的dmp文件imp至数据库中:

命令: imp sys/manager file= 第一天1.dmp ignore=y full=y inctype=restore

把第二天增量备份的dmp文件imp至数据库中:

命令: imp sys/manager file= 第二天2.dmp ignore=y full=y inctype=restore 

把第三天增量备份的dmp文件imp至数据库中

命令: imp sys/manager file= 第三天3.dmp ignore=y full=y inctype=restore 

(四)利用windows任务计划定时备份数据库:

把上面各个命令写成各个bat脚本, 然后添加备份的定时器,具体的配置步骤如下:

我的环境是windowxp操作系统,在附件选择系统工具,选择任务计划,然后点击“添加任务计划”,一步一步的按照提示往下走,定制的每个bat执行的时间,这样,就可以定时的执行数据库备份的任务任务。


========================= 转自 http://zh.wikibooks.org/zh-cn/Expdp@impdp%E7%94%A8%E6%B3%95==========================

Expdp@impdp用法

维基教科书,自由的教学读本

一、创建导出数据存放目录

如:mkdir /u01/dump

二、创建directory逻辑目录

CREATE OR REPLACE DIRECTORY DATA_DUMP_DIR AS '/u01/dump';

三、导出数据

1)按用户导

expdp mctpsa/mctpsa@ipap schemas=mctpsa dumpfile=expdp.dmp DIRECTORY=DATA_DUMP_DIR;

2)并行进程parallel

expdp mctpsa/mctpsa@ipap directory=DATA_DUMP_DIR dumpfile=mctpsa3.dmp parallel=40 job_name=mctpsa3

3)按表名导

expdp mctpsa/mctpsa@ipap TABLES=sa_user,sa_dept dumpfile=expdp.dmp DIRECTORY=DATA_DUMP_DIR;

4)按查询条件导

expdp mctpsa/mctpsa@ipap directory=DATA_DUMP_DIR dumpfile=expdp.dmp Tables=sa_user query='WHERE id=20';

5)按表空间导

expdp system/manager DIRECTORY=DATA_DUMP_DIR DUMPFILE=tablespace.dmp TABLESPACES=mctp,mctpsa;

6)导整个数据库

expdp system/manager DIRECTORY=DATA_DUMP_DIR DUMPFILE=full.dmp FULL=y;


四、还原数据

1)导到指定用户下

impdp mctpsa/mctpsa DIRECTORY=DATA_DUMP_DIR DUMPFILE=expdp.dmp SCHEMAS=mctpsa;

2)改变表的owner

impdp system/manager DIRECTORY=DATA_DUMP_DIR DUMPFILE=expdp.dmp TABLES=mctpsa.dept REMAP_SCHEMA=mctpsa:system;

3)导入表空间

impdp system/manager DIRECTORY=DATA_DUMP_DIR DUMPFILE=tablespace.dmp TABLESPACES=example;

4)导入数据库

impdp system/manager DIRECTORY=DATA_DUMP_DIR DUMPFILE=full.dmp FULL=y;

5)追加数据

impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION=append;


只是接触皮毛,有待进一步学习,持续更新。。。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

DB2数据库备份恢复

DB2数据库恢复: 一次意外的存储故障,导致表空间损坏。然而最近一次成功的完全备份是在8天前,最近8天内只有归档日志的备份。查看表空间状态:有两个表空间无法回滚。db2 list tablespac...
  • starym
  • starym
  • 2015年09月23日 14:55
  • 276

20120801DB2数据库备份与恢复

http://db365.net/home.php?mod=space&uid=19鉴于CSDN无故删除博文,本博客不再更新,暂时迁至http://www.db365.net 商业智能群19...

db2_数据库备份与恢复

  • 2012年11月28日 11:57
  • 419KB
  • 下载

DB2数据库备份与恢复

  • 2013年03月19日 22:04
  • 472KB
  • 下载

DB2基本概念 —— 实例、数据库、表空间、容器

DB2支持以下两种类型的表空间:     1、 系统管理存储器表空间(SMS-SYSTEM   MANAGED   STORAGE)     2、 数据库管理存储器表空间(DMS-DATABA...

db2数据库备份和恢复

  • 2013年09月12日 15:00
  • 21KB
  • 下载

DB2数据库备份与恢复

  • 2014年04月27日 15:57
  • 912KB
  • 下载

DB2基本概念 —— 实例、数据库、表空间、容器

DB2 基本概念   在DB2中由上至下的几个概念:   实例(Instance),   数据库(Database),   表空间(TableSpace),   容器(Container)   在一个...

db2数据库备份与恢复

  • 2010年05月22日 21:56
  • 27KB
  • 下载

DB2基本概念 —— 实例、数据库、表空间、容器

DB2 基本概念    在DB2中由上至下的几个概念:    实例(Instance),    数据库(Database),    表空间(TableSpace),    容器(Contai...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DB基本概念之 --- 数据库备份与恢复(实际项目运用)
举报原因:
原因补充:

(最多只允许输入30个字)