如何移動、複製和備份全文檢索目錄資料夾及檔案

文章翻譯 文章翻譯
文章編號: 240867 - 檢視此文章適用的產品。
本文曾發行於 CHT240867
重要 本文包含修改登錄的相關資訊。修改登錄之前,請務必將它備份起來,並瞭解如何在發生問題時還原登錄。如需有關如何備份、還原和編輯登錄的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
256986 Microsoft Windows 登錄說明
全部展開 | 全部摺疊

在此頁中

結論

全文檢索目錄和索引不是儲存在 SQL Server 資料庫中,而是個別儲存在由 Microsoft Search Service 管理的檔案中。在進行 Microsoft SQL Server 復原期間,並不會復原全文檢索目錄檔案。此外,您無法使用 Transact SQL 陳述式 BACKUP 和 RESTORE 來備份和還原全文檢索目錄檔案。執行復原或還原作業之後,您必須個別重新同步處理全文檢索目錄。只有 Microsoft Windows NT 系統管理員和 Microsoft Search Service 可以存取全文檢索目錄檔案。

雖然您無法使用 SQL Server 資料庫來備份全文檢索目錄,但是可以使用具有已啟用全文檢索搜尋的大型資料表的實際執行資料庫。如果您執行這項操作,可能必須移動、備份或還原這些全文檢索目錄和它們的實際執行資料庫。全文檢索目錄母體擴展或重新同步的執行時間可能會比一般維護時間還長。本文將告訴您可用來移動或複製目錄,而不需初始化完整母體擴展的各種方法。這個方法可避免發生嚴重停機的情形。

本文記載數種方法,您可以用於複製、移動和備份或還原全文檢索目錄資料夾及檔案,但必須符合特定限制:
  • 所使用的 SQL Server 版本都是相同的。
  • 全文檢索資料夾和檔案必須位於本機磁碟機上。
  • 全文檢索目錄資料夾和檔案必須保留原始的名稱和資料夾內容。
  • 當您在伺服器之間移動或複製全文檢索目錄時,兩部伺服器上的啟用全文檢索的資料庫識別碼和資料表識別碼必須是相同的。
警告 SQL Server 容錯移轉叢集的執行個體不支援這些程序。

全文檢索目錄是以資料夾和檔案集合的形式進行維護。全文檢索目錄的預設位置為:

Microsoft SQL Server 7.0
\Mssql7\FTDATA

Microsoft SQL Server 2000
預設執行個體:Program Files\Microsoft SQL Server\MSSQL\FTDATA
具名執行個體:Program Files\Microsoft SQL Server\MSSQL$instancename\FTDATA

每個全文檢索目錄及其相關檔案都是在使用下列命名慣例的資料夾下進行維護的,其中 dbid 是相關的資料庫識別碼,而 ftcatid 是全文檢索目錄識別碼:

"SQLxxxxx(dbid)yyyyy(ftcatid)"

在相關資料庫中,每個 ftcatid 都是唯一的。

警告 不當使用「登錄編輯程式」可能會導致嚴重的問題,甚至必須重新安裝作業系統。Microsoft 不保證可以解決您不當使用「登錄編輯程式」所導致的問題。請自行承擔使用「登錄編輯程式」的一切風險。

