- 博客(80)
- 收藏
- 关注
原创 gbase8s数据库keep-alive配置
2 jdbc参数 IFX_SOC_KEEPALIVE=true。1 sqlhosts 中 添加k=1(默认开启)检测机制依赖于操作系统底层的tcp通信配置。由jdbc端发起,检测tcp连接有效性。由数据库端发起,检测tcp连接有效性。
2026-10-27 09:04:53
151
原创 深度递归与广度递归(DFS,BFS)实现
在gbase8s 数据库中,无 WITH RECURSIVE SEARCH BREADTH FIRST BY id SET 语法糖,可以使用自身的connect by递归实现 DFS,BFS,如下,能模拟出PG 特有的set 伪列。在PG 14及以上数据库中支持DFS,BFS递归。
2026-08-12 15:13:02
38
原创 gbase8s逻辑日志不能备份
该参数监听数据库时间,当发生逻辑日志切换时,会捕获该事件,然后执行配置的脚本进行备份操作,为了定位问题,将debug输出到日志文件。近期发现一个奇怪的问题,生产环境正常运行,突然数据库的逻辑日志就不能备份了,后经过询问得知是启动数据库主进程所在目录被删除。数据库备份逻辑日志的大概流程为。922 的错误就是不能获取当前的工作目录。当数据库启动目录被删除时,日志信息如下。可以发现备份命令报错了。
2026-06-09 11:11:36
183
原创 awk入门
v 选项 awk -v var=value 可在 BEGIN 块中使用 awk -v sep="," '{print $1}'范围模式 模式1, 模式2 /start/,/end/ 从匹配模式1到模式2的行。$1、$2... 第1、2...个字段 print $1, $3。
2026-05-25 19:31:13
242
原创 gbase8s用户管理
4.1 代理用户信息存储在sysuser库下的syssurrogates 表中,代理用户创建的内部用户存储在 sysusermap 表中。4.2 创建好内部用户后在业务库的sysusers表中不存在 ,授予数据库权限后才会存在。3 推荐使用模板用户,即create default user ...2 代理用户推荐使用daemon 防止其他用户密码策略引起访问问题。1 优先使用内部用户,操作系统用户容易被误删或者迁移环境时漏掉。5 修改内部用户密码。
2026-04-28 11:15:08
43
原创 gbase8s数据库权限分类及基础使用
授予表或视图的权限,如果该用户拥有该表(或已经由 WITH GRANT OPTION 关键字被授予对表的权限)s(选择)、u(更新)、*(列级别特权)、i(插入)、d(删除)、x(索引)、a(改变)和 r(引用)比如dba1 授权 001 用户 查询 t1表的权限,也应该由dba1回收该权限,dba2 无权操作。public权限 是特殊的权限控制组,具有一组权限,默认的权限为 su-idx----- 替换为你想要查询的用户名。用户拥有的最终权限是(直接权限 + 角色权限 + PUBLIC 权限)的并集。
2026-04-27 20:57:54
314
原创 gbase8s数据库中对象元数据查询
最近整理了gbase8s数据库中常见的元数据的查询,包括表、视图、序列、包、类型、触发器、plsql等等,仅供参考。
2025-08-10 15:51:24
205
原创 gbase8s 常见表约束介绍
存储于sysconstraints 表中 constrtype='U' 对应索引信息存储于 sysindexes idxname进行关联。存储于sysconstraints 表中 constrtype='P' 对应索引信息存储于 sysindexes idxname进行关联。存储于sysconstraints 表中 constrtype='R' 对应索引信息存储于 sysindexes idxname进行关联。存储于 sysconstraints 表中 constrtype='N'
2025-08-02 17:31:11
537
原创 gbase8s sql优化之星型连接
学生其他属性...][学生住址表] -- [学生表(事实表)] -- [分数表]星型连接 主要为 一个事实表与多个维度表的join 连接。2.2 查询中的所有表必须至少具有低级别统计信息。以学生表为中心,像四周发射,就像星星一样。2 gbase8s星型连接的前置条件。2.3 只能有一张事实表。2.1 必须开启PDQ。
2025-07-03 19:30:39
195
原创 oracle集合三嵌套表(Nested Table)学习
NESTED_TABLE_ID实际上是与主表的行标识符(ROWID)相关联,虽然基于行标识的概念,但不是直接存储主表的物理ROWID。嵌套表(Nested Table)是Oracle中的一种集合数据类型,它允许在表中存储多值属性,类似于在表中嵌套另一个表。嵌套表存储表会自动创建一个系统生成的NESTED_TABLE_ID列,用于与主表关联。-- 查看嵌套表存储表的结构(不显示NESTED_TABLE_ID列)-- 创建一个嵌套表类型,基于address_type。-- 在嵌套表存储表上创建索引。
2025-07-02 16:21:56
617
原创 oracle 集合二 可变数组(VARRAY)学习
传统数组内存一定是连续的,可变数组也是如此,因可变数组并不分配所有内存,如果发生在连续的内存不足以满足扩容请求则发生数组复制,即寻找一块可以容纳的连续空间进行复制。可变数组初始化也需要指定长度,但并不会分配所有内存,而是先预分配部分,后边自动扩容,直到达到定义大小上限。传统数组初始化时需要指定长度,即使脏内存未被清理,此时该内存也已经可以使用,也就是说初始化即分配内存。能在PL/SQL外定义使用,也可在PL/SQL内定义使用,也可在PL/SQL内使用外部定义的数组。在PLSQL外定义,在PLSQL内使用。
2025-06-29 17:55:16
510
原创 oracle集合一 关联数组(索引表)学习
PRIOR key := arr.PRIOR(current_key) 返回小于指定键的上一个键。删除单个元素 arr.DELETE(key) 移除指定键的元素 O(1)NEXT key := arr.NEXT(current_key) 返回大于指定键的下一个键。TO_CHAR TO_CHAR(arr(key)) 元素值转为字符串。
2025-06-27 18:49:52
564
原创 gbase8s自定义数据类型
gbase8s 要求必须实现 创建转换等组函数,其中还需要实现流支持函数以及存储支持函数,部分函数反编译出来看不太明白,舍弃了。2 未知数据类型 比如 现在想实现一个 描述 正方体体积的数据类型 volume(长,宽,高)1 如果为已知数据类型,可使用 distinct type。2.3 创建数据类型。2.4 创建相关函数。
2025-06-24 17:45:25
253
原创 gbase8s数据库获取jdbc/odbc协议的几种方式
解析二进制协议的命令为sqliprint 该命令位置为 gbase8s数据库 csdk 安装路径/bin 下。jdbc参数,密文协议,需使用解密工具解析,解析后每个sid对应一个文件。需要使用gbase8s协议解析器进行解析,例如 gbase_8s.lua。jdbc 参数 ,明文协议,并发时 会错乱,适合单线程调试。密文协议,需使用解密工具解析,解析后每个sid对应一个文件。密文协议,需使用解密工具解析,解析后每个sid对应一个文件。wireshark 或者类似工具。日志文件路径为数据库安装路径下。
2025-06-11 13:35:21
631
原创 mybatis学习
在创建 Executor、StatementHandler、ParameterHandler 和 ResultSetHandler 时会使用 Plugin.wrap() 方法为这些对象创建代理。这些对象被创建时,会通过 InterceptorChain.pluginAll() 方法将所有配置的拦截器应用到目标对象上,形成代理链。在xml中注册拦截器后,在XMLConfigBuilder中的 pluginElement()组件会解析拦截器并反射创建实例。
2025-06-06 13:27:31
229
原创 gbase8s数据库+mybatis问题记录
最后判断statement.isClosed()时,会直接调用jdbc底层的isClosed()函数,查看文档发现,该函数为jdk1.6引入,当时gbase jdbc并未实现该函数,导致判断异常,从而无法释放statement对象资源,在大量的循环中易发生内存泄漏。在实际使用中一般都是mybatis+数据库连接池组合使用,单独使用mybatis 连接数据库时,在循环使用PreparedStatement 时 会发生内存泄漏,PreparedStatement资源得不到释放。
2025-05-30 17:11:14
413
原创 gbase8s统计更新(UPDATE STATISTICS)介绍
比如 p1 中引用了 t1.c1列 ,当发生 alter table t1 modify 时 ,p1可能会存在错误风险,此时统计更新后会生成新的执行计划,新计划中包含了 直接或间接引用的对象变化后的信息。medium 默认的 bin 的采样的行的 percent 为 2.5 这个值将每一列的值的范围分成大约40 个间隔。high 默认的 bin 的采样的行的 percent 为 0.5 这个值将每一列的值的范围分成大约 200 个间隔。优化器确定执行sql的最有效策略,使用系统表的信息来确定最佳查询策略。
2025-05-27 17:00:00
553
原创 gbase8s数据库IFX_CODESETLOB,LOBCACHE参数说明
以下测试为两个参数的触发场景,在不同的驱动版本中,可能会有不同的优化,以下测试版本为 jdbc_3.3.0_*版本。在 gbase8s官方文档描述中,IFX_CODESETLOB、LOBCACHE参数在发生字符集转换时生效,参数单位为字节,即规定了转换过程是在内存还是在临时文件的阈值。而在text类型时 IFX_CODESETLOB 不配置 则默认不开启,当配置时 会按照配置大小决定是在内存还是再临时文件。byte getBinaryStream IFX_CODESETLOB LOBCACHE 生效。
2025-05-18 13:01:51
315
原创 gbase8s数据库 tcp连接不同阶段的超时处理
在配置后,使用操作系统 net.ipv4.tcp_keepalive_time net.ipv4.tcp_keepalive_intvl net.ipv4.tcp_keepalive_probes 参数进行tcp keepalive 检测。数据库端无需配置,会按照上述三个参数进行连接检测,若net.ipv4.tcp_keepalive_time 为0 则默认30s。LOGINTIMEOUT 参数生效,该参数为socket超时参数,单位毫秒。IFX_SOC_TIMEOUT 参数生效 单位 毫秒。
2025-05-07 16:20:50
294
原创 gbase8s存储学习一 rootdbs存储结构以及寻址分析
该空闲链表页的数量可能因数据块内部的碎片化程度而有所不同(可能存在多个这样的页),它包含指向未使用区段(extents)的结构体。先找到表空间的TBLspace 根据extent 以及 table 的partnum 信息找到 表的TBLspace,再根据rowid/ifx_fow_id定为到数据所在page 以及slot。系统中的每个表空间都有一个特殊页来描述,这种特殊类型的页称作分区页(TBLspace )。该表空间为数据库的根空间,主要存储数据库的一些系统元数据(系统表),以及数据库的保留页。
2025-04-23 23:36:21
1202
原创 gbase8s触发器使用
相比oracle 在for each row 触发时 是没有 before 或者after 修饰,也就是说在gbase8s中for each row没有触发前后的说法,仍然可以通过一些用例简单测试下触发时机。在实际使用中可同时存在before、after、以及for each row 触发器,顺序必须为。before after 因为是语句级触发器,没有 new值 old值的说法。for each row 为行级触发器,即每一行都会触发触发列表的操作。同样,当需要处理逻辑时,仍然需要调用存储过程来实现。
2025-04-22 18:51:45
551
原创 线程安全学习
产生原因也很简单,在现代操作系统下 cpu并不是直接访问内存,每个cpu核心都有一个 独立的L0 L1 缓存,以及共享的L2 缓存,在线程1 将 a 从主存写入缓存时,进行++操作,此时a +1 并未回写至主存, 此时线程2 去主存中读取的值仍然为1, 并且 ++操作也非原子操作,多种可能都会导致结果不符合预期。线程是cpu调度的最小单位,在Linux 下 实现线程的方式为轻量级进程,复用进程的结构体,使用clone函数创建。所谓线程安全,更确切的应该描述为内存安全。
2025-04-16 20:27:06
232
原创 gbase8s cdc协议解析
000000C8 4字节 cdc记录号 代表 具体的操作,存储于cdc 系统库下的syscdcrectypes 表 主要包括插入、删除、修改、事务开始、事务提交、truncate等等。000000C9 4字节 cdc记录号 c9 对应为超时 CDC_REC_TIMEOUT ,即没有新的数据变化。先进行CDC_REC_TABSCHEM 操作,该操作主要返回了一些信息,比如 捕获列的信息,数据类型为变长或者固定长度等。c8对应的操作为CDC_REC_TABSCHEM 描述信息。
2025-03-23 20:30:19
1001
原创 从微信复制代码的坑
这个地方应该是中文的空格,因为命令都是使用微信发送的,可能不小心将尾部的空格也复制了,知道原因后处理起来就非常简单了,去掉尾部空格后,一切正常。近期,在协助客户调试odbc 时 所有的配置均已完成,数据库也一切正常,使用 isql 测试连接的时候报错库文件找不到。sqlhosts 文件是gbase数据库的监听配置文件,依赖与GBASEDBTSQLHOSTS环境变量。神奇的是我们查看LD_LIBRARY_PATH 时一切正常。与之前的库文件问题一样,此时终于意识到是环境变量出了问题。在进行连接时仍然报错。
2025-03-22 15:01:40
159
原创 gbase8s rss集群通信流程
如果主服务器发生故障,那么备用服务器可以接管,直到主服务器恢复运行为止。基于逻辑日志的复制技术,需要传输大量的逻辑日志,数据库需启用日志模式。最大允许主节点发送64个log buffers 后返回ack。如下线程主要作用为解析主机发送的逻辑日志然后在备机重做。RSS是一种将数据从主服务器复制到备服务器的方法。实例级别的复制 (所有启用日志记录功能的数据库)RSS 节点不能提升为主节点,只能提升为标准节点。RSS 节点不能提升为HDR备节点。DRAUTO 必须使用CM切换。HDR备节点可降级为RSS节点。
2025-03-10 11:40:01
516
原创 gbase8s hdr(hac)集群通信流程
xtrace 是用来追踪在线运行ids的工具,这个工具可以打印代码中已经插针的日志,使用时会先初始化一个环形队列,将用来记录日志信息。1 向备机发送DR_MSG_PING 消息,每隔DR_TIMEOUT s 一次(有的版本固定1s)检查是否收到 主节点 每隔DR_TIMEOUT s 的DR_MSG_PING 消息。主要函数 smx_send_from_recv_thread()主要函数 dr_idx_send_thread()主要函数 dr_idx_recv_thread()
2025-03-08 16:47:18
846
原创 gbase8s数据库常见的连接算法
外表指针指向第一条数据,内表指针顺序移动,找到和外表匹配项,记录,内表循环结束后外边指针继续向下移动,一直到外表循环结束为止。hash 连接中只有极少量的随机读,大部分都为顺序读,极大缓解了大量随机读的压力。有则取捅中进行匹配(若捅中有多条数据则发生hash碰撞),没有则继续匹配下一。hash 连接避免了嵌套循环的大量的随机读,简单伪代码如下。在gbase8s 中 ,常见的连接算法主要分为如下几种。细分可分为索引嵌套循环,块嵌套循环,半嵌套循环等。嵌套循环的缺点,在大量数据下会发生大量的随机读。
2024-11-13 21:40:45
407
原创 gbase8s数据库获取随机数方法
/ 取低31位作为结果,避免符号位影响。在早期的数据库版本中,没有获取随机数的函数,为此,提供如下几种方式,仅供测试参考,具体使用请联系gbase8s官方技术支持。--将结果映射到[0,100]区间。--简单的线性同余生成器(LCG)的变种。--XORSHIFT算法。
2024-11-11 22:26:14
807
原创 字符类型模糊查询优化案例一
在实际开中中经常会遇到 like '%a' 运算,一般在数据库中此种写法不能使用索引优化查询,本示例提供一个简单的优化思路。由此,c1 like '%a' 可以转化为 c2 like 'a%'可以在改该表结构的基础上增加一个新的字段,该字段为目标字段的。这里借鉴 oracle 的反向索引的设计理念。使用触发器等方式实现目标字段的。
2024-11-05 20:34:58
324
原创 shell基础下
Linux 利用信号与系统中的进程进行通信。kill -l 列出信号列表在默认情况下,bash shell 会忽略收到的任何 SIGQUIT(3)信号和 SIGTERM(15)信号。会处理收到的所有 SIGHUP(1)信号和SIGINT(2)信号。
2024-10-28 16:03:56
733
原创 shell基础中
向 shell 脚本传递数据的最基本方法是使用命令行参数。命令行参数允许运行脚本时在命令行中添加数据:将文本字符串作为参数传递时,引号并不是数据的一部分,仅用于表明数据的起止位置。
2024-10-28 15:22:40
866
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