SQL Server 数据库文件路径迁移步骤

时间:2024-02-25 07:29:42

一、使用背景
    实际项目中,经常由于数据库服务器磁盘空间不足,导致现场数据无法及时入库,引发系统无法访问的问题,这种情况一般是清理服务的磁盘空间,主要有,删除不必要的日志、备份文件或不必要的软件等;但是,对于数据库服务器而言,除了必要的软件外,一般不在安装其他软件,保存的基本上为现场数据文件,所以,针对这种情况,一般我们只能做数据迁移,迁移至空间更大的磁盘或者其他服务器中。这里以SQL Server数据为例,简要说明涉及到的步骤。

二、实现步骤
1.更改数据库实例(含数据文件和日志文件)的保存路径
使用SQL Server自带的连接工具,SQL Server Management Studio,连接后,在连接名处,右击,选择“属性”,在属性框,定位至“数据库设置”选项卡,在“数据库默认位置”设置新的路径,如下图:

 

 

点击“确定”,保存修改,此时,会及时生效,不需要重启服务;

2.更改用户数据库(含数据库文件和日志文件)的保存路径
a)新建查询语句,分别输入以下命令,查询用户数据库存储位置
select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.master_files 

where database_id=db_id(N\'prd_poms\');

其中,prd_poms表示用户自己定义的数据库名称,该语句用于查询,prd_poms数据库的数据文件和日志文件的名称,以及对应的路径,便于后续步骤使用。

查询结果可能如下图:

 

 

 

b)更改用户数据库的保存路径
输入以下语句:

1、查询用户ID信息

Select name,dbid From Master..SysDataBases

2更改用户数据文件路径

alter database prd_poms modify file ( name = prd_poms, filename = \'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\prd_poms.mdf\');

alter database prd_poms modify file ( name = prd_poms_log, filename = \'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\prd_poms_log.ldf\');

上述语句中,粗体红色的部分为数据库的名称,与步骤a)中的数据库名称一致,斜体红色部分对应步骤a)中查询的结果,分别表是文件名称,而红色斜体黄色背景部分为,文件更改后最终需要保存的路径。

c)执行后,在文件正确的情况下,会提示修改成功。
注:由于SQL Server数据库还有系统数据库,因此,还需要对系统数据库按照上述步骤做同样的修改,这里不再累述。

3.修改完成后,需要重启数据库服务,才能使设置生效。
      a)暂停数据库服务,打开SQL Server 配置管理器(数据库自带工具),找到SQL Server服务,停止服务,如下图:

 

 

 

或者直接在系统的“服务”中,找到SQL Server服务,停止服务也OK。

    b)停止数据库服务后,要确保新的路径已经存在,否则会导致数据库无法启动,以及其他异常。所以,没有的路径,请新建路径。再将原来数据库文件(含数据和日志文件)均复制到新的目录中。注:数据库服务必须要停止,否则无法复制相关文件。

   3.重启数据库服务,使所有配置生效

 

三、出现的问题
若出现无法启动的情况,且从系统的“事件查看器”中,发现原因为:

                   “FCB::Open failed: 无法打开文件号 1 的文件”之类报错信息,解决方式如下:

                   找到SQL Server服务,右击,选择“属性”,如图:

 

在弹框的“登录”选项卡中,选择“本地账户”登录,保存,如下图

 

 

 将用户的数据文件权限改为完全

 

 

 

再次启动SQL Server服务,即可成功。

四、全部sql
下面写上一些sql语句:

查询系统数据库数据和日志文件存储路径:

select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.master_files 

where database_id=db_id(N\'master\');

 

select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.master_files 

where database_id=db_id(N\'model\');

 

select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.master_files 

where database_id=db_id(N\'msdb\');

 

select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.master_files 

where database_id=db_id(N\'tempdb\');

更改系统数据库和日志文件存储路径:

alter database master modify file ( name = master, filename = \'F:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\master.mdf\');
alter database master modify file ( name = mastlog, filename = \'F:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\mastlog.ldf\');

alter database model modify file ( name = modeldev, filename = \'F:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\model.mdf\');
alter database model modify file ( name = modellog, filename = \'F:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\modellog.ldf\');

alter database msdb modify file ( name = MSDBData, filename = \'F:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\MSDBData.mdf\');
alter database msdb modify file ( name = MSDBLog, filename = \'F:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\MSDBLog.ldf\');

alter database tempdb modify file ( name = tempdev, filename = \'F:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\tempdb.mdf\');
alter database tempdb modify file ( name = templog, filename = \'F:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\templog.ldf\');

 

查询用户数据库数据和日志文件存储路径

select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.master_files  
where database_id=db_id(N\'prd_acs\');


 

更改用户数据库和日志文件存储路径:

alter database prd_acs modify file ( name = prd_acs, filename = \'F:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\prd_acs.mdf\');
alter database prd_acs modify file ( name = prd_acs_log, filename = \'F:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\prd_acs_1.ldf\');
————————————————
版权声明:本文为CSDN博主「bird_tp」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bird_tp/article/details/94551586