7天从零搞定GBase培训——数据库知识真的可以平移
背景
接到一个任务:给甲方做GBase数据库培训。要求覆盖GBase 8s(事务型)和GBase 8a(分析型MPP)两个产品。
问题来了:我从来没碰过GBase。
官方给了一批产品文档和安装包,但提供不了培训服务。总集委托我单位来培训。拿到材料的时候是周一,培训排在下周一——7天时间。
7天后的培训PPT,后半部分的DBA管理SQL语句全是我自己写的。
下面说说我是怎么在7天内"速成"GBase的。核心观点就一个:懂了一个数据库,知识可以平移。
GBase是什么
先交代背景。南大通用GBase是国内数据库厂商,有两个主力产品:
| 产品 | 定位 | 对标 | 场景 |
|---|---|---|---|
| GBase 8s | OLTP事务型 | Oracle、MySQL、SQL Server | 业务系统、政务OA |
| GBase 8a MPP | OLAP分析型 | Greenplum、ClickHouse | 数据仓库、统计分析 |
8s适合在线事务处理,8a适合海量数据分析。很多政务项目里两个一起部署:8s跑业务,8a跑报表。
我会什么
在接这个任务之前,我的数据库经验是:Oracle为主,MySQL为辅。Oracle用了十几年,MySQL也折腾过不少。
Oracle → MySQL → GBase 的知识迁移路径
知识平移对照表
一、安装部署
所有数据库的安装流程都是一样的:检查环境 → 创建用户 → 解压安装包 → 配置参数 → 初始化实例。
| 操作 | Oracle | MySQL | GBase 8s | GBase 8a |
|---|---|---|---|---|
| 安装用户 | oracle | mysql | gbasedbt | gbase |
| 默认端口 | 1521 | 3306 | 9088 | 5258 |
| 初始化实例 | dbca / CREATE DATABASE | mysqld --initialize | GBaseInit_gbasedbt.sh | gcinstall.py |
| 配置文件 | listener.ora / sqlnet.ora | my.cnf | onconfig | demo.options |
| 启动 | sqlplus / startup | systemctl start mysqld | oninit | gcluster_services all start |
| 停止 | sqlplus / shutdown | systemctl stop mysqld | onmode -k | gcluster_services all stop |
| 查看状态 | ps -ef | grep ora_ | systemctl status mysqld | onstat - | gcadmin |
你看,概念完全一一对应。你只要记住"GBase 8s的oninit相当于Oracle的startup,onmode相当于shutdown",其他的照猫画虎就行。
二、客户端连接
| 操作 | Oracle | MySQL | GBase 8s | GBase 8a |
|---|---|---|---|---|
| 命令行工具 | sqlplus | mysql | dbaccess | gccli |
| 连接 | sqlplus user/pass@host:port | mysql -h host -u user -p | dbaccess - - | gccli -u root -p |
| 图形客户端 | GDS(南大通用自带) | Navicat | GDS | GDS |
GBase自带的客户端工具叫GDS(GBase Data Studio),支持8s和8a两种连接。用法和Navicat、DBeaver差不多。
三、库表操作
DDL语句几乎一样。你只要会Oracle或MySQL的建库建表,到了GBase直接上手:
-- 建库(所有数据库都差不多)-- Oracle: CREATE DATABASE test;-- MySQL: CREATE DATABASE test DEFAULT CHARSET utf8mb4;-- GBase 8s: CREATE DATABASE test IN datadbs1 WITH LOG;-- GBase 8a: CREATE DATABASE test;-- 建表(完全一样)CREATETABLEa1(idSERIAL,-- 相当于Oracle的SEQUENCE,MySQL的AUTO_INCREMENTxmVARCHAR(50),-- 和Oracle/MySQL一样sfzhVARCHAR(20),-- 一样csrqDATE-- 一样);-- 改字段(一样)ALTERTABLEa1ADDCOLUMNxbVARCHAR(3);ALTERTABLEa1MODIFYCOLUMNxbVARCHAR(10);-- 8s只能改大ALTERTABLEa1DROPCOLUMNxb;-- 建索引(一样)CREATEINDEXidx_sfzhONa1(sfzh);DROPINDEXidx_sfzhONa1;-- 建视图(一样)CREATEVIEWv1ASSELECT*FROMa1;-- 建主键(GBase 8s语法)ALTERTABLEa1ADDCONSTRAINTPRIMARYKEY(sfzh)CONSTRAINTpk_a1_sfzh;唯一需要注意的是GBase 8s的SERIAL类型:它类似Oracle的SEQUENCE,但不完全一样。插入时不指定SERIAL字段会自动递增,但可以手动指定值。指定值后,下一个自动值会从你指定的值开始计算(而不是跳过)。
四、权限管理
权限体系的设计逻辑也完全一样:用户→角色→权限(库级→表级→字段级)。
| 操作 | Oracle | MySQL | GBase 8s | GBase 8a |
|---|---|---|---|---|
| 创建用户 | CREATE USER | CREATE USER | CREATE USER xx WITH PASSWORD ‘xx’ | CREATE USER xx IDENTIFIED BY ‘xx’ |
| 修改密码 | ALTER USER | ALTER USER | ALTER USER xx MODIFY PASSWORD ‘xx’ | ALTER USER xx IDENTIFIED BY ‘xx’ |
| 锁定用户 | LOCK ACCOUNT | ACCOUNT LOCK | ALTER USER xx ACCOUNT LOCK | ALTER USER xx ACCOUNT LOCK |
| 库级授权 | GRANT CONNECT/RESOURCE | GRANT ALL ON db.* | GRANT CONNECT/DBA/RESOURCE TO xx | 跟MySQL一样 |
| 表级授权 | GRANT SELECT ON tab TO xx | GRANT SELECT ON tab TO xx | 完全一样 | 完全一样 |
| 字段级授权 | GRANT SELECT(col) ON tab | 不支持 | GRANT SELECT(xm) ON a1 TO xx | 支持 |
| 收回权限 | REVOKE | REVOKE | 完全一样 | 完全一样 |
| 创建角色 | CREATE ROLE | CREATE ROLE | CREATE ROLE r1 | CREATE ROLE r1 |
| 角色授权 | GRANT role TO user | GRANT role TO user | 完全一样 | 完全一样 |
GBase 8s有个特殊的地方:它支持操作系统用户映射,通过代理用户(surrogate user)把OS用户和数据库内部用户关联起来。这个Oracle也有类似机制(OS_AUTHENT_PREFIX),但GBase 8s的配置方式不太一样,需要配置/etc/gbasedbt/allowed.surrogates文件。
五、备份恢复
| 操作 | Oracle | MySQL | GBase 8s |
|---|---|---|---|
| 全量备份 | RMAN / expdp | mysqldump --single-transaction | ontape -s -L 0 |
| 增量备份 | RMAN增量 | binlog / mysqldump | ontape -s -L 1 |
| 备份目录 | RMAN配置 | 自定义目录 | TAPEDEV/LTAPEDEV配置 |
| 逻辑导出 | expdp | mysqldump | unload / onunload |
| 逻辑导入 | impdp | mysql < dump.sql | load / onload |
GBase 8s的备份用ontape命令,-L 0是全量,-L 1是增量。备份前要配置TAPEDEV(备份路径),默认是/dev/null(即不备份)。
# 查看当前备份配置onstat-c|grepTAPEDEV# 如果是/dev/null,说明没配置备份# 配置备份路径onmode-wf"TAPEDEV=/backup"onmode-wf"LTAPEDEV=/backup"# 全量备份ontape-s-L0# 增量备份ontape-s-L1逻辑导出用unload,类似MySQL的SELECT ... INTO OUTFILE:
-- unload导出(相当于MySQL的INTO OUTFILE)UNLOADTO/tmp/data.txtDELIMITER'|'SELECT*FROMa1;-- load导入LOADFROM/tmp/data.txtDELIMITER'|'INSERTINTOa1;注意:unload默认字段分隔符是|,如果数据里有换行符,会自动在行尾加\表示续行。
六、DBA运维命令
GBase 8s的DBA命令以前缀on开头(onstat、onmode、oninit、onspaces…),和Oracle的v$视图、MySQL的SHOW命令一样,都是日常运维的瑞士军刀。
| 用途 | Oracle | MySQL | GBase 8s |
|---|---|---|---|
| 查看实例状态 | SELECT status FROM v$instance; | STATUS; | onstat - |
| 查看当前模式 | SELECT * FROM v$database; | – | onstat - |
| 查看日志状态 | SELECT * FROM v$log; | SHOW MASTER STATUS; | onstat -l |
| 切换日志 | ALTER SYSTEM SWITCH LOGFILE; | FLUSH LOGS; | onmode -l |
| 查看空间使用 | SELECT * FROM dba_data_files; | – | onstat -d |
| 查看会话/线程 | SELECT * FROM v$session; | SHOW PROCESSLIST; | onstat -u |
| 查看系统概况 | – | SHOW STATUS; | onstat -p |
| 查看内存段 | – | – | onstat -g seg |
| 查看共享内存 | – | – | onstat -g shm |
| 查看归档状态 | – | SHOW VARIABLES LIKE ‘log_archive%’; | onstat -g arc |
| 强制检查点 | ALTER SYSTEM CHECKPOINT; | – | onmode -c |
| 杀会话 | ALTER SYSTEM KILL SESSION; | KILL connection_id; | onmode -z 12315 |
| 添加CPU VP | – | – | onmode -p +5 cpu |
| 查看SQL会话 | SELECT * FROM v$sql; | – | onstat -g sql |
GBase 8s的onstat相当于Oracle的v$视图+AWR报告+MySQL的SHOW STATUS,一个命令系列搞定所有日常运维。
七、表空间管理
| 操作 | Oracle | GBase 8s |
|---|---|---|
| 创建表空间 | CREATE TABLESPACE tbs DATAFILE ‘/path/f1.dbf’ SIZE 100M; | onspaces -c -d datadbs2 -p /path/f1 -o 0 -s 102400 -k 16k |
| 扩展表空间 | ALTER TABLESPACE tbs ADD DATAFILE ‘/path/f2.dbf’ SIZE 100M; | onspaces -a datadbs2 -p /path/f2 -o 0 -s 102400 |
| 自动扩展 | AUTOEXTEND ON | execute function task(“modify chunk extendable”, 7); |
| 设置扩展上限 | MAXSIZE | execute function task(‘modify chunk extend’, 7, 2000000); |
GBase 8s的表空间(叫dbspace)和Oracle的概念完全一样:数据文件组成表空间,表建在表空间上。操作方式不同(Oracle用SQL,GBase 8s用命令行),但逻辑完全一样。
我的7天速成策略
说了这么多对照表,讲讲我实际的7天是怎么安排的:
第1-2天:跑通安装
把GBase 8s和8a都装起来。安装过程中踩的坑主要是权限问题(安装目录必须是root:root、不能777),其他都按文档来。
第3天:整理官方PPT前半部分(安装部署)
安装部署部分是官方给的,按步骤截图+命令整理。官方能提供文档,但提供不了培训服务。
第4-5天:写PPT后半部分(DBA管理)
这一部分是自己写的,官方文档里没有。方法就是上面那个对照表:把Oracle/MySQL的知识翻译成GBase的语法。每个命令都实际跑一遍确认能执行。
第6天:整理考试题和实操题
把官方给的考试题过一遍,确认答案正确。实操题补全SQL语句。
第7天:过一遍PPT,模拟培训
从头到尾讲一遍,计时。
关键认知
数据库的核心概念是通的:实例、数据库、表空间、用户、权限、备份、日志——不管哪个数据库,这些概念都一样。变的只是命令语法和配置文件名。
SQL标准是通用的:DDL、DML、DCL的语法,90%以上在所有关系数据库中都一样。差异主要在扩展功能(比如序列、窗口函数、JSON支持)。
运维思路是通的:启动/停止、状态检查、日志查看、空间管理、备份恢复——每个数据库都有自己的工具,但排查问题的思路一样。
不同数据库的差异,主要在"方言":就像普通话和方言,核心意思一样,表达方式不同。GBase 8s的"方言"最接近Informix(实际上GBase 8s就是基于Informix技术),8a的"方言"接近MySQL。
对初学者的建议
如果你也要在短时间内接手一个新数据库,我的建议是:
先搞清楚它对标谁——GBase 8s对标Oracle(Informix技术路线),GBase 8a对标MySQL。知道对标关系,学习就有参照物。
从你已经会的东西出发——列一个对照表,把新数据库的每个概念映射到你熟悉的数据库上。
动手装一遍——文档看再多不如实际装一遍。安装过程中会逼你了解用户、目录、端口、配置这些基础知识。
每个命令都跑一遍——不要光看文档。DBA命令一定要亲手执行,看输出结果。
重点看差异,不是共性——共性你已经会了(建库建表SQL都一样),差异才是要学的(GBase 8s的SERIAL、ontape备份、onstat命令等)。
后记
培训当天,甲方的人问了不少问题。有个问"GBase和Oracle比哪个好",我说"不是谁好谁差的问题,是替代的问题。80%的场景可以替代。“另一个问"学GBase要多久”,我说"如果你会Oracle,一周。"
这不是吹牛。数据库的世界,一通百通。
说到底,非科班的人被逼成DBA,不是什么稀奇事。你做政务信息化做久了,甲方要什么你都得能顶——数据库、中间件、网络、安全、操作系统,哪个你不是边干边学的?资源就那么多,不可能每个岗位都配专人。被逼出来的能力,反而是最扎实的,因为你是真的在生产环境里踩过的。
我居然被逼成了DBA——这话不是抱怨,是实话。
感谢豆包、智谱、OpenCode在写作过程中的辅助。