在獨立電腦或叢集上備份全文檢索目錄

  1. 停止獨立電腦上的 Microsoft Search Service。對於叢集 SQL Server 組態,請讓全文檢索資源保持連線狀態。停止 Microsoft Search Service 之後,您就無法對資料庫執行使用述詞 CONTAINS 或 FREETEXT、資料列集值函數 CONTAINSTABLE 或 FREETEXTTABLE 的全文檢索查詢。此外,全文檢索搜尋查詢也無法運作,並且您會收到下列錯誤訊息:
    伺服器:訊息 7602,層級 16,狀態 1,行 2 全文檢索服務 (Microsoft Search) 無法使用。必須由系統管理員啟動這項服務。
  2. 使用 Microsoft Windows NT 檔案系統備份公用程式 (例如 Backup Exec),然後備份全文檢索目錄、資料夾和檔案。全文檢索目錄的系統資料表 (sysfulltextcatalogs) 會與 SQL Server 資料庫一起備份。
  3. 如果您必須個別備份目錄,請備份下列登錄項目:
    \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Applications\SQLServer\Catalogs\[FT_Catalog_Folder] \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\CatalogNames\SQLServer\[FT_Catalog_Folder] \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Gather\SQLServer\[FT_Catalog_Folder] \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Gathering Manager\Applications\SQLServer\Projects\[FT_Catalog_Folder] \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Indexer\SQLServer\[FT_Catalog_Folder]
    [FT_Catalog_Folder] 是目錄資料夾名稱 "SQLxxxxx(dbid)yyyyy(ftcatid)"
    如果是 SQL Server 的具名執行個體,登錄項目為 \SQLServer$InstanceName\。
  4. 2. 備份下列登錄項目,以備份所有目錄(這會備份伺服器上所有的全文檢索目錄):
    \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Applications\SQLServer\Catalogs \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\CatalogNames\SQLServer \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Gather\SQLServer \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Gathering Manager\Applications\SQLServer\Projects \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Indexer\SQLServer
    如果是 SQL Server 的具名執行個體,登錄項目為 \SQLServer$InstanceName\。

將同一伺服器上的全文檢索目錄還原至相同的本機磁碟機或路徑

  1. 停止 Microsoft Search Service。注意 只有在卸除資料庫之後,才能執行步驟 2。否則請跳到步驟 3。
  2. 還原或附加您啟用全文檢索的資料庫。還原資料庫之後,確認資料庫識別碼 (dbid) 與先前備份時相同。
    注意 如果您使用 sp_attach_db 命令來附加資料庫,請務必執行 exec sp_fulltext_database 'enable' 命令,為資料庫啟用全文檢索。
  3. 如果要找出 dbid,請執行下列程式碼:
    Use dbname
    go
    select db_id()
    注意 如果要還原個別目錄,請依照步驟 4 執行,如果要還原所有目錄,請前往步驟 5。
  4. 還原您根據先前的備份指示而備份的登錄項目。在嘗試執行這個步驟之前,您可以先備份登錄。
    \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Applications\SQLServer\Catalogs\[FT_Catalog_Folder] \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\CatalogNames\SQLServer\[FT_Catalog_Folder] \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Gather\SQLServer\[FT_Catalog_Folder] \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Gathering Manager\Applications\SQLServer\Projects\[FT_Catalog_Folder] \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Indexer\SQLServer\[FT_Catalog_Folder]
    [FT_Catalog_Folder] 是目錄資料夾名稱 "SQLxxxxx(dbid)yyyyy(ftcatid)"
    如果是 SQL Server 的具名執行個體,登錄項目為 \SQLServer$InstanceName\。
  5. 如果要還原伺服器上所有的目錄,請還原下列登錄項目。在嘗試執行這個步驟之前,您可以先備份登錄。
    \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Applications\SQLServer\Catalogs \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\CatalogNames\SQLServer \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Gather\SQLServer \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Gathering Manager\Applications\SQLServer\Projects \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Indexer\SQLServer
    如果是 SQL Server 的具名執行個體,登錄項目為 \SQLServer$InstanceName\。
  6. 將目錄從備份還原至預設位置 (即先前備份的來源位置)。
  7. 重新啟動 Microsoft Search Service。
  8. 使用 Transact-SQL SELECT 陳述式,以確認新的全文檢索目錄資料夾和檔案運作正常,並在 WHERE 子句中使用 CONTAINS 或 FREETEXT 述詞。

