数据库逻辑备份与恢复是怎样的

68次阅读
没有评论

共计 4370 个字符,预计需要花费 11 分钟才能阅读完成。

本篇文章为大家展示了数据库逻辑备份与恢复是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

(一)问题:

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

我们平时开发都是在自己的开发环境中进行,开发完成之后,需要将 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.  所以,  使用数据泵,要想提高速度,就要设置并行参数。

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 执行的时间,这样,就可以定时的执行数据库备份的任务任务。

上述内容就是数据库逻辑备份与恢复是怎样的,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-18发表,共计4370字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)