技术开发 频道

SQL Server 2008的全文搜索升级

  【IT168 技术文档】将全文搜索升级到 SQL Server 2008 是在安装期间以及附加、还原或使用复制数据库向导复制 SQL Server 早期版本的数据库文件和全文目录期间执行的。

  升级服务器实例 
  对于就地升级,SQL Server 2008 实例将与 SQL Server 的旧版本并行安装,且数据将被迁移。如果 SQL Server 的旧版本安装了全文搜索,则将自动安装新版本的全文搜索。并行安装表示 SQL Server 的实例级存在下列每个组件。

  断字符、词干分析器和筛选器
  每个实例目前均使用自己的一组断字符、词干分析器和筛选器,而不受这些组件的操作系统版本的限制。而且,这些组件在各个实例级也很容易注册和配置。

  筛选器后台程序宿主
  全文筛选器后台程序宿主进程可以安全地加载和驱动用于索引和查询的第三方可扩展组件(例如断字符、词干分析器和筛选器),而不会损害全文引擎的完整性。服务器实例对所有多线程筛选器使用多线程进程,并对所有单线程筛选器使用单线程进程。

  注意:
  SQL Server 2008 引入了 FDHOST Launcher 服务 (MSSQLFDLauncher) 的服务帐户。该服务将服务帐户信息传播到 SQL Server 特定实例的筛选器后台程序宿主进程。

  在 SQL Server 2005 和早期版本中,每个全文索引都驻留在属于文件组的全文目录中,它们均具有物理路径,并被视为数据库文件。在 SQL Server 2008 中,全文目录是表示一组全文索引的逻辑概念,即虚拟对象。因此,新的全文目录不会视为带有物理路径的数据库文件。但是,在升级包含数据文件的所有全文目录期间,将在相同磁盘上创建新的文件组。这可以在升级后维护旧磁盘的 I/O 行为。该目录的所有全文索引均被放置到新的文件组中(如果存在根路径)。如果旧的全文目录路径无效,该升级则将全文索引保留在与基表相同的文件组中,或者保留在主文件组中(对于分区表)。

  注意:
  指定全文目录的 SQL Server 2005 Transact-SQL DDL 语句可正常运行。

  全文升级选项 
  将服务器实例升级到 SQL Server 2008 时,您可以通过用户界面选择以下全文升级选项之一。

  导入
  导入全文目录。一般情况下,导入速度比重新生成速度要快很多。例如,当仅使用一个 CPU 时,导入的运行速度比重新生成要快 10 倍左右。不过,导入的全文目录不能使用 SQL Server 2008 中引入的新的和增强的断字符,因此最终可能还是要重新生成全文目录。

  注意:
  重新生成可以以多线程模式运行,如果可用的 CPU 在 10 个以上,且您允许重新生成操作使用所有这些 CPU,则重新生成操作的运行速度可能比导入更快。

  如果全文目录不可用,则会重新生成关联的全文索引。此选项仅对 SQL Server 2005 数据库可用。

  重新生成
  使用新的和增强的断字符重新生成全文目录。重新生成索引可能需要一定时间,并且升级后可能需要占用大量的 CPU 和内存。

  重置
  重置全文目录。将删除 SQL Server 2005 全文目录文件,但会保留全文目录和全文索引的元数据。在进行升级后,所有全文索引将禁用更改跟踪,并且不会自动启动爬网。在升级完成后,目录将保留为空,直至手动执行完全填充。

  有关选择全文升级选项的注意事项 
  为升级选择升级选项时,请考虑以下几点:

  如何使用断字符?
  SQL Server 2008 全文搜索服务包括新的断字符和词干分析器。这可能更改早期版本中特定文本模式或方案的全文查询结果。因此,在选择适当的升级选项时,如何使用断字符非常重要:

  如果使用的全文语言的断字符在 SQL Server 2008 中未发生更改,或者撤回准确性对您来说并不重要,则适合导入。随后,如果遇到任何撤回问题,您只需通过重新生成全文目录即可升级到新的断字符。

  如果您关心撤回准确性,并使用 SQL Server 2008 中经过改进的断字符之一,则适合重新生成。

  是否基于整数全文键列生成了任何全文索引?
