sqlserver修改文件路径遇到的恢复挂起

2023-02-23 00:00:00 专区 权限 步骤 脱机 联机

centos7.9+sqlserver2019

sqlserver for linux的安装参考:https://www.modb.pro/db/445811

一、正确步骤如下:

1 查看当前的存放位置

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

2 修改文件的存放位置下次启动生效

alter database adjyc modify file(name=adjyc_data_jyc01,filename='/mssql/data/adjyc_data_jyc01.mdf');
alter database adjyc modify file(name=adjyc_log_jyc01,filename='/mssql/data/adjyc_log_jyc01.ldf');

3 脱机 如果脱机时间过长,说明有事务未提交或者其他连接未断开,杀死所有线程或连接即可

脱机:
ALTER DATABASE adjyc SET OFFLINE;
删进程连接:
declare @spid int ;
declare @ddlstring nvarchar(max);
declare @dbname varchar(200);
set @dbname='adjyc';
declare tmpcur cursor
for select distinct spid as spid from sys.sysprocesses
where dbid=db_id(@dbname) ;

OPEN tmpcur;
fetch tmpcur into @spid ;
while (@@FETCH_STATUS=0)
begin
set @ddlstring=N'Kill '+CONVERT( nvarchar,@spid) ;
execute sp_executesql @ddlstring ;
fetch tmpcur into @spid ;
end ;

close tmpcur ;
deallocate tmpcur ;


4 把文件拷到指定的文件夹下

cp -p /var/opt/mssql/data/xxx /mssql/data/

5 联机,可能会报错,说没有访问文件权限问题,设置对应权限即可

联机:
ALTER DATABASE adjyc SET ONLINE;

权限:
chown -R mssql:mssql /mssql
chmod -R 755 /mssql

二、未按上述步骤操作将可能遇到的问题:

如果没有做【步骤3脱机】,直接拷贝,那么再次启动sqlserver服务,会看到数据库处于【恢复挂起】的状态。
此时尝试如下步骤是失败的:

USE master
GO
ALTER DATABASE adjyc SET SINGLE_USER
GO
ALTER DATABASE adjyc SET EMERGENCY
GO
DBCC CHECKDB(adjyc,REPAIR_ALLOW_DATA_LOSS)
go
ALTER DATABASE adjyc SET ONLINE
GO
ALTER DATABASE adjyc SET MULTI_USER
GO


报错信息如下类似:

File activation failure. The physical file name "/mssql/data/adjyc_data_jyc01.mdf" may be incorrect.


正确的恢复方式如下:

USE [master]
GO
CREATE DATABASE [adjyc] ON
( FILENAME = N'/mssql/data/data_jyc01.mdf' )
FOR ATTACH_REBUILD_LOG
GO

相关参考:
https://sqlsailor.com/2011/12/28/file-activation-failure-the-physical-file-name-cprogram-filesmicrosoft-sql-serverpath-may-be-incorrect-the-log-cannot-be-rebuilt-when-the-primary-file-is-read-only/

本文来源https://www.modb.pro/db/453116

相关文章