“G”术时刻:Oracle到GBase 8s数据迁移最佳实践指南(上)
将数据从Oracle迁移至GBase 8s,好比一次计划周详的“系统搬家”。整个过程主要分为两步:首先是“搬结构”,即在GBase 8s中原样重建表、视图等数据库对象,如同先绘制好新的“家具图纸”;接下来是更为关键的“搬数据”,即将实实在在的“数据家具”安全、无误地运送至新家。本文将聚焦这最关键的第二阶段,为您详细解析数据迁移的完整流程。
为了确保数据在迁移过程中不出错,最稳妥的办法是暂时停止一下应用程序,就像搬家时把家里的东西都打包好再运走。如果数据量特别大,又不想让应用停太久,可以请一个“同步助手”(如CDC工具)。它能帮你把迁移期间新产生的数据也实时同步过去,这样就能实现几乎不停机的“无缝迁移”。

迁移过程示意
文件格式:
把数据库从Oracle导出时,要将格式尽量调整为匹配GBase 8s的导入格式,这样可以最大程度上减小数据在转换过程中的工作量。这里以GBase 8s 的load工具格式为例,来说明一下导入时对文件格式的要求。GBase 8s的load工具是一个常用的文本导入工具,它的字段间默认分隔符是“|”管道符。由于“|”在文本中是很少出现的字符,所以也推荐在导出时使用“|”来作为分隔符。每个字段后都应由“|”来作为结束标识,换行符作为行与行之间的分隔符。每个表的数据单独存储在一个文件中。
示例:
create table customer_log ( id char(14), update_date datetime year to second, tablename varchar(20), update_count float,updated float );
表customer_log的导出/导入格式如下:
20101013114153|2010-10-13 11:41:53|2|53.0|53.0|20101013114153|2010-10-13 11:41:53|3|0.0|0.0|20101015094917|2010-10-15 09:49:17|2|15.0|15.0|20101015094917|2010-10-15 09:49:17|3|0.0|0.0|20101015094918|2010-10-15 09:49:18|4|1.0|1.0|20101015102622|2010-10-15 10:26:22|2|2.0|2.0|20101015102622|2010-10-15 10:26:22|4|0.0|0.0|20101015111103|2010-10-15 11:11:03|1|1.0|1.0|
数据导出
Oracle的数据可以通过SQLPlus的功能,导出符合GBase 8s要求的文本格式。
以下是SQLPlus导出数据时的一个示例
set colsep '|'set head off set echo offset headsep offset newp noneset long 2000000000set longchunksize 32767set linesize 32767set numw 32set pagesize 0set sqlblanklines offset trimspool onset termout offset feedback off set numw 32set verify offalter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; alter session set nls_timestamp_format='yyyy-mm-dd hh24:mi:ss.ff5'; spool c:\customer.unlselect customer_id,Birth_Date,Address||'|' from customer;spool offexit
可以编写脚本来并发执行以上操作来提升数据从Oracle导出的效率。导出的数据以GBase 8s导入要求的格式存储在c:\customer.unl中。
通过本文的介绍,我们梳理了从Oracle到GBase 8s数据迁移过程中的结构迁移策略、文件格式规范与高效导出方法。如果您希望了解本文所述方法在真实环境中的表现,欢迎延伸阅读我们的两大标杆案例:西南某高速智慧收费站迁移实战与某省移动运营商核心系统升级实录。下期“G”术时刻,我们将进一步讲解Oracle到GBase 8s的数据迁移技术中数据导出和数据校验的内容。