热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DB2的七种武器

大家读过古龙先生的七种武器吗?他们各有各的妙用,各有各的人生道理在其中。DB2中也有这么七种武器,它们也是用途不同,用好了威力无穷。俺所谓的七种武器就是DB2的七个命令:第一种,霸王枪,db2pd。d

大家读过古龙先生的七种武器吗?他们各有各的妙用,各有各的人生道理在其中。DB2中也有这么七种武器,它们也是用途不同,用好了威力无穷。

俺所谓的七种武器就是DB2的七个命令:

第一种,霸王枪,db2pd

db2pd是一件真正的神器,许多DBA包括俺,就靠它活着了。它主要用于检查DB2某方面的状态和诊断DB2的问题,它来源于informix数据库的onstat工具,IBM收了informix后,从DB2的V8版本开始被引入,它最大的特点是直接从实例和数据库的共享内存中取所需数据,由于不需要获取latches和引擎资源就能干活,因此db2pd可以近似认为不会对系统性能产生影响,相当于是一个走后门不按常理出牌的冬冬,DB2中走后门的工具不只它一个,比如load工具。

它是咋样实现直接去共享内存中取数的嗫?熟悉开发的程序猿或媛们一下就能猜到了吧,就是利用了shmget()、shmat()、shmctl()这些函数呗,在Linux中用strace,AIX中用truss命令就可以跟踪的到,比方说Linux:

db2inst1@susea:~/sqllib> strace db2pd -db sample -app

-- 结果好多啊,看一下它的输出,这些函数调用暴露无疑。

shmget(0xbc789261, 0, 0700)                     = 60522498

shmctl(60522498, IPC_64|IPC_STAT, 0xbfe93ac4)  = 0

shmat(60522498, 0x10000000, 0)                 = 0x10000000

mmap2(NULL, 16842752, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)        = 0xaec92000

shmat(69304326, 0xa5920000, 0)                 = 0xa5920000

shmat(69271557, 0xaade0000, 0)                 = 0xaade0000

-- strace和truss是OS提供的问题诊断的工具,你了解的越多越好啦。

尽管db2pd无比强大,但是它也有让人头痛的地方,比方说,由于没有锁定,它提供的数据偶尔不太靠谱;它还必须在服务器端执行;截止到V95版本,db2pd拥有50多个参数,闹心的是每个小版本提供的参数都不一样,你打一个补丁,说不定就打出来一个db2pd的新功能出来;功能强大的另一面就是学习起来麻烦,咱们只能是见招拆招,遇到哪个说哪个了。所以这个命令有点让我欢喜让我忧的感觉,不过总的来说,当然还是欢喜多。

第二种,长生剑,db2exfmt

大家学习数据库都是从SQL语句开始的吧。尽管你会讲中文、说英语、懂方言,但是抱歉,关系型数据库只听的懂SQL语言。所以你要想让数据库给你干活,你必须先学它听的懂的SQL,否则你对他说:亲,把A表的前三条记录给俺拿出来瞧瞧,你觉着数据库会理你这茬吗?他根本听不懂人话啊!在select/update/insert/delete等小有基础后,你选择一到多个关系数据库的产品来学习,这个时候,实例、数据库、表空间、锁、排序、监控器神马神马的就一窝蜂地来了。但是你有没有这样的一个感觉,学到后来,似乎又回到了起点,又是在研究select,在学SQL?以前你以实现目的为目标,现在你以高效率实现目的为目标,这就是进步。

当学会了SQL,你就学会了如何对DB2呼来喝去,你只管开心地告诉DB2你想要什么,但是你有木有关心过DB2?它是怎么样完成你交给它的任务?它是轻松加愉快地完成的,还是它累到吐血了?当大多数人只关心你飞的有多高时,只有好基友会关心你飞的累不累。

