首页 > 数据库 > > sqlserver修改文件路径遇到的恢复挂起
centos7.9+sqlserver2019
sqlserver for linux的安装参考:https://www.modb.pro/db/445811
select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.master_files
where database_id=db_id(N'adjyc')
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');
脱机:
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 ;
cp -p /var/opt/mssql/data/xxx /mssql/data/
联机:
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://www.modb.pro/db/453116
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31560284/viewspace-3157407/ ,如需转载,请注明出处,否则将追究法律责任。