在執行 SQL Server 的同一電腦上的本機磁碟機或路徑之間,移動或複製全文檢索目錄

  1. 使用 sp_help_fulltext_catalogs 'FT_Catalog_Name',確認全文檢索目錄名稱和本機磁碟機或路徑。請記錄全文檢索目錄磁碟機代號以及完整路徑,以供日後使用。
  2. 停止 Microsoft Search Service。只有在資料庫已卸除或目錄已刪除的情況下,才能執行步驟 3 和 4,否則請跳至步驟 5。
  3. 還原或附加您啟用全文檢索的資料庫。還原資料庫之後,確認資料庫識別碼 (dbid) 與先前備份時相同。

    注意 如果您使用 sp_attach_db 命令來附加資料庫,請務必執行 exec sp_fulltext_database 'enable' 命令,為資料庫啟用全文檢索。

    如果要找出 dbid,請執行下列程式碼:
    Use dbname
    go
    select db_id()
  4. 還原下列登錄項目。在嘗試執行這個步驟之前,您可以先備份登錄。
    \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Applications\SQLServer\Catalogs\[FT_Catalog_Folder] \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\CatalogNames\SQLServer\[FT_Catalog_Folder] \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Gather\SQLServer\[FT_Catalog_Folder] \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Gathering Manager\Applications\SQLServer\Projects\[FT_Catalog_Folder] \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Indexer\SQLServer\[FT_Catalog_Folder]
    [FT_Catalog_Folder] 是目錄資料夾名稱 "SQLxxxxx(dbid)yyyyy(ftcatid)"
    如果是 SQL Server 的具名執行個體,登錄項目為 \SQLServer$InstanceName\。
  5. 決定新的全文檢索目錄本機磁碟機或路徑。將全文檢索目錄複製到新的位置。
  6. 使用系統預存程序 sp_configure 和 RECONFIGURE with override 來允許系統資料表進行更新,然後將 [database_name].dbo.sysfulltextcatalogs 路徑資料行更新為全文檢索目錄預設資料夾的新本機磁碟機或路徑目的地,例如 d:\FTData。
  7. 使用 Windows NT 4.0 Resource Kit regfind 公用程式,尋找並取代各個全文檢索目錄資料夾 (FT_Catalog_Folder) 的下列 HKLM 登錄機碼值 (例如 SQL0000500005):
    \SOFTWARE\Microsoft\Search\1.0\Gather\SQLServer\[FT_Catalog_Folder] \SOFTWARE\Microsoft\Search\1.0\Gathering Manager\Applications\SQLServer\Projects\[FT_Catalog_Folder] \SOFTWARE\Microsoft\Search\1.0\Indexer\SQLServer\[FT_Catalog_Folder]
    此外,請務必使用引號 ("") 括住 -p-r 參數的登錄機碼。例如:
    -m \\server_2 -p "<Key Name>" <Old_FT_Catalog_Path_and_Folder> -r <New_FT_Catalog_Path_and_Folder>

    注意:請使用適當的值來取代 <Key Name>、<Old_FT_Catalog_Path_and_Folder> 和 <New_FT_Catalog_Path_and_Folder>。
    例如:-m \\server_2 -p "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Indexer\sqlserver$SQL2k\SQL0000500005" d:\programme\Microsoft SQL Server\MSSQL$SQL2K\FTDATA\SQL0000500005 -r d:\programme\Microsoft SQL Server\MSSQL$SQL2K\FTDATA\New Location\SQL0000500005

    如需有關使用 regfind 公用程式的語法的詳細資訊,請在 DOS 命令提示字元輸入下列參數:regfind /?
  8. 重新啟動 Microsoft Search Service。
  9. 使用 Transact-SQL SELECT 陳述式,以確認新的全文檢索目錄資料夾和檔案運作正常,並在 WHERE 子句中使用 CONTAINS 或 FREETEXT 述詞。

在 SQL Server 的執行個體之間,將全文檢索目錄複製到相同的本機磁碟機或路徑

下列步驟示範如何將全文檢索目錄資料夾和檔案,從一台執行 SQL Server (server_1) 的電腦移動或複製到另一台執行 SQL Server (server_2) 的電腦。本文假設 SQL Server 已安裝全文檢索搜尋,並且兩部伺服器都具有相同的資料庫和資料表識別碼。為了將全文檢索目錄從 SQL Server 的一個執行個體成功複製到另一個上,資料庫識別碼必須是相同的。因此,最好是讓 server_2 (要複製目錄的目的地) 成為與 server_1 完全相同的複本 (複製)。請確認 server_1 和 server_2 上的 dbid 都是相同的。如果要執行這項操作,請在兩部伺服器上執行下列命令:
Use dbname
go
select db_id()
如果要「交換」dbid 以取得 server_2 上的正確 dbid,請使用 sp_detach_dbsp_attach_db 來卸離再重新附加正確的資料庫。舉例來說,如果您有兩個資料庫,例如 TestDB (dbid = 7) 和 PerfDB (dbid = 8),請卸離這兩個資料庫,然後重新附加 PerfDB 資料庫,再重新附加 TestDB 資料庫。如此,即可交換 dbid:TestDB 的 dbid 會變成 8,PerfDB 的 dbid 則會變成 7。執行時,請務必先使用可用 dbid 集區中最低的 dbid。