db2exfmt就是这样一个DB2的好基友,好武器,它帮咱做这样一件事:它会告诉你的SQL如果交给DB2去做,DB2会怎样去实现它,这个实现的过程说明就是SQL执行计划。做为DBA,必须关注那些核心SQL语句的执行计划,并将它们小心维护好,这是DBA最核心的工作之一。db2exfmt直接处理已收集并存储在解释表中的解释数据或快照信息,在解释表中查询信息、格式化结果,并生成一份执行计划的报告。

第三种,孔雀翎,db2dart

db2dart是一个凶悍的武器,dart的含义是Database Analyses Report Tools,简称dart,而dart刚好是飞标的意思,咱们的第三种武器孔雀翎也是一种暗器,我给大家先讲讲这个段子,哈哈,你们不会反对吧?《孔雀翎》讲的是一位大哥要去报仇,可是坏蛋的武功那个高强啊,这大哥心里没底啊!于是他找他的一个朋友去借天下无敌的武器孔雀翎,这个暗器其实失传很久了,他朋友随便弄了个铁家伙就说这是孔雀翎,大哥信了,就去找坏蛋了,因为怀揣孔雀翎,大哥很有信心,反正打你不过,老子就放孔雀翎!经过一场大战终于毙了那个坏蛋,回来后还孔雀翎时,被他朋友告知真相。要说他那朋友也挺孙子哈,万一大哥掉链子肿么办呢。这个故事也挺教育我们DBA啊,你能把数据库技术学好,有这个信心很重要呢!

故事讲完,回来接着说,db2dart主要用于数据库分析诊断,它的功能强劲,日常运维最常用的是利用它诊断表空间高水位问题,但它的本事可不仅这些,它涉及到许多方面,当数据库损坏而又没有备份时,db2dart也是咱们的最后一颗救命草。某省移动公司(为了给面子,俺就不点名了)就遭遇到了这样的倒霉事,没备份,bad page了,最后用了db2dart大招,花了一周的时间,将数据基本恢复了。

db2dart不爽的地方是,它在使用时,要求数据库必须是deactivate的,也就是说这个工具是事后诸葛亮型的,数据库活着的时候不能用!死着的才行,这是和其他工具区别显著的地方。传说db2dart还有一些未公开的参数,即使被800指挥着客户用了,过一段时间也会自动失效,这更增加了这个工具的神秘感。

第四种,碧玉刀,db2advis

OLTP系统如何提高性能,怎样才能让你的DB2跑的更快?窃以为有两条最重要的原则:1、降低数据规模;2、合理的索引。有人说物理设计啥啥的都很重要啊!先不和你抬杠,这些问题在后面都会说到的。第1条很好理解,胡司令在N年前就说过了:想当初,老子的队伍才开张,总共才有十几个人七八条枪。哈哈!如果你的数据库数据规模很小,比如就十几条记录七八张表,那你根本不必关心怎么去优化它,再二的DBMS产品也是运转如飞的,你优化的本事根本没有用武之地,如何降低数据规模?哪些数据有用,哪些数据可以迁出?这需要你对业务了如指掌,不懂业务的DBA,不是好的数据库管理员哦。

db2advis就是帮你完成第2条工作目标的武器,合理的索引设计是性能强悍的必要条件之一。有同学认为性能优化就是建索引,其实不然,光知道建有啥用?删索引、引导优化器使用合理的索引也同样重要,db2advis会替你支招,其中就包括创建、删除的建议,甚至还有MQT等,老少爷们大家走着瞧吧,关于db2advis广告之后,后面更加精彩!

第五种,多情环,db2look

多数人都知道db2look是干啥地,我觉着它是一个挺了不起的工具,是DB2数据库的特色工具,它用于生成数据库的DDL,这为异构平台搬迁数据成为可能,讲到这儿,哥不免要为DB2叹息一声,在Oracle新的版本中,已经支持跨平台的备份恢复,而DB2还只能依靠db2look+db2move这对组合来完成这类工作。

