sqlserver修改文件路径遇到的恢复挂起
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
相关文章