我们有一个包含文件文件的DatabaseA。然后我们有一个归档过程,它首先删除DatabaseB (不同的服务器)中的文件,然后通过SSIS从DatabaseA插入新的文件到DatabaseB中。
每天晚上,我们尝试备份数据库,并得到以下错误:
操作系统返回错误'1392 (文件或目录已损坏且不可读)。当在\foldername guid上尝试'FindNextFile‘时。SQLSTATE 42000备份数据库正在异常终止。SQLSTATE 42000。这个步骤失败了。
当我查看文件路径和文件夹名时,名称与错误中报告的文件夹名guid不相同。当我们在filestream guid列上重新组织索引时,我们能够备份数据库。我们怎样才能从腐败中恢复过来?DBCC检查数据库?对于启用了filestream的数据库备份,还是使用filestream列删除行的方式,我们应该做些什么呢?
我们使用的是本机Server
备份命令:
将数据库备份到磁盘= '\share\backupshare\databasename\databasename.bak‘,其中包含无格式、init、name=’databasename--完全数据库备份‘、跳过、norewind、nounload、压缩、stats 10、校验和
发布于 2013-01-17 01:54:57
FindNextFile是Windows调用,所以备份过程是枚举FILESTREAM文件夹中的所有文件并备份它们。错误消息表示操作系统无法读取文件系统;至少对我来说,这表明磁盘上的文件/文件夹结构已损坏。如果根本找不到文件/文件夹,则会返回不同的错误。这可能意味着I/O子系统存在问题。我会在那个卷上运行chkdsk。
从DBCC CHECKDB文档来看,FILESTREAM检查似乎不只是确保数据库和文件系统之间存在链接。运行chkdsk能够对磁盘内容本身进行低级别的检查,这可能是本场景所需要的。无论如何,在数据库上运行CHECKDB也不会有什么害处(请阅读:定期阅读)。
https://dba.stackexchange.com/questions/33043
复制相似问题