重新生成执行内部优化,在某些情况下该优化可提高升级的全文索引的查询性能。具体来说,如果您具有的全文目录包含基表的全文键列为整数数据类型的全文索引,重新生成将在升级后实现全文查询的理想性能。在这种情况下,我们强烈建议使用“重新生成”选项。

  注意:
  对于 SQL Server 2008 中的全文索引,建议采用整数数据类型作为全文键列。

  使服务器实例处于联机状态的优先级是什么?
  升级期间的导入或重新生成操作会占用很多 CPU 资源,这会延迟其余服务器实例的升级和联机。如果使服务器实例尽快处于联机状态非常重要,并且希望在升级后运行手动填充,则适合“重置”。

  导入 SQL Server 2005 全文索引后使用新的断字符 
  导入 SQL Server 2005 全文索引时,一定要认识到,SQL Server 2008 包含 SQL Server 2005 中存在的大多数语言的新断字符。只有英语、朝鲜语、泰语和中文(所有形式)的断字符保持不变。对于其他语言,SQL Server 2008 引入了新一代断字符,这些断字符的行为可能与导入的 SQL Server 2005 全文索引中的 SQL Server 2005 断字符行为稍有不同。

  如果全文目录是在将 SQL Server 2005 数据库升级到 SQL Server 2008 时导入的,该全文目录中全文索引使用的一种或多种语言现在可能与新断字符关联。对于这些语言,当查询使用新断字符时,由于旧断字符和新断字符的行为略有差异,因此有时可能会出现查询和全文索引内容不匹配。在这种情况下,若要保证查询和全文索引内容之间的完全匹配,请执行下列操作之一:

  重新生成包含全文索引的全文目录 (ALTER FULLTEXT CATALOG catalog_name REBUILD)

  对全文索引执行 FULL POPULATION (ALTER FULLTEXT INDEX ON table_name START FULL POPULATION)。

  重要提示:
  如果全文目录和索引使用的断字符未发生更改(例如英语断字符),则不会出现不匹配。查询时使用的断字符将与以前编制索引时用于创建索引的断字符和将来查询时所使用的断字符相同。
 
  将干扰词文件升级到非索引字表 
  SQL Server 2005 干扰词已替换为 SQL Server 2008 非索引字。将数据库从早期版本升级到 SQL Server 2008 时,SQL Server 2008 中将不再使用干扰词文件。然而,旧的干扰词文件存储在 FTDATA\ FTNoiseThesaurusBak 文件夹中,您可以稍后在更新或生成相应的 SQL Server 2008 非索引字表时使用它们。

  升级之后:

  如果您在 SQL Server 2005 安装中从未添加、修改或删除过任何干扰词文件,则该系统非索引字表应该可以满足您的需要。

  如果在 SQL Server 2005 中修改过干扰词文件,则这些修改在升级期间将会丢失。若要重新创建这些更新,必须在对应的 SQL Server 2008 非索引字表中手动重新创建这些修改。

  如果不希望将任何非索引字应用于全文索引(例如,如果您在 SQL Server 2005 安装中删除或清除过干扰词文件),则必须关闭每个已升级的全文索引的非索引字表。请运行如下 Transact-SQL 语句(将 database 替换为升级的数据库的名称,并将 table 替换为 table 的名称):

Use database;
ALTER FULLTEXT INDEX ON table SET STOPLIST OFF;

 

  GOSTOPLIST OFF 子句删除非索引字筛选,并触发对表的填充,而不会筛选任何视为干扰词的词语。

  备份和导入全文目录 
  对于在升级期间重新生成或重置的全文目录(以及对于新的全文目录),全文目录只是一个逻辑概念,并不驻留在文件组中。因此,若要备份 SQL Server 2008 中的全文目录,必须逐个识别包含目录全文索引的每个文件组并将它们备份。

  对于从 SQL Server 2005 导入的全文目录,该全文目录在其自己的文件组中仍然是数据库文件。在 SQL Server 2008 中除不存在 MSFTESQL 服务以外,全文目录的 SQL Server 2005 备份进程仍然适用。

  将数据库升级到 SQL Server 2008 时迁移全文索引
