你的数据库危机四伏

标签: 数据库 危机 | 发表时间:2014-12-05 23:08 | 作者:
出处:http://kb.cnblogs.com/

   英文原文: Your Database: The Threat That Lies Within

  我们已经给予了数据库充分的关注,因此它们不应成为IT风险因素。但即便为DRP(灾难恢复计划)准备预算、备份机制并且拥有一流的DBA,数据库仍然造成了重大威胁。这是为什么呢?

   变得敏捷

  在快速发展、充满竞争的市场中,如果你的竞争对手能够更快更好地发布相关产品,那就意味着你终将失去市场份额。这也就是为什么公司需要变得敏捷。公司需要更好地掌控信息、更快地制定决策、加快软件交付以及优化质量控制。敏捷生来就是处理这些挑战的。它一方面使组织能够更快地发展,并处理不断变化的需求,另一方面又能确保最佳质量。把敏捷概念带入产品(产品环境、客户站点等)当中,并使得开发和运营紧密相连,这样的需求导致了DevOps的诞生。

  敏捷和DevOps的出现并未使软件开发生命周期(SDLC)的最佳实践发生彻底的改变。因为它们是软件开发演进的步骤,而不是一次彻头彻尾的变革。然而,如果你正行驶在敏捷世界的快车道上的话,如何贯彻执行这些最佳实践将显得更为重要。此外,自动化是极其重要的,它既提升了总体效率,又减少了频繁变更和发布的固有风险。

  流程的自动化、持续集成、持续交付以及持续部署的实现,这些实践已经被反复证明过了。它们确保了总体流程的高效和可靠性。

   对数据库需要特别关注

  基于自动化的可重复性和可持续性流程共同驱动着更安全和更少出错的部署工作。要想在频繁变更中立于不败之地,那就不能依赖于个人能力去记住所有已完成的步骤,也不能依赖于群体能力去识别出可能受到当前变更影响的所有范围。关键在于要尽可能减少人工操作。

  但不同于其他软件组件和代码(或者是编译过的代码),数据库可不只是一堆文件。数据库是你最有价值的资产,它包含了需要妥善保管的业务数据。因此我们不能将它从开发环境拷贝粘贴到测试环境再到产品环境。大多数情况下,数据库的开发与应用代码(.Net或者Java开发)显得截然不同:开发人员和DBA访问并更改共享资源,即一个中央数据库,而不是工作站上的一个本地拷贝。

  数据库开发和普通应用代码开发是如此不同,最终导致了孤岛的产生。

  应用开发人员正勇往直前,他们采用优秀的新开发工具、实践敏捷方法、自动化以及持续交付。相比之下,数据库开发采用的却是一个相对不受控制的流程。数据库开发与其说是工程实践,倒更像是一门与整个SDLC流程相隔绝的艺术。在这里,人们从未共享过开发工具、流程和最佳实践。

  数据库作为有价值的资产,极易成为摇晃的车轮从而破坏了整车的平衡(即成为短板)。

   数据库变更应如何进行处理?

  我们不应该仅仅因为数据库构造的不同而视它为特别的事物。我们应该确保所有团队、代码开发人员、DBA和数据库开发人员都采用相同的流程。如同在代码开发中做的那样,我们应当遵循这些已得到证明的软件开发最佳实践,并将其应用到数据库开发当中去。

  在整个开发周期中,为了将数据库造成的风险最小化,我们需要按照以下方式解决问题:

  • 敏捷开发——实行短小的开发周期,同时将数据库变更作为基于任务的开发工作的一部分进行管理。这样做能够确保代码变更和数据库变更同时完成,并在之后能够基于变更请求一同部署。

    ——像Jira这样的任务管理解决方案能够将任务(task)、问题(issue)、变更需求(change requirements)或者问题记录(trouble ticket)与实际需要完成的工作对应起来。它能帮助并引导你朝着明确定义的可交付成果方向进行努力,并在之后采用以任务为中心的视角来部署这些变更。

  • 像Chef、Puppet和Jenkins这样的工具使得软件开发环境的配置变得更加高效。但是数据库方面又是如何呢?你如何配置大型数据库环境?即便是配置小型数据库环境?数据库仍然是敏捷跨不过去的槛。

    ——使用 Delphix可以方便地创建虚拟数据库分支。创建开发环境将变得轻而易举,并行开发也变得触手可及。生产环境的虚拟拷贝允许你使用最新产品环境的真实数据来测试产品部署,而无需处理存储问题或是真实的产品风险。

  • 假如你尝试去构造一个良好的开发、测试、UAT(用户接受性测试)或是产品预发布环境,那么内容屏蔽确确实实是一个挑战。测试数据越真实,你对质量保障也就越充满自信。但是如果开发人员可以不加约束的访问产品拷贝,那会怎样呢?你的信用卡号码是否有可能正好留在其中一台笔记本上?它会泄露出去吗?另一方面,如果采用模拟数据或是根本不用任何数据,那将无法营造一个良好的测试环境,同时性能测试也会不准确。

    ——像 DMsuite这样的解决方案能够用逼真、但也是虚构的数据来替换机密数据,而不需要任何编码。如果为了达到某种目的(健康保健亦或是财务方面的内容)或者正好存在一些敏感信息而使得你需要这样做的时候,它会通过在非产品环境中替换机密数据的方式从而减少你的“可侵入的足迹”。

  • 数据库变更管理——运用数据库工具以确保数据库变更能够作为SDLC的一部分妥善管理,而不是隔绝在主要开发流程之外。另外,确保每一次变更都和一个变更请求关联起来。这有助于将数据库管理工作作为通用开发或变更工作的一部分。 <

    >- 通过使用 DBmaestro可以加强版本控制并同时追踪所有变更。一切尽在你掌控之中:谁在做什么事,在哪里,为什么这样做。它将消除流程外的变更。一旦开发周期结束, DBmaestro会将相关的变更自动部署到集成环境中去,识别出变更冲突并且合并它们,如果没有冲突则直接推送到产品环境中去。

  • 测试自动化——建立合适的自动化测试需要巨大的投资。你需要将之视为长远目标,而非一次性项目,并开始为每次新的开发活动或是主要变更创建并积累自动化测试。

    单元测试:建立坚固的安全网络需要采用以变更为重点的测试方法,同时确保那些变更没有造成破坏。

    ——通过采用 Oracle SQL Developer或者Microsoft平台的 tSQLt这样的单元测试工具就可以引进数据库单元测试,而无须任何花费。

    回归测试:另一种测试方法,它将数据库和应用代码作为一个整体来进行测试。

    ——使用 TestComplete验证那些常见的场景,之后也可以加入对不太常见的场景的验证,这将使你自信满满地交付发布。

  • 发布自动化——缓解风险的关键角色。自动化的部分越多,你就越能做到精确掌控:重现开发中引入的变更,并在测试环境中测试,最终安全地应用到产品环境中去。一旦你自动化了SDLC的流程并且成功解决日常工作中的挑战,那么一个健康的SDLC就水到渠成了,它能同时兼顾最小风险和最高效率。

    ——使用 IBM Urbancode部署工具能够帮助你管理发布活动和配置,并精心策划总体流程。

  最好的消息是,这些不同类型的解决方案完全可以合作无间。因而可以使用Delphix创建虚拟开发分支,使用DMsuite屏蔽机密内容,使用Jira管理开发任务,使用DBmaestro对变更和发布进行版本控制,使用tSQLt或者SQL Developer进行自动化测试发布,以及使用uDeploy来策划发布流程,以上所有都能汇总成一个精巧的、自动化的并且安全的流程。

   总结

  当着手采用最佳实践的时候,数据库才展现出真正的挑战。这也正说明了孤岛是如何产生的。开发部门或许会采用不同的流程来分别对待代码开发和数据库开发,或仅在部分变更工作中采用最佳实践。

  消除主要风险的最佳方法是,不要以技术眼光去看待这些差异,同时找到解决方法——流程或者工具——去采用并实施最佳实践和自动化。

  作为一份具有如此高价值的资产,数据库不应成为你的业务的短板。 

