【PM】关于系统数据库和服务现场升级的一些看法
工作快满一年了,立即着手准备第二次出差去升级我们的系统,可是突然想到一件事情,让我颇有感触,是关于系统现场升级的。
我们迭代开发的系统隔一段时间就会须要到用户的现场去为其进行系统升级,当中升级包含client,服务端,以及数据库。
眼下我们的做法是什么?
升级服务的方法是,将带过去的新的服务全然替换掉旧的服务,然后人工改动全部服务的相关配置。
升级数据库的方法是。在自己的笔记本上面部署一套我们须要升级的版本号的数据库。然后到现场之后利用TOAD的schema的对照功能(我们用的是Oracle数据库)。逐个Schema进行对照,然后找出这些区别。手动将这些区别一个个在用户现场的数据库上进行改动,直到两个数据库一样为止。
并且非常多时候数据库的改动是针对一个功能的,可能建立触发器,job,序列,改动表什么的会存在一些先后顺序,假设不知道这些顺序就通过对照来升级。出错的概率非常大。
顺便提一句,我们的是CS系统。数据库中须要更新的改动包含表结构改动。元数据表的内容的改动,以及其它如序列,存储过程,触发器,Job等的改动。
好吧。我想说的是,服务数量和数据库涉及的Schema以及表的数量少一点的话还好,我们这样做还能应付,要是服务和数据库的Schema多了呢?
那就谁也不想出差了。出错的概率我感觉起码是90%以上,难道你还要搞完了以后现场驻扎測试3天?
个人觉得,我们为什么不这样做呢?
1、关于数据库升级
(1)公司开发环境的SVN为每个系统都维护一个系统目录。目录里面为每个Schema也建立一个Schema目录。每个Schema目录中都包括这样一些文档:“基于版本号X的数据库改动”。当中所有以SQL脚本的形式维护,记录了数据库的改动步骤以及改动人。
(2)系统文件夹的根文件夹以下维护一个文档,是当前现场的数据库各个Schema的版本,以及当前是谁在什么时候为其定版的。
就像以下一样:
在这个基础之上。假设下次你要出差,你所要做的事情就是:
查看当前用户现场的Schema发现各自是版本号25,26,26,26。那么你就到各自的目录以下。将相应的“基于版本号25的数据库改动”,“基于版本号26的数据库改动”,“基于版本号26的数据库改动”。“基于版本号26的数据库改动”这几个文件带上,到现场仅仅须要把文档里面的SQL脚本依次跑一下就可以。
文件中面还有是谁做的改动,这样你跑SQL脚本的时候有什么问题还能够打电话回来问相应的责任人。
然后你出差回来之后,你已经将这几个Schema升级了,所以你须要改动根文件夹以下的文档,进行定版:将相应的版本+1,然后定版历史注明谁在什么时候定版的。
然后还要到各自Schema的目录以下,建立新的文档。命名为“基于版本号X+1的数据库改动”。用于以后开发者记录在新的版本号上面所做的数据库改动。
这样不是非常方便么?
这种方法有一个原则,不能让不论什么人都有改动数据库的权限,要么仅仅有项目负责人来改动数据库,并在这里进行相应的记录,要么让改动数据库的人把SQL脚本发给项目负责人或者别人准们管数据库的人。来在这里记录。
总之。不论什么数据库的改动。须要让清楚我这个机制的人来允许。
2、关于服务升级
个人认为部署和升级服务最烦的就是配置项了(我们后台实用的是WCF服务)。
假设每次升级服务都要手动改动每一个服务的配置项明显不行。
我认为须要有一个统一的地方来进行全部服务的配置,即将整个系统的全部配置进行集中管理!!!
这就须要一个配置中心。整个配置中心维护了整个系统的配置信息。
(1)全部的服务在启动的时候訪问配置中心获取所需的配置项。
(2)现场部署人员能够通过简易的UI界面来操作这个配置中心,增删查改整个系统的配置项。
C#系统的话可能须要自己实现这么一个配置中心,前期能够仅仅做简单的一个节点的配置中心。
JAVA系统的话。能够使用开源的Zookeeper。能够作为集群来执行配置中心。
以上全然是个人在这样一家公司工作了将近一年之后的感受,即感觉到一些不好的地方。然后提出了自己的一些想法。
我的想法可能不是非常合理,这须要与更加成熟的公司的人进行交流才知道。
希望各位假设看了之后有想法和类似经验的,指教。小弟在此谢过。!
!!
【PM】关于系统数据库和服务现场升级的一些看法的更多相关文章
- ylbtech-KeFuYunWei(服务运维考核系统)-数据库设计
ylbtech-DatabaseDesgin:ylbtech-KeFuYunWei(服务运维考核系统)-数据库设计 DatabaseName:KEFUYUNWEI Model:Admin 用户后台管理 ...
- 替换系统数据库解决SQLSERVER服务启动不了的问题
替换系统数据库解决SQLSERVER服务启动不了的问题 当遇到SQLSERVER服务启动不起来的时候,我们试过把系统的四个数据库master ,model ,tempdb,msdb 替换掉,Windo ...
- SQL Server 系统数据库恢复
标签:SQL SERVER/MSSQL SERVER/数据库/DBA/故障恢复/master 概述 SQL Server 维护一组系统级数据库(称为“系统数据库”),这些数据库对于服务器实例的运行至关 ...
- SQL Server 重新初始化系统数据库中的单引号问题
在最近的数据库跨机房迁移中,由于硬件的限制,需要滚动式地将数据库一台台迁移到新机房,先在新机房搭建一个新环境,将数据迁移过去,再将旧机房的机器下架搬到新机房,重新配置后用于下一轮的升级,重新配置过程中 ...
- CentOS7系统操作httpd服务 - 开机启动/重启/查看状态
第一.启动.终止.重启 systemctl start httpd.service #启动 systemctl stop httpd.service #停止 systemctl restart htt ...
- Linux系统自带服务罗列
/ect/services 文件列出了系统详细的服务 红色字体为常用服务 acpid ACPI(全称 Advanced Configuration and Power Interface)服务是电源管 ...
- sqlserver 标准系统数据库
SQL server系统数据库很重要,大部分时候都不应该修改他们.唯一例外的是model数据库和tempdb数据库.model数据库允许部署更改到任何新创建的数据库(如存储过程),而更改tempdb数 ...
- 关于SQL Server系统数据库详解
介绍这里我们介绍SQL Sever内部的系统数据库的作用和用户数据库之间联系,关于SQL Sever如何管理用户数据库的原理,对于每个数据库开发人员和DBA都是必须掌握的. SQL Sever系统数据 ...
- 中科图新成为Bentley产品培训合作伙伴!质量服务双升级
中科图新从2016年起开办ContextCapture产品培训,目前已累计培训了500多家企事业单位,涉及传统测绘单位.无人机航测.规划设计.建筑工程.水利.电力.交通.文保等十多个行业.实力过硬,口 ...
随机推荐
- 【BZOJ 2510】 2510: 弱题 (矩阵乘法、循环矩阵的矩阵乘法)
2510: 弱题 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 374 Solved: 196 Description 有M个球,一开始每个球均有一 ...
- [BZOJ2429][HAOI2006]聪明的猴子(最小生成树)
性质:最小生成树上任意两点间的最大边权,一定是这两点间所有路径的最大边权中最小的.证明显然. #include<cstdio> #include<cstring> #inclu ...
- [BZOJ1492][NOI2007]货币兑换Cash(斜率优化+CDQ分治)
1492: [NOI2007]货币兑换Cash Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 5838 Solved: 2345[Submit][Sta ...
- bzoj 2045: 双亲数
2045: 双亲数 Description 小D是一名数学爱好者,他对数字的着迷到了疯狂的程度. 我们以d = gcd(a, b)表示a.b的最大公约数,小D执著的认为,这样亲密的关系足可以用双亲来描 ...
- 关于图表第三方Charts的一些理解与总结
最近项目中用到了很多的图表,如柱状图,线状图,饼状图等等.接触到了一个新的第三方Charts,在做图方面确实非常强大,在使用了一段时间后,今天对他进行一个小的总结,也是自己的一点小理解. 关于char ...
- vue获取当前v-for里当前点击元素
app.vue <template> <div id="app"> <ul > <li v-for="(item,index) ...
- cocos2d-x HelloWorld 代码一撇
本节简单对新生成的hellowrold 项目相关代码进行简单分析,具体以代码注释的方式展示给大家.代码相对简单些,在此不作过多赘述,直接上码: int APIENTRY _tWinMain(H ...
- C#类和结构体的异同点简单总结
类和结构的异同点?异: 1.关键字不同 一个是class,一个是struct 2.类型不同,一个是引用类型,一个是值类型(一个堆区,一个栈区) 3.成员不同,结构体没有默认的构造函数 ...
- 简单的后台管理系统vue-cli3.0+element-ui
前段时间在研究一个分发系统,发现vue-cli+element-ui好像是挺不错的,然后自己根据那个分发系统尝试搭建了一下 1.首先安装vue和vue-cli // 全局安装vue npm insta ...
- mvn sonar:sonar在jenkins步骤的执行位置影响执行结果
1.如图所示,sonar执行可以在build中执行,也可以在步骤Post Steps中执行(mvn sonar:sonar) 2.但是在步骤Post Steps中执行的话,有一个问题,就是假如项目有多 ...