自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(80)
  • 收藏
  • 关注

原创 gbase8s tls 证书制作

【代码】gbase8s tls 证书制作。

2026-10-27 15:30:05 181

原创 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 gci简单使用

【代码】gbase8s gci简单使用。

2026-08-02 21:17:16 146

原创 gbase8s逻辑日志不能备份

该参数监听数据库时间,当发生逻辑日志切换时,会捕获该事件,然后执行配置的脚本进行备份操作,为了定位问题,将debug输出到日志文件。近期发现一个奇怪的问题,生产环境正常运行,突然数据库的逻辑日志就不能备份了,后经过询问得知是启动数据库主进程所在目录被删除。数据库备份逻辑日志的大概流程为。922 的错误就是不能获取当前的工作目录。当数据库启动目录被删除时,日志信息如下。可以发现备份命令报错了。

2026-06-09 11:11:36 183

原创 shell进阶

【代码】shell进阶。

2026-05-29 10:22:58 23

原创 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

原创 cte递归修改案例

【代码】cte递归修改案例。

2026-01-15 11:02:48 236

原创 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 游标学习

【代码】oracle 游标学习。

2025-07-03 16:36:34 141

原创 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

原创 gbase8s jdbc协议简单描述

【代码】gbase8s jdbc协议简单描述。

2025-06-10 10:44:17 173

原创 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 odbc学习

【代码】gbase8s odbc学习。

2025-04-10 22:48:34 206

原创 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数据库检测非法字符

在实际项目中,数据库有可能会出现非法字符,其原因有多种,如下提供一种非法字符的检测方法,仅供参考。

2025-03-06 20:39:54 328

原创 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

原创 shell 基础上

常见的shell 主要分为以下几种bash ,dash,csh,tcsh,zsh等。

2024-10-26 15:29:33 687

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除