本篇文章来自南大通用GBase技术社区,更多精彩内容请访问 https://www.gbase.cn/community
在信息技术迅猛发展的今天,数据库迁移是一个复杂但必要的过程,它涉及到详细的规划、周密的执行和严格的测试。从达梦数据库到南大通用GBase 8s的迁移,不仅是技术平台的变更,更是企业数据战略的一次重要调整。通过这次迁移,企业将能够更好地应对大数据时代的挑战,实现数据价值的最大化。本文将深入探讨两种数据库系统之间的基础功能项及语法等差异,了解这些差异对于确保数据的完整性和迁移的顺利进行至关重要,本系列的文章将为您提供一份详尽的迁移指南。
一、表差异描述
在数据库迁移过程中,表结构的转换是核心任务之一。表差异主要体现在数据类型、自增列的实现上。以下是达梦数据库(DM)与南大通用GBase 8s在表创建和使用上的基础功能项语法差异的详细描述:
1、数据类型差异
数据类型是数据库设计的基础。GBase 8s与DM在数据类型上存在一定的差异,例如时间类型、浮点数和位字段等,正确处理这些差异是迁移的第一步。
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的详细差异。下篇文章我们来说说索引、触发器和存储过程。感谢您的阅读,对于本文内容或数据库迁移的任何问题,欢迎在评论区留言,我们的技术专家将为您提供解答。