SQLServer 错误 17204 %ls:无法打开文件号 %d 的文件 %ls。 操作系统错误: %ls。 故障 处理 修复 支持远程
SQL Server 由于指定的 OS 错误而无法打开指定的文件。
当 SQL Server 无法打开数据库和/或事务日志文件时,Windows 应用程序事件或 SQL Server 错误日志中可能会出现错误 17204。 此错误如以下示例所示:
Error: 17204, Severity: 16, State: 1. FCB::Open failed: Could not open file c:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\data\MyDB_Prm.mdf for file number 1. OS error: 5(Access is denied.).
在 SQL Server 实例启动过程中,或在尝试启动数据库的任何数据库操作(如 ALTER DATABASE)期间,都可能看到这些错误。 在某些情况下,你可能会看到 17204 和 17207 错误,而在其他情况下,你可能只会看到其中一种错误。
如果用户数据库遇到这些错误,该数据库将处于 RECOVERY_PENDING 状态,并且应用程序无法访问数据库。 如果系统数据库遇到这些错误,则 SQL Server 实例将不会启动,并且你无法连接到 SQL Server 的此实例。 系统数据库故障也可能导致 SQL Server 故障转移群集资源脱机。
在使用任何 SQL Server 数据库之前,必须启动数据库。 数据库启动过程涉及以下几个步骤:
初始化代表数据库和数据库文件的各种数据结构 打开属于数据库的所有文件 对数据库运行恢复SQL Server 使用 CreateFile Windows API 函数打开属于数据库的文件。
消息 17204(和 17207)指示 SQL Server 尝试在启动过程中打开数据库文件时遇到错误。
这些错误消息包含下列信息:
FCB::Open 在 SQL Server 尝试打开文件时遇到错误 FileMgr::StartPrimaryDataFiles 主数据文件或属于主文件组的文件 FileMgr::StartSecondaryDataFiles 属于辅助文件组的文件 FileMgr::StartLogFiles 事务日志文件 STREAMFCB::Startup SQL FileStream 容器 FCB::RemoveAlternateStreams
在这些错误消息中输出的操作系统错误信息是导致错误 17204 的根本原因。 这些错误消息的常见原因是权限问题或文件路径不正确。
要解决错误 17204,需要了解关联的操作系统错误代码并诊断该错误。 解决了操作系统错误后,可以尝试重新启动数据库(例如,使用 ALTER DATABASE SET ONLINE)或 SQL Server 实例,使受影响的数据库处于联机状态。 在某些情况下,可能无法解决操作系统错误。 如果是这样,就必须采取具体纠正措施。 本节将介绍这些操作。
如果 17204 错误消息仅包含错误代码,而不包含错误说明,则可以尝试使用操作系统 shell 中的 命令解决错误代码:net helpmsg 错误代码 。 如果收到的错误代码是一个 8 位数状态代码,可以参考如何将 HRESULT 转换为 Win32 错误代码?之类的信息源解码这些状态代码,了解它们在操作系统中都代表什么错误。
通过在 Windows 资源管理器中查看文件的属性,检查文件的权限设置。 SQL Server 使用 Windows 组对各种文件资源预配访问控制。 确保相应的组[名称类似于 SQLServerMSSQLUser$ComputerName$MSSQLSERVER 或 SQLServerMSSQLUser$ComputerName$InstanceName]具有对错误消息中提及的数据库文件的必要权限。 有关更多详细信息,请参阅配置数据库引擎访问的文件系统权限。 确保 Windows 组实际包含 SQL Server 服务启动帐户或服务 SID。
查看当前正在运行 SQL Server 服务的用户帐户。 可以使用 Windows 任务管理器来获取此信息。 查找可执行文件“sqlservr.exe”的“用户名”值。 另外,如果你最近更改了 SQL Server 服务帐户,请注意,支持执行此操作的方法是借助 SQL Server 配置管理器实用工具。 有关详细信息,请参阅 SQL Server 配置管理器。
根据在服务器启动期间打开数据库、附加数据库、还原数据库等操作类型,用于模拟和访问数据库文件的帐户可能会有所不同。 请查看保护数据和日志文件主题,了解哪些操作为哪些帐户设置了哪些权限。 使用 Windows SysInternals 进程监视器这样的工具,了解是否在 SQL Server 实例服务启动帐户[或服务 SID] 或模拟帐户的安全上下文中执行了文件访问。
如果 SQL Server 正在模拟可执行 ALTER DATABASE 或 CREATE DATABASE 操作的用户的凭据,你将在进程监视器工具中注意到以下信息(例如):
Date Time: 3/27/2010 8:26:08 PM Event Class: File System Operation: CreateFile Result: ACCESS DENIED Path: C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\attach_test.mdf TID: 4288 Duration: 0.0000366 Desired Access:Generic Read/Write Disposition: Open Options: Synchronous IO Non-Alert, Non-Directory File, Open No Recall Attributes: N ShareMode: Read AllocationSize: n/a Impersonating: DomainName\UserName
确保磁盘驱动器和文件夹路径可见并可从 Windows 资源管理器访问 查看 Windows 事件日志,以确定此磁盘驱动器是否存在任何问题 如果路径不正确并且该数据库已经存在于系统中,则可以使用移动数据库文件主题中所述的方法更改数据库文件路径。 你可能必须使用此过程,尤其是对于遇到 17204 或 17207 的系统数据库文件,并且你正在使用指定磁盘驱动器不可用的灾难恢复方案。 本主题还介绍了如何识别各种系统数据库[master、model、tempdb、msdb 和 mssqlsystemresource]的当前位置。 如果由于缺少数据库文件而出现此错误,则必须从有效备份还原数据库。 如果与错误关联的数据库文件属于辅助文件组,则可以选择将该文件组标记为脱机,使数据库联机,然后单独执行该文件组的还原。 有关详细信息,请参阅主题 ALTER DATABASE 文件和文件组选项 (Transact-SQL) 的脱机部分。 如果产生错误的文件是一个事务日志文件,请查看主题 CREATE DATABASE (Transact-SQL) 中“FOR ATTACH”和“FOR ATTACH_REBUILD_LOG”部分下的信息,以了解如何重新创建丢失的事务日志文件。
在 SQL Server 尝试访问这些位置上的数据库文件之前,请确保任何磁盘或网络位置[如 iSCSI 驱动器]可用。 如果需要,请在群集管理员或服务控制管理器中创建所需的依赖项。
如果遇到 The process cannot access the file because it is being used by another process 操作系统错误 = 32:
使用 Windows Sysinternals 中的进程资源管理器或句柄之类的工具来确定其他进程或服务是否已获取此数据库文件的排他锁 阻止该进程访问 SQL Server 数据库文件。 常见示例包括防病毒程序(请参阅以下知识库文章中的文件排除指南) 在群集环境中,确保前一个所属节点中的 sqlservr.exe 进程实际上已经将句柄释放到数据库文件。 通常不会发生这种情况,但群集或 I/O 路径的错误配置可能会导致此类问题。我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 SQLServer 错误 17204 %ls:无法打开文件号 %d 的文件 %ls。 操作系统错误: %ls。 故障 处理 修复 支持远程
相关文章
- SQLServer 错误 945 由于文件不可访问,或者内存或磁盘空间不足,所以无法打开数据库“%.*ls”。 有关详细信息,请参阅 SQL Server 错误日志。 故障 处理 修复 支持远程
- SQLServer 错误 2527 无法处理表 O_NAME 的索引 I_NAME,因为文件组 F_NAME 离线。 故障 处理 修复 支持远程
- SQLServer 错误 5120 表错误:无法打开物理文件 “%.*ls”。 操作系统错误 %d: “%ls”。 故障 处理 修复 支持远程
- SQLServer 错误 5515 无法打开 FILESTREAM 文件的容器目录“%.*ls”。 操作系统返回 Windows 状态代码 0x%x。 故障 处理 修复 支持远程
- SQLServer 错误 5554 单个文件的版本总数已达到文件系统所设置的最大限制。 故障 处理 修复 支持远程
- SQLServer 错误 7932 表错误:对象 ID O_ID,索引 ID I_ID,分区 ID PN_ID 的 FileStream 目录 ID F_ID 位于文件组 FG_ID1 中,但该目录应位于文件组 FG_ID2 中。 故障 处理 修复 支持远程
- SQLServer 错误 17067 SQL Server断言:文件: <%s>,行 = %d %s。 此错误可能与时间有关。 如果重新运行该语句后错误仍然存在,请使用 DBCC CHECKDB 来检查数据库的结构是否完整,或重新启动服务器以确保内存中的数据结构未破坏。 故障 处理 修复 支持远程
- SQLServer 错误 41030 无法打开 Windows Server 故障转移群集注册表子项“%.*ls”(错误代码 %d)。 父键为群集根键。 WSFC 服务可能未在运行或是在其当前状态下无法访问,或指定的参数无效。 如果已删除对应的可用性组,则会出现此错误。 有关此错误代码的信息,请参阅 Windows 开发文档中的“系统错误代码”。 故障 处理 修复 支持远程
- SQLServer获取临时表所有列名或是否存在指定列名的方法
- 如何快速连接SqlServer数据库(连接sqlserver数据库)
- 解决SQLServer错误日志的关键技巧(sqlserver错误日志)
- 『SQLServer中优化留存率的实践』(留存率sqlserver)
- 分布式SqlServer:改变数据存储方式的新动力(分布式sqlserver)
- 监控从SQLserver角度看待链路监控(sqlserver链路)
- 深入浅出 sqlserver 界面使用(sqlserver 界面)
- 快速掌握SQLServer查询数据的专业技巧(sqlserver查数据)
- 存储SQL Server:图像存储专家(sqlserver是图片)
- SQLServer文件的正确命名方法(sqlserver文件名)
- SQLServer带来的可观收入(sqlserver收入)
- 数据SQLServer中快速实现数据插入(sqlserver 插入)
- SQL Server 回写实现快速自动写入(sqlserver回写)
- 性SQL Server最大限度提升系统可用性(sqlserver 可用)
- SQLServer数据库中取小数的技术实现(sqlserver取小数)
- 连接SQLServer中连接两表的实践(sqlserver两表)
- 管理SQL Server数据库用户的秘籍(sqlserver数据库用户)
- 追踪SQLServer:知晓完美数据处理过程(追踪sqlserver)