资讯动态

openGauss 数据库实验从安装到 JDBC 连接全攻略

发布时间:2026/10/19 2:23:54 来源:尧图企业网站定制
简介《zzu数据库实验报告书》是一份面向计算机科学与技术及软件工程专业学生的数据库系统原理实验完整记录覆盖实验一至实验九可帮助读者系统掌握数据库管理、SQL 语句操作以及数据安全、完整性、并发与恢复等核心技能。资源为单个 docx 文档3.23MB由作者 weixin_52030647 整理共享。报告紧密围绕 openGauss 数据库环境展开从认识 DBMS 系统、安装与使用 gsql 工具到创建数据库、表与索引再到交互式 SQL、视图创建、完整性控制、安全性权限管理、事务与并发控制含锁机制与死锁处理、数据库备份与恢复以及使用 JDBC 连接数据库的编程实践逐项记录了实验目的、操作步骤、常见问题与结果分析内容完整且结构清晰。目前已有 1522 人学习下载尤其适合数据库原理课程期末复习、课程设计参考以及希望快速上手数据库管理开发的初学者使用。1. 认识 DBMS 之前为什么这份实验从头到尾都是 openGauss拿到这份《数据库系统原理实验》报告书我第一反应是先翻它用的什么数据库环境结果九个实验清一色 openGauss默认端口还不是熟知的 5432而是 26000。这个差异让不少人在最开始就翻车明明装完了一条gsql -d postgres连上去却直接报错原因多半是没切到 omm 用户或者服务压根没起来。数据库课程实验十有八九走“认识 DBMS → 建库建表 → SQL 查询 → 完整性/安全性 → 备份恢复 → JDBC 编程”这条线openGauss 恰好把每一环都覆盖了从命令行工具 gsql 到运维命令 gs_om再到 JDBC 驱动一应俱全。这份报告书把九个实验全流程走了一遍适合正要装 openGauss、又不想在环境上耗两天的开发者照着抄能少踩一半坑。2. 安装 openGauss三种模式怎么选手动装最稳的流程报告实验一里明确列了三种安装模式云服务器上安装、虚拟机一键安装、虚拟机先装 openEuler 再装 openGauss。三种我都实际装过结论是想快速跑通选一键安装想要一个和自己报告截图一致、后续能排查问题的环境老老实实选第三种。原因很简单openEuler 是 openGauss 官方适配的操作系统数据库的依赖、内核参数、字符集都按它的习惯来出问题时网上能搜到的报错也最全而且虚拟机可以拍快照装坏了回滚等于吃了颗后悔药这是云服务器上不敢随便做的操作。2.1 三种安装模式云上、一键、手动安装方式适合谁前提条件主要坑云服务器安装需要公网 IP、要长期挂服务的场景有云主机内存建议不低于 4G端口安全组要放行 26000不然远程连不上虚拟机一键安装想在 Windows 笔记本上快速体验VMware 或 VirtualBox 能跑动环境像黑匣子出问题不好定位配置手动装 openEuler 再装 openGauss需要按报告一步步复现、要能查日志的人会基本 Linux 命令有 20G 以上磁盘步骤多但每一步都可控一键安装听着省事实际翻车时最难受你只知道装好了但不知道装在哪个目录、日志写在哪、参数写在哪。手动安装虽然多花半小时但后面九个实验全靠这套环境把家底摸清楚比什么都值。云服务器方案适合实验做完后想放到公网演示的人安全组里 26000 端口不放行JDBC 远程直连怎么调都是超时。2.2 手动安装从 openEuler 到 gs_install 的完整命令先准备一台 openEuler 虚拟机内存建议不低于 4G磁盘 20G 以上网络用 NAT 或桥接都行只要虚拟机自己能上网。系统装好后第一步不是解压安装包而是创建数据库安装用户。openGauss 的管理员用户默认叫 omm报告里所有操作都要先su - omm所以这个用户必须提前建好groupadd dbgrp useradd -g dbgrp -m -s /bin/bash omm passwd omm第一行创建用户组 dbgrp第二行创建用户 omm 并把它放进 dbgrp 组第三行设置 omm 的登录密码。这里有个血泪经验密码尽量设成大小写字母加数字的复杂组合openGauss 安装时的密码策略检查比想象中严纯数字纯字母都可能直接卡在初始化那一步。接着把 openGauss 安装包解压用 root 执行预安装命令tar -zxvf openGauss-*.tar.gz cd openGauss gs_preinstall -U omm -G dbgrp -X clusterconfig.xmlclusterconfig.xml 是从安装包自带模板复制出来的必改三处nodeNames填主节点主机名dataNode填数据目录这个目录要提前建好并把属主改成 ommport填 26000。gs_preinstall负责检查操作系统依赖、创建目录、配置内核参数这一步报错九成是权限和路径问题日志会直接打印在终端上照着改完重跑即可。预安装通过后切换到 omm 用户执行正式安装su - omm gs_install -X clusterconfig.xmlgs_install会按 clusterconfig.xml 的配置初始化数据目录、生成 postgres 默认数据库、写入端口配置。安装成功的标志是最后一行输出Successfully installed.看到这个再往下走不然数据目录都是残缺的后面连接报什么错都不奇怪。整个过程少则十分钟多则半小时取决于虚拟机磁盘速度。2.3 安装后的检查进程、端口、日志安装完成别急着连先做三个检查确认服务真起来了ps -ef | grep gaussdb ss -lntp | grep 26000 gs_om -t status第一条看数据库进程是否存在第二条确认 26000 端口在监听第三条用 gs_om 查看集群状态正常应显示normal。三条里任意一条不符合预期都说明安装过程有残留问题。这时候最有效的办法不是重新装一遍而是去 clusterconfig.xml 里gaussdbLogDirectory配置的目录翻日志openGauss 把安装日志和运行日志都写在那个目录下报错原因写得比终端输出详细得多比自己瞎猜快。3. 启动与连接从 root 切到 omm再让 gsql 说上话环境装好后实验一的核心就是“启动数据库服务 用 gsql 连上 postgres 默认库”。这一步看似简单实际上拦截了很多人。我在帮人排查时见过最多的情况是明明服务开着一条gsql -d postgres输入进去却报类似FATAL: password authentication failed的错。原因十有八九是当前登录用户不是 omm环境变量没加载导致 gsql 用了错误的身份去认证。3.1 启动服务gs_om 的状态和日志gs_om 是 openGauss 的运维管理工具启动集群用-t start查看状态用-t status。注意顺序先启动再确认状态最后才连接su - omm gs_om -t start gs_om -t status第一行切换到 omm 用户这一步不能省。openGauss 安装时把数据目录、环境变量、密钥文件都绑在 omm 用户下用 root 或其他用户执行 gs_om大概率会撞上权限拒绝。第二行启动数据库服务启动过程会检查数据目录完整性和端口占用。第三行确认状态输出里带normal才是健康状态如果显示Degraded或Unknown说明有节点没起来。启动失败时我一般先看gs_om -t status的报错里有没有提示具体节点和日志路径然后去配置的日志目录翻om开头的日志文件。常见原因无非三种端口被占、数据目录属主不对、上一次异常退出没清理干净。这些在第 5 章会逐个展开。3.2 gsql 连接参数和元命令服务起来后用 gsql 连接默认数据库 postgresgsql -d postgres -p 26000 -U omm-d指定数据库名postgres 是 openGauss 安装后自动生成的默认库也是实验一里指定要连的库-p指定端口26000 是主节点端口写错成 5432 会直接连接超时-U指定连接用户第一次就用 omm。报告里还带着-r参数它开启的是 gsql 的交互特性开关不写不影响正常使用。连上之后gsql 提供一组以反斜杠开头的元命令实验一专门让读者逐个试一遍。我把它们整理成一张表照着敲就行元命令作用\l列出所有数据库\dn列出 schema\dt列出当前库所有表\d 表名查看表的属性和约束\di列出所有索引\db列出所有表空间\h查看 SQL 语法帮助\q退出 gsql除了元命令实验一还让通过系统表查信息这两条 SQL 也是后面排查问题的基础SELECT datname FROM pg_database; SELECT spcname FROM pg_tablespace; SELECT * FROM pg_user;pg_database存数据库列表pg_tablespace存表空间列表pg_user存用户信息。openGauss 沿用了 PostgreSQL 的系统表架构很多管理信息都能从这些表里直接查出来比图形工具还直观。3.3 创建用户和第一次切换实验一最后要求创建一个新的数据库用户账号。用 omm 连上 postgres 后执行CREATE USER lab_user WITH PASSWORD Lab123456;这条命令创建了一个叫 lab_user 的普通用户。WITH PASSWORD指定密码openGauss 默认密码策略要求长度不低于 8 位且包含大小写和数字设得太简单会直接报错。创建完成后可以切换到这个用户\c postgres lab_usergsql 的\c命令后面跟数据库名和用户名切换后提示符会变成postgres说明当前身份已经变了。这时候你会发现新用户默认什么都干不了连建表权限都没有——这正是实验六安全性控制要解决的问题也为后面的 GRANT 授权语句埋了个伏笔。4. 建库建表与索引实验二的完整 SQL 作业实验二是整份报告书里 SQL 量最大的一节建库、建 schema、建表、加约束、建索引、删索引一条龙。这里最容易出问题的不是 SQL 语法本身而是执行顺序。openGauss 对对象依赖查得很严格父表没建就去建子表外键直接报错。4.1 表空间与数据库的创建顺序报告里创建数据库分三步走第一步先建表空间CREATE TABLESPACE tpcds_local RELATIVE LOCATION tablespace/tablespace_1;RELATIVE LOCATION表示相对路径相对的是数据库数据目录。括号后面那段字符串指向一个子目录这个子目录最好提前建好不然第一次执行时可能报目录不存在。第二步创建数据库时指定表空间CREATE DATABASE db_sc WITH TABLESPACE tpcds_local; ALTER DATABASE db_sc RENAME TO db_school; \c db_school第二行把数据库改名成 db_school第三行切换过去。这里有个容易被忽略的点db_sc创建时指定了表空间换名后表空间绑定关系不会变。如果一开始没建表空间就直接CREATE DATABASE db_school数据会落在默认表空间里后续想迁移就得用ALTER TABLESPACE或重建很麻烦。4.2 schema 和四张核心表的 DDL进入 db_school 库后先建 schemaCREATE SCHEMA book_eg;schema 在 openGauss 里是数据库下的命名空间postgres 默认有一个 public schema所有不指定 schema 建的表都进 public。报告里专门建了 book_eg后续把教师、院系表放进这个 schema目的是演示“一个库下面多个 schema 互相隔离”。如果后面建表时发现权限不足先检查当前用户有没有该 schema 的 CREATE 权限。建完 schema开始建表。教师信息表是第一个CREATE TABLE book_eg.Teachers ( Tno CHAR(20) PRIMARY KEY, Tname CHAR(20) NOT NULL, Sex CHAR(20) CHECK (Sex男 OR Sex女), Birthday DATE, Title CHAR(20), Dno CHAR(20) );Tno CHAR(20) PRIMARY KEY是列级主键约束直接写在列定义后面不需要指定列名Tname NOT NULL保证姓名不能为空CHECK (Sex男 OR Sex女)是检查约束写入非法性别会被数据库拒绝。注意这里Dno暂时没加外键因为外键指向的Departments表还没建这就是实验二刻意安排的顺序先建骨架再补约束。接下来是院系信息表它反过来引用了 Teachers 表的主键CREATE TABLE Departments ( Dno CHAR(20) PRIMARY KEY, Dname CHAR(20), Dheadno CHAR(20), FOREIGN KEY (Dheadno) REFERENCES Teachers(Tno) );这里FOREIGN KEY (Dheadno) REFERENCES Teachers(Tno)是表级外键约束写在整个表定义的末尾必须明确指定列名。Departments的系主任编号引用Teachers的教师编号所以 Teachers 必须先建。Student、Course 两张表逻辑一样Students.Sno主键、Dno外键引用Departments.DnoCourses里Period和Credit用SMALLINT实验报告里特别辨析了 SMALLINT 和 INT 的范围差异选 SMALLINT 就够用。选课表 SC 是典型的多对多中间表CREATE TABLE SC ( Sno CHAR(20), Cno CHAR(20), Grade SMALLINT, PRIMARY KEY (Sno, Cno), FOREIGN KEY (Sno) REFERENCES Students(Sno), FOREIGN KEY (Cno) REFERENCES Courses(Cno) );PRIMARY KEY (Sno, Cno)是联合主键表示一个学生选一门课只对应一条记录。两个外键分别在 Students 和 Courses 的主键上建表之前必须确保这两张表已存在。Teaches 教学信息表的结构和 SC 几乎一样主键是 (Tno, Cno)照着写就行。4.3 修改表结构与外键约束由于 Teachers 表的 Dno 在初始建表时没有加外键实验二里专门用一条 ALTER 语句补上这一步也是完整性控制实验五的前置操作ALTER TABLE Teachers ADD CONSTRAINT fk_teachers_dno FOREIGN KEY (Dno) REFERENCES Departments(Dno);ADD CONSTRAINT给外键起名fk_teachers_dno后面指定列和引用目标。为什么不用建表时直接写外键因为 Teachers 和 Departments 互相引用Teachers 的 Dno 要引用 Departments 的主键Departments 的 Dheadno 又要引用 Teachers 的主键这种循环依赖必须先建两张空表骨架再用 ALTER 补外键否则第二张表建的时候就会报第一张表不存在。这是实验二里最值得记下来的设计思路。补完外键可以顺手验证一下 CHECK 约束是否在生效INSERT INTO Teachers (Tno, Tname, Sex) VALUES (T001, 测试教师, 未知);正常情况这条 INSERT 会被数据库拒绝报错信息会提示CHECK约束被违反。这一行失败记录恰好说明完整性控制在起作用也是实验五“完整性控制”的实验素材。4.4 索引和视图建在哪个列上才有意义创建索引是实验二后半段的重点。报告要求在 Students 表的 Dno 上创建索引CREATE INDEX Student_Dept ON Students(Dno);索引能加快按系号查询学生信息的速度。需要注意主键会自动建索引不用重复给主键列建索引外键列是高频查询条件值得手动建。建完索引可以用\di查看当前库所有索引确认是否创建成功。实验四的视图创建也很简单在已有表上定义一个虚拟表CREATE VIEW male_students AS SELECT Sno, Sname, Speciality FROM Students WHERE Sex男;视图不实际存储数据查询时动态从 Students 表取数好处是可以把常用查询条件封装起来避免每次写一长串 WHERE。实验四里创建视图的核心目的正是理解抽象和封装报告里还强调视图对权限控制的意义可以只给用户开放视图不开放原始表。5. 避坑指南安装、连接、SQL 三个阶段的翻车点这一章把我反复踩过、也帮别人排查过的坑攒成清单每个都按“现象 → 原因 → 解决”写清楚。数据库环境这东西装坏了不可怕可怕的是不知道去哪看日志、不知道从哪下手重来。5.1 安装阶段权限、目录、端口坑一gs_preinstall报Permission denied或No such file or directory。现象预安装脚本执行到一半退出报错指向某个目录或文件无权限。原因clusterconfig.xml 里的dataNode路径没有提前创建或者创建后属主不是 omm。解决执行mkdir -p /data/opengauss/data chown -R omm:dbgrp /data/opengauss再重跑预安装。注意 chown 必须递归到最深层目录只给上层目录授权数据目录下的子目录照样没权限。坑二装完后ss -lntp | grep 26000看不到监听gs_om -t status显示异常。现象gsql 连接提示超时或拒绝连接。原因安装时端口被占用或 clusterconfig.xml 里 port 参数没改干净。解决先用ss -lntp | grep 26000看有没有其他进程占着有就换端口没有就看日志目录下 om 开头的日志里面会写明初始化到哪一步挂了。我遇到过的案例是前一次安装残留的 postgres 进程占着端口kill掉后重新gs_om -t start就好。5.2 连接阶段omm、认证与安全坑三gsql -d postgres -p 26000报FATAL: password authentication failed。现象明明在数据库服务器本地执行密码也对就是连不上。原因当前系统用户不是 omm环境变量没加载gsql 用错误身份发起认证。解决先执行su - omm再跑 gsql。su -的-很关键它会完整加载 omm 用户的环境变量少了这一步你切了用户但环境变量还是旧的有些版本会直接导致连接失败这个坑拦住了不少初次接触 openGauss 的人。坑四远程 JDBC 连接报no pg_hba.conf entry for host。现象本地 gsql 没问题换到另一台机器用 JDBC 或 gsql 远程连就报这个错。原因pg_hba.conf 默认只放行了本地连接远程 host 没有配置对应认证规则。解决打开数据目录下的 pg_hba.conf加一行host all all 192.168.1.0/24 sha256重启数据库服务。这是 openGauss 的安全机制不是 bug实验六安全性控制里也会讲到类似场景。改这个文件前先备份改错格式数据库会直接拒绝所有连接。5.3 SQL 执行阶段建表顺序与表空间目录坑五建 SC 表或 Departments 表时报relation students does not exist。现象CREATE TABLE 语句里写了 FOREIGN KEY执行时提示被引用的表不存在。原因建表顺序错了子表先于父表创建。解决按依赖顺序建表先 Teachers、Departments、Students、Courses再建 SC 和 Teaches遇到循环引用就按第 4 章的做法先建表骨架再 ALTER 补外键。这个坑在实验二里几乎是必踩的报告里把建表顺序排好正是为了避开它。坑六CREATE TABLESPACE报目录不存在。现象执行CREATE TABLESPACE tpcds_local RELATIVE LOCATION tablespace/tablespace_1提示路径有问题。原因RELATIVE LOCATION 后面是相对路径指向数据目录下的子目录这个目录不会自动创建。解决先mkdir -p $GAUSSDATA/tablespace/tablespace_1再把目录属主改成 omm:dbgrp最后执行建表空间命令。也可以直接写成绝对路径的 ABSOLUTE LOCATION但报告里用的是 RELATIVE按它的方式来环境更统一。6. 验证跑通备份恢复和 JDBC 直连环境装好、表也建完最后一步是验证整套系统真的能跑起来而不是“看着像好的”。我习惯做两个验证一个用 gs_dump 备份再恢复确认数据能搬走也能搬回一个用 JDBC 直连确认从程序侧也能正常读写。这两步都过了这套环境才算真正交付。6.1 gs_dump 备份恢复验证用 openGauss 自带的逻辑备份工具 gs_dump把 db_school 全库导出gs_dump -U omm -W 你的密码 -p 26000 db_school -f /home/omm/db_school_$(date %F).sql-U指定用户-W接密码-p指定端口-f指定导出文件路径文件名里的$(date %F)会让每次备份带日期。导出完成后建一个空库再导入验证备份文件完整可用gsql -d postgres -p 26000 -c CREATE DATABASE db_school_restore gsql -d db_school_restore -p 26000 -f /home/omm/db_school_$(date %F).sql第二条用 gsql 执行 SQL 文件把数据灌进新库。导入后\dt看表是否齐全再SELECT COUNT(*)抽查数据量。这一套走通实验八“备份与恢复”就算真正落地了。6.2 JDBC 连接与授权验证JDBC 直连是实验九的要求也是数据库应用开发的起点。先用普通用户完成授权GRANT CONNECT ON DATABASE db_school TO lab_user; GRANT SELECT, INSERT, UPDATE ON Students TO lab_user;然后用 Java 代码连接数据库跑一条最简单的查询import java.sql.*; public class OpenGaussConnect { public static void main(String[] args) throws Exception { Class.forName(com.opengauss.jdbc.Driver); String url jdbc:opengauss://127.0.0.1:26000/db_school; try (Connection conn DriverManager.getConnection(url, lab_user, Lab123456)) { Statement st conn.createStatement(); ResultSet rs st.executeQuery(SELECT COUNT(*) FROM Students); if (rs.next()) { System.out.println(total students: rs.getInt(1)); } } } }Class.forName加载 openGauss 的 JDBC 驱动URL 格式是jdbc:opengauss://主机IP:端口/数据库名连接用户和密码用前面建的 lab_user。驱动 jar 包优先用 openGauss 安装包自带的版本版本和数据库大版本不匹配会出现各种诡异连接错误这个坑我踩过后就再也没换过别的来源。从那以后我每次帮人验收 openGauss 环境都强制走一遍“起服务 → gsql 连一次 → 查一张表 → gs_dump 备份 → JDBC 跑一条 SQL”的完整链路基本能在几分钟内暴露八成配置问题。这份实验报告书我放在资源位照着它把九个实验完整走一遍数据库这门课的环境部分就不会再拦你了。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