一、数据库迁移概述
在当今快速发展的信息技术领域,数据库迁移已成为企业数字化转型的关键步骤。从DB2到GBase 8s的迁移不仅涉及数据的转移,更关乎架构、应用乃至整个业务流程的重塑。本文将深入探讨这两种数据库的异同,为读者提供一份详尽的迁移指南。
二、架构对比:从实例到表(Instance)
实例
DB2与GBase 8s在实例概念上有所不同。在DB2中,实例是一组进程和共享内存的集合,而GBase 8s的实例包括共享内存、进程和存储。两者的逻辑结构相似,均遵循实例→数据库→表空间→表的层级。
存储模型
GBase 8s的存储模型为表空间→chunk→extent→page,而DB2则为表空间→容器→extent→page。DB2中的容器可以是目录、文件或裸设备,映射到物理存储,且每个容器仅属于一个表空间。
获取数据库实例信息
安装目录:
DB2确认本机安装数据库的版本信息及安装目录,命令是db2ls;
GBase8s 是通过环境变量echo $GBASEDBTDIR来确认安装目录
版本:
查询当前使用的是哪个版本:命令是db2level;
gbase8s查版本命令是:onstat -V
实例名称:
DB2的实例名是用户名,列出所有实例名:db2ilist; 显示当前实例:db2 get instance
GBase 8s 显示实例是通过环境变量:echo $GBASEDBTSERVER
监听端口:
DB2查看监听端口:db2 get dbm cfg |grep -i SVCENAME
GBase8s是查看监听端口:onstat -g ntt
获取数据相关的信息
显示数据库名称:
DB2显示数据库名称:db2 list db directory
GBase8s 显示数据库名称可以通过:dbaccess 进入菜单模式可以查看
连接数据库:
DB2连接数据库:db2 connect to DB_NAME
GBase8s连接数据库: dbaccess DB_NAME -
三、变量与参数:配置文件(Config File)
GBase 8s的配置文件onconfig是实例级别的配置文件。
查看配置命令:onstat -c
环境变量:env|grep -i gbase
而DB2的参数配置分为两个级别,一个是实例级别,另一个是数据库级别,对数据服务性能影响较大的参数主要在数据库级别配置。
查看实例级配置参数:db2 get dbm cfg
查看数据库级配置参数:db2 get db cfg for $DB_NAME
注册参数:db2set -all
四、存储限制:容量与性能(Storage)
GBase 8s在存储方面提供了一些具体的限制,例如一页包含的数据行数最多为255,一个表或分片的最大行数可达4,277,659,295行。此外,GBase 8s支持的单个SQL语句的最大长度为2GB,一个Instance最大支持的database数为21,000,000,具体如下:
GBase 8s存储相关限制 | 最大值 |
一页包含的数据行数 | 255 |
一个表或者分片最大的行数 | 4,277,659,295 |
一个表或者分片最大的数据页数 | 16,775,134 |
一个表或者分片最大占用的空间大小 (除BLOB,CLOB,BYTE,TEXT以外) | 33,818,671,136 Byte |
一行记录的最大rowsize | 32,767 |
表最大支持的字段数 | 32,767 |
一个复合索引支持最多的列数 | 16 |
单个SQL语句的最大长度 | 2G |
一个Instance最大支持的database数 | 21,000,000 |
一个Instance最大支持的tables数 | 477,102,080 |
一个Instance最大支持的活动用户数active users | 32,767 |
一个session最大同时访问的database数 | 8 |
最大的页清理进程page-cleaner | 128 |
一个dbspace上最大支持的partition数 | 2K pagesize 1048445 4K pagesize 1048314 |
一个用户同时可以使用Lock Table锁住的表的个数 | 32 |
一个dbspace的最大空间 | |
一个chunk的最大空间 | 2K pagesize 4T 4K pagesize 8s |
一个Instance最多支持的chunks数 | 32,767 |
一个chunk最大存储的数据页数pages | 2,000,000,000 |
一个Instance最大支持的dbspace数 | 2047 |
一个Instance最大支持的存储空间 | 8 PB |
GBase 8s与DB2在存储方面的概念对应关系如下如下表。
| GBase 8s | DB2 |
1 | 数据空间(dbspace) | 表空间(tablespace) |
2 | 块(Chunk) | 容器(container) |
3 | 表空间(table space) | |
4 | 区间(extent) | 扩展数据块(extent) |
5 | 页(page) | 页(page) |
显示数据库表空间信息命令区别,db2pd 和onstat 命令非常像,都是从内存读数据。
DB2显示表空间信息: db2pd -db DB_NAME -tablespaces
GBase8s显示表空间信息:onstat -d
五、锁与隔离级别:数据一致性的保障
锁(Locks)
GBase 8s默认采用页级锁,而DB2默认为行级锁。GBase 8s的锁结构存储在共享内存中,而不是dbspace中这为并发控制提供了不同的策略。
DB2显示锁信息:db2pd -db DB_NAME -lock
GBase8s信息锁信息:onstat -k
隔离级别(Isolation)
GBase 8s提供多种隔离级别,包括脏读隔离、提交读隔离、游标稳定性隔离和可重复读隔离。每种隔离级别都对应着DB2中的类似级别,为处理数据并发性问题提供了不同的机制。对应关系请参考下表。
GBase 8s | DB2 | ANSI |
DIRTY READ | Uncommitted Read | read uncommitted |
COMMITTED READ默认 | Read Stability | read committed |
REPEATABLE READ | Repeatable Read | serializable |
CURSOR STABILITY | CURSOR STABILITY默认 | |
LAST COMMITTED READ |
六、标识符与关键
数据库对象的命名规则在两种数据库中也有所不同。DB2支持的标识符包括字符、数字以及特定符号,DB2最大表名长度128个字节,可以包括字符、数字、“_”、“$”、“#”。
而GBase 8s在命名上更为严格,不支持某些符号,且对表名长度有特定要求。最大表名长度128个字节,但不支持“#”,“$”也不可以是表名的第一个字符,不符合GBase 8s命名规则的标识符,需要在移植时用正确的名称替换。文章最后,附上GBase 8s的ANSI保留字列表,供技术读者参考。
通过以上对比,我们可以看到,尽管DB2与GBase 8s在许多方面有着高度的相似性,但在架构设计、存储管理、并发控制等方面,两者各有千秋。对于计划进行数据库迁移的使用者来说,理解这些差异是成功迁移的关键。
后续文章会以数据库架构迁移(Schema/DDL)、数据迁移(Data)和应用迁移(Application) 三个步骤为主线,介绍GBase 8s不同于DB2的技术特点,以及在迁移过程中的这两个数据库差异的转换方法与技巧。
注:红色字体的同时也是DB2的保留字
A | ||
ABSOLUTE | ALLOCATE | ATTACH |
ACCESS | ALTER | AUDIT |
ACCESS_METHOD | AND | AUTHORIZATION |
ADD | ANSI | AUTO |
AFTER | ANY | AUTOFREE |
AGGREGATE | APPEND | AVG |
ALLIGNMENT | AS | AVOID_EXECUTE |
ALL | ASC | AVOID_SUBQF |
ALL_ROWS | AT | |
B | ||
BEFORE | BOOLEAN | BY |
BEGIN | BOTH | BYTE |
BETWEEN | BUFFERED | |
BINARY | BUILTIN | |
C | ||
CACHE | CLOSE | CONNECTION |
CALL | CLUSTER | CONST |
CANNOTHASH | CLUSTERSIZE | CONSTRAINT |
CARDINALITY | COARSE | CONSTRAINTS |
CASCADE | COBOL | CONSTRUCTOR |
CASE | CODESET | CONTINUE |
CAST | COLLATION | COPY |
CHAR | COLLECTION | COSTFUNC |
CHAR_LENGTH | COLUMN | COUNT |
CHARACTER | COMMIT | CRCOLS |
CHARACTER_LENGTH | COMMITTED | CREATE |
CHECK | COMMUTATOR | CURRENT |
CLASS | CONCURRENT | CURSOR |
CLIENT | CONNECT | CYCLE |
D | ||
DATABASE | DECLARE | DIAGNOSTICS |
DATAFILES | DECODE | DIRTY |
DATASKIP | DEFAULT | DISABLED |
DATE | DEFERRED | DISCONNECT |
DATETIME | DEFERRED_PREPARE | DISTINCT |
DAY | DEFINE | DISTRIBUTEBINARY |
DBA | DELAY | DISTRIBUTEREFERENCES |
DBDATE | DELETE | DISTRIBUTIONS |
DBMONEY | DELIMITER | DOCUMENT |
DBPASSWORD | DELUXE | DOMAIN |
DEALLOCATE | DEREF | DONOTDISTRIBUTE |
DEBUG | DESC | DORMANT |
DEC | DESCRIBE | DOUBLE |
DEC_T | DESCRIPTON | DROP |
DECIMAL | DETACH | DTIME_T |
E | ||
EACH | ESCAPE | EXPLAIN |
ELIF | EXCEPTION | EXPLICIT |
ELSE | EXCLUSIVE | EXPRESS |
ENABLE | EXEC | EXPRESSION |
END | EXECUTE | EXTEND |
ENUM | EXECUTEANYWHERE | EXTENT |
ENVIRONMENT | EXISTS | EXTERNEXTERNAL |
ERROR | EXIT | |
F | ||
FAR | FIXED | FOUND |
FETCH | FLOAT | FRACTION |
FILE | FLUSH | FRAGMENT |
FILLFACTOR | FOR | FREE |
FILTERING | FOREACH | FROM |
FIRST | FOREIGN | FUNCTION |
FIRST_ROWS | FORMAT | |
FIXCHAR | FORTRAN | |
G-H | ||
GENERAL | GOTO | HAVING |
GET | GRANT | HIGH |
GK | GROUP | HOLD |
GLOBAL | HANDLESNULLS | HOUR |
GO | HASH | HYBRID |
I | ||
IF | INDICATOR | INTERNAL |
ifx_int8_t | INFORMIX | INTERNALLENGTH |
ifx_lo_create_spec_t | INIT | INTERVAL |
ifx_lo_stat_t | INNER | INTO |
IMMEDIATE | INSERT | intervl_t |
IMPLICIT | INSTEAD | IS |
IN | INT | ISCANNONICAL |
INCREMENT | INT8 | ISOLATION |
INDEX | INTEG | ITEM |
INDEXES | INTEGER | ITERATOR |
J-K | ||
join | keep | key |
L | ||
LABELEQ | LAST | LOCALLOCATOR |
LABELGE | LEADING | LOCK |
LABELGLB | LEFT | LOCKS |
LABELGT | LET | LOG |
LABELLE | LEVEL | LONG |
LABELLT | LIKE | LOW |
LABELUB | LIST | LOWER |
LABELTOSTRING | LISTING | LVARCHAR |
LANGUAGE | LOC_T | |
M | ||
MATCHES | MEDIUM | MODERATE |
MAX | MEMORY_RESIDENT | MODIFY |
MAXERRORS | MIDDLE | MODULE |
MAXLEN | MIN | MONEY |
MAXVALUE | MINUTE | MONTH |
MDY | MINVALUE | MOUNTING |
MEDIAN | MODE | MULTISET |
N | ||
NAME | NOCYCLE | NORMAL |
NCHAR | NOMAXVALUE | NOT |
NEGATOR | NOMIGRATE | NOTEMPLATEARG |
NEW | NOMINVALUE | NULL |
NEXT | NON_RESIDENT | NUMERIC |
NO | NONE | NVARCHAR |
NOCACHE | NOORDER | NVL |
O | ||
OCTET_LENGTH | OPAQUE | OPTION |
OF | OPCLASS | OR |
OFF | OPEN | ORDER |
OLD | OPERATIONAL | OUT |
ON | OPTICAL | OUTER |
ONLY | OPTIMIZATION | |
P | ||
PAGE | PLI | PRIVATE |
PARALLELIZABLE | PLOAD | PRIVILEGES |
PARAMETER | PRECISION | PROCEDURE |
PASCAL | PREPARE | PUBLIC |
PASSEDBYVALUE | PREVIOUS | PUT |
PDQPRIORITY | PRIMARY | |
PERCALL_COST | PRIOR | |
R | ||
RAISE | REMAINDER | RETURNS |
RANGE | RENAME | REUSE |
RAW | REOPTIMIZATION | REVOKE |
READ | REPEATABLE | ROBIN |
REAL | REPLICATION | ROLE |
RECORDEND | RESERVE | ROLLBACK |
REF | RESOLUTION | ROLLFORWARD |
REFERENCES | RESOURCE | ROUND |
REFERENCING | RESTART | ROUTINE |
REGISTER | RESTRICT | ROW |
REJECTFILE | RESUME | ROWID |
RELATIVE | RETAIN | ROWIDS |
RELEASE | RETURN | ROWS |
RETURNING | ||
S | ||
SAMEAS | SHARE | START |
SAMPLES | SHORT | STATIC |
SCHEDULE | SIGNED | STATISTICS |
SCHEMA | SIZE | STDEV |
SCRATCH | SKALL | STEP |
SCROLL | SKINHIBIT | STOP |
SECOND | SKSHOW | STORAGE |
SECONDARY | SMALLFLOAT | STRATEGIES |
SECTION | SMALLINT | STRING |
SELCONST | SOME | STRINGTOLABEL |
SELECT | SPECIFIC | STRUCT |
SELFUNC | SQL | STYLE |
SEQUENCE | SQLCODE | SUBSTR |
SERIAL | SQLCONTEXT | SUBSTRING |
SERIAL8 | SQLERROR | SUM |
SERIALIZABLE | SQLWARNING | SUPPORT |
SERVERUUID | STABILITY | SYNC |
SESSION | STACK | SYNONYM |
SET | STANDARD | SYSTEM |
T | ||
TABLE | TO | |
TEMP | TODAY | TRIGGERS |
TEXT | TRACE | TRIM |
THEN | TRAILING | TRUNCATE |
TIME | TRANSACTION | TYPE |
TIMEOUT | TRIGGER | TYPEDEF |
U | ||
UNCOMMITTED | UNITS | USAGE |
UNDER | UNLOCK | USE_SUBQF |
UNION | UNSIGNED | USER |
UNIQUE | UPDATE | USING |
V | ||
VALUE | VARIABLE | VIEW |
VALUES | VARIANCE | VIOLATIONS |
VAR | VARIANT | VOID |
VARCHAR | VARYING | VOLATILE |
W | ||
WAIT | WHERE | WORK |
WARNING | WHILE | WRITE |
WHEN | WITH | WHENEVER |
WITHOUT | ||
X | ||
XLOAD | XUNLOAD | YEAR |