Tsql 存储过程Sys.xp\u readerrorlog从何处读取其内容?

Tsql 存储过程Sys.xp\u readerrorlog从何处读取其内容?,tsql,stored-procedures,sql-server-2008-r2,logging,Tsql,Stored Procedures,Sql Server 2008 R2,Logging,我已经使用这个存储过程Sys.xp_readerrorlog大约一周了,我学到的是它接受7个参数来完全优化它应该如何显示数据。很容易理解 我现在的问题是,这个存储过程从哪里获取数据?我知道您也可以在SSMS对象浏览器中的SQL Server logs文件夹的Managements下预览数据,尽管我得出的理论是,读取日志时打开的对话框也使用此过程在网格中显示给用户 我很困惑。我搜索了整个系统数据库,没有发现任何(没有表)与您从这个过程中获得的输出非常相似 exec sys.xp_readerror

我已经使用这个存储过程Sys.xp_readerrorlog大约一周了,我学到的是它接受7个参数来完全优化它应该如何显示数据。很容易理解

我现在的问题是,这个存储过程从哪里获取数据?我知道您也可以在SSMS对象浏览器中的SQL Server logs文件夹的Managements下预览数据,尽管我得出的理论是,读取日志时打开的对话框也使用此过程在网格中显示给用户

我很困惑。我搜索了整个系统数据库,没有发现任何(没有表)与您从这个过程中获得的输出非常相似

exec sys.xp_readerrorlog 1,0,'','',null,null,N'Desc';
任何专家都可以告诉我实际日志数据存储在哪里,如果您有管理员权限,是否可以通过select语句查询它?

它从读取,这是一个纯文本文件。TSQL中的文件没有内置接口;xp_readerrorlog是众所周知的,但是它也没有文档记录,所以依赖它是有风险的,当然如果你不介意风险的话,你可以这样做


使用SMO你可以找到文件,但是没有专门的API来读取它,因为它只是一个文本文件。

没想到会出现这种情况,真的以为它存储在一个内部数据库中,但好奇心激发了,我觉得有必要问一下。我有代码将其提取到一个临时表中,使用内部参数和PATINDEX()方法对其进行操作,并将其大容量复制到另一个具有另一列布局的表中。我想这是因为SQL Server需要一个“故障保护”位置来进行日志记录,例如,如果在启动过程中出现致命错误,则系统数据库甚至可能不在线且不可用。(离开草坪。)