起因

七月三日早晨刚到公司,同事就跟我讲TFS开始返回 TF30042错误,报告数据库已满。按照处理问题的第一直觉,我上bing的英文网站搜了一下,发现是部署TFS的时候使用的SQL Express限制导致的。于是就开始漫长的数据库迁移之旅。

第一阶段:自信满满

给整个开发团队发了消息,通知TFS临时中断半小时到一小时。关停了TFS所有的相关服务,找到SQLExpress的数据库文件,然后拷贝到数据库服务器上。由于数据库文件比较大,拷贝大概花了半小时。由于最近在思考怎么制定一个比较好的发布流程,在这个拷贝过程中,把基本的发布工具的设计确定了下,还有点沾沾自得。拷贝完成后开始附加数据库,结果SQL服务器提示现有数据的版本过高,无法兼容。检查了一下SQL Expres的版本,要比SQL 2008R2高个好几十,随手百度了下,也没找到820版本对应的数据库的发行版本号,一狠心决定部署下SQL 2016,正好可以研究一下SQL 2016对结构化数据(json等)执行属性查询的功能。于是又开始了下载过程。又花了半个多小时,期间给团队成员发了个延期通知,许诺下午一点钟之前搞定。一边等待下载,一边继续写工具,虽然麻烦,但是一切尽在掌握。

第二阶段:略有腹诽

终于下载完安装镜像,准备开始部署数据库服务。但是安装程序提示当前运行的服务器为WIN SERVER 08R2,SQL 2016不支持。于是又开始着手准备兼容的WIN Server服务器环境。当时也没有细想,直接就选用了WIN SERVER 2016。下载大概花了一个小时,慌里慌张的,中途还把语言包当作安装文件下载下来了。中途去开了一个会议,回来的时候,已经下午三点钟了,显然的,给团队的承诺已经无限延期了。由于服务器有点久了,而且是在虚拟机上安装,安装过程持续了大概四十分钟。然后部署数据库服务、迁移数据库文件。迁移完成之后,需要将TFS的数据库绑定重定向。这里有几个做法:1:修改配置文件 2:使用TFS的配置工具,初始化当前配置,并重新配置数据库。出于慎重考虑,选择了第二种。参考:http://www.accentient.com/blog/unconfiguring-team-foundation-server-2013/

tfsconfig setup /uninstall:all

重新启动TFS的配置管理器进行TFS配置。执行到数据库这一步的时候,发现只能填写一个host名称,无法提供登陆信息。于是开始了各种脑补:TFS默认配置了一个登陆身份信息?TFS使用了一个配置文件?TFS仅支持基于域服务器场的部署?好吧,鉴于微软的方便使用、无脑点击下一步的作风,最后一个可能性最大。还是通过bing搜索了下,找到了肯定的答案。参考:https://serverfault.com/questions/457006/how-to-connect-tfs-2012-with-a-remote-database-using-sql-server-authentication 以及 https://serverfault.com/questions/457006/how-to-connect-tfs-2012-with-a-remote-database-using-sql-server-authentication 。
心中虽然腹诽,但是还算是松了一口气,毕竟简单的集成域环境也还简单。看下时间,已经五点半了,于是依然开始了无尽之旅。

第三阶段:无尽的折磨

按照一般性套路,开始修改客户机的dns,指向dc的ip,同时为dc所在的服务器添加了一条host,防止一些乱七八糟的无法访问。点击加域。5秒,15秒,30秒......无法找到网络路径。虽然心里奇怪,但是还是继续bingstackoverflowserverfault,同时也象征性的百度。然后不停检查TCP/IP NETBIOS Service,检查文件和打印机共享,检查dns,检查和禁用ipv6,检查防护墙防火墙例外,关闭、开启防火墙,检查hdcp,检查ip,检查ping。马不停蹄的检查了三四个小时,仍然无果之后开始自检,首先查看window server的日志,发现返回状态码53,然后检查system windows debug下的日志,发现net use 指令导致了53的结果码。然后开始疯狂的搜索与net use相关的,与53状态码相关的,与network path not found相关的资料,开始拿不同的服务器做对比实验。最后发现,win server 2008r2的服务器都能成功入域,而win server 2016与win 10都无法成功。开始推测时客户机的问题,然后再一次对客户机做了各种检查,仍然无果。
对客户机和服务器的行为总结如下:

  • 网络通信正常,进行入域请求的时候,可以正常接收到401的认证相应
  • 可以提交身份认证信息,但是无法成功认证,即使提供了错误的用户名和密码,也无法得到认证结果
  • net use \host$IPC 指令无法正常使用

