我有一个 SQL-Server 数据库,其中包含按 datetime2(2) 列分区的大型表。某些(旧)文件组标记为 READ_ONLY。
我定期使用 READ_WRITE_FILEGROUPS 选项进行备份。我可以成功地从读写分区恢复数据。
但是,我无法读取恢复的数据,出现以下错误:
表“dbo.myorders”的索引“pk_myorderid”的一个分区(分区 ID 72057594043105280)驻留在文件组(“YEAR2021”)上,该文件组因脱机、正在恢复或失效而无法访问。这可能会限制查询结果。
如果我将数据类型更改为 DATETIME 或 datetime2(7),则不会发生错误(当然,如果我从恢复的范围请求数据)
除了这个问题之外,其他一切都工作正常。
我创建了一个测试脚本来说明问题。该脚本创建一个测试数据库、填充表、备份和恢复数据库。
如果在此脚本中将 datetime2(7) 更改为 datetime2(2) ,则恢复后数据将变得无法访问。
测试脚本:
USE MASTER
-- Reset environment
IF DB_ID('PartialDatabase') IS NOT NULL
BEGIN
EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'PartialDatabase'
ALTER DATABASE PartialDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DROP DATABASE PartialDatabase
END
GO
IF DB_ID('PartialDatabase_Recovery') IS NOT NULL
BEGIN
EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'PartialDatabase_Recovery'
ALTER DATABASE PartialDatabase_Recovery SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DROP DATABASE PartialDatabase_Recovery
END
GO
-- Create …
Run Code Online (Sandbox Code Playgroud)