移动 数据库 最大的问题在于性能,因为受制于 移动 平台的计算能力。本文将为大家讲的是基于SQL Server 2005或2008平台进行的 移动 系统 数据库 开发 。 说到这个问题,基本上有人就会想到三个问题: 1,什么是 系统 数据? 2,为什么要 移动 系统 数据库 ?
移动 数据库 最大的问题在于性能,因为受制于 移动 平台的计算能力。本文将为大家讲的是基于SQL Server 2005或2008平台进行的 移动 系统 数据库 开发 。
说到这个问题,基本上有人就会想到三个问题:
1,什么是 系统 数据?
2,为什么要 移动 系统 数据库 ?
3, 移动 系统 数据库 我们可以用附加和分离,为什么还要单独拿出来说呢?
对于这三个问题我一个一个讲吧,也算是自己做个笔记。
1,什么是 系统 数据?
所谓 系统 数据库 就是我们在装SQL Server之后, 系统 自带的 数据库 (这样的回答是不是很白痴^_^).
如果你装SQL Server2005或2008在打开一个SQL实例后,就会看到一个 数据库 ---> 系统 数据库 文件夹,里边就是 系统 自带的 数据库 ,如图:
移动 系统 数据库 开发 详细 解析(图一)" src="http://cdn.verydemo.com/upload/2013_06_14/13711445450830.png" width=244 border=0>
对于每一个 系统 数据库 ,这里我先用简单的语言说一下:
1)master:
这个 数据库 是全局 数据库 ,它包含一些 系统 表,权限分配,用户帐号设置,当前 数据库 配置信息以及关于磁盘空间,文件分配等信息。所以在执行诸如用户帐号设置,权限分配和改变 系统 配置信息后都要备份此数据。所以在这里强烈建议,不仅要经常备份自己的 数据库 ,还有备份此 数据库 ,虽然不像备份自己 数据库 那样那么频繁。至少半个月或一个月备份一次此 数据库 。
在这里还有专门的一个 数据库 大牛讨论过是否应该备份此 数据库 :SQL SERVER – Backup master Database Interval – master Database Best Practices
2)model:
这个 数据库 只是一个模板 数据库 ,我们在创建任意的一个 数据库 的时候,都是复制此 数据库 为新 数据库 的基础,如果希望每一个新的 数据库 都含有某些对象或者权限,可以把这个对象或权限放在此 数据库 中,新创建的新 数据库 都会继承此数据的新对象或权限,并且拥有这些对象或权限。
3)msdb:
作者原话:SQL Server代理服务器会使用该 数据库 ,它会执行一些列如备份和复制任务的计划好的活动。Service Borker也会用到该 数据库 ,他为SQL Sever提供队列和可靠消息传递。当我们不在该 数据库 执行备份或维护任务时,通常可以忽略该 数据库 。在SQL Server2005之前,实际上是可以删除该 数据库 的,只后SQL Server仍然可用,但不能在维护任何备份历史了,并且不能够在定义任务,警告,工作或者建立复制,不过因为默认的msdb 数据库 非常小,建议即使用不到也不要删除它。
4)tempdb:
该 数据库 说白了,就是一个中转站或数据寄存站,用户显示创建的临时表,在查询处理和排序时内部所产生的中间结果的工作表,维护用的快照等,都会用到此 数据库 ,与其他 数据库 所不同的是,在每次SQL Server实例重启之后,都会重建而不是恢复. 所以我们在其中创建的所有对象和权限在下次重启SQL Server时都会全部丢失。
但是我们也不能忽略此 数据库 ,因为tempdb的大小和配置,对优化SQL Server的功能和性能来说很重要。
对tempdb 数据库 ,还要多说几句,虽然在tempdb每次被重建时,它会从model 数据库 继承大多数的 数据库 选项,但是tempdb却不会从modeldb 数据库 中复制其恢复模式,因为它总是使用简单恢复模式。另外,tempdb是无法删除的,也不用备份。
2,为什么要 移动 系统 数据库 ?
我们在安装SQL Server后默认的这些 系统 数据库 都会放在C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA此文件夹下,一般的都不很大,为什么我们还有 移动 他们呢?
在没有实践管理服务器之前,我也没有这个想法,但是我发现我的服务器C盘一直都在增加,或者万一重装 系统 ,我设置的 数据库 选项,以及用户账户设置都要重新设置,所以就有了这个想法。
还有一点就是作为重新布置计划或安排好的维护操作的一部分,我们也许需要 移动 系统 数据库 。
3,用附加和分离就可以,为什么还要单独说呢?
回答这个问题之前,我们在看一张图
移动 系统 数据库 开发 详细 解析(图二)" src="http://cdn.verydemo.com/upload/2013_06_14/13711445499241.png" width=287 border=0>
注意到了吗,在我选中master 系统 数据库 右击,选中任务后,并没有出现“分离”这个选项。那就说明 移动 这些 系统 数据库 是和用户自定义的 数据库 是不同的。
移动 tempdb,model和msdb的步骤和 移动 master 数据库 步骤稍微有点不同。
1), 移动 tempdb,model和msdb 数据库
i), 移动 一个没有损坏的 系统 数据库
首先让我们用查询命令看一下SQL Server默认存储这些 系统 数据库 的路径;查询命令:
SELECT name,physical_name AS CurrentLocation,state_desc FROM sys.master_files
F5执行,显示如图:
移动 系统 数据库 开发 详细 解析(图三)" src="http://cdn.verydemo.com/upload/2013_06_14/13711445499582.png" width=493 border=0>
之后开始我们的 移动 之旅吧!
a),对 数据库 中每个要 移动 的文件使用带有MODIFY FILE选项的ALTER DATABASE命令来指定新的文件夹选项。如:
--Movetempdb ALTERDATABASEtempdbMODIFYFILE(NAME='tempdev',FILENAME='D:\Database\tempdb.mdf'); ALTERDATABASEtempdbMODIFYFILE(NAME='templog',FILENAME='D:\Database\templog.ldf'); --Movemodel ALTERDATABASEmodelMODIFYFILE(NAME='modeldev',FILENAME='D:\Database\model.mdf'); ALTERDATABASEmodelMODIFYFILE(NAME='modellog',FILENAME='D:\Database\modellog.ldf'); --Movemsdb ALTERDATABASEmsdbMODIFYFILE(NAME='MSDBData',FILENAME='D:\Database\msdbdata.mdf'); ALTERDATABASEmsdbMODIFYFILE(NAME='MSDBLog',FILENAME='D:\Database\msdb_log.ldf');
b),在命令提示行下用NET STOP MSSQLSERVER命令停止SQL Server实例;
c),物理 移动 文件到我们定义的文件夹,比如上面所述D:\Database文件夹;
d),重启SQL Server实例;
大功告成,然后在用上面的查询来验证更改,F5执行,显示如图:
移动 系统 数据库 开发 详细 解析(图四)" src="http://cdn.verydemo.com/upload/2013_06_14/13711445499913.png" width=405 border=0>
ii)由于硬件故障而需要 移动 系统 数据库
对于由于硬件故障而需要 移动 系统 数据库 ,上面的方法就不行了,因为我们可能无法访问服务器来运行ALTER DATABASE命令。那我们就另外换一种解决方案!
a)如果SQL Server实例已经启动,那么停止该实例;
b)在命令提示行下,输入下面的命令把SQL Server实例启动到master-only恢复模式
NET START MSSQLSERVER /f /T3608
c)之后我们就能链接到服务器了,接下来就和上面” 移动 一个没有损坏的 系统 数据库 ”的步骤就一样了。
注:如果直接用NET START MSSSQL SERVER命令来启动SQL Server实例,会收到1814的错误提示。我们可以到“控制面板”-》“管理工具”-》“事件查看器”中看一下具体的错误日志。
2) 移动 master 数据库
移动 master 数据库 的位置和其他的 系统 数据库 不同是,只能用SQL Server 配置管理器来更改master的位置。
首先打开SQL Server配置管理器,右击目标SQL Server实例,选择属性,然后点击高级标签,如图所示:
移动 系统 数据库 开发 详细 解析(图五)" src="http://cdn.verydemo.com/upload/2013_06_14/13711445500254.png" width=414 border=0>
在启动参数中编辑各个参数的值来指向新的master 数据库 数据文件和日志文件的目录位置,如下:
-dD:\Database\master.mdf;
-eC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Log\ERRORLOG;
-lD:\Database\mastlog.ldf
然后停止SQL Server实例,把物理文件 移动 到新的文件夹下,比如我 移动 到D:\Database\目录下;
最后启动SQL Server实例,就大功告成了!如果要检验一下,就用上面所提到的检验语句,F5执行,如图所示:
移动 系统 数据库 开发 详细 解析(图六)" src="http://cdn.verydemo.com/upload/2013_06_14/13711445500595.png" width=493 border=0>
本文作者:未知查看更多关于SQLServer移动系统数据库开发详细解析的详细内容...