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
最后修改时间:2022-08-05 12:15:49
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