相关 [数据库 危机] 推荐:

你的数据库危机四伏

- - 博客园_知识库
   英文原文: Your Database: The Threat That Lies Within.   我们已经给予了数据库充分的关注,因此它们不应成为IT风险因素. 但即便为DRP(灾难恢复计划)准备预算、备份机制并且拥有一流的DBA,数据库仍然造成了重大威胁.   在快速发展、充满竞争的市场中,如果你的竞争对手能够更快更好地发布相关产品,那就意味着你终将失去市场份额.

数据库sharding

- - 数据库 - ITeye博客
当团队决定自行实现sharding的时候,DAO层可能是嵌入sharding逻辑的首选位置,因为在这个层面上,每一个DAO的方法都明确地知道需要访问的数据表以及查询参数,借助这些信息可以直接定位到目标shard上,而不必像框架那样需要对SQL进行解析然后再依据配置的规则进行路由. 另一个优势是不会受ORM框架的制约.

数据库索引

- - CSDN博客推荐文章
索引是由用户创建的、能够被修改和删除的、实际存储于数据库中的物理存在;创建索引的目的是使用户能够从整体内容直接查找到某个特定部分的内容. 一般来说,索引能够提高查询,但是会增加额外的空间消耗,并且降低删除、插入和修改速度. 1.聚集索引:表数据按照索引的顺序来存储的. 2.非聚集索引:表数据存储顺序与索引顺序无关.

