如何获得数据库里有多少个全文索引。删除全文索引的方法 SQL server 2005
今天使用命令备份数据库的时候发生了异常:
Msg 3007, Level 16, State 1, Line 4
The backup of the file or filegroup "sysft_db_FullText" is not permitted because it is not online. BACKUP can be performed by using the FILEGROUP or FILE clauses to restrict the selection to include only online data.
Msg 3007, Level 16, State 1, Line 4
The backup of the file or filegroup "sysft_ccc" is not permitted because it is not online. BACKUP can be performed by using the FILEGROUP or FILE clauses to restrict the selection to include only online data.
Msg 3007, Level 16, State 1, Line 4
The backup of the file or filegroup "sysft_aaa" is not permitted because it is not online. BACKUP can be performed by using the FILEGROUP or FILE clauses to restrict the selection to include only online data.
Msg 3013, Level 16, State 1, Line 4
BACKUP DATABASE is terminating abnormally.
其中:db_FullText、ccc、aaa是原来的三个全文索引目录。
想起来是重新装系统后原来的全文索引被破坏了。 全文索引自己尝试后,发现对中文的支持很不好。查处的结果一般比实际的要少得多。所以不使用它了。
但是忘记在那个表上建立过全文索引了。花了不少时间,与大家共享 :
--全文索引目录
sp_help_fulltext_catalogs
--全文索引列
sp_help_fulltext_columns
--全文索引表
sp_help_fulltext_tables
通过 sp_help_fulltext_catalogs找到了已经建立的全文索引目录。但全文索引列和索引表却没有。所以只需要删除全文索引目录就OK了。
删除全文目录:
DROP FULLTEXT CATALOG 目录名称。
当运行上面三个SQL结果都为空的时候,这样全文索引就清除了。可以备份了。
如果全文索引还在的话,那要启动全文索引服务后 执行DROP FULLTEXT INDEX ON 全文索引表,然后再运行 DROP FULLTEXT CATALOG 目录名称。 OK了。
参考资料:
14.8 2005新增:与全文索引相关的T-SQL语句
在SQL Server 2005以前的版本中,创建与管理全文目录、全文索引主要是使用存储过程来完成。从SQL Server 2005开始新增加了一些与全文索引相关的T-SQL语句,可以用来创建与管理全文目录和全文索引。
14.8.1 创建全文目录
创建全文目录的T-SQL语句为:
CREATE FULLTEXT CATALOG catalog_name
[ON FILEGROUP filegroup ]
[IN PATH 'rootpath']
[WITH <catalog_option>]
[AS DEFAULT]
[AUTHORIZATION owner_name ]
<catalog_option>::=
ACCENT_SENSITIVITY = {ON|OFF}
其中参数说明如下:
l catalog_name:全文目录名称。
l ON FILEGROUP filegroup:包含全文目录的文件组名。
l IN PATH 'rootpath':全文目录的路径。
l AS DEFAULT:指定该全文目录为默认目录。
l AUTHORIZATION owner_name:将全文目录的所有者设为数据库用户名或角色的名称。
l ACCENT_SENSITIVITY:设置该全文目录的全文索引是否区分重音。
例十三、在Northwind数据库中创建一个名为“TSQL全文目录”全文目录,其代码如下:
CREATE FULLTEXT CATALOG TSQL全文目录
ON FILEGROUP [PRIMARY]
IN PATH 'E:/book/SQL Server 2005大全/数据库/第十四章/运行后数据库'
AS DEFAULT
14.8.2 更改全文目录属性
创建完全文目录之后,如果发现其设置有不如意之处,可以用T-SQL语句对其进行修改。更改全文目录属性的T-SQL语句代码如下:
ALTER FULLTEXT CATALOG catalog_name
{ REBUILD [ WITH ACCENT_SENSITIVITY = { ON | OFF } ]
| REORGANIZE
| AS DEFAULT
}
其中参数说明如下:
l catalog_name:全文目录名称
l REBUILD:重新生成全文目录。
l WITH ACCENT_SENSITIVITY:设置该全文目录的全文索引是否区分重音。
l REORGANIZE:执行主合并索引以便将在索引过程中创建的各个较小的索引合并成一个大索引。
l AS DEFAULT:指定该全文目录为默认目录。
例十四、重新生成“TSQL全文目录”,其代码如下:
ALTER FULLTEXT CATALOG TSQL全文目录
REBUILD
14.8.3 创建全文索引
有了全文目录后,可以在全文目录里创建全文索引。一个全文目录里可以包含多个全文索引,但一个全文索引只能属于一个全文目录。每个数据表只能有一个全文索引。创建全文索引的T-SQL语句代码如下:
CREATE FULLTEXT INDEX ON table_name
[(column_name [TYPE COLUMN type_column_name]
[LANGUAGE language_term] [,...n])]
KEY INDEX index_name
[ON fulltext_catalog_name]
[WITH
{CHANGE_TRACKING {MANUAL | AUTO | OFF [, NO POPULATION]}}
]
其中参数说明如下:
l table_name:数据表名。
l column_name:全文索引中包括的一列或多列的名称。只能对类型为char、varchar、nchar、nvarchar、text、ntext、image、xml和varbinary的列进行全文索引。
l TYPE COLUMN type_column_name:用于存储column_name的文档类型的数据表中的列名。
l LANGUAGE language_term:存储在column_name中的数据所用的语言。
l KEY INDEX index_name:数据表中唯一键索引的字段名。
l ON fulltext_catalog_name:全文目录名。
l MANUAL:指定是使用SQL Server代理还是手动传播跟踪日志。
l AUTO:当关联的数据表中修改了数据时,SQL Server自动更新全文索引。
l OFF[,NO POPULATION]:不保留对索引数据的更改列表。
例十五、为“文章”表的“标题”、“内容”和“文件”三个字段创建全文索引,其代码如下:
CREATE FULLTEXT INDEX
ON 文章(标题,内容,文件 TYPE COLUMN 扩展名)
KEY INDEX PK_文章
ON TSQL全文目录
注意:由于在前面的章节里已经为“文章”表创建了全文索引,因此在运行本例之前要先把原来创建的全文索引删除。
14.8.4 更改全文索引属性
创建完全文索引之后,如果发现其设置有不如意之处,可以用T-SQL语句对其进行修改。更改全文索引属性的T-SQL语句代码如下:
ALTER FULLTEXT INDEX ON table_name
{ ENABLE
| DISABLE
| SET CHANGE_TRACKING { MANUAL | AUTO | OFF }
| ADD ( column_name
[ TYPE COLUMN type_column_name ]
[ LANGUAGE language_term ] [,...n] )
[ WITH NO POPULATION ]
| DROP ( column_name [,...n] )
[WITH NO POPULATION ]
| START { FULL | INCREMENTAL | UPDATE } POPULATION
| STOP POPULATION
}
其中一些参数说明如下:
l table_name:数据表名。
l ENABLE | DISABLE:启用或禁用全文索引。
l MANUAL:指定是使用SQL Server代理还是手动传播跟踪日志。
l AUTO:当关联的数据表中修改了数据时,SQL Server自动更新全文索引。
l OFF:不保留对索引数据的更改列表。
l ADD:指定在全文索引中添加列。
l WITH NO POPULATION:指定添加过删除全文索引列之后不填充全文索引。
l DROP:指定在全文索引中删除列。
l START……POPULATION:开始填充全文索引。
l FULL:指定填充所有全文索引。
l INCREMENTAL:指定对上次填充以来修改过的行进行填充。
l UPDATE :指定对自上次更新更改跟踪索引以来的所有插入、更新或删除进行处理。
l STOP POPULATION:停止正在进行的填充。
例十六、禁用“文章”表的全文索引,其代码如下:
ALTER FULLTEXT INDEX ON 文章
DISABLE
例十七、启用“文章”表的全文索引,其代码如下:
ALTER FULLTEXT INDEX ON 文章
ENABLE
例十八、将“文章”表里的“文件”字段从全文索引里删除,其代码如下:
ALTER FULLTEXT INDEX ON 文章
DROP (文件)
例十九、填充“文章”表的全文索引,其代码如下:
ALTER FULLTEXT INDEX ON 文章
START FULL POPULATION
14.8.5 删除全文索引
删除全文索引的T-SQL的语法代码比较简单,如下所示:
DROP FULLTEXT INDEX ON table_name
例二十、删除“文章”表里的全文索引,其代码如下:
DROP FULLTEXT INDEX ON 文章
14.8.6 删除全文目录
删除全文目录的T-SQL的语法代码比较简单,如下所示:
DROP FULLTEXT CATALOG catalog_name
例二十一、删除“文章”表里的全文索引,其代码如下:
DROP FULLTEXT CATALOG TSQL全文目录