警告 如果要執行這項操作,在卸離資料庫之前,請先確認兩個資料庫都沒有任何的全文檢索目錄,也沒有啟用全文檢索。如需有關卸除資料庫的全文檢索目錄及停用全文檢索的步驟,請參閱<其他相關資訊>一節中的<清除程序>。
  1. 確認啟用全文檢索的資料庫的 master.dbo.sysdatabases dbid 值在兩部伺服器上都是相同的。
  2. 確認啟用全文檢索的資料表的 [database_name].dbo.sysobjects 識別碼值在兩部伺服器上都是相同的。如需有關如何取得資料表識別碼值的詳細資訊,請參閱《SQL Server 叢書》中的「object_id」主題。
  3. 使用 sp_help_fulltext_catalogs 'FT_Catalog_Name',以確認全文檢索目錄名稱和本機磁碟機或路徑在兩部伺服器上都是相同的。
  4. 停止 server_1 和 server_2 上的 Microsoft Search Service。
  5. 將 server_1 上的磁碟機代號對應到 server_2 上的磁碟機或路徑。
  6. 使用 DOS 命令 xcopy,將您在步驟 3 中找出的全文檢索目錄資料夾和檔案從 server_1 複製到 server_2。請使用完整的全文檢索目錄磁碟機或路徑和檔案名稱做為來源位置,而對應的全文檢索目錄磁碟機或路徑和檔案名稱則做為目的地位置。如果目的地資料夾不存在於 server_2 上,請使用 xcopy 參數 /I/E 來建立所有的目的地資料夾。如果要還原所有目錄,請將所有的目錄資料夾複製到 server_2。
  7. 您可以在 server_1 上使用 DOS 命令 RMDIR /S /Q [FT_Catalog_drive/path],以移除 server_1 上的全文檢索目錄檔案。

    注意 如果要還原個別目錄,請依照步驟 8 執行,如果要還原所有目錄,請前往步驟 9。
  8. 還原您根據先前的指示而備份的登錄項目。在嘗試執行這個步驟之前,您可以先備份登錄。
    \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Applications\SQLServer\Catalogs\[FT_Catalog_Folder] \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\CatalogNames\SQLServer\[FT_Catalog_Folder] \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Gather\SQLServer\[FT_Catalog_Folder] \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Gathering Manager\Applications\SQLServer\Projects\[FT_Catalog_Folder] \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Indexer\SQLServer [FT_Catalog_Folder]
    [FT_Catalog_Folder] 是目錄資料夾名稱 "SQLxxxxx(dbid)yyyyy(ftcatid)"
    如果是 SQL Server 的具名執行個體,登錄項目為 \SQLServer$InstanceName\。
  9. 如果要還原伺服器上所有的目錄,請還原下列登錄項目。然而,如果您執行這項操作,在執行這個步驟之後,將會遺失 server_2 上所有現有的目錄。在嘗試執行這個步驟之前,您可以先備份登錄。
    \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Applications\SQLServer\Catalogs \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\CatalogNames\SQLServer \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Gather\SQLServer \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Gathering Manager\Applications\SQLServer\Projects \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Indexer\SQLServer
    注意 根據預設,全文檢索二進位碼檔案的位置為:
    SQL Server 7.0:\Mssql7\FTDATA
    Microsoft SQL Server 2000 預設執行個體:\Program Files\Microsoft SQL Server\MSSQL\FTDATA
    SQL Server 2000 具名執行個體:MSSQL$InstanceName\FTDATA
    這些位置和資料夾路徑在不同的電腦上可能會有所不同。在這個情況中,您必須變更兩個登錄項目,才能在完成 server_2 上的還原之後,讓路徑指向全文檢索二進位碼檔案的正確位置。
    \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\CatalogNames\SQLServer \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Indexer\SQLServer
    您可以使用 regfind 公用程式,尋找登錄項目並變更全文檢索二進位碼檔案的位置。
  10. 重新啟動兩部伺服器上的 Microsoft Search Service。
  11. 使用 Transact-SQL SELECT 陳述式,以確認新的全文檢索目錄資料夾和檔案運作正常,並在 WHERE 子句中使用 CONTAINS 或 FREETEXT 述詞。