我把db2look语句写在crontab中,让它每天都定时执行一次,我让我团队里的哥们每天都去阅读它生成的文件,并与前一天对比,为什么这么做呢?这是在没有启用数据库审计的情况下的想出来的土招--我要防止数据库有不明来历的新对象产生。另外,当数据库存在identity列或Sequence对象时,可以通过db2look的生成文件观察到它们的变化趋势,这方便你对SEQ资源何时枯竭做出估计。实际运维中,建议你至少拥有一份完整的生产库db2look文件,以备不时之需。

db2look另一个猛的功能是它的mimic模式。来看这样一个应用场景:你的生产库遇到了一点麻烦,现在你希望把它复制到测试环境中排错,不幸的是测试环境非常寒酸,它达不到生产环境那样的豪华配置,你只能取一点点数据到测试库中,这时你失望地发现SQL语句在测试环境中跑的路子和生产库中完全不同,环境毕竟变化了嘛,优化器不傻,在新环境中给出来了新的SQL执行计划。为了复现生产库的SQL运行环境,这时你需要依靠db2look的mimic骗一下优化器,观察它生成的DDL脚本,尽是update掉SYSSTAT的冬冬,于是,咱们的目的达到鸟。

第六种,离别钩,db2move

db2move用来成批地导入导出数据,想要用好db2move,需要首先对export、import、load三个实用工具非常的熟练,你要非常清楚它们的功能和行为。注意,我说的是熟练。学习分为三个境界,我讲的这三个境界可不是那个流传很广,并且文诌诌的那三个境界,神马衣带渐宽,蓦然回首,又憔悴了之类的,土人有土理论,嘿嘿。这三个境界就是:懂,会,熟!

  • 懂:就是知道原理,但没实际或不需要实际去操练就算过关的学习境界;
  • 会:是不仅要知道原理,还要知道如何操作,命令记不住也没关系,但是要达到会查会用的这么一个境界;
  • 熟:要求你不仅是从里到外,还是从外到里,都要详细知道其原理,命令不查手册也能闭眼写出。

呀!有点跑题了。

第七种,拳头,db2diag

谁都希望自己维护的DB2数据库能够寿与天齐,啥毛病没有,可是现实总是有点残酷的,我们的数据库总是会有发烧头疼脚痒的情况出现。db2diag就是这样一种武器,它主要用于操作DB2的运行日志db2diag.log文件,而db2diag.log文件可以帮助DBA诊断数据库出现的99%的问题,说99%,其实也是没有办法的办法,因为我们对db2diag.log文件的依赖程度很高,谁让IBM给的诊断手段有点略显单一呢,各位同学忍了吧。有的时候,db2diag.log有点不太容易读懂,这需要你经常看,仔细看,看的多了情况就会好一些,这个又是DB2不太如Oracle的地方了L,IBM加油吧。

其实DB2的武器铁定不只七种,比它们更狠、更猛的武器,甚至是核武器也是存在的,比如:db2untag、db2trc等,上述七种之所以进了兵器谱的排名,是因为它们常用。还有,武器再好,关键也是要看使用者,各位只有通过勤练、猛试才能发挥出武器的最大能量,驾驭好它,让它属于你自己,否则你弄个危险命令搞不好还搬起石头砸废了自己的脚哦!


此文转载:http://www.db2china.net//home/space.php?uid=37983&do=blog&id=24073


推荐阅读
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
  • 本文由瀚高PG实验室撰写,详细介绍了如何在PostgreSQL中创建、管理和删除模式。文章涵盖了创建模式的基本命令、public模式的特性、权限设置以及通过角色对象简化操作的方法。 ... [详细]
  • openGauss每日一练:第6天 - 模式的创建、修改与删除
    本篇笔记记录了openGauss数据库中关于模式(Schema)的创建、修改和删除操作。通过这些操作,用户可以更好地管理和控制数据库对象。实验环境为openGauss 2.0.0,并使用由墨天轮提供的线上环境。 ... [详细]
author-avatar
mobiledu2502861847
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有