准备将所有Oracle数据库的管理(如空间, 会话)及运行(Statspack或AWR)信息, 或业务统计数据, 集中收集到MySQL数据库(称为管理库或ToolDB)上去进行管理, 预测和分析, 就需要写很多的数据收集程序, 在Oracle数据库主机上用SQL查询各种数据, 然后插入到管理库中. 用Shell和SQLULDR2来写已经够简单了, 但是随着数据库的增多, 收集信息的增加, 就感觉到了脚本维护上不够方便了, 在任务调度器(crontab)中, 不同版本的数据库, 会出现不同的定时任务设置, 在做切换或维护操作时, 就会容易出现遗漏情况.

    要用一个脚本来实现这些数据信息任务, 最基础的是需要一个能在不同结构的数据库之间拷贝数据, 一个源数据库, 一个目标数据库, 指定源数据库上的一个查询, 可以执行并将将查询出来的数据插入到目标数据库中. Perl语言很适合用来完成这个任务, 因此就用它写了一个copydata脚本, 可以允许我们在异构数据库之间拷贝数据.

SQL> select count(*) from database_perf_statistics;

  COUNT(*)
----------
      7596

    Perl性能并不差, 用它来复制七八千条记录的一个有32个列的表, 1秒钟内也就完成了, 迁移大数据量或许不行, 但用来迁移少量数据绝对足够用了.

05/09 22:19:08 - Copy data started, 1 tables in configuration file.
05/09 22:19:08 - Start copy table DATABASE_PERF_STATISTICS to AAA ...
05/09 22:19:09 - End copy table DATABASE_PERF_STATISTICS to AAA

    回过头来看看, copydata + oramon + WebChart就可以打造一个良好的DBA基础工作平台.