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