探索技术融合——达梦数据库到南大通用GBase 8s的数据库迁移指南(上)

本篇文章来自南大通用GBase技术社区,更多精彩内容请访问 https://www.gbase.cn/community

在信息技术迅猛发展的今天,数据库迁移是一个复杂但必要的过程,它涉及到详细的规划、周密的执行和严格的测试。从达梦数据库到南大通用GBase 8s的迁移,不仅是技术平台的变更,更是企业数据战略的一次重要调整。通过这次迁移,企业将能够更好地应对大数据时代的挑战,实现数据价值的最大化。本文将深入探讨两种数据库系统之间的基础功能项及语法等差异,了解这些差异对于确保数据的完整性和迁移的顺利进行至关重要,本系列的文章将为您提供一份详尽的迁移指南。

一、表差异描述

在数据库迁移过程中,表结构的转换是核心任务之一。表差异主要体现在数据类型、自增列的实现上。以下是达梦数据库(DM)与南大通用GBase 8s在表创建和使用上的基础功能项语法差异的详细描述:

1、数据类型差异

数据类型是数据库设计的基础。GBase 8s与DM在数据类型上存在一定的差异,例如时间类型、浮点数和位字段等,正确处理这些差异是迁移的第一步。

DM

GBase 8s

intint
char(10)char(10)
varcharvarchar
numeric(5,2),numeric(5,2),
smallintsmallint
bigint bigint
bytebyte
binarybinary18 /binaryvar(255)
floatFloat/double precision
doubleFloat/double precision
realreal
Bit(一般是一位二进制用来表示标志位或者布尔值)Binaryvar(1)
datedate
timedatetime hour to second
timestampdatetime year to fraction(5)
interval year to monthinterval year to month
time with time zonedatetime hour to fraction(5)
texttext
imageblob
blobblob
clobclob

2、自增列的实现

自增列是一种特殊的列类型,通常用于生成唯一的序列号。DM和GBase 8s在自增列的实现上有所不同:

  • 在DM中,使用 identity关键字定义自增列,例如 c1 int identity(1,2),其中1是种子值,2是增量值。DM支持查看自增列当前值、种子值、增量值,类似8s序列的功能。
create table FUT_BGL_CKZZL(c1 int identity(1,2), c2 char);

  • 在GBase 8s中,使用 `serial` 关键字来定义自增列,例如 c1 int serial,其效果与DM中的 identity 类似。
create table FUT_BGL_CKZZL(c1 int serial, c2 char);

二、约束定义差异

约束用于确保数据库中数据的准确性和完整性。DM和GBase 8s在约束的定义和操作方式上存在差异:

1、启用、禁用约束

  • DM
ALTER TABLE FUT_YS_QYJY DISABLE CONSTRAINT T_CON_PK;

  • GBase 8s
SET CONSTRAINTS T_CON_PK DISABLED;

2、修改约束

  • DM
alter   table   FUT_YS_XG  add      constraint   con_c1  primary key(c1);

  • GBase 8s
alter   table   FUT_YS_XG  add  constraint  primary key(c1) constraint con_c1;

三、分区表操作

分区表可以提高查询性能和数据管理的灵活性。GBase 8s支持间隔分区、组合分区以及分区的增加、合并、拆分和截断等操作,这些操作在语法上与DM有所区别。

1、间隔分区