数据库事务

- - 数据库 - ITeye博客
事务传播发生在类似以下情形:. 假设methodB的配置是:. 如果methodA在事务里,那么methodB也在这个事务中运行. 如果methodA不在事务里,那么methodB重新建立一个事务运行. 如果methodA在事务里,那么methodB也在这个事务中运行. 如果methodA不在是事务里,那么methodB在非事务中运行.

数据库优化

- - 数据库 - ITeye博客
程序运行效率,优化应用程序,在SP编写过程中应该注意以下几点: . a) SQL的使用规范: .   i.尽量避免大事务操作,慎用holdlock子句,提高系统并发能力.   ii.尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接.   iii.尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作.

数据库调优

- - 数据库 - ITeye博客
1、1、调整数据结构的设计. 这一部分在开发信息系统之前完成,程序员需要考虑是否使用ORACLE数据库的分区功能,对于经常访问的数据库表是否需要建立索引等. 这一部分也是在开发信息系统之前完成,程序员在这一步需要考虑应用程序使用什么样的体系结构,是使用传统的Client/Server两层体系结构,还是使用Browser/Web/Database的三层体系结构.

MySQL数据库的修复

- Xin - 博客园-首页原创精华区
找到mysql的安装目录的bin/myisamchk工具,在命令行中输入:. 然后myisamchk 工具会帮助你恢复数据表的索引. 好象也不用重新启动mysql,问题就解决了. 当你试图修复一个被破坏的表的问题时,有三种修复类型. 如果你得到一个错误信息指出一个临时文件不能建立,删除信息所指出的文件并再试一次--这通常是上一次修复操作遗留下来的.

Oracle 发布 NoSQL 数据库

- 冷月 - 博客园新闻频道
  Oracle 作为全球最大的关系型数据库提供商,在其产品链条中,也加入了 NoSQL 数据库这一环,而且这个新的数据库名字很霸气,就叫 NoSQL Database,想起了当年新浪微博更换 weibo.com 域名之时的一个笑话:. 原来有三家人做面包,张三家的面包叫三张牌面包,李四家的牌子叫李四牌面包,王五家出品的是王五牌面包,而突然有一天,张三家的面包改名了,叫面包牌面包.

WineHQ 数据库泄漏

- gnawux - LinuxTOY
运行于 *Nix 之上的开源跨平台 Win32 API 兼容层 WineHQ 的 AppDB 和 Bugzilla 数据库被黑客攻击. CodeWeavers CEO Jeremy 在信中提到黑客利用某种方式获取了 WineHQ 的 AppDB 和 Bugzilla 的访问,并且下载了完整数据库文件.