使用附加、还原或复制数据库向导可以将 SQL Server 早期版本中的数据库文件和全文目录升级到现有 SQL Server 2008 服务器实例。导入、重置或重新生成 SQL Server 2005 全文索引(如果有)。重新生成或重置 SQL Server 2000 全文索引(如果有)。upgrade_option 服务器属性控制在升级这些数据库期间服务器实例使用哪个全文升级选项。

  将所有 SQL Server 2005 或 SQL Server 2000 数据库附加、还原或复制到 SQL Server 2008 后,该数据库将立即变为可用,然后自动进行升级。根据编制索引的数据量,导入可能需要数小时,而重新生成最多可能需要十倍的时间。另请注意,将升级选项设置为“导入”时,如果全文目录不可用,则会重新生成关联的全文索引。

  更改服务器实例的全文升级行为

  Transact-SQL:使用 sp_fulltext_service 的 upgrade_option 操作

  SQL Server Management Studio :使用“服务器属性”对话框的“全文升级选项”。

  有关将 SQL Server 2005 全文目录还原到 SQL Server 2008 的注意事项
将全文数据从 SQL Server 2005 数据库升级到 SQL Server 2008 的其中一种方法是将完整数据库备份还原到 SQL Server 2008。

  导入目录时,您可以备份和还原数据库和目录文件。其行为与 SQL Server 2005 中相同:

  完整数据库备份将包括全文目录。若要引用全文目录,请使用其 SQL Server 2005 文件名,即 sysft_+catalog-name。

  如果全文目录处于脱机状态,备份将失败。

  在 SQL Server 2008 上还原数据库时,将为全文目录创建新的数据库文件。该文件的默认名称是 ftrow_catalog-name.ndf。例如,如果 catalog-name 是 cat1,SQL Server 2008 数据库文件的默认名称则为 ftrow_cat1.ndf。但是,如果目标目录中已使用该默认名称,新数据库文件则命名为 ftrow_catalog-name{GUID}.ndf,其中 GUID 是新文件的全局唯一标识符。

  导入目录后,将更新 sys.database_files 和 sys.master_file 以删除目录项,并将 sys.fulltext_catalogs 中的 path 列设置为 NULL。

  示例
  以下示例在 RESTORE 语句中使用 MOVE 子句,还原名为 ftdb1 的 SQL Server 2005 数据库。SQL Server 2005 数据库、日志和目录文件将被移动到 SQL Server 2008 服务器实例上的新位置,如下所示:

  数据库文件 ftdb1.mdf 移动到 C:\Program Files\Microsoft SQL Server\MSSQL.1MSSQL10.MSSQLSERVER\MSSQL\DATA\ftdb1.mdf。

  日志文件 ftdb1_log.ldf 移动到日志磁盘驱动器上的日志目录 log_drive:\log_directory\ftdb1_log.ldf 中。

  与 sysft_cat90 目录对应的目录文件移动到 C:\temp。导入全文索引后,它们将自动放置在数据库文件 C:\ftrow_sysft_cat90.ndf 中,并删除 C:\temp。

RESTORE DATABASE [ftdb1] FROM  DISK = N'C:\temp\ftdb1.bak' WITH  FILE = 1,
MOVE N'ftdb1' TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\ftdb1.mdf',
MOVE N'ftdb1_log' TO N'log_drive:\log_directory\ftdb1_log.ldf',
MOVE N'sysft_cat90' TO N'C:\temp'; 将 SQL Server 2005 数据库附加到 SQL Server 2008

  在 SQL Server 2008 中,全文目录是表示一组全文索引的逻辑概念。全文目录是虚拟对象,并不属于任何文件组。但是,将包含全文目录文件的 SQL Server 2005 数据库附加到 SQL Server 2008 服务器实例时,会将目录文件从其先前位置与其他数据库文件一起附加,这与 SQL Server 2005 中相同。

  SQL Server 2008 中附加的每个全文目录的状态与从 SQL Server 2005 分离数据库时相同。如果分离操作挂起任意全文索引填充,该填充将在 SQL Server 2008 上恢复,全文索引随后即可用于全文搜索。

  如果 SQL Server 2008 找不到全文目录文件,或者在未指定新位置的情况下在附加操作期间移动全文文件,行为则取决于选择的全文升级选项。如果全文升级选项为“导入”或“重新生成”,则重新生成附加的全文目录。如果全文升级选项为“重置”,则重置附加的全文目录。

0
相关文章