升级全文搜索
适用于: SQL Server Azure SQL 数据库
在安装过程中,或当从旧版 SQL Server 中附加、还原或复制数据库文件和全文目录时,SQL Server 会升级全文搜索。
升级服务器实例
对于就地升级,SQL Server 实例将与 SQL Server 的旧版本并行安装,且数据将被迁移。 如果 SQL Server 的旧版本安装了全文搜索,则将自动安装新版本的全文搜索。 并行安装表示 SQL Server 的实例级存在下列每个组件。
断字符、词干分析器和筛选器
每个实例目前均使用自己的一组断字符、词干分析器和筛选器,而不受这些组件的操作系统版本的限制。 而且,这些组件在各个实例级也很容易注册和配置。 有关详细信息,请参阅 配置和管理断字符和词干分析器以便搜索 和 配置和管理搜索筛选器。
筛选器后台程序宿主
全文筛选器后台程序宿主进程可以安全地加载和驱动用于索引和查询的可扩展外部组件(例如断字符、词干分析器和筛选器),而不会损害全文引擎的完整性。 服务器实例对所有多线程筛选器使用多线程进程,并对所有单线程筛选器使用单线程进程。
注意
SQL Server 2008 (10.0.x) 引入了 FDHOST Launcher 服务 (MSSQLFDLauncher) 的服务帐户。 该服务将服务帐户信息传播到 SQL Server 特定实例的筛选器守护程序主机进程。 有关设置服务帐户的信息,请参阅 设置用于全文筛选器后台程序启动器的服务帐户。
在 SQL Server 2005 (9.x) 中,每个全文索引都驻留在属于文件组的全文目录中,它们均具有物理路径,并被视为数据库文件。 在 SQL Server 2008 (10.0.x) 及更高版本中,全文目录是一个包含一组全文索引的逻辑对象或虚拟对象。 因此,新的全文目录不会视为带有物理路径的数据库文件。 但是,在升级包含数据文件的所有全文目录期间,将在相同磁盘上创建新的文件组。 这可以在升级后维护旧磁盘的 I/O 行为。 该目录的所有全文检索均被放置到新的文件组中(如果存在根路径)。 如果旧的全文目录路径无效,升级过程将全文检索保留在与基表相同的文件组中,或者对于分区表,则保留在主文件组中。
全文升级选项
升级 SQL Server 实例时,可以通过用户界面选择以下全文升级选项之一。
导入
导入全文目录。 一般情况下,导入速度比重新生成速度要快很多。 例如,当仅使用一个 CPU 时,导入的运行速度比重新生成要快 10 倍左右。 不过,导入的全文目录不能使用随 SQL Server 的最新版本安装的新断字符。 若要确保查询结果的一致性,必须重新生成全文目录。
注意
重新生成可以以多线程模式运行,如果可用的 CPU 在 10 个以上,且您允许重新生成操作使用所有这些 CPU,则重新生成操作的运行速度可能比导入更快。
如果全文目录不可用,则会重新生成关联的全文检索。 此选项仅对 SQL Server 2005 (9.x) 数据库可用。
有关导入全文检索的影响的信息,请参阅本主题后面的“有关选择全文升级选项的注意事项”。
重新生成
使用新的和增强的断字符重新生成全文目录。 重新生成索引可能需要一些时间,且升级后可能需要占用大量的 CPU 和内存。
重置
重置全文目录。 从 SQL Server 2005 (9.x) 升级时,将删除全文目录文件,但会保留全文目录和全文索引的元数据。 在进行升级后,所有全文检索将禁用更改跟踪,并且不会自动启动爬网。 在升级完成后,目录将保留为空,直至手动执行完全填充。
有关选择全文升级选项的注意事项
为升级选择升级选项时,请考虑以下几点:
需要查询结果的一致性吗?
SQL Server 将安装新的断字符以供全文和语义搜索使用。 在建立索引时和查询时均使用断字符。 如果您没有重新生成全文目录,搜索结果可能不一致。 如果发出查找某一短语的全文查询和当前断字符,该短语是由以前的 SQL Server 版本中的断字符以不同方式进行断字的,则可能不会检索包含该短语的文档或行。 其原因在于,建立了索引的短语是使用与正使用的查询不同的逻辑进行断字的。 解决方法是使用新的断字符来重新填充(重新生成)全文目录,以便索引时行为和查询时行为完全相同。 可以选择“重新生成”选项来完成此操作,也可以在选择“导入”选项后手动重新生成。
是否基于整数全文键列生成了任何全文检索?
重新生成执行内部优化,在某些情况下该优化可提高升级的全文检索的查询性能。 具体来说,如果您具有的全文目录包含基表的全文键列为整数数据类型的全文检索,则重新生成将在升级后实现全文查询的理想性能。 在这种情况下,我们强烈建议使用 “重新生成” 选项。
注意
对于全文索引,建议作为全文键的列采用整数数据类型。 有关详细信息,请参阅 改进全文索引的性能。
使服务器实例处于联机状态的优先级是什么?
升级期间的导入或重新生成操作会占用很多 CPU 资源,这会延迟其余服务器实例的升级和联机。 如果使服务器实例尽快处于联机状态非常重要,并且希望在升级后运行手动填充,则适合 “重置” 。
导入全文索引后确保查询结果的一致性
如果在升级 SQL Server 2005 (9.x) 数据库时导入了全文目录,则由于新旧断字符的行为不同,可能会出现查询和全文索引内容不匹配。 在这种情况下,若要保证查询和全文检索内容之间的完全匹配,请选择以下选项之一:
重新生成包含全文检索的全文目录 (ALTER FULLTEXT CATALOGcatalog_name REBUILD)
对全文检索执行 FULL POPULATION (ALTER FULLTEXT INDEX ON table_name START FULL POPULATION)。
有关断字符的详细信息,请参阅 配置和管理断字符和词干分析器以便搜索。
将干扰词文件升级到非索引字表
从 SQL Server 2005 (9.x) 升级数据库后,将不再使用干扰词文件。 然而,旧的干扰词文件存储在 FTDATA\ FTNoiseThesaurusBak
文件夹中,可以稍后在更新或生成相应的 SQL Server 非索引字表时使用它们。
从 SQL Server 2005 (9.x) 升级后:
如果在 SQL Server 2005 (9.x) 安装中从未添加、修改或删除过任何干扰词文件,则该系统非索引字表应该可以满足需要。
如果在 SQL Server 2005 (9.x) 中修改过干扰词文件,则这些修改在升级期间将会丢失。 若要重新创建这些更新,必须在对应的 非索引字表中手动重新创建这些修改。 有关详细信息,请参阅 ALTER FULLTEXT STOPLIST (Transact-SQL)。
如果不希望将任何非索引字应用于全文索引(例如,如果在 SQL Server 2005 (9.x) 安装中删除或清除过干扰词文件),则必须关闭每个已升级的全文索引的非索引字表。 请运行以下 Transact-SQL 语句(将 database 替换为已升级的数据库的名称,并将 table 替换为 table 的名称):
Use database; ALTER FULLTEXT INDEX ON table SET STOPLIST OFF; GO
STOPLIST OFF 子句删除非索引字筛选,并触发对表的填充,而不会筛选任何视为干扰词的词语。
备份和导入全文目录
对于在升级期间重新生成或重置的全文目录(以及对于新的全文目录),全文目录只是一个逻辑概念,并不驻留在文件组中。 因此,若要备份全文目录,必须识别包含目录的全文索引的每个文件组,并逐个备份它们。 有关详细信息,请参阅 备份和还原全文目录和索引。
对于从 SQL Server 2005 (9.x) 导入的全文目录,该全文目录在其自己的文件组中仍然是数据库文件。 在 SQL Server 中除不存在 MSFTESQL 服务以外,全文目录的 SQL Server 2005 (9.x) 备份进程仍然适用。 有关 SQL Server 2005 (9.x) 进程的信息,请参阅 SQL Server 2005 联机丛书中的备份和还原全文目录。
在升级数据库时迁移全文索引
使用附加、还原或复制数据库向导可以将 SQL Server 早期版本中的数据库文件和全文目录升级到现有实例。 导入、重置或重新生成 SQL Server 2005 (9.x) 全文索引(如果有)。 upgrade_option 服务器属性控制在升级这些数据库期间服务器实例使用哪个全文升级选项。
在将任何 SQL Server 2005 (9.x) 数据库附加、还原或复制到较新的实例后,此数据库立即变为可用,然后自动升级。 导入可能需要数小时,而重新生成所需的时间最多时可能十倍于此,具体取决于要编制索引的数据量。 另请注意,将升级选项设置为“导入”时,如果全文目录不可用,则会重新生成关联的全文检索。
更改服务器实例的全文升级行为
Transact-SQL:使用 sp_fulltext_service 的 upgrade_option 操作
SQL Server Management Studio:使用“服务器属性”对话框的“全文升级选项”。 有关详细信息,请参阅 管理和监视服务器实例的全文搜索。
还原 SQL Server 2005 (9.x) 全文目录的注意事项
从 SQL Server 2005 (9.x) 数据库升级全文数据的一种方法是,将完整数据库备份还原到较新的 SQL Server 实例。
导入 SQL Server 2005 (9.x) 全文目录时,可以备份和还原数据库和目录文件。 行为与 SQL Server 2005 (9.x) 中相同。
完整数据库备份将包括全文目录。 要引用全文目录,请使用其 SQL Server 2005 (9.x) 文件名,即 sysft_+catalog-name。
如果全文目录处于脱机状态,备份将失败。
有关备份和还原 SQL Server 2005 (9.x) 全文目录的详细信息,请参阅 SQL Server 2005 (9.x) 联机丛书中的备份和还原全文目录和文件备份和还原和全文目录。
在较新的 SQL Server 实例上还原数据库时,将为全文目录创建一个新的数据库文件。 该文件的默认名称是 ftrow_catalog-name.ndf。 例如,如果 catalog-name 是 cat1
,SQL Server 数据库文件的默认名称则为 ftrow_cat1.ndf
。 但是,如果目标目录中已使用该默认名称,新数据库文件则命名为 ftrow_
catalog-name{
GUID}.ndf
,其中 GUID 是新文件的全局唯一标识符。
导入目录后, sys.database_files 和 sys.master_files经过更新以删除目录项且 sys.fulltext_catalogs 中的 path 列设置为 NULL。
备份数据库
事务日志备份 (SQL Server)(仅限于完整恢复模式)
还原数据库备份
示例
以下示例在 RESTORE 语句中使用 MOVE 子句,还原名为 ftdb1
的 SQL Server 2005 (9.x) 数据库。 SQL Server 2005 (9.x) 数据库、日志和目录文件将被移动到 SQL Server 服务器实例上的新位置,如下所示:
数据库文件
ftdb1.mdf
移动到C:\Program Files\Microsoft SQL Server\MSSQL.1MSSQL13.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\MSSQL12.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 (10.0.x) 及更高版本中,全文目录是表示一组全文索引的逻辑概念。 全文目录是虚拟对象,不属于任何文件组。 但是,将包含全文目录文件的 SQL Server 2005 (9.x) 数据库附加到较新的 SQL Server 服务器实例时,与 SQL Server 2005 (9.x) 中一样,目录文件与其他数据库文件一起从旧位置附加。
SQL Server 中附加的每个全文目录的状态与从 SQL Server 2005 (9.x) 分离数据库时相同。 如果分离操作挂起任意全文索引填充,该填充将在 SQL Server 上恢复,全文索引随后即可用于全文搜索。
如果 SQL Server 找不到全文目录文件,或者在未指定新位置的情况下在附加操作期间移动全文文件,行为则取决于选择的全文升级选项。 如果全文升级选项为“导入”或“重新生成”,则重新生成附加的全文目录。 如果全文升级选项为“重置”,则重置附加的全文目录。
有关分离和附加数据库的详细信息,请参阅数据库分离和附加 (SQL Server)、CREATE DATABASE (SQL Server Transact-SQL)、sp_attach_db 和 sp_detach_db (Transact-SQL)。