“G”术时刻:Oracle到GBase 8s的数据迁移技术指南(下)

47 阅读3分钟

上期“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] | } [

] [,...]

)

USING (DATAFILES("{DISK | PIPE} : file-path" [,...] )       

[, [...] ])

: EXTERNAL CHAR( size ) [ NULL 'null-string' [ NOT NULL ] ]

:

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数据迁移的全流程技术方案。数据迁移不仅是技术的升级,更是对系统架构理解深度和工程实施能力的综合体现。如果您在实践过程中遇到具体问题,欢迎留言交流,我们将持续分享更多实战经验与技术解析。