数据泵是Oracle最近几个版本中才引进的一项技术其主要用来对数据库进行逻辑备份与恢复其主要包括expdp与imppd两个实用程序数据库传统的备份基本上都是物理备份包括联机备份与脱机备份等等但是数据泵在Oracle数据库中为其实现了逻辑备份
逻辑备份简单的说就是将数据库中的数据导出到一个转储文件中保存逻辑备份比物理备份具有更大的灵活性如根据需要数据库管理员可以备份一个表空间中的数据也可以备份一个方案对象甚至只是某些特定表中的数据在还原的时候也可以针对不同的转储文件来恢复相关的数据可见数据泵提供的逻辑备份要比物理备份灵活的多不过笔者今天要谈的不是数据泵逻辑备份的灵活性而是要谈谈通过数据泵对数据库进行导入导出的几个很有用的副作用在这些副作用的帮助下数据库管理员可以节省大量的工作
副作用一消除磁盘碎片
在数据库使用过程中难免为对保存在其中的数据进行删删减减这些操作难免会在硬盘中造成比较多的硬盘碎片如果在这台服务器中还部署了其他的应用服务那么碎片会更多而这些硬盘碎片会在很大程度上影响数据库的运行性能此时尽量消除硬盘碎片也是提高数据库性能的一个很好的方法
在Windows等操作系统中也有碎片整理工具但是这个操作系统提供的工具并能够有效消除数据库中的存储碎片因为数据库中的存储碎片是由于数据块大小存储结构不合理的数据类型等等多个方面所造成的而操作系统与数据库系统毕竟是两个不同的应用系统为此通过操作系统提供的硬盘碎片处理程序往往很难消除数据库系统中的磁盘碎片那么在数据库中该如何解决这个磁盘碎片问题呢?
在以前版本的数据库中数据库管理员可能对此只能够干瞪眼不过在Oracle G以后的数据库中借助数据泵的作用就可以轻松的解决这个问题如利用数据泵实用程序先将数据库中的数据全部导出然后再进行恢复在恢复的过程中Oracle数据库系统会重新组织表的存储结构减少表中的连接并有效的消除磁盘碎片从而可以在很大程度上提高数据库的性能特别是对于那些变动性比较大的Oracke数据库最好定时的利用数据泵工具进行导入导出的工作这有利于其提高数据库的性能不过在使用数据泵导入导出数据的时候最好能够选择企业用户不用数据库的时候虽然这个导入导出花不了多少时间(以各存储G左右的数据库为例大概分钟可以完成整个导入导出工作)但是如果在这个中间用户对数据库进行了修改那么这个修改的数据就可能会丢失所以在进行这项工作的时候能够断开用户与数据库的连接是最好的
副作用二可以在不同的操作系统之间进行数据迁移
有时候企业可能需要在不同的操作系统之间进行数据库的迁移如笔者前段时间就负责过类似的项目企业原先是在微软的操作系统上部署Oracle数据库系统的不过那时候企业采用的是盗版的操作系统由于微软盗版打击力度逐渐增强企业担心总有一天会波及到他们;同时这个服务器系统稳定性也不是很高时不时的会跟企业用户闹点小矛盾为此企业准备乘早向Linux操作系统转移其首要的目标就是把现在的一些服务器部署在Linux操作系统上所以需要把Oracle数据库从Windows操作系统向Linux操作系统转移
要实现这个转移在以前的数据库版本中可能比较难但是在G等以后的数据库版本中就变得很简单了因为数据泵备份与恢复工具可以将数据库中的数据存储在一个转储文件中而这个转储文件是一个二进制形式的文件不受操作系统的影响为此在Windows操作系统平台中利用数据泵工具把数据导出保存在转储文件(二进制文件)中然后再在Linux操作系统上安装好Oracle数据库系统再利用数据泵工具把存储在转储文件中的数据导入到数据库中即可由于利用二进制文件来存储数据为此不会因为操作系统平台而出现不能够导入的情况这主要是因为二进制的文件中不会包含操作系统的信息所以在不同的操作系统平台上的Oracle数据库之间可以直接导入导出数据可见数据泵对于在不同操作系统平台之间进行数据库迁移是非常有用的
副作用三用来进行数据库的升级
笔者前段时间遇到过一个项目要将Oracle数据库从G升级到G在这个升级的过程中数据库本身的升级难度并不是很大主要的问题是如何将数据进行升级因为两个不同版本的数据库系统新版本会对旧版本的数据库系统进行一些必要的改善即使其兼容性再好如果直接利用联机备份或者脱机备份得到的备份文件进行恢复的话仍然是不行的即使其能够恢复成功但是在恢复的过程中会提示一些警告或者出错信息这些内容会影响到以后数据库运行的稳定性为此在数据库进行升级的过程中利用备份文件来进行恢复数据并不是理想的方法
笔者最认为最理想的方法是将数据表一张张的导入不过由于Oracle数据库的内容比较多这个导起来比较麻烦笔者以前在进行数据库升级时就写过一个脚本语句即使在脚本语句的帮助下也很难一步到位完成不同版本之间的数据迁移工作而这次从G升级到G的时候笔者直接采用数据泵工具就顺利完成了数据的迁移工作其实操作很简单将低版本数据库中的数据利用数据泵工具全部导出保存在转储文件中然后再利用数据泵工具将数据导入导高版本的数据库中在导入的过程中数据泵实用工具会对某些内容进行自动的调整以符合新版本新特性的需要最用的是在数据泵工具的帮助下可以实现一次性导出与导入这可以让数据库管理员省下不少的心
另外数据泵不仅可以帮助数据库管理员将数据库从低版本升级到高版本中如果有需要将数据库的内容迁移到低版本中则数据泵也可以帮助管理员完成这方面的任务不过此时数据泵还需要其他一些辅助工具的帮助才行
副作用四在不同方案之间实现数据的转移
有时候数据库管理员可能需要在不同的方案之间实现数据的转移如在数据库中有两个方案A与B其中方案A是企业正在使用的方案;而方案B是一个测试方案有时候设计开发了一个新功能需要在方案B下先进行测试不过为了保证测试方案的准确性需要把方案B中的数据保持最新即跟方案A中的数据进行同步此时数据库管理员就需要把方案A中的数据转移到方案B中
此时数据库管理员可以利用数据泵实用工具将方案A中的数据导出到转储文件中然后再将这个转储文件中的内容通过数据泵实用工具导入导方案B中从而完成在不同的数据库对象之间进行数据迁移的任务此时数据恢复(其实准确的说应该是数据导入而不是数据恢复)不会因为方案名不同而拒绝恢复
可见在数据泵工具的帮助下在不同方案对象之间进行数据的迁移变得非常的简单所以数据库管理员以后在进行测试的时候要保持测试方案对象与被测试对象的数据同步不再是难事
总之数据泵实用工具是Oracle G G两个数据库版中很实用的一个管理工具之一其不仅可以用来完成传统的数据备份需要而且其衍生出来的那些副作用还可以帮助我们管理员做好日常的维护工作从某种方面来说这些副作用可能比其本身数据备份功能还要来的重要对我们管理员更加有吸引力充分利用这些副作用可以大幅度的减少我们数据库日常维护的工作量