暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

墨天轮问答精选:2月数据库技术问题与专家解读

原创 墨天轮问答君 2025-03-10
385

感谢大家一直以来对墨天轮问答平台的关注与支持!在数据库技术飞速演进的今天,我们见证了云原生、AI+数据库、向量检索等创新技术的落地实践,也看到越来越多的技术专家在社区内贡献智慧,帮助解决实际问题,推动行业发展。

随着技术分享模式的不断演进,高质量的问答内容正成为技术人交流与成长的重要载体。2025年,我们将持续优化问答平台,提升内容质量与互动体验,为大家带来更具深度与价值的技术解答。

image.png

本月开始,我们将汇总近期 【墨天轮问答平台】中的高质量问题与专家解答,助力技术成长,启发更多思考。欢迎持续关注、积极参与!

1、如何使用Docker部署MogDB,并且是创建的数据库兼容模式B

我下载了5.0.9的MogDB镜像到我本地,然后运行执行了命令

docker run --name mogdb --privileged=true -d -e GS_NODENAME=myMogDB -e GS_USERNAME=root -e GS_PASSWORD=Enmo@123 -e DBCOMPATIBILITY=B  -v /home/mogdb:/var/lib/mogdb -p 5432:5432 harbor.xx.cn/mogdb/mogdb:5.0.9



我想实现的效果:

1. 创建一个数据库myMogDB

2. 用户名为root

3. 密码为Enmo@123

4. 兼容模式为B(Mysql)

5. 使用root/Enom@123这个账号可以执行增删改查(主要是表、视图、存储过程)



但是执行后,使用“SHOW sql_compatibility;”语句查到的结果一致是“A”,是不能直接用环境变量创建吗?

另外,下面是我用root连接后看到的数据库内容,没有myMogDB的数据库。是缺少什么操作吗?

在网上查过了,有说环境变量加“- SQL_COMPATIBILITY=MYSQL”的,我试了没有效果;进容器后,在/usr/local/bin/entrypoint.sh文件里看到初始化数据库出用了“$DBCOMPATIBILITY”,改了后还是不行。

麻烦各位帮忙看下什么原因,或者应该怎么操作,十分感谢!

image.png

解答
方法1,启动容器后,连接数据库,手动创建一个B兼容模式的库

docker exec -it mogdb /bin/bash
su - omm
gsql -r -d postgres
create database myMogDB dbcompatibility ='B';

方法2,修改开源的docker构建脚本,在create database语句的地方加上兼容性指定,然后重新构建docker镜像:https://gitee.com/enmotech/enmotech-docker-mogdb

 
2、Oracle如果没有提前的基准备份,只有数据库本身和归档日志,数据库可以回滚到4小时前吗?

解答:闪回期过了,就不可以。

 
3、Oracle中人为模拟坏块的修复

前提1:oraccle数据库。
前提2:人为模拟故障,不告诉你具体模拟过程。
前提3:没有备份
1.人为模拟某个表坏块,能确保找回数据吗。
2.还有一个是磁盘组,人为模拟损坏磁盘,然后磁盘组整体offline,这种能找回数据吗。
3.还有一个是磁盘组,人为模拟损坏磁盘,然后磁盘组整体offline,数据库无法启动,处理思路是啥 ?

解答
1 如果坏块的行数据没被篡改是可以找回的
2 人为的损坏磁盘组是normal或者high没问题,如果损坏的是asm元数据信息也没问题,但是数据块被清空的话得找专门的磁盘恢复公司,将擦除前的数据恢复回来否则丢数
3 如果FILEDIR 没问题的话简单些,根据FILEDIR拼接就行,如果FILEDIR和asm元数据都损坏了,得把asm磁盘整体读一遍,然后再拼接了。
 

4、奇葩问题:ORACLE 11.2.0.4 RAC有个节点的VIP无法连接

环境描述:
一套双节点的ORACLE 11.2.0.4 RAC,操作系统是Centos6.9,IP信息如下
![image.png](https://oss-emcsprod-public.modb.pro/image/editor/20250310-1898933812600516608_439637.png)
客户端IP信息如下
![image.png](https://oss-emcsprod-public.modb.pro/image/editor/20250310-1898933908016738304_439637.png)



问题现象:
10.202.19.71去连接scan的时候无法连接,telnet 192.168.10.69 1521都不通,但是可以ping通192.168.10.69

同时去测试了一下2个VIP的端口,telnet 192.168.10.67 1521不通,但是可以ping通;telnet 192.168.10.68 1521是通的,也可以ping通;

telnet 192.168.10.65 1521是通的,也可以ping通;telnet 192.168.10.66 1521是通的,也可以ping通;虽然能通也没用,毕竟连接SCAN的时候只转发到VIP并不转发到实际IP

而其他几台应用服务器去连接VIP、SCAN的时候都是可以连接得上,唯独这个10.202.19.71无法连接VIP和SCAN的1521端口,却偏偏可以ping通。这种现象并不是一直存在,而是应用服务器10.202.19.152启动应用的时候会出现,当10.202.19.152关闭应用,这种现象就不存在了,可以正常连接SCAN和VIP

请问各位 这样的问题该如何排查?

解答

这种现象并不是一直存在,而是应用服务器10.202.19.152启动应用的时候会出现,当10.202.19.152关闭应用,这种现象就不存在了,可以正常连接SCAN和VIP.

通过以上描述,我怀疑:1,服务器10.202.19.152 这台主机上的应用是否配置了数据库的IP,并在启动时打开了1521端口。

2.这台主机上的应用是否有问题,比如频繁向数据库1521端口发送广播或消息,导致其它程序无法再连接。
 
5、请教下大佬,oracle 经常锁表,这个该如何排查呀?

解答

可以查到锁锁源头

select *

  from (select a.sid,

               a.sql_id,

               a.event,

               a.status,

               connect_by_isleaf as isleaf,

               sys_connect_by_path(SID, '<-') tree,

               level as tree_level

          from v$session a

         start with a.blocking_session is not null

        connect by nocycle a.sid = prior a.blocking_session)

 where isleaf = 1


 order by tree_level asc;

 
6、MySQL 8.4.5集群架构设计:A、B机房专线同步与自动切换方案、VPN延迟控制要求

目前有A和B两个机房,需要搭建MySQL 8.4.5版本的集群,并通过专线进行数据同步。在A机房发生中断时,系统能自动切换到B机房提供服务,同时B机房的数据需要通过专线持续同步到A机房。请问,在这种架构下,应该选择哪种MySQL集群方案和技术实现?此外,专线需要搭建VPN,确保数据同步时,专线的延迟最高应该控制在多少?

解答:建议使用mysql的mgr结构,对外提供统一的访问ip和端口,如果A机房故障,会自动进行切换,业务无感知。这个集群至少需要三个节点。
专线延迟的话建议控制在50ms以内,最高不能超过200ms。

感谢各位技术专家的精彩解答和分享,也感谢每一位提出问题的学者,是你们的积极参与让【墨天轮问答平台】更加充满活力!我们期待大家继续在平台上交流技术心得、分享实践经验,共同推动数据库技术的发展。

墨天轮平台上有很多关于国产数据库的标签 OceanBaeGoldenDB达梦TDSQL…等,
这些也是我们共同学习和探讨的宝贵资源。欢迎大家积极参与讨论,一起解读这些国产技术的亮点与挑战!

最后修改时间:2025-04-01 17:01:26
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论