“G”术时刻:Oracle到GBase 8s数据迁移最佳实践指南(下)

发布时间:2025-11-28

上期“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-type
DEFAULT | DELUXE | EXPRESS
ESCAPE 'escape-character'
DELIMITER 'field-delimiter'
RECORDEND 'record-delimiter'
MAXERRORS num-errors
REJECTFILE '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 orders
using 
 (
      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数据迁移的全流程技术方案。数据迁移不仅是技术的升级,更是对系统架构理解深度和工程实施能力的综合体现。如果您在实践过程中遇到具体问题,欢迎留言交流,我们将持续分享更多实战经验与技术解析。