2014-07-24 MSSQL数据库分离及获取存放地址

我们的系统,是支持同一台机器上安装多套的。

安装方法就是鼠标右键“复制”、“粘贴”(启动时会自动附加目录下的.mdf)。

有的人安装多套以后,想要删除某一套的时候,为了省事儿就自作聪明的鼠标右键“删除”。

这样一来,MSSQL里的数据库就乱了,客户就会打电话过来囧。

我们一没实施,二没客服,就老程序员和我两个程序员......

所以我要做一个清理数据库的小工具,处理被客户搞乱的数据库:

首先,通过数据库名称找出所有我们系统的数据库。

然后,遍历每个数据库,分成可以连接的和不可以连接的两种。

最后,可以连接的,进行数据分离;不可以连接的,直接删除。

分离数据库T-SQL:

1 USE master;
2 ALTER DATABASE {0} SET single_user WITH ROLLBACK IMMEDIATE ;
3 EXEC sp_detach_db ‘{0}‘,‘true‘;  

因为这个小工具只有几个固定的T-SQL,所以我直接就写全局变量里了。

但我是用 const 呢?还是用 readonly 呢?

这是个问题(虽然做了三年程序员,但工作中还真没见过这俩玩意儿,惭愧)。

于是我百度了一下他俩的区别:

const 必须在声明的时候赋值,是静态常量,readonly 则可以在构造函数里赋值,是动态常量。

用法上的区别,已经知道了,那效率上呢?

我不知道,不过我猜静态的应该比动态的节省内存。

因为“动”就表示不确定啊,所以我用的 const O(∩_∩)O~~~

结果东西做好之后,老程序员说还有一个很麻烦的问题。

客户如果长时间不用这套软件,.mdf文件的【高级属性】中的【压缩内容以遍节省磁盘空间】会被勾选。

然后就连不上数据库了......

看来那些不能连接的数据库,还不能直接删除,得先获取其存放地址,然后判断该文件是否存在。

存在的要告诉客户.mdf文件的存放地址,并图文并茂的展示相应的操作方法;不存在的才能直接删除。

但是,如何获取数据库的存放地址呢?还得问度娘啊#^_^#~~~

获取数据库存放地址T-SQL:

1 USE master;
2 SELECT
3 fs.[filename]
4 FROM sys.databases AS db
5 JOIN sysaltfiles AS fs ON db.[database_id]=fs.[dbid]
6 WHERE db.[name]=‘{0}‘; 

话说一开始我还自作聪明的试了一下

1 SELECT
2 [filename]
3 FROM sysaltfiles
4 WHERE [name]=‘{0}‘; 

结果执行之后,返回结果为零囧。

原来 sysaltfiles 存的是物理地址,sys.databases 存的才是逻辑地址。

忧伤......

小工具的主要功能都实现了(就差图文并茂的操作说明),我寻思着取个啥名咧?

----【数据库整理小工具】。

老程序员一瞅,不行,叫【数据库一键修复】,立马感觉上了一个层次!

----什么是工作经验?介就是工作经验呐!~~~

2014-07-24 MSSQL数据库分离及获取存放地址

时间: 2024-08-04 23:20:00

2014-07-24 MSSQL数据库分离及获取存放地址的相关文章

扩展 spring 的 AbstractRoutingDataSource 实现读写数据库分离

读写数据库分离,前期没有用spring,实现起来想当复杂,后来   通过扩展 AbstractRoutingDataSource ,实现方式简单很多 mark 一下. 主从 切面 代码: 1 package com.lixiaodao.datasource.aspect; 2 3 import java.util.List; 4 5 import org.aspectj.lang.JoinPoint; 6 import org.slf4j.Logger; 7 import org.slf4j.L

SQL Server性能调优——报表数据库与业务数据库分离

前段时间把公司的主数据库切了,分成业务库和报表库,业务库向报表库进行实时的Replication.这个项目的上线提升了系统的性能和可维护性,现在把设计时的考量和所做的工作重新回顾一下,作为备忘. 项目起源 在日常的开发过程中,功能总是先于性能被考虑.只有当用户抱怨系统性能时,我们才开始头痛医头,脚痛医脚地来解决这些性能问题. 公司的CRM和ERP系统叫作Olite,完全是我们组开发的.从无到有,功能不断扩展,原先只有CRM模块,后来加入了ERP模块,Accounting功能和Report功能.近

