国产化数据库
文章平均质量分 62
老刘学达梦
这个作者很懒,什么都没留下…
展开
-
达梦数据库使用dmlcvt命令找回更改前的数据
在生产系统上不小心修改了表数据后最快的方法是用闪回查询找回。但时间不能超过undo_retention(默认90秒)。其实最标准的处理方法是在其他机器上将数据库恢复到修改前的时刻。但数据库比较大时恢复时间较长。真实场景可能比较急。那么也可以分析归档日志知道修改前的状态。分析归档日志的最常用方法是LOGMNR日志挖掘。但要求事先已经打开了附加日志RLOG_APPEND_LOGIC(默认不打开)。本文介绍另一种找回办法dmlcvt原创 2024-05-18 17:29:39 · 255 阅读 · 0 评论 -
达梦8 分析sqllog的一个实用脚本
达梦数据库跟ORACLE一样,有AWR报告功能模块用于DBA调优参考。但在实际应用中发现达梦的AWR功能存在诸多问题,原厂工程师答复正在开发中目前不要使用该功能。那么怎么分析SQL呢?如果数据库安装时打开了sqllog功能(SVR_LOG=1),那么下面的实用脚本或许能带来一些帮助。原创 2023-12-24 08:45:39 · 417 阅读 · 3 评论 -
达梦8 使用并行提高收集统计信息的速度
不过通过本次测试证明并行参数是起作用的。相信在拥有多颗CPU的机器上是可以提高性能的。单位600G数据库收集统计信息用了一天时间还没结束,在家测试一下是否可以设置并行度。分析原因是我的笔记本虚拟机只有1C,并行job需要拆分任务再合并,有一些代价。通过测试发现,我笔记本电脑的虚拟机上设置并行度反而降低性能。原创 2023-10-15 20:56:33 · 175 阅读 · 0 评论 -
达梦8 基于传输层的 SSL 协议通信加密降低性能0%至18%不等
计算密集型应用反而提高了1%,考虑到误差可以任务没有性能下降。可以得出结论:采用基于传输层的 SSL 协议通讯加密,不同应用场景性能会下降0%至18%不等。编写测试脚本,循环建立100个到远程数据库的sql会话,每个会话插入1行数据并执行统计查询。编写测试脚本,循环建立1000个到远程数据库的sql会话,每个会话插入1行数据。如上可见,向远程数据库顺序建立1000个会话并插入测试数据共耗时48秒。将ENABLE_ENCRYPT参数设置为1,执行测试脚本。本文测试基于传输层的 SSL 协议加密对性能的影响。原创 2023-07-09 19:16:53 · 463 阅读 · 0 评论 -
达梦8 报错 [-8117]:Waiting for the archive log to flush, please retry again later.
备份时报错:[-8117]:Waiting for the archive log to flush, please retry again later.还有一个经常遇到的报错:archive log collected not consecutive。解决方法:先执行checkpoint(100)主动刷新检查点。同样可以通过checkpoint(100)解决。原创 2023-06-24 11:44:14 · 158 阅读 · 0 评论 -
达梦8 LENGTH_IN_CHAR(按字符计算长度)选项的作用
当建库时LENGTH_IN_CHAR选项为默认N时,表字段定义代表字节长度。当LENGTH_IN_CHAR选项为Y时,表字段定义为n(GB18030字符集时n=2)倍字节长度,但最大存储长度不能超过8188个字节。原创 2023-06-18 17:31:26 · 2286 阅读 · 0 评论 -
达梦8 通过外部表结合SHELL脚本监控服务器文件系统使用率
我们知道v$systeminfo视图可以查看服务器的资源使用情况,比如内存、CPU、磁盘的容量和使用量。可惜只能查看磁盘的总容量,无法显示每个卷和文件系统的明细情况。我们可以通过数据库外部表结合SHELL脚本实现此功能。5、从数据库查询文件系统使用情况。2、将脚本加入crontab。3、创建外部表控制文件。原创 2023-06-06 21:53:05 · 191 阅读 · 0 评论 -
达梦8 如何为SYSDBA用户修改PASSWORD_LIFE_TIME
修改SYSDBA用户的PASSWORD_LIFE_TIME之前需要先将PASSWORD_GRACE_TIME默认的0修改。系统为新创建的LIU用户默认赋予了10天宽限期,而SYSDBA用户则是无限期(0)。下面修改一下系统时间,将时间修改为30天后,使之超过PASSWORD_LIFE_TIME,但在宽限期内。因此我们可以先修改SYSDBA的PASSWORD_GRACE_TIME,再修改PASSWORD_LIFE_TIME。这时LIU用户和SYSDBA一样,登录时系统不再提示异常,但后续执行命令宣告过期。原创 2023-05-21 21:28:32 · 2170 阅读 · 0 评论 -
达梦8 如何获得数据库中所有建表语句
我们知道在ORACLE中可以用数据泵导出(expdp),然后在测试库执行导入(impdp)。impdp命令有个选项:sqlfile=,这时并不真的导入,而是产生建库语句。很可惜达梦中没有这项功能。不过有一个与ORACLE兼容的功能dbms_metadata包。同理,可以获得约束、trigger、序列、package...等对象的创建语句。原创 2023-05-21 12:24:27 · 917 阅读 · 0 评论 -
达梦8 字符串结尾空格参数SPACE_COMPARE_MODE和BLANK_PAD_MODE参数的区别
这时候无论SPACE_COMPARE_MODE是0还是1,查询语句中都会比较字符串后缀空格。BLANK_PAD_MODE=1代表和ORACLE一样识别字符串尾部空格。BLANK_PAD_MODE=0代表达梦模式,即有可能识别字符串尾部空格。BLANK_PAD_MODE是库安装选项,它的级别最高。SPACE_COMPARE_MODE为1。插入字符串时如果带入了空格,不忽略。BLANK_PAD_MODE为0。BLANK_PAD_MODE为0。BLANK_PAD_MODE为1。BLANK_PAD_MODE为1。原创 2023-05-10 22:19:18 · 1055 阅读 · 0 评论 -
达梦8在linux里的内存分配过程
达梦8在linux里的内存分配过程原创 2023-02-11 21:16:24 · 586 阅读 · 0 评论 -
达梦8 查找丢失的归档日志
如果归档日志是曾经不小心删除的,我们反复执行checkpoint(100),结果备份还是失败,可能到最后开始怀疑人生。如果是ORACLE数据库,它的归档日志文件名字是按照sequence排序的。所以可以肉眼发现哪个中间的文件丢失了。但达梦的归档日志是按照日期时间排序。我们无法知道哪个时间段有没有归档产生。其实在ORACLE中还可以通过rman命令执行crosscheck archivelog;list expired archivelog ;快速地定位出被误删的归档。但是在达梦目前版本中我还没有发现原创 2023-02-11 11:12:28 · 232 阅读 · 0 评论 -
达梦8 闪回查询和实现机制(干货)
可以通过“select * from 表名 WHEN TIMESTAMP ' 时间'”查询过去某一个时点的数据。如果时间点不明确,可以查询V$PURGE_PSEG_TAB视图查看曾经修改某表的事务号,再通V$PSEG_COMMIT_TRX视图或者V$SQL_HISTORY视图查询事务提交时间。设置ENABLE_FLASHBACK 为 1 后,才能使用闪回查询。ENABLE_FLASHBACK 等于 0时系统照样会保存回滚段信息, V$PURGE、V$PURGE_PSEG_TAB、V$PSEG_COMMIT原创 2023-01-15 20:41:19 · 1295 阅读 · 0 评论 -
达梦8 查找丢失的归档日志
达梦8查找缺失的和没有备份的归档日志原创 2023-01-13 08:37:29 · 354 阅读 · 0 评论 -
达梦8 一场误会 原来是INJECT HINT搞的GUI
果真如此。原来上次做实验写的HINT注入还留着呢!当执行这条语句时系统会隐含增加HINT:NO_INDEX(TEST,IND_TEST),即不使用IND_TEST索引。但是不使用IND_TEST,不代表不能使用IND_TEST2。系统在没有统计信息的时候默认选择索引路径。哈哈,一场误会。原创 2023-01-07 18:10:59 · 254 阅读 · 1 评论 -
达梦8 不要用v$sqltext视图统计sql语句的执行次数
方法3完美地解决了超长SQL定位的问题,但可惜无法按照时间范围查找。v$sql_stat_history和v$sqltext视图都没有时间字段。如果要统计一个时间段内某语句的执行次数就只能查询v$sql_history视图了。原创 2023-01-01 09:09:41 · 631 阅读 · 0 评论 -
达梦8 查找系统中有没有使用绑定变量的语句
每条执行的语句都要先经过解析。在解析过程中需要进行语法和语意解析,再生成执行计划,这个过程叫做硬解析,是非常耗时的过程。如果直接从库缓存中找到已经解析过的语句的过程称为软解析。因此应该尽可能地减少SQL语句的硬解析次数。生产系统中由于历史原因可能存在大量没有使用绑定变量的SQL。通过如下语句可以快速找到此类SQL:原创 2022-12-26 10:57:01 · 395 阅读 · 1 评论 -
达梦8 SQL缓冲区的优化
以上通过绑定变量方式完美的解决了问题,大幅提高了速度。如果遇到实在不能改写绑定变量的时候只能通过sp_set_para_value命令修改CACHE_POOL_SIZE参数扩大缓冲区尺寸了。原创 2022-12-25 17:49:53 · 1138 阅读 · 2 评论 -
达梦8 执行语句报错:[-6811] 结果集总数超过限制
查找达梦文档发现有两个参数可能与本错误相关RESULT_SET_LIMIT :一次请求可以生成的结果集最大个数SESSION_RESULT_SET_LIMIT:会话上结果集个数的上限原创 2022-12-25 14:28:04 · 2331 阅读 · 0 评论 -
达梦8 查看SQL解析命中率的两个方法
v$cacheitem视图收录了系统中所有缓冲项的相关信息。TYPE$='PLN'代表执行计划。N_HIT代表节点命中次数。注意:这两种方法查出的结果并不总是一样。方法1查出的软解析和硬解析次数比方法2多一些。原因可能是某些执行计划没有收录到v$cacheitem中,或者是v$sysstat统计多了。原创 2022-12-25 09:55:59 · 499 阅读 · 0 评论 -
达梦8 BUFFER缓冲区对查询语句性能的影响
BUFFER 缓冲池设置的大小对系统性能由非常大的影响原创 2022-12-22 19:50:10 · 656 阅读 · 0 评论 -
DM8结果集缓存实验
结果集缓是用于存储经常使用的SQL语句和函数的查询结果。当相同语句再次执行的时候,DM8就不用再次重复执行(包括扫描索引、回表、计算、逻辑读、物理读等操作),而是直接访问结果集缓存得到结果。从而显著地改进需要多次执行和查询结果相同的SQL语句的性能。结果集缓存最适合的是静态表。若SQL语句中包含的表做了增删改操作,则相关的所有的SQL缓存结果集将自动失效。所以,该功能只对那些在平时几乎没有任何DML操作的只读表比较有用,可以有效减轻I/O压力。结果集缓存需要设置如下参数:RS_CAN_CACHE原创 2022-12-21 20:20:17 · 229 阅读 · 0 评论 -
达梦数据库聚集索引与普通索引的对比
达梦数据库,表和聚集索引一体两面。整个表就是一个大的组合索引,这个索引包含表中所有字段,按照索引键排序。建表时指定聚集索引键可以明显提高以它为条件的查询速度。但同时也会增加写入时间。这需要权衡。当根据条件搜索的数据占比非常少时(比如千分之一)推荐建立普通B+树索引。当占比比较大时推荐建立聚集索引。只能有一个聚集索引,选择查询频率最高的字段作为索引键。原创 2022-12-17 20:47:12 · 1276 阅读 · 0 评论 -
达梦执行计划的选择与优化思路
我们知道,SQL语句执行的效率取决于与之匹配执行计划的好坏。执行计划就是数据库引擎对某条SQL语句内部执行过程的规划,路线图。执行前优化器把SQL拆解成若干部分,先执行什么再执行什么。方法的不同可能导致执行效率的天渊之别。DM8查询优化器采用基于代价的方法。在估计代价时,主要以数据分布的统计信息为依据。在大多数情况下,估计的代价都是准确的。但在一些比较特殊的场合,如果缺少统计信息,或统计信息陈旧,或者抽样数据不能很好的反映数据分布时,优化器选择的执行计划可能都不是“最优”的,甚至是很差的执行计划。原创 2022-12-14 20:48:56 · 1380 阅读 · 0 评论