“G”术时刻:Oracle到GBase 8s数据迁移最佳实践指南(下)
上期“G”术时刻我们详细介绍了Oracle数据导出和文件格式的关键要点,毕竟 “把数据安全拿出来” 是第一步。本期文章聚焦核心后续:怎么把导出的数据顺畅导入GBase 8s,以及迁移之后如何“验明正身”,确保数据没差漏、可正常使用。
数据导入
1.注意事项
建立数据库时,以无日志模式建立,这样数据在导入时无需记录逻辑日志,导入效率会大幅提高。当数据导入完毕后,使用ontape命令将数据库改为需要的日志模式。
例如将某数据库日志模式改为UNBUFF:
ontape –U database_name –s –L 0 –t /dev/null
在数据量大的迁移中,可以将建立索引、约束等脚本单独提取出来,在所有数据成功导入后,再打开PDQ建立。
2.load工具
使用load工具进行导入:
load是GBase 8s最基础和最常用的文本数据导入工具,支持多表并发导入,操作简单。
示例:
load from '/opt/gbase8s/data/order.unl' insert into order;
3.外部表导入
使用GBase 8s外部表(external table)进行导入:
对于数据量大的表,传统的load导入方式会在迁移过程中占用大量的时间窗口,成为迁移效率的瓶颈。针对这个问题,对大表的导入,可以采用GBase 8s外部表的方式进行,创建External table:
语法
CREATE EXTERNAL TABLE table-name( column-name { datatype [DEFAULT default_opts] | <UDTs> } [<external-column-defn> ] [,...])USING (DATAFILES("{DISK | PIPE} : file-path" [,...] ) [, <table-option> [...] ])<external-column-defn>: EXTERNAL CHAR( size ) [ NULL 'null-string' [ NOT NULL ] ]<table-options>:FORMAT format-typeDEFAULT | DELUXE | EXPRESSESCAPE 'escape-character'DELIMITER 'field-delimiter'RECORDEND 'record-delimiter'MAXERRORS num-errorsREJECTFILE 'filename'NUMROWS num-rows
示例:
create external table orders_ext ( order_num serial, order_date date, customer_num integer,ship_instruct char(40),backlog char(1), po_num char(10),ship_date date, ship_weight decimal(8,2),ship_charge money(6,2), paid_date date ) using ( datafiles ("DISK:/opt/gbase/test/external_table/orders1.unl", "DISK:/opt/gbase/test/external_table/orders2.unl" ), format "delimited", DELIMITER "|", rejectfile "/opt/gbase/test/external_table/orders_rejfile.err", maxerrors 100 );
也可根据已有表结构建立相同结构的外部表:
create external table orders_ext SAMEAS ordersusing ( datafiles ("DISK:/opt/gbse/test/external_table/orders1.unl", "DISK:/opt/gbase/test/external_table/orders2.unl" ), format "delimited", DELIMITER "|", rejectfile "/opt/gbase/test/external_table/orders_rejfile.err", maxerrors 100 );
导入数据:
insert into orders select * from orders_ext;
外部表使用技巧:PDQ & 分片表 & Light append
打开PDQ功能,并行处理。
目的表是分片表能进行并行的insert和select。
当导入表为RAW TABLE时,利用Light append进行快速数据导入。
数据校验
对数据行数进行校验
Oracle数据库中各表的行数统计:
exec dbms_stats.gather_schema_stats (ownname=>'owner', options=>'gather auto' , estimate_percent=>dbms_stats.auto_sample_size);select table_name,num_rows from dba_tables where owner='OWNER' order by 2 desc;
GBase 8s数据库中各表的行数统计:
update statistics;select tabname,nrows from systables where tabid>99 and tabtpye='T' order by 2 desc;
通过本系列上下两篇的讲解,我们系统性地介绍了从Oracle到GBase 8s数据迁移的全流程技术方案。数据迁移不仅是技术的升级,更是对系统架构理解深度和工程实施能力的综合体现。如果您在实践过程中遇到具体问题,欢迎留言交流,我们将持续分享更多实战经验与技术解析。