其他相關資訊

下列 SQL Server 指令碼示範如何將全文檢索目錄資料夾從 SQL Server 7.0 (server_1) 移動或「移轉」到另一台執行 SQL Server 7.0 的電腦 (server_2),即 server_2 上不同的本機磁碟機或路徑位置。本文假設具有全文檢索搜尋的 SQL Server 7.0 是安裝在 Windows NT 4.0 電腦上,並且兩部伺服器都具有相同的資料庫和資料表識別碼。

基於示範的目的,兩部伺服器上的 Pubs (dbid = 5) 資料庫和資料表 pub_info (id = 645577338) 都已啟用全文檢索,並在兩部伺服器上擴展。請使用您的伺服器名稱來取代 server_2,然後使用您的全文檢索目錄資料夾名稱和磁碟機或路徑來取代全文檢索目錄資料夾名稱和磁碟機或路徑。

您必須以伺服器的本機 Administrators 群組成員的身分登入,並且必須是 SQL Server sysadmin 伺服器角色的成員 (或者以 sa 登入)。此外,您必須是資料庫的資料庫擁有者 (DBO),才能執行下列 SQL Server 指令碼。

請在兩部伺服器上執行下列 SQL Server 指令碼:
use pubs
go
sp_fulltext_service 'clean_up'
go
sp_fulltext_database 'enable'
go

-- Creates and activates the full-text catalog: PubInfo, if it does not exist.
-- Drops, re-creates and activates the full-text catalog: PubInfo, if it does
-- exist.
IF OBJECTPROPERTY ( object_id('pub_info'),
                    'TableHasActiveFulltextIndex') = 1
BEGIN
    print 'Table pub_info is Full-Text Enabled, dropping Full-Text Index
& Catalog...'
    EXEC sp_fulltext_table 'pub_info', 'drop'
    EXEC sp_fulltext_catalog 'PubInfo', 'drop'
    print 'Table pub_info is NOT Full-Text Enabled, creating FT Catalog,
Index & Activating...'
    EXEC sp_fulltext_catalog 'PubInfo', 'create'
    EXEC sp_fulltext_table 'pub_info', 'create', 'PubInfo', 'UPKCL_pubinfo'
    EXEC sp_fulltext_column 'pub_info', 'pub_id', 'add'
    EXEC sp_fulltext_column 'pub_info', 'pr_info', 'add'
    EXEC sp_fulltext_table 'pub_info', 'activate'
END
ELSE IF OBJECTPROPERTY ( object_id('pub_info'),'TableHasActiveFulltextIndex') = 0
BEGIN
    print 'Table pub_info is NOT Full-Text Enabled, creating FT Catalog,
Index & Activating...'
    EXEC sp_fulltext_catalog 'PubInfo', 'create'
    EXEC sp_fulltext_table 'pub_info', 'create', 'PubInfo', 'UPKCL_pubinfo'
    EXEC sp_fulltext_column 'pub_info', 'pub_id', 'add'
    EXEC sp_fulltext_column 'pub_info', 'pr_info', 'add'
    EXEC sp_fulltext_table 'pub_info', 'activate'
END
go -- Confirm Database ID, Object ID, FT Catalog ID and FT folder(default)
   -- location.
select dbid, name from master.dbo.sysdatabases where dbid = DB_ID('pubs')
-- dbid = 5
go
select id, name from pubs.dbo.sysobjects where id = object_id('pub_info') 
go
sp_help_fulltext_catalogs 'PubInfo' 
go
sp_help_fulltext_tables 'PubInfo', 'pub_info' 
go
sp_help_fulltext_columns 'pub_info' 
go
exec master..xp_cmdshell 'dir d:\MSSQL70\FTDATA'
go

