当前位置: 首页 > news >正文

Ubuntu 上 GBase 8s 实例重启与字符集踩坑实录

关键词:GBase 8s、Ubuntu、locale、JDBC、oninit、9091 端口


背景

最近在 Ubuntu 22.04 服务器上部署 GBase 8s(Informix 兼容版),准备给图像分析业务新建数据库 student。整个流程看似简单,却在“Database locale information mismatch”这个错误上折腾了一下午。本文把踩坑与填坑过程完整记录下来,供后来者少走弯路。


1. 环境信息

  • OS:Ubuntu 22.04 LTS
  • GBase 版本:GBase 8s V12.10(试用许可,2026-07-16 到期)
  • 实例名:gbaseserver
  • 监听:192.168.8.127:9091
  • 数据目录:/var/opt/gbaseserver_dbs

2. 问题现象

2.1 创建数据库时报错

echo "create database student with log;" | dbaccess - -

输出:

SQLException: Database locale information mismatch

2.2 JDBC 同样报错

jdbc:gbasedbt-sqli://192.168.8.127:9091/image_analysis_db:GBASEDBTSERVER=gbaseserver

异常:java.sql.SQLException: Database locale information mismatch


3. 排障过程

3.1 确认系统 locale

locale
LANG=zh_CN.utf8
LC_ALL=zh_CN.utf8

→ 系统已统一为 UTF-8,不是系统 locale 问题

3.2 查看数据库字符集

echo "select name from sysmaster:sysdatabases;" | dbaccess sysmaster -

发现已有系统库,证实实例运行正常。

3.3 发现 JDBC 不会继承 Shell locale

GBase/Informix JDBC 驱动 必须显式指定字符集,否则默认使用 en_US.8859-1,与数据库 zh_CN.utf8 冲突,于是报错。


4. 解决方案

4.1 创建数据库前统一 locale(一次性)

export LANG=zh_CN.utf8
export LC_ALL=zh_CN.utf8
echo "create database image_analysis_db with log;" | dbaccess - -

验证:

echo "select name from sysmaster:sysdatabases where name='image_analysis_db';" | dbaccess sysmaster -

得到 student,创建成功。

4.2 JDBC URL 追加字符集参数

jdbc:gbasedbt-sqli://192.168.8.127:9091/image_analysis_db:GBASEDBTSERVER=gbaseserver;DB_LOCALE=zh_CN.utf8;CLIENT_LOCALE=zh_CN.utf8

Java 示例:

String url = "jdbc:gbasedbt-sqli://192.168.8.127:9091/image_analysis_db:GBASEDBTSERVER=gbaseserver;DB_LOCALE=zh_CN.utf8;CLIENT_LOCALE=zh_CN.utf8";
Properties p = new Properties();
p.setProperty("user", "gbasedbt");
p.setProperty("password", "your_pwd");
Connection conn = DriverManager.getConnection(url, p);

再次连接,不再报错。


5. 重启实例的正确姿势

服务器重启后,需要手动拉起实例。

# 切到实例用户
sudo su - gbasedbt# 启动
oninit -vy# 确认状态
onstat -

看到 On-Line 即为成功。


6. 一键脚本(可选)

把启动命令写成 systemd 服务,或简单脚本 /usr/local/bin/start-gbase.sh

#!/bin/bash
export LANG=zh_CN.utf8
export LC_ALL=zh_CN.utf8
su - gbasedbt -c "oninit -vy"

赋权:

sudo chmod +x /usr/local/bin/start-gbase.sh

7. 经验总结

踩坑点正确姿势
系统 locale ≠ 数据库 localeexport LANG=zh_CN.utf8 && export LC_ALL=zh_CN.utf8
JDBC 不读取 Shell 变量在 URL 里显式加 DB_LOCALECLIENT_LOCALE
重启后忘记启动oninit -vy + onstat -

8. 参考链接

  • GBase 8s 官方文档:字符集与国际化 https://www.gbase.cn
  • Informix JDBC Driver 参数说明 IBM Knowledge Center

如果你也在 Ubuntu 或 CentOS 上折腾 GBase,希望这篇小记能帮你三分钟定位、五分钟解决。Happy coding!

http://www.lryc.cn/news/590226.html

相关文章:

  • 在UE中如何给骨骼网格体赋予动画
  • conda activate 时报错: CondaError: Run ‘conda init‘ before ‘conda activate‘
  • React Native 在 Web 前端跨平台开发中的优势与实践
  • Django ORM 查询工具对象详解
  • 基于WebRTC技术实现一个在线课堂系统
  • 线上分享:解码eVTOL安全基因,构建安全飞行生态
  • 主机安全---开源wazuh安装
  • 前端面试题(React 与 Vue)
  • Elasticsearch+Logstash+Filebeat+Kibana部署
  • [时序数据库-iotdb]时序数据库iotdb的安装部署
  • C++11 std::uninitialized_copy_n 原理与实现
  • 边缘计算革命:AWS Snowcone在智慧工厂的落地实践(2025工业4.0实战指南)
  • Jenkins+Docker(docker-compose、Dockerfile)+Gitee实现自动化部署
  • 【时序数据库-iotdb】时序数据库iotdb的可视化客户端安装部署--dbeaver
  • Datawhale AI夏令营笔记-TF-IDF方法
  • 玩转Docker | 使用Docker部署vnStat网络流量监控服务
  • java之-文件预览终极解决方案
  • java工具类Hutool
  • 深度剖析C++生态系统:一门老牌语言如何在开源浪潮中焕发新生?
  • [Java安全】JDK 动态代理
  • 浅谈SQL注入注释符#和--+的运用场景和区别
  • rocky8 --Elasticsearch+Logstash+Filebeat+Kibana部署【7.1.1版本】
  • Hadoop(三)
  • Django REST Framework 入门指南:从 0 到 1 实现 RESTful API
  • 汇编 Call 指令运行原理详解:从跳转机制到堆栈操作
  • 基于 elements3 包装的 可展开 table 组件
  • uniapp各端通过webview实现互相通信
  • 并发编程-CountDownLatch
  • UniApp 多端人脸认证图片上传实现
  • 【PTA数据结构 | C语言版】前缀树的3个操作