当前位置:首页 - SQL

SQL Server 移动系统数据库

作者:高景洋 日期:2014-08-01 10:32:17 浏览次数:3538
系统数据库的作用?   
    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是无法删除的,也不用备份。

————————————————————
如何转移系统数据库?
系统数据库默认是在C盘的,但是因为数据库服务器数据量日益增加,系统数据库的大小爆增,导致C盘空间越来越小


Then,how to do it?
查询当前服务器中数据库位置

SELECT name,physical_name AS CurrentLocation,state_desc
FROM sys.master_files


 a),对数据库中每个要移动的文件使用带有MODIFY FILE选项的ALTER DATABASE命令来指定新的文件夹选项。如:                
--Move tempdb
ALTER DATABASE tempdb MODIFY FILE(NAME='tempdev',FILENAME='D:\Database\tempdb.mdf');
ALTER DATABASE tempdb MODIFY FILE(NAME = 'templog',FILENAME='D:\Database\templog.ldf');
--Move model
ALTER DATABASE model MODIFY FILE(NAME='modeldev',FILENAME='D:\Database\model.mdf');
ALTER DATABASE model MODIFY FILE(NAME='modellog',FILENAME='D:\Database\modellog.ldf');
--Move msdb
ALTER DATABASE msdb MODIFY FILE(NAME='MSDBData',FILENAME='D:\Database\msdbdata.mdf');
ALTER DATABASE msdb MODIFY FILE(NAME='MSDBLog',FILENAME='D:\Database\msdb_log.ldf');
b),在命令提示行下用NET STOP MSSQLSERVER命令停止SQL Server实例; 
c),物理移动文件到我们定义的文件夹,比如上面所述D:\Database文件夹; 
d),重启SQL Server实例; 


如此操作,轻松实现系统数据转移。


----------------Add on 2018-3-21--------------------
在处理过程中出现以下问题

由于文件不可访问,或者内存或磁盘空间不足,所以无法打开数据库 'msdb'。有关详细信息,请参阅 SQL Server 错误日志。 (Microsoft SQL Server,错误: 945)


出现这种问题,怎么办呢?
让我们一起说:不要怕啊(三声)~
迁移时,C盘空间30M,导致文件复制出错,从其他正常的机器上,拷一个正常的文件,覆盖一下,就可以~
本文永久性链接:
<a href="http://r4.com.cn/art40.aspx">SQL Server 移动系统数据库</a>
当前header:Host: r4.com.cn X-Host1: r4.com.cn X-Host2: r4.com.cn X-Host3: 127.0.0.1:8080 X-Forwarded-For: 3.145.88.130 X-Real-Ip: 3.145.88.130 X-Domain: r4.com.cn X-Request: GET /art40.aspx HTTP/1.1 X-Request-Uri: /art40.aspx Connection: close Accept: */* User-Agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) Referer: http://www.yuezhiji.net/art40.aspx