如何下载MSSQL数据库备份到本地电脑?

在这里用了三篇图文教程来演示,MSSQL数据库的备份操作.还原恢复操作,以及下面的MSSQL数据库下载到本地电脑的操作,其目的是为了在一个 教程中,方便完整的为您展示这些特色功能,也方便您的阅读.下面是这个系统的最后一个演示教程,如何把备份好的mssql数据库下载到自己的电脑上.. 把备份的MSSQL数据库下载到自己的电脑上类?这个操作也非常简单,鼎峰虚拟主机管理系统,是通过ftp的方式向用户提供下载.其实现方式是,用户在操 作管理面板中,通过点击“建立备份用的ftp”获取到一组临时ftp地址,

《计算机问题求解》总结——2014年CCF计算机课程改革导教班(2014.07.11)

一:引言 "心想事成",这是自己获得导教班学习机会的最佳概括.2013年年末学习李晓明老师的<人群与网络>课程:随后网络认识烟台大学贺利坚老师,了解到2013年导教班的学习内容:注册成为CCF会员,进而提交申请书并被录取为学员. 二:一周学习总结 一周学习时间很短,收获良多.除了课堂教学,优良的培训环境(北京怀柔区红螺园饭店,离市区坐公交车需要2个小时),让学员与老师能够专注交流,早中晚的餐桌交流成为了保留节目.有一半以上的时间都尽可能与陈老师.李老师等同桌.罗斯福总统有&

2015-08-25 php大力力016 兄弟连高洛峰php教程(2014年 14章数据库章节列表)

2015-08-25 php大力力016 兄弟连高洛峰php教程(2014年 14章数据库章节列表) [2014]兄弟连高洛峰 PHP教程14.1.1 复习数据库  15:58 [2014]兄弟连高洛峰 PHP教程14.1.2 phpMyAdmin的使用 15:59 [2014]兄弟连高洛峰 PHP教程14.1.3 php访问MySQL 17:27 [2014]兄弟连高洛峰 PHP教程14.1.4 在PHP脚本中操作MySQL数据库1  17:38 [2014]兄弟连高洛峰 PHP教程14.1.

LinUX系统ThinkPHP5链接MsSQL数据库的pdo_dblib扩展

LinUX(centOS6.8)系统ThinkPHP5链接MsSQL数据库的pdo_dblib扩展第一步 下载并安装freetds-current.tar.gz下载地址如下ftp://ftp.freetds.org/pub/freetds/current/freetds-current.tar.gz1.1下载解压并进入该文件夹 (其实你也可以解压以后再上传到linux服务器) wget ftp://ftp.freetds.org/pub/freetds/current/freetds-curre

数据库分离附加(附日记丢失的处理)

汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 数据库分离,exec sp_detach_db NewTest 数据库附加(如果日记变动则重新创建日记,此时日记名和逻辑日记名相同)[日记丢失可以这样写] exec sp_attach_db NewTest,N'E:\SQL\Test.mdf' 完整写法:exec sp_attach_db NewTest,N'E:\SQL\Test.mdf',N'E:\SQL\Test_log.ldf

Atitit.mssql 数据库表记录数and 表体积大小统计

Atitit.mssql 数据库表记录数and 表体积大小统计 1. EXEC   sp_MSforeachtable   "EXECUTE   sp_spaceused   '?'" 最后一种方法是利用隐藏未公开的系统存储过程sp_MSforeachtable CREATE TABLE  #temp  (TableName  VARCHAR  (255),  RowCnt  INT) EXEC  sp_MSforeachtable  'INSERT  INTO  #temp  SEL

2014年24段魔尺变球视频教程(升级版)

.layer1{ width:480px; height:360px; overflow:hidden; } 2014年24段魔尺变球视频教程(升级版) 2014-09-14 23:27曾在优酷网上传了24段魔尺变球的视频教程. 互联网思维讲究:迭代思维,极致思维. 今天2014-09-18 23:02,偶又专门录制并上传了一个24段魔尺变球的升级版视频教程. 此次升级版,主要做了如下修改: 1.镜头不是迎面对着我人,而是迎面对着我手,好处是可以清晰扑捉手的一招一式,将镜头的焦点集中在魔尺和手上