期间好几次想先放一放,但是每次都有一种错觉,似乎这个问题马上就要解决了。等到实在困得不行的时候,已经过了凌晨一点,实在是乏的不行,加上还连累另外一个同事一起,遂作罢。

第四阶段:柳暗花明

休息了一晚上,信心又足了很多,决定继续怼这个问题。还是从net use这个指令开始,还是以大量的搜索为基础。在搜索的过程中,发现了net的另外一个指令,net view。这个指令时用来查看共享文件夹的。共享文件夹这个名词让我突然想到一件事情,以前公司为了共享安装包,在服务器上开了共享目录。但是有一天win 10的机子全部无法访问了,而win 7和win server 2008r2都正常。猜测可能是相同的原因。于是开始搜索和收集这方面的资料。在一个论坛里面,偶尔看到了一句评论,和SEP 12也就是证书有关。又突然想起来,年中的时候为了测试微信小程序,在服务器上安装了证书(误操作),同时升级了服务器的TLS版本.......或许大家以为我马上要发现了真相,走进了科学 ——其实不然,我觉得越发头大了,因为这里的可能性太多了,所以我打算换个思路解决问题。
从net use和net view这两个指令的执行情况来看,应该是服务器的设置问题,导致了部分客户机无法访问,所以我向换个服务器——也就是迁移DC。迁移DC就得首先安装备用的DC,参考:http://www.cnblogs.com/yankliu-vip/archive/2012/06/13/2547646.html 。

dcpromo

安装完之后,突然又想到,其实我并不一定要主控DC迁移,我需要的是一个可以正常加域的入口,于是我将客户机的DNS指向了新配置好的DC。接下来操作,就比较丝滑了。

回顾与总结

总的来讲,在这个将近二十个小时里面,我经历了这些:

TFS数据库满了=>发现由于sqlexpress的限制=>计划升级sql服务版本=>sqlexpress的内核版本很高=>安装sql2016=>sql2016不支持winserver2008r2=>安装winserver2016=>部署时发现不支持数据库用户身份验证=>集成域环境=>winserver2016无法加入winserver2008r2的域环境=>bingstackoverflowserverfault=>都不满足=>继续bingstackoverflowserverfault=>发现别人在贴日志=>分析日志=>net use指令返回53=>bingstackoverflowserverfault=>都不满足=>论坛里面有人提到SEP12证书的问题=>删除域控下面安装的证书=>无效=>继续搜索net use指令相关问题=>尝试使用net view指令=>发现win10和winserver2016都无法使用共享文件夹相关的功能=>回忆起来以前win10是可以网络共享的=>回忆起来这似乎是和升级了TSL版本有关=>意识到自己做了很多无用功=>尝试使用tfsdeleteproject先删除部分项目释放空间=>发现由于数据库满了,删除功能无法正确使用=>
意识到可以通过新建项目集合的方式来处理,但是由于数据库已满,放弃=>继续从DC这个点解决问题,决定迁移DC到一个干净的环境=>安装了新的备份DC=>对备份DC 执行net use指令一切正常=>意识到可以将客户机的dns指向备份dc来解决问题=>成功加入域=>尝试在其他的服务器上部署tfs=>发现tfs版本不兼容迁移的数据库=>升级tfs版本到update1=>开始迁移=>数据库登录名冲突=>更改登录名=>全文索引服务未安装=>安装全文索引服务。

虽然我只是兼个部署,但是回头想想,其实很能发现问题:

  • 部署管理有问题,DC不应该和其他角色混淆
  • 使用产品的时候,没有仔细阅读产品说明书
  • 对当前部署的产品的版本没有清醒的认识
  • 决策的时候,没有仔细收集资料,没有分析可行性
  • 决策冲动,很多时候为了直观而增加了复杂度
  • 分析问题的方式有问题,很多时候应该从当前环境的日志着手,而不是盲目的binggooglestackoverflow
  • 解决问题的思路有问题,很多时候绕道其实是更好的选择
  • 做部署工作的时候,千万不好和环境讲道理
    当然这次经历也不尽是坏事,总的来讲,我确认了一点,我确实拥有一颗还算坚韧的心。

关于net use 53 以及 network path not found

这个问题尚未解决,欢迎道友指路。

转载于:https://www.cnblogs.com/lightluomeng/p/7117214.html