--- After full-text is enabled and activated, start full crawl/population
BEGIN
SET NOCOUNT ON
EXEC sp_fulltext_catalog 'PubInfo', 'start_full'
--
--  Wait for crawl to complete
--  NOTE: Forlarger tables, increase the WAITFOR DELAY time appropriately
--
DECLARE @status int, @itemCount int, @keyCount int, @indexSize int
SELECT @status = FullTextCatalogProperty('PubInfo', 'populatestatus')
WHILE (@status <> 0)
BEGIN
  WAITFOR DELAY '00:00:01' -- wait for 1 second before checking FT
                           -- Populatestatus...
  SELECT @status = FullTextCatalogProperty('PubInfo', 'populatestatus')
END
WAITFOR DELAY '00:00:05' -- wait for 5 seconds to receive correct FT Property
                         -- info (add more time for larger tables)...
SET @itemCount = FullTextCatalogProperty('PubInfo', 'itemcount')
SET @keyCount = FullTextCatalogProperty('PubInfo', 'uniquekeycount')
SET @indexSize = FullTextCatalogProperty('PubInfo', 'indexsize')
PRINT 'Nbr. of Rows FT Indexed = ' + CAST((CONVERT(varchar(10), @itemCount)
- 1) as varchar(12)) + char(09) + 'Nbr. of Unique FT Words = '
+  CONVERT(varchar(10), @keyCount) + char(09)
SET NOCOUNT OFF
END
go

-- Confirm FT population, 1 row should be returned (pub_id = 0736). 
SELECT pub_id, pr_info FROM pub_info WHERE CONTAINS(pr_info, 'moon')
go

-- Stop the Microsoft Search service on both servers
exec master..xp_cmdshell 'net stop "Microsoft Search"'
go
請在來源伺服器 (server_1) 上執行下列 SQL Server 指令碼:
use pubs
go
-- Map a Drive letter to the destination server.
exec master..xp_cmdshell 'NET USE K: \\server_2\[drive]$'
go
-- Copy the destination server's FT catalog folder and files as a backup.
exec master..xp_cmdshell 'ROBOCOPY K:\MSSQL70\FTDATA\SQL0000500005
K:\MSSQL70\BACKUP\SQL0000500005 /E /NP'
go
-- Remove the destination server's full-text catalog folder and files.
exec master..xp_cmdshell 'RMDIR /S /Q K:\MSSQL70\FTDATA\SQL0000500005'
go
-- Copy the SOURCE full-text catalog folder and files to the destination server's
NEW full-text catalog location.
exec master..xp_cmdshell 'ROBOCOPY D:\MSSQL70\FTDATA\SQL0000500005
K:\FTData\SQL0000500005 /E /NP'
go
-- Restart the Microsoft Search service.
exec master..xp_cmdshell 'net start "Microsoft Search"'
go
-- Remove the mapped drive letter to the destination server, for example
-- K:\.
exec master..xp_cmdshell 'NET USE K: /delete'
go
您必須在目的地伺服器 (server_2) 上執行下列 SQL 指令碼:
use master
go
-- Enable system table updates.
sp_configure allow,1
go
reconfigure with override
go

use pubs
go
-- Record full-text catalog information (Note: path = NULL)
select * from sysfulltextcatalogs
go
-- Update the full-text catalog information with the new full-text catalog location
UPDATE sysfulltextcatalogs set path = 'E:\FTData'
   WHERE ftcatid = 5
go
-- Record full-text catalog info. (Note: path = E:\FTData)
select * from sysfulltextcatalogs
go

use master
go
-- Disable system table updates.
sp_configure allow,0
go
reconfigure with override
go

-- CAUTION: Back up your registry hive before you contine!

-- Search and replace HKLM "Gather" registry keys with new full-text catalog
-- folder location [10 row(s) affected]:
exec master..xp_cmdshell 'REGFIND -m \\server_2 -p
\Registry\Machine\SOFTWARE\Microsoft\Search\1.0\Gather\SQLServer\SQL0000500005
"E:\MSSQL70\FTDATA\SQL0000500005" -r "E:\FTData\SQL0000500005"'
go
-- Search and replace HKLM "Gatherer Manager" registry keys with new FT
-- catalog folder location [6 row(s) affected]:
exec master..xp_cmdshell 'REGFIND -m \\server_2 -p
"\Registry\Machine\SOFTWARE\Microsoft\Search\1.0\Gathering
Manager\Applications\SQLServer\Projects\SQL0000500005"
"E:\MSSQL70\FTDATA\SQL0000500005" -r "E:\FTData\SQL0000500005"'
go
-- Search and replace HKLM indexer registry keys with new FT catalog folder
-- location [6 row(s) affected]:
exec master..xp_cmdshell 'REGFIND -m \\server_2 -p
"\Registry\Machine\SOFTWARE\Microsoft\Search\1.0\Indexer\SQLServer\SQL0000500005"
"E:\MSSQL70\FTDATA\SQL0000500005" -r "E:\FTData\SQL0000500005"'
go