DM使用 NUMTOYMINTERVAL 函数定义时间间隔,而GBase 8s使用 NUMTOYMINTERVAL`函数并结合环境变量和SQL模式来实现类似的功能。

  • DM
reate table FUT_FQB_CJJG (ts timestamp,data varchar(20)) partition by range(ts)
interval(NUMTOYMINTERVAL(1,'month'))
(partition p0 values less than(to_date('2010-01-01','yyyy-mm-dd')));

  • GBase 8s
export GL_DATE='%iY-%m-%d'
Set environmnet sqlmode ‘oracle’;
create table FUT_FQB_CJJG (ts datetime year to fraction(5),data varchar(20)) partition by range(ts)
interval(NUMTOYMINTERVAL(1,'month'))
partition p0  values <(date('2010-01-01')) in datadbs1 ;

2、组合分区(二级分区)

DM支持使用 list和 range 以及 subpartition关键字来创建组合分区,GBase 8s也支持类似的语法,但在具体实现上可能有所区别。

  • DM
create table "SYSDBA"."T_FUT_FQB_CJZH"
(
"C1" CHAR(10),
"C2" INT,
"C3" CHAR(10)
)
partition by list("C1")
subpartition by range("C2")
subpartition template
(
subpartition   "PART_1"   values  less   than(10)   storage(on "TS1_FUT_FQB_CJZH"),
subpartition   "PART_2"   values  less   than(20)   storage(on "TS2_FUT_FQB_CJZH"),
subpartition     "PART_3"     values    less     than(MAXVALUE) storage(on "TS3_FUT_FQB_CJZH")
)
(
partition             "PART_1"             values('A')             storage(on
"TS1_FUT_FQB_CJZH"),
partition             "PART_2"             values('B')             storage(on
"TS2_FUT_FQB_CJZH"),
partition             "PART_3"             values('C')             storage(on
"TS3_FUT_FQB_CJZH")
);

  • GBase 8s
create table T_FUT_FQB_CJZH
(
C1 CHAR(10),
C2 INT,
C3 CHAR(10)
)
partition by list(C1)
subpartition by range(C2)
(
partition  PART_1    values('A')   
       (
subpartition   PART_1_1  values   less   than(10) 
       ),

partition             PART_2             values('B')   
       (
subpartition   PART_2_1  values   less   than(20) 
       ),            
                     
partition             PART_3             values('C') 
       (
subpartition     PART_3_1     values    less     than(MAXVALUE) 
       )
)
;

3、增加分区、合并分区、拆分分区、截断分区

  • DM
alter table  FUT_FQB_ZJ  add partition  p5  values less  than (maxvalue);
alter  table   FUT_FQB_CJFW   merge  partitions   p3,p4   into partition p3_4;
alter table  FUT_FQB_CJFW  split partition  p2  at('2012-4-1') into (partition p21,partition p22);
alter table FUT_FQB_JD truncate partition(p4);

  • GBase 8s
alter FRAGMENT on table  FUT_FQB_ZJ add  partition  p5 values  less  than (maxvalue);
alter FRAGMENT  on table  FUT_FQB_CJFW   merge   partitions  p3,p4   into partition p3_4;
alter FRAGMENT  on table FUT_FQB_CJFW  split  partition p2  at('2012-4-1') into (partition p21,partition p22);
ALTER FRAGMENT ON TABLE FUT_FQB_JD  TRUNCATE PARTITION p4; 

4、分区表行迁移

  • DM
create  table   FUT_FQB_HQY   (c1  int   ,   c2  varchar(10),   c3 date)partition   by   range(c3)(partition   p1  values   less   than ('2012-3-1'),partition p2 values less than ('2012-6-1'),partition p3 values less than ('2012-9-1'),partition p4 values less than (maxvalue))enable row movement;
alter table  FUT_FQB_HQY  split partition  p4  at('2012-12-1') into (partition p41,partition p42);

  • GBase 8s
create  table   FUT_FQB_HQY   (c1  int   ,   c2  varchar(10),   c3 date)partition   by   range(c3)(partition   p1  values   less   than ('2012-3-1'),partition p2 values less than ('2012-6-1'),partition p3 values less than ('2012-9-1'),partition p4 values less than (maxvalue));
alter FRAGMENT  on table FUT_FQB_HQY  split partition  p4  at('2012-12-1') into (partition p41,partition p42);

5、自动创建分区

  • DM
create table FUT_FQB_ZD
( seq   number not null,update_time   date,
constraint FUT_FQB_ZD_SEQ primary key(seq)
)
partition by range(update_time)
interval(numtoyminterval(3,'month'))
( partition FUT_FQB_ZD1 values less than('2016-01-01'));

  • GBase 8s
create table FUT_FQB_ZD
( seq   number not null,
update_time    date,
constraint FUT_FQB_ZD_SEQ primary key(seq)
)
partition by range(update_time)
interval(numtoyminterval(3,'month'))
partition FUT_FQB_ZD1 values <('2016-01-01') in datadbs1;

以上本文从表、约束、分区表操作等方面,描述了达梦数据库(DM)与南大通用GBase 8s的详细差异。下篇文章我们来说说索引、触发器和存储过程。感谢您的阅读,对于本文内容或数据库迁移的任何问题,欢迎在评论区留言,我们的技术专家将为您提供解答。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值