微软虐我千百遍——记一次比较漫长的TFS数据库迁移相关推荐

  1. 算法虐我千百遍,我待算法如初恋

    转自:算法虐我千百遍,我待算法如初恋 算法虐我千百遍,我待算法如初恋. 学习方法  1) 把所有经典算法写一遍  2) 看算法源码  3) 加入算法学习社区,相互鼓励学习  4) 看经典书籍 基本数据 ...

  2. VMware虐我千百遍,我却待她如初恋

    文章目录 一.相关环境 1.操作系统 2.VMware版本 二.我遇到过的bug 1.VMCI驱动程序无法自动安装,需要手动安装 2.Vmware提示以独占方式锁定此配置文件失败 3.VMware提示 ...

  3. 那些曾虐我千百遍的计算机组成原理

    那些曾虐我千百遍的计算机组成原理 本笔记知识点来源于b站狂神说:聊汇编先导课,有兴趣的小伙伴点这里:狂神聊汇编先导课 文章目录 那些曾虐我千百遍的计算机组成原理 进制的本质 有符号数和无符号数的区别 ...

  4. Maven 虐我千百遍,我待 Maven 如初恋 侵删

    前言 在如今的互联网项目开发当中,特别是Java领域,可以说Maven随处可见.Maven的仓库管理.依赖管理.继承和聚合等特性为项目的构建提供了一整套完善的解决方案,可以说如果你搞不懂Maven,那 ...

  5. 客户虐我千百遍,我待客户如初恋

    误闯误撞,进入了IDC行业,从事了服务器租用及托管的销售工作.很多人问我,什么是IDC,什么是服务器?我知道我解释的过于专业那么会有更多的问题,毕竟自己也不是百科全书,只好简答回复"没有显示 ...

  6. 我待数据如初恋,数据虐我千百遍

    我待数据如初恋,数据虐我千百遍 1.几个基础概念 1.1表达式 1.2语句 1.3程序 1.4函数 2.标识符 2.1关键字 2.2标识符的构成 3.基本数据类型 3.1整数和小数 3.2 布尔值和空 ...

  7. 数学歌单:数学虐我千百遍,让我至今没初恋

    提起数学,很多人爱之恨之,一言难尽.数学总被人贴上严肃和枯燥的标签,其实任何事物都不能将其绝对化,数学也是如此,数学也有其美的一方面,只是缺少了发现数学美的眼睛.数学和音乐当然也有交叉点,这些歌曲你都 ...

  8. 我待JAVA如初恋,JAVA虐我千百遍,如何彻底卸载JAVA

    一般很少写一些手操的中间过程,作为一个爽快人,过了就过了不纠结,但是这次java的升级着实让我觉得有记录下来的必要 起因是在升级gradle版本到7.3的时候,说让我装java11,我电脑是java8 ...

  9. 考研数学真题虐你千百遍,学渣教你如何逆袭数学130+

    转载于 考研网 离考试只剩两个多月了,此时还有很多小伙伴对数学复习一筹莫展,如何在这不到三个月的时间里取得突破拿到高分?我们的考研数学复习逐渐过渡到强化冲刺阶段,这一时期是考研备考的转折期~ 现阶段的 ...

最新文章

  1. java 编写小工具 尝试 学习(四)
  2. js数组遍历、对象遍历、字符串遍历
  3. 应用实践 | 南方科技大学研发基于新型冠状病毒知识图谱模式挖掘系统
  4. Python《搞事情==蜂-鸟-图-片(一)》
  5. opencv viz3d 中的坐标系
  6. linux 线程头文件,[填空题] 在Linux多线程编程时,需要包含头文件()。
  7. Java — InputStream.read(),response.getOutputStream(),OutputStream().write【IO流】
  8. 深度剖析MQTT协议的整个通信流程
  9. 蒙特卡洛—赌博模型笔记
  10. Java FileReader读文件
  11. [Python]PEP8 编码规范及开发中的一些惯例和建议
  12. 【以太坊】什么是雷电网络 Raiden network
  13. 原创科幻短篇《腿控》
  14. 英特尔高管晒照片不小心泄密
  15. 【Oracle数据库】实验-表空间
  16. mysql事务的理解学习, 面试不问索引原理就是事务原理
  17. 从Lync2010看微软UC发展
  18. Shell脚本编程实践——第3关:使用Shell脚本创建文件目录
  19. Nextjs跨页面状态管理
  20. P2141珠心算测验(2014NOIP普及T1)-C++编程解析-数组

热门文章

  1. 苏州大学信息与通信工程837考研上岸经验分享
  2. 痘印服务器维护,脸上有痘印怎么弄才能消除
  3. 权利的游戏 S0803
  4. jeesite(一)
  5. 讲义:第五项修炼(学习型组织的艺术与实践)
  6. java 实例化list_java中List的用法和实例详解
  7. 用计算机c语言输出你好,编写第一个C语言程序 - Hello World
  8. linux cfs 参数设置,Linux CFS如何处理周期性调度器、CFS的周期性调度及总结
  9. 思考:苟日新,日日新,又日新
  10. 张栋推荐的machine-learning-for-hackers/