- 博客(28)
- 收藏
- 关注
原创 mybatis与gbase8s plsql适配问题一
其中在最终调用到gbasedbt.jdbc 下的 getResultSet 方法时,当resultset为空时 会直接throw Exception ,将异常传递给上层,导致最终空指针错误。在使用 mybatis 调用 gbase8s oracle模式下创建的plsql时 ,出现空指针的报错。2 在getResultSet 的上一层 主动 try catch 异常。1 使用<update> 标签去调用plsql。
2024-09-03 15:50:37
410
原创 mybatis 适配gbase8s中批量插入问题
其原因为在使用 foreach 标签做数据插入时,本质是将集合中的数据拼接成一个大sql,如果sql中使用了#{},则超出 32765 报错主机变量不足,oracle 的上限为65535,mysql中 当整体 sql长度超出范围后一样会报错。使用ExecutorType.BATCH 时 只做一次PREPARE,多次 SQ_BIND,并且返回结果也是批量一起返回,而不使用批量插入则每一条数据都需要先PREPARE,SQ_BIND,返回结果。1减少一次传入集合的数量,保证整体sql 绑定变量不超过32765。
2024-08-29 15:32:06
290
原创 hibernate 适配gbase8s 在使用boolean 时报错could not execute query
查看生成的sql发现 将boolean 类型 true 替换成了1 即 where c1=true 解析成了 c1=1。跟踪代码发现在语法解析类SqlGeneratorBase进行了替换动作。具体原因为在hibernate 方言中默认转换规则如下。解决方案,在具体方言实现中重写此方法。
2024-08-21 14:31:38
407
原创 mybatis /mybatis-plus适配gbase8s 问题:报错Unknown object type
在 mybatis /mybatis-plus与 gbase8s数据库适配过程中,出现Unknown object type报错。报错原因为在发生 setParameters时 如果 对象或者属性为null时,产生上述错误。在没有配置JdbctypeForNull时 默认的类型为OTHER类型,导致报错类型不支持。
2024-08-21 10:36:27
218
原创 gbase8s在数据迁移过程中数据膨胀问题
如果启用了 MAX_FILL_DATA_PAGES,服务器将 在最近修改的页面中添加一个新行,其中包含现有行(如果添加) 该行至少留出 10% 的页面空间,以便将来扩展 页面中的所有行。如果未设置 MAX_FILL_DATA_PAGES,则仅当页面上有足够的空间时,服务器才会添加该行以允许新行增长到其最大长度。如果将 MAX_FILL_DATA_PAGES 配置参数设为 1,数据库服务器将可向具有可变长度行的表中每个页面插入更多行。当MAX_FILL_DATA_PAGES=1 时。
2024-08-20 13:52:24
129
原创 gbase8s索引介绍一
B-树B树(B-tree)是一种树状数据结构,是,能够用来存储排序后的数据。这种数据结构能够让查找数据、循序存取、插入数据及删除的动作,都在对数时间内完成。B-树有如下性质每一个节点最多有 m 个子节点每一个非叶子节点(除根节点)最少有 ⌈m/2⌉ 个子节点,⌈m/2⌉表示向上取整。如果根节点不是叶子节点,那么它至少有两个子节点有 k 个子节点的非叶子节点拥有 k − 1 个键所有的叶子节点都在同一层限制。
2024-08-18 16:39:07
471
原创 mybatis 适配gbase8s数据库返回结果异常
发现此问题为gbase8s 数据库早期版本问题 ,现有版本均已修复。按照现场的使用方式在本地搭建简化环境验证发现确实存才问题。猜测为绑定变量异常,使用纯jdbc 测试发现确实如此。而server 到client 协议为。根据收集到的jdbc 协议发现。
2024-08-18 16:20:56
115
原创 springboot data jpa 适配 gbase8s 报错could not prepare statement
在hibernate 默认的方言中配置为true ,即在空元素时 生成 in () sql语句,改为false 时 生成 in (null) 语法 ,在gbase 数据库中 不支持前者 ,导致 报错 201 语法错误。根据绑定变量的结构发现 selentity.total 为List 集合 ,在集合元素为0 时产生如下异常。在绑定变量为集合的场景下,需要从方言中判断 在集合元素为0 的时候,拼接sql时 时候将空集合替换为null。在适配过程中,发现部分sql报错 201 语法错误。
2024-08-18 15:08:47
259
原创 gbase8s递归
在迁移的过程中要仔细的对比二者结果集差异,包括是否存在递归循环,有时需要稍微调整下,connect by 与 with as 并不是完全等效。在从oracle迁移至gbase8s时 ,oracle 的with as 递归并不支持,可以修改为其他写法,例如。而在gbase8s中只支持第一种。oracle下的递归为。
2024-06-11 20:04:36
356
原创 gbase8s数据库启动异常
根据52a24801 查找看是否有使用此共享内存的残留进程。在实际场景中偶尔会遇到数据库启动异常且后台无任何错误日志。kill 掉之后再次启动,数据库启动成功。排查发现 系统中存在大量的僵尸进程。则对应的key 为52a24801。计算出数据库对应的共享内存段起始。可以猜测数据库启动异常与此有关。启动异常退出,后台无错误日志。
2024-05-25 16:13:21
210
1
原创 hibernate 方言包加载流程
在VersionInsensitiveMapper中内置了常见数据库以及方言映射。2 获取数据库连接信息,如 版本,服务名,方言信息等。4 在使用国产数据库时一般都会单独实现自己的方言。3 加载方言信息,如未配置则走默认内置。
2024-05-22 17:41:38
192
1
原创 gbase8s 浮点数与日期时间存储
DECIMAL(p,s) NUMERIC(p,s) (p +3)/2 个字节(如果小数位是偶数)或 (p + 4)/2 个字节(如果小数位是奇数)向上取整。FLOAT (DOUBLE PRECISION) 8 字节 双精度浮点数 精度为16位。c (未知) 0/1/2 标识整数部分所占字节,为0 时 整数位0,其余则为小数部分。符号位(1)+指数和偏移(2-12)+尾数(13-64)DECIMAL(p,s) 存储与DECIMAL(p)类似。DECIMAL(p) 1 + p/2 个字节向上取整。
2024-05-22 17:19:18
851
1
原创 gbase8s数据库寻址过程分析
rowid是一个4字节编码,前3个字节是逻辑页号,第4个字节是slot号,rowid为257,转16进制为0x101,那么逻辑页号就是0x000001,slot号就是0x01,rowid为258,转16进制为0x102,那么逻辑页号就是0x000001,slot号就是0x02,所以rowid为0x101,0x102对应的物理页号就是 2526592 + 8=2526600。前四字节为逻辑偏移 ,之后两字节为表空间编号 ,然后再四字节为物理位置。257,258 转换为16进制为0x101 ,0x102。
2024-05-21 11:09:35
401
原创 gbase8s数据库软件rpm包制作
rpm -ivh GBase8s_test-8.8-1.el7.centos.x86_64.rpm 进行数据库安装。构建结束后在/root/rpmbuild/RPMS/x86_64下生成数据库rpm安装包。将数据库安装包与init_gbase.sh上传至此目录下。rpmbuild构建rpm包。
2024-05-17 13:49:54
122
原创 GBase8s Enterprise Replication(企业级复制) 数据冲突处理
因其独特的复制技术,在某些场景下存在数据同步冲突的可能性,虽然也提供了一些冲突的解决方案,其本质上已经对数据精准度做了让步。在实际经验中,更推荐将连接锁定在一个节点上。然而,在运行过程中,不可避免的会发生数据库/服务器故障导致数据库发生切换,在现有机制下,不能保证连接锁定在一个节点,此时可以借用keepalived 非抢占模式的机制,使用虚拟IP锁定连接。keepalived 原理在本文不做具体介绍,如下提供了一种参考性的实现逻辑。2 在各个节点安装keepalived组件。0 gbase 复制集群正常。
2024-05-12 20:46:19
229
原创 gbase8s spl异常捕获机制
end;end;在 on exception 作用域内可捕获自定义异常,gbase8s自定义异常的错误号为 -746。
2024-05-09 13:24:09
212
原创 flowable 适配gbase8s
在上述的包下新增sql文件 ,将oracle 的sql文件复制出来,将名字中的oracle 替换成gbase8s。在org.flowable.common.db.properties包下。将TIMESTAMP(6) 替换成 TIMESTAMP(5)将sql中的NVARCHAR2 替换成VARCHAR。将语句中的constraint 后边的表名去掉即可。修改ALTER添加唯一约束的语法支持gbase8s。将NUMBER(*,10) 中的* 替换成28。修改ALTER添加外键的语句支持gbase8s。
2024-05-09 13:04:14
464
原创 gbase8s odbc 插入日期时间类型数据简单案例
一种为使用gbase8s相关的结构体。gbase8s提供了两种插入方式。或者直接以字符串的形式插入。
2024-04-29 21:15:28
152
原创 gbase8s odbc 操作 blob、clob简单示例
一种是标准odbcAPI接口,需要设置连接属性SQL_INFX_ATTR_LO_AUTOMATIC 为 true。二 使用gbase8s提供的 ifx_lo等函数。令一种是gbase提供的内部函数接口。gbase8s支持两种操作方式。一 使用标准ODBC API。
2024-04-29 19:53:19
202
原创 gbase8s自定义C 函数
实现类似mysql 中 find_in_set 函数,按照 “-”分割字符串返回第一次出现的位置。更多资料参考gbase8s官方手册。
2024-04-10 19:07:53
193
1
原创 gbase8s ENABLE_NULL_STRCAT,ENABLE_NULL_STRING 参数描述
ENABLE_NULL_STRING 开启后在条件 is null下会包含null and '',但是=‘’不会等效 is null。ENABLE_NULL_STRING参数作用为 开启后 将varchar类型的空字符串与null值在查询条件中的等效判断。ENABLE_NULL_STRCAT 是否允许null值进行拼接。观察发现null 值存储时实际上是占用了1个字节 存储值为 0000。限制,只针对varchar类型的空串 char类型的空串则不适用。varchar 空串和null 存储差异比较。
2024-04-08 19:51:14
147
原创 gbase8s 日志概述
gbase8s数据库为了改善事务处理能力,使用buffer pool 缓存事务所访问的数据,在事务逻辑上做了修改,数据并没有在事务提交后更新到磁盘上,为了保证数据库在异常的情况下数据的完整性、准确性,数据库需要定期(较短时间内)将buffer pool 数据同步到磁盘上,保证数据的物理有效性。数据库周期性的将buffer pool 的脏数据刷新到磁盘上,达到磁盘、内存数据一致性的时间点被称为检查点。
2024-03-28 14:30:30
275
原创 浅谈gbase与oracle 字符集差异
字符集(Character Set):按照一定的字符编码方案,将特定的符号集编码为计算机能够处理的数值的集合。常见字符集名称:ASCII字符集、Unicode字符集、GB2312字符集、BIG5字符集、 GB18030字符集等。
2024-03-25 18:28:44
1570
1
原创 druid 连接gbase8s数据库问题记录
在不改动源码的情况下使用druid,不能使用DruidDataSourceFactory工厂类去初始化数据源。但此时不能使用JdbcUtils.getDbType 去拿到typename,因其不再内置的数据源中。在druid 1.2.16以及之前版本中,可以允许dbType =null,不影响数据库连接使用。在druid 1.2.17以及之后版本中,已经不允许dbType =null。必须用到可以考虑去从配置的properties中去读配置属性。可以自定义数据源去绕开dbTypeName。
2024-03-16 15:53:17
856
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人