数据泵是Oracle最近几个版本中才引进的一项技术,其主要用来对数据库进行逻辑备份与恢复。其主要包括expdp与imppd两个实用程序。数据库传统的备份基本上都是物理备份,包括联机备份与脱机备份等等。但是数据泵在Oracle数据库中为其实现了逻辑备份。
逻辑备份简单的说,就是将数据库中的数据导出到一个转储文件中保存。逻辑备份比物理备份具有更大的灵活性。如根据需要,数据库管理员可以备份一个表空间中的数据,也可以备份一个方案对象、甚至只是某些特定表中的数据。在还原的时候,也可以针对不同的转储文件来恢复相关的数据。可见,数据泵提供的逻辑备份要比物理备份灵活的多。不过笔者今天要谈的不是数据泵逻辑备份的灵活性,而是要谈谈通过数据泵对数据库进行导入导出的几个很有用的“副作用”。在这些副作用的帮助下,数据库管理员可以节省大量的工作。
副作用一:消除磁盘碎片。
在数据库使用过程中,难免为对保存在其中的数据进行删删减减。这些操作难免会在硬盘中造成比较多的硬盘碎片。如果在这台服务器中还部署了其他的应用服务,那么碎片会更多。而这些硬盘碎片会在很大程度上影响数据库的运行性能。此时尽量消除硬盘碎片也是提高数据库性能的一个很好的方法。
在Windows等操作系统中也有碎片整理工具。但是这个操作系统提供的工具并能够有效消除数据库中的存储碎片。因为数据库中的存储碎片是由于数据块大小、存储结构、不合理的数据类型等等多个方面所造成的。而操作系统与数据库系统毕竟是两个不同的应用系统,为此通过操作系统提供的硬盘碎片处理程序往往很难消除数据库系统中的磁盘碎片。那么在数据库中该如何解决这个磁盘碎片问题呢?
在以前版本的数据库中,数据库管理员可能对此只能够干瞪眼。不过在Oracle 10G以后的数据库中,借助数据泵的作用,就可以轻松的解决这个问题。如利用数据泵实用程序,先将数据库中的数据全部导出,然后再进行恢复。在恢复的过程中,Oracle数据库系统会重新组织表的存储结构,减少表中的连接,并有效的消除磁盘碎片。从而可以在很大程度上提高数据库的性能。特别是对于那些变动性比较大的Oracke数据库,最好定时的利用数据泵工具进行导入导出的工作。这有利于其提高数据库的性能。不过在使用数据泵导入导出数据的时候,最好能够选择企业用户不用数据库的时候。虽然这个导入导出花不了多少时间(以各存储10G左右的数据库为例,大概20分钟可以完成整个导入导出工作)。但是如果在这个中间用户对数据库进行了修改,那么这个修改的数据就可能会丢失。所以在进行这项工作的时候,能够断开用户与数据库的连接是最好的。
副作用二:可以在不同的操作系统之间进行数据迁移。
有时候企业可能需要在不同的操作系统之间进行数据库的迁移。如笔者前段时间,就负责过类似的项目。企业原先是在微软的操作系统上部署Oracle数据库系统的。不过那时候企业采用的是盗版的操作系统。由于微软盗版打击力度逐渐增强,企业担心总有一天会波及到他们;同时这个服务器系统稳定性也不是很高,时不时的会跟企业用户闹点小矛盾。为此企业准备乘早向Linux操作系统转移。其首要的目标就是把现在的一些服务器部署在Linux操作系统上。所以需要把Oracle数据库从Windows操作系统向Linux操作系统转移。
要实现这个转移在以前的数据库版本中可能比较难。但是在10G等以后的数据库版本中就变得很简单了。因为数据泵备份与恢复工具可以将数据库中的数据存储在一个转储文件中。而这个转储文件是一个二进制形式的文件,不受操作系统的影响。为此在Windows操作系统平台中,利用数据泵工具把数据导出保存在转储文件(二进制文件)中。然后再在Linux操作系统上安装好Oracle数据库系统,再利用数据泵工具把存储在转储文件中的数据导入到数据库中即可。由于利用二进制文件来存储数据,为此不会因为操作系统平台而出现不能够导入的情况。这主要是因为二进制的文件中不会包含操作系统的信息。所以在不同的操作系统平台上的Oracle数据库之间可以直接导入导出数据。可见,数据泵对于在不同操作系统平台之间进行数据库迁移是非常有用的。