-- Restart the Microsoft Search service
exec master..xp_cmdshell 'net start "Microsoft Search"'
go

-- Confirm FT population, 1 row should be returned (pub_id = 0736). 
use pubs
go
SELECT pub_id, pr_info FROM pub_info WHERE CONTAINS(pr_info, 'moon')
go
您可以執行下列 SQL Server 程式碼,藉此停止進行中的全文檢索母體擴展:

警告 如果項目計數不等於全文檢索索引的資料列數目再加 1,表示全文檢索目錄大小可能不正確!
-- Run the following code after starting full crawl/population through another connection.
use pubs
go
BEGIN
SET NOCOUNT ON
EXEC sp_fulltext_catalog 'PubInfo', 'stop'

-- Wait for crawl to stop

--  NOTE: For larger tables, increase the WAITFOR DELAY time appropriately

DECLARE @status int, @itemCount int, @keyCount int, @indexSize int
SELECT @status = FullTextCatalogProperty('PubInfo', 'populatestatus')
WHILE (@status <> 0)
BEGIN
  WAITFOR DELAY '00:00:01' -- wait for 1 second before checking FT
                           -- Populatestatus...
  SELECT @status = FullTextCatalogProperty('PubInfo', 'populatestatus')
END
WAITFOR DELAY '00:00:05' -- wait for 5 seconds to receive correct FT Property
                         -- info (add more time for larger tables)...
SET @itemCount = FullTextCatalogProperty('PubInfo', 'itemcount')
SET @keyCount = FullTextCatalogProperty('PubInfo', 'uniquekeycount')
SET @indexSize = FullTextCatalogProperty('PubInfo', 'indexsize')
PRINT 'Nbr. of Rows FT Indexed = ' + CAST((CONVERT(varchar(10), @itemCount) - 1)
as varchar(12)) + char(09) + 'Nbr. of Unique FT Words = ' +
CONVERT(varchar(10), @keyCount) + char(09)
SET NOCOUNT OFF
END
go
-- Can return: Nbr. of Rows FT Indexed = -1 Nbr. of Unique FT Words = 0 
-- (depending upon when the crawl/population stopped)
清除程序

請在兩部伺服器上執行下列 SQL 指令碼:

pubs 資料庫中卸除全文檢索索引、全文檢索目錄,然後停用全文檢索搜尋:
use pubs
go
sp_fulltext_table 'pub_info', 'drop'
go
sp_fulltext_catalog 'PubInfo', 'drop'
go
sp_fulltext_database 'disable'
go
sp_fulltext_service 'clean_up'
go
-- end SQL Script !

參考

如需有關如何取得資料庫的 dbid 的詳細資訊,請參閱《SQL Server 線上叢書》中的「DB_ID」主題。

如果要判斷資料庫是否啟用全文檢索,請參閱《SQL Server 線上叢書》中的「DATABASEPROPERTY」或「IsFulltextEnabled」主題。

如需有關 ftcatid 的詳細資訊,請參閱《SQL Server 線上叢書》中的「sp_help_fulltext_catalogs」、「OBJECTPROPERTY」或「TableFulltextCatalogId」主題。

屬性

文章編號: 240867 - 上次校閱: 2007年11月30日 - 版次: 6.2
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2000 Standard Edition?應用於:
    • Microsoft SQL Server 2000 Developer Edition
    • Microsoft SQL Server 2000 Standard Edition
    • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 7.0 Enterprise Edition
  • Microsoft SQL Server 7.0 Standard Edition
關鍵字:?
kbinfo KB240867
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com