从 SQL Server 2005 升级全文搜索

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

本主题讨论从 SQL Server 2005 升级全文搜索的以下方面:

  • 升级服务器实例

  • 全文升级选项

  • 有关选择全文升级选项的注意事项

  • 将数据库升级到 SQL Server 2012 时迁移全文索引

  • 有关将 SQL Server 2005 全文目录还原到 SQL Server 2012 的注意事项

  • 将 SQL Server 2005 数据库附加到 SQL Server 2012

升级服务器实例

对于就地升级,SQL Server 2012 实例将与 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 2012 时,您可以通过用户界面选择以下全文升级选项之一。

  • 导入
    导入全文目录。 一般情况下,导入速度比重新生成速度要快很多。 例如,当仅使用一个 CPU 时,导入的运行速度比重新生成要快 10 倍左右。 不过,导入的全文目录不能使用随 SQL Server 的最新版本安装的新断字符。 若要确保查询结果的一致性,必须重新生成全文目录。

    注意注意

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

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

    有关导入全文索引的影响的信息,请参阅本主题后面的“有关选择全文升级选项的注意事项”。

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

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

有关选择全文升级选项的注意事项

为升级选择升级选项时,请考虑以下几点:

  • 需要查询结果的一致性吗?

    SQL Server 2012 将安装新的断字符以供全文和语义搜索使用。 在建立索引时和查询时均使用断字符。 如果您没有重新生成全文目录,搜索结果可能不一致。 如果您发出查找某一短语的全文查询和当前断字符,该短语是由以前的 SQL Server 版本中的断字符以不同方式进行断字的,则可能不会检索包含该短语的文档或行。 其原因在于,建立了索引的短语是使用与正使用的查询不同的逻辑进行断字的。 解决方法是使用新的断字符来重新填充(重新生成)全文目录,以便索引时行为和查询时行为完全相同。 可以选择“重新生成”选项来完成此操作,也可以在选择“导入”选项后手动重新生成。

  • 是否基于整数全文键列生成了任何全文索引?

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

    注意注意

    对于 SQL Server 2012 中的全文索引,建议采用整数数据类型作为全文键列。 有关详细信息,请参阅改进全文索引的性能

  • 使服务器实例处于联机状态的优先级是什么?

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

导入 SQL Server 2005 全文索引后确保一致的查询结果

如果在将 SQL Server 2005 数据库升级到 SQL Server 2012 时导入了全文目录,则由于旧断字符和新断字符的行为略有差异,可能会出现查询和全文索引内容不匹配。 在这种情况下,若要保证查询和全文索引内容之间的完全匹配,请选择以下选项之一:

有关断字符的详细信息,请参阅配置和管理断字符和词干分析器以便搜索

将干扰词文件升级到非索引字表

SQL Server 2005 干扰词已替换为 SQL Server 2008 及更高版本中的非索引字。 将数据库从 SQL Server 2005 升级到 SQL Server 2012 后,将不再使用干扰词文件。 然而,旧的干扰词文件存储在 FTDATA\ FTNoiseThesaurusBak 文件夹中,您可以稍后在更新或生成相应的 SQL Server 2012 非索引字表时使用它们。

从 SQL Server 2005 升级后:

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

  • 如果在 SQL Server 2005 中修改过干扰词文件,则这些修改在升级期间将会丢失。 若要重新创建这些更新,必须在对应的 SQL Server 2008 非索引字表中手动重新创建这些修改。 有关详细信息,请参阅 ALTER FULLTEXT STOPLIST (Transact-SQL)

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

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

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

备份和导入全文目录

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

对于从 SQL Server 2005 导入的全文目录,该全文目录在其自己的文件组中仍然是数据库文件。 在 SQL Server 2012 中除不存在 MSFTESQL 服务以外,全文目录的 SQL Server 2005 备份进程仍然适用。 有关 SQL Server 2005 进程的信息,请参阅 SQL Server 2005 联机丛书中的 Backing Up and Restoring Full-Text Catalogs(备份和还原全文目录)。

将数据库升级到 SQL Server 2012 时迁移全文索引

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

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

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

有关将 SQL Server 2005 全文目录还原到 SQL Server 2012 的注意事项

将全文数据从 SQL Server 2005 数据库升级到 SQL Server 2012 的其中一种方法是将完整数据库备份还原到 SQL Server 2012。

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

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

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

有关备份和还原 SQL Server 2005 全文目录的详细信息,请参阅 SQL Server 2005 联机丛书中的 Backing Up and Restoring Full-Text Catalogs(备份和还原全文目录)和 File Backup and Restore and Full-Text Catalogs(文件备份和还原以及全文目录)。

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

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

备份数据库

还原数据库备份

示例

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

  • 数据库文件 ftdb1.mdf 移动到 C:\Program Files\Microsoft SQL Server\MSSQL.1MSSQL11.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\MSSQL11.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 2012

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

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

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

有关分离和附加数据库的详细信息,请参阅数据库分离和附加 (SQL Server)CREATE DATABASE (Transact-SQL)sp_attach_dbsp_detach_db (Transact-SQL)

请参阅

概念

全文搜索入门

配置和管理断字符和词干分析器以便搜索

配置和管理搜索筛选器