Share via


现场体验:解决 OMPM 问题“表‘osWarning’中列‘WarningInfo’的类型太小,无法存储数据”

原文发布于 2011 年 8 月 25 日(星期四)

我叫 Anthony Cafarelli,是 Microsoft 咨询服务部门的一名顾问,最近搜集了我在客户现场执行 OMPM 扫描时获得的一些有用建议。在这篇博客文章中,我将分享一些这方面的知识,我希望阅读它的每个人都会觉得它有用!

我将在此博客文章中重点介绍的问题是一个导入错误。当扫描的文件的文件名非常长(超过 250 个字符)时,会发生此错误。因此,它不是一个极其常见的错误,但如果您确实遇到此情形,下面的步骤可帮助您解决导入问题。在将数据导入 OMPM 数据库时,您可能会遇到以下错误:

表“osWarning”中列“WarningInfo”的类型太小,无法存储数据

此错误表示,对于 osWarning 表中的“Warninginfo”字段,您尝试导入的 XML 文件中的文件名和路径过长。由于此长度问题,该信息不会导入数据库,并且该 XML 文件会被跳过。通常情况下,该错误消息随“上次访问日期”或“上次修改日期”警告一起显示,因此,这些文件不在数据库中通常并不要紧。但是,如果它是包含多个 XML 文件的 .cab 文件的一部分(它很可能如此,并且 CAB 很可能包含 10,000 个文件,除非您修改了 offscan.ini 文件以更改那些设置),则必须注意,如果 CAB 文件中包含的任何 XML 文件无法导入,则那些文件都无法进入数据库。此时,您有以下几个选项:

1)      忽略 CAB 文件未导入这一事实,根据正确导入的其他 CAB/XML 文件得出结果。

2)      提取 CAB 文件并导入每个 XML。

3)      修改数据库。

如果选项 1 可接受,我不必多说什么。那是最简单的选项,但您确实会丢失大量可能有用的数据。

选项 2 是个很有趣的选项。在我列出用于解决该问题的这两个选项中,这一选项需要技术人员的大量工作,但会显著增加导入数据库所需的时间。

只是为了以简单的方式提供一些背景信息:在单个 XML 文件发生错误时整个 CAB 都无法导入的原因在于 OMPM 执行导入的方式。CAB 由导入过程提取,并且会同时分析每个 XML 文件。这会显著(非常显著)提高导入 CAB 文件的速度,但同时会削弱解决错误的能力。

当您提取 XML 文件时,您可以将另外 9,999 个(平均数)XML 文件导入数据库。我没有真正地进行过计时和比较,但我可以说,导入单个 XML 文件的速度至少慢 10 倍。还有一种方法可提高导入速度,但它需要技术人员做更多的工作(这通常是我的首选方法,因为由于可支持性问题,我讨厌修改数据库,我将在下文简单介绍这一问题)。下面是修改后的选项 2:

1)      提取 CAB 文件。

2)      使用 findstr 命令找到提取的 XML 文件,即出现错误的文件。

3)      删除该 XML 文件。

4)      使用剩余的文件重新打包 CAB 文件。

通过此方法,您仍可保持较高的导入速度,并且解决了名称过长的文件问题。使用 findstr 和删除 XML 文件非常简单,所以我不打算多做介绍。但找到一种重新打包 CAB 的好方法就比较困难。我最好的建议是转到以下页面(没错,是另一个 TechNet 页面),并实现列出的 PowerShell 脚本:

https://technet.microsoft.com/zh-cn/magazine/2009.04.heyscriptingguy.aspx?pr=blog(该链接可能指向英文页面)

重新压缩为另一 CAB 文件后,可导入该文件,并且仍保持较高的导入速度!很实用的诀窍,是不是?

现在,让我们谈谈选项 3。对于这个选项,我的情绪特别复杂。它非常简单和有效,但它无疑需要更多支持。此方法的简单解释是:数据库中的 oswarning 字段不够大,无法存储我们尝试在其中存储的数据,那么就让我们把这个存储桶变大吧。我找到两种实现此目的的方法。根据截至目前我所写的内容不难看出我喜欢编号列表,下面还采用这种形式:

1)      使用 SQL Management Studio 修改字段大小。

2)      修改 OMPM 用于创建数据库的文件,以便您创建的每个数据库都有更大的字段大小。

使用 SQL Management Studio 非常简单,但根据您的 SQL 版本,具体操作可能会稍有不同。我不打算对该解决方案多做介绍,所以如果您不确定,请查找您最喜欢的 SQL 资源(朋友、同事、书籍、博客等)并研究它,或使用第二种方法。

第二种方法要求您打开文本编辑器。我最喜欢使用 Notepad.exe,所以我将以它为例。启动记事本,并打开 OMPM/Database/Include 文件夹中的 ProvisionDB.sql。

打开该文件后,请搜索“oswarning”,并单击“查找下一个”(Find Next)。

您将看到以下内容:

在这里,您将看到 WarningInfo 字段(255 个字符)。只需将该数字更改为更大的数字(例如 285)并保存文件即可。现在,每次运行 createdb 命令时,新数据库都会有更大的字段。注意:这不会修改现有数据库,所以请确保创建一个新数据库,在新数据库中运行导入。您需要从 OMPMimported 文件夹中提取您导入到旧数据库的任何文件,以便能够将它们重新导入新数据库。

Office 兼容性团队已注意到此限制,在将来的更新中会修复此问题。

希望本文对所有阅读它的人都有所帮助!我计划撰写有关我在现场发现的其他问题和“创造性”解决方案的更多博客文章。

Anthony

这是一篇本地化的博客文章。请访问 Experience from the Field: Resolving the OMPM issue “Type of column ‘WarningInfo’ in table ‘osWarning’ is too small to hold data” 以查看原文