IT运维管理,创造商业价值!
中国IT运维网首页 | 资讯中心 | 运维管理 | 信息安全 | CIO视界 | 云计算 | 最佳案例 | 运维资源 | 专题策划 | 知识库 | 论坛

数据泵备份之外的一些“副作用”

2009年06月04日
IT专家网/Victor

     数据泵是Oracle最近几个版本中才引进的一项技术,其主要用来对数据库进行逻辑备份与恢复。其主要包括expdp与imppd两个实用程序。数据库传统的备份基本上都是物理备份,包括联机备份与脱机备份等等。但是数据泵在Oracle数据库中为其实现了逻辑备份。

  逻辑备份简单的说,就是将数据库中的数据导出到一个转储文件中保存。逻辑备份比物理备份具有更大的灵活性。如根据需要,数据库管理员可以备份一个表空间中的数据,也可以备份一个方案对象、甚至只是某些特定表中的数据。在还原的时候,也可以针对不同的转储文件来恢复相关的数据。可见,数据泵提供的逻辑备份要比物理备份灵活的多。不过笔者今天要谈的不是数据泵逻辑备份的灵活性,而是要谈谈通过数据泵对数据库进行导入导出的几个很有用的“副作用”。在这些副作用的帮助下,数据库管理员可以节省大量的工作。

  副作用一:消除磁盘碎片。

  在数据库使用过程中,难免为对保存在其中的数据进行删删减减。这些操作难免会在硬盘中造成比较多的硬盘碎片。如果在这台服务器中还部署了其他的应用服务,那么碎片会更多。而这些硬盘碎片会在很大程度上影响数据库的运行性能。此时尽量消除硬盘碎片也是提高数据库性能的一个很好的方法。

  在Windows等操作系统中也有碎片整理工具。但是这个操作系统提供的工具并能够有效消除数据库中的存储碎片。因为数据库中的存储碎片是由于数据块大小、存储结构、不合理的数据类型等等多个方面所造成的。而操作系统与数据库系统毕竟是两个不同的应用系统,为此通过操作系统提供的硬盘碎片处理程序往往很难消除数据库系统中的磁盘碎片。那么在数据库中该如何解决这个磁盘碎片问题呢?

  在以前版本的数据库中,数据库管理员可能对此只能够干瞪眼。不过在Oracle 10G以后的数据库中,借助数据泵的作用,就可以轻松的解决这个问题。如利用数据泵实用程序,先将数据库中的数据全部导出,然后再进行恢复。在恢复的过程中,Oracle数据库系统会重新组织表的存储结构,减少表中的连接,并有效的消除磁盘碎片。从而可以在很大程度上提高数据库的性能。特别是对于那些变动性比较大的Oracke数据库,最好定时的利用数据泵工具进行导入导出的工作。这有利于其提高数据库的性能。不过在使用数据泵导入导出数据的时候,最好能够选择企业用户不用数据库的时候。虽然这个导入导出花不了多少时间(以各存储10G左右的数据库为例,大概20分钟可以完成整个导入导出工作)。但是如果在这个中间用户对数据库进行了修改,那么这个修改的数据就可能会丢失。所以在进行这项工作的时候,能够断开用户与数据库的连接是最好的。

  副作用二:可以在不同的操作系统之间进行数据迁移。

  有时候企业可能需要在不同的操作系统之间进行数据库的迁移。如笔者前段时间,就负责过类似的项目。企业原先是在微软的操作系统上部署Oracle数据库系统的。不过那时候企业采用的是盗版的操作系统。由于微软盗版打击力度逐渐增强,企业担心总有一天会波及到他们;同时这个服务器系统稳定性也不是很高,时不时的会跟企业用户闹点小矛盾。为此企业准备乘早向Linux操作系统转移。其首要的目标就是把现在的一些服务器部署在Linux操作系统上。所以需要把Oracle数据库从Windows操作系统向Linux操作系统转移。

  要实现这个转移在以前的数据库版本中可能比较难。但是在10G等以后的数据库版本中就变得很简单了。因为数据泵备份与恢复工具可以将数据库中的数据存储在一个转储文件中。而这个转储文件是一个二进制形式的文件,不受操作系统的影响。为此在Windows操作系统平台中,利用数据泵工具把数据导出保存在转储文件(二进制文件)中。然后再在Linux操作系统上安装好Oracle数据库系统,再利用数据泵工具把存储在转储文件中的数据导入到数据库中即可。由于利用二进制文件来存储数据,为此不会因为操作系统平台而出现不能够导入的情况。这主要是因为二进制的文件中不会包含操作系统的信息。所以在不同的操作系统平台上的Oracle数据库之间可以直接导入导出数据。可见,数据泵对于在不同操作系统平台之间进行数据库迁移是非常有用的。

  副作用三:用来进行数据库的升级。

  笔者前段时间遇到过一个项目,要将Oracle数据库从10G升级到11G。在这个升级的过程中,数据库本身的升级难度并不是很大。主要的问题是如何将数据进行升级。因为两个不同版本的数据库系统,新版本会对旧版本的数据库系统进行一些必要的改善。即使其兼容性再好,如果直接利用联机备份或者脱机备份得到的备份文件进行恢复的话,仍然是不行的。即使其能够恢复成功,但是在恢复的过程中会提示一些警告或者出错信息。这些内容会影响到以后数据库运行的稳定性。为此在数据库进行升级的过程中,利用备份文件来进行恢复数据并不是理想的方法。

     笔者最认为最理想的方法是将数据表一张张的导入。不过由于Oracle数据库的内容比较多,这个导起来比较麻烦。笔者以前在进行数据库升级时,就写过一个脚本语句。即使在脚本语句的帮助下,也很难一步到位完成不同版本之间的数据迁移工作。而这次从10G升级到11G的时候,笔者直接采用数据泵工具,就顺利完成了数据的迁移工作。其实操作很简单。将低版本数据库中的数据利用数据泵工具全部导出保存在转储文件中,然后再利用数据泵工具将数据导入导高版本的数据库中。在导入的过程中,数据泵实用工具会对某些内容进行自动的调整,以符合新版本新特性的需要。最用的是,在数据泵工具的帮助下,可以实现一次性导出与导入,这可以让数据库管理员省下不少的心。

  另外,数据泵不仅可以帮助数据库管理员将数据库从低版本升级到高版本中。如果有需要将数据库的内容迁移到低版本中,则数据泵也可以帮助管理员完成这方面的任务。不过此时数据泵还需要其他一些辅助工具的帮助才行。

  副作用四:在不同方案之间实现数据的转移。

发表评论请到:http://bbs.cnitom.com