【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 3106】 3106: [cqoi2013]棋盘游戏 (对抗搜索)
3106: [cqoi2013]棋盘游戏 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 544 Solved: 233 Description 一个 ...
- manacher算法求最长回文子序列
一:背景 给定一个字符串,求出其最长回文子串.例如: s="abcd",最长回文长度为 1: s="ababa",最长回文长度为 5: s="abcc ...
- codevs 5294 挖地雷
5294 挖地雷 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 黄金 Gold 题目描述 Description 在一个地图上有N个地窖(N<=20),每个地窖中埋有一 ...
- POJ2185 Milking Grid KMP两次(二维KMP)较难
http://poj.org/problem?id=2185 大概算是我学KMP简单题以来最废脑子的KMP题目了 , 当然细节并不是那么多 , 还是码起来很舒服的 , 题目中描写的平铺是那种瓷砖一 ...
- hibernate之条件查询
一.条件查询简介 条件查询是更据面向对象特色的数据查询方式,主要通过如下3个类完成 1.Criteria:代表一次查询 2.Criterion:代表一个查询条件 3.Restrictions:产生查询 ...
- bzoj 1779
较水的网络流. /************************************************************** Problem: 1779 User: idy002 L ...
- 区间DP POJ 1141 Brackets Sequence
Brackets Sequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 29520 Accepted: 840 ...
- 三、python的数据类型 列表、元组、字典
1.list 列表 列表是由一序列特定顺序排列的元素组成的.可以把字符串,数字,字典等都可以任何东西加入到列表中,列表中的元素之间没有任何关系.列表也是自带下标的,默认也还是从0开始. List常用的 ...
- Apache -- 利用.htaccess防盗链
在Apache服务器的前提下利用.htaccess文件来防盗链的原理是通过检查图片或文件请求头信息中的Referer属性(也就是请求的来源),判断它是否属于你所规定的合法的请求来源,从而实现让合法来源 ...
- PostgreSQL与MySQL的区别收集(转)
特性 MySQL PostgreSQL 实例 通过执行 MySQL 命令(mysqld)启动实例.一个实例可以管理一个或多个数据库.一台服务器可以运行多个 mysqld 实例.一个实例管理器可以监视 ...