Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说SCPPO(二十三):SQLServer数据库备份那些事儿[亲测有效],希望能够帮助你!!!。
强烈推荐一个大神的人工智能的教程:http://www.captainai.net/zhanghan
今天远程服务器,突然发现服务器一个盘(容量:1T)快满了,于是好奇点进去看看哪些东西占了这么多,经过排查后发现是SQLServer的备份文件,占据了绝大部分的空间;之前对SQLServer的备份也没有太多的关注,于是在解决这次盘容量慢的过程中,也有机会将SQLServer备份学习一下。
1、系统数据库的简单介绍:
(1)我们系统主要用到的库有三个(保密起见暂时用别名代替):数据库A,数据库B,数据库C
(2)设置的SQLServer备份策略:每天23:05进行备份;(参考:设置SQLServer数据库自动备份)
(3)各个数据库文件的相应大小:
①备份文件(.bak文件):数据库A—1.66M;数据库B—120M;数据库C—6.56G;
②数据库A—(mdf:50M,ldf:82.9M);数据库B—(mdf:2.07G,ldf:18.4G);数据库C—(mdf:42.8G,ldf:29.7G)。
2、解决盘容量的过程:
(1)意外的发现:当时发现盘的剩余容量不足10M根据数据库备份文件生成的时间发现,近几次,数据库B和数据库C都无备份文件;猜想:是由于空间不足导致两个大的数据库不进行备份。
(2)如何解决那?发现里面备份的文件从去年的4月份开始到现在每天都有,于是乎请示组长是否要删除一些,组长回答说把老的删除,不过删除这些月份中每个月留一个月底,以备以后有问题查;自己将没删除之前的库文件截图,然后将去年四月份的到今年五月份每个月只留一个月底的做备份。盘容量腾出200G的空间。
(3)在(1)中猜想的验证:等到第二天(原因:见1中(2)的备份策略)在此查看数据库ABC都正常备份。
3、正式数据库服务器上数据同步到测试服务器上
(1)既然说到数据库这块儿,之前自己一直有个疑问:正式数据库和测试服务器数据如何同步的,借此机会请教下组长。
(2)由于测试项目不需要数据与正式系统的数据一样是最新的,所以目前采用最简单的同步策略—手动。
(3)手动同步具体步骤:
①将正式服务器上的数据库的最新备份文件dbk拷贝到测试服务器上
②在测试服务器上进行还原
4、延伸学习
(1).dbk文件和mdf+ldf的有什么区别?
由于这块儿是微软不开源的技术,所以在网上查了些,又根据自己的经验说说自己的看法:
①用途:.dbk只能用来备份;而mdf+ldf是正在使用的也可当做备份;
②可以简单理解成.dbk是mdf+ldf的压缩版,通过1中(3)的对比,微软的压缩率还是蛮高的;
(2)根据三个库的大小特点发现mdf文件较大的是数据量比较大,而ldf文件大的是操作较多;比如:数据库C的数据新增的比较多,而更新操作则较少;而数据库B则是对数据的操作较多,而新增数据量较少;这和系统的应用也一一对应;
(3)请教一下老司机,可以利用数据库收缩来减少数据库所占空间,参考:数据库收缩详解;
(4)如果需要测试数据和正式数据实时同步怎么办那?参考:SQLServer数据库实时同步复制 实时同步对技术难度以及服务器的性能有所影响,大家还是要根据自己的实际项目需求来选择,做好相应的平衡即可。
1、正规的团队中作为开发是没有权限直接远程服务器的,但是在一些小项目中,总共就几个人做维护,当然没有必要招一个专门的DBA;各自有各自的好处,在正规大团队中学到的技术比较深,但是面比较窄,而小团队中面比较广,但是深度没那么深,这也是选进大公司与小公司的一个重要衡量吧!如何选择?自身根据自身目前所处的实际情况所决定;
2、好奇心会引导我们发现很多有趣的东西;
3、发现在开发过程中有扯皮的现象,解决办法:职责划分明确,另外个人勇于承担责任,发现问题及时将问题提出来,然后去解决,将系统当成是自己的事情;这样会收获更多,技术上如此为人处世上亦如此。