1. 程式人生 > >如何從 SQL Server中手動刪除複製(刪除釋出訂閱)

如何從 SQL Server中手動刪除複製(刪除釋出訂閱)

本文介紹的步驟可以使用手動刪除 (解除安裝) 複製,通過使用儲存的過程和 Transact-SQL 命令。

本文中的該資訊可能在您懷疑未正確,被刪除的複製某些元素中,並且想要手動刪除這些元素的情況下有用。 如果複製未正確刪除,以前釋出的資料庫的事務日誌可能會填滿,因為日誌不能被截斷。 請 (參閱步驟 3 的詳細資訊如何診斷這種可能性)。

本文可能很有用如果您要建立指令碼或程式的過程解除安裝複製。

下面的列表是手動刪除複製的必要步驟的摘要。 本文的在"更多資訊"部分提供每個步驟的詳細資訊。

  1. 刪除所有訂閱。
  2. 刪除所有文章和釋出。
  3. 清除任何"非"的事務日誌複製交易記錄。
  4. 刪除資料庫的釋出和訂閱狀態。
  5. 刪除不需要的遠端伺服器和遠端登入。
  6. 刪除伺服器的釋出伺服器、 訂閱伺服器和分發伺服器狀態。
  7. 刪除任何剩餘的複製任務。
  8. 刪除.sch 和.tmp 檔案 repldata 目錄中。
  9. 刪除分發資料庫。
  10. 重置 MSlast_job_info 表。
  11. 請驗證複製登錄檔項。

您可能會發現更容易使用 SQL Enterprise Manager 可能要解除安裝複製,而不是使用儲存過程和 Transact-SQL 命令。

SQL Server 6.5 中, 可以使用 SQL 企業管理器刪除通過單擊複製配置 / 解除安裝釋出伺服器選單上的複製。 有關詳細的資訊請參閱第 3 部分的新增 SQL Server 6.5 簡介冊中的"解除安裝複製"。

SQL Server 6.0 沒有一個複製解除安裝選項,但您可以執行的步驟 1 至 7 使用 SQL 企業管理器。 對於 SQL Server 6.0,仍然需要手動執行步驟 8 至 11。 有關詳細資訊,請參閱"停止複製"章 14 中 SQL Server 6.0 管理員的助理。

請注意您不應使用轉儲和負載的機制將釋出和訂閱資料庫傳輸到一個不同的伺服器。 (在這種情況下"不同伺服器"意味著不在最初發布資料庫的一個)。 在很多的情況下本文中的過程不會從已從一臺伺服器轉儲並載入到另一臺伺服器上的資料庫中刪除複製足夠。

如果您必須將已釋出的資料庫移到另一臺伺服器中,應考慮使用傳輸管理器或大容量複製程式 (BCP)。 您可以安全地使用轉儲並載入不同伺服器傳輸已釋出的資料庫僅當刪除所有訂閱和所有的出版物已釋出資料庫中之前轉儲資料庫的機制。 

下面是步驟手動刪除 (解除安裝) 複製進行詳細說明

。 請參閱 SQL Server 聯機叢書有關詳細資訊在命令和下面討論的儲存的過程。

回到頂端

步驟 1-刪除所有訂閱

您可以執行 sp_helpsubscription 來確定有任何訂閱已釋出資料庫中。

執行以下命令刪除已釋出資料庫中的所有釋出的所有訂閱。 已釋出並且已訂閱的每個資料庫中,必須執行此命令。 執行此命令還會刪除與斷開的訂閱關聯的該通訊組任務。

   sp_dropsubscription 'all', 'all', 'all'
				


請注意 sp_dropsubscriptions 將只正確才能都滿足以下條件:

  • 有是分發資料庫安裝。

    和)
  • 釋出伺服器具有所有的訂閱伺服器的正確的遠端伺服器資訊。 配置複製時,將自動定義遠端伺服器的資訊。 可以通過執行 sp _ helpserver 驗證遠端伺服器資訊。
回到頂端

步驟 2-刪除所有文章和釋出

您可以執行 sp_helppublication 來確定有任何出版物已釋出資料庫中。

您可以執行"Select * 從 sysarticles"來確定是否有任何文章在釋出資料庫中。

執行以下命令刪除所有文章和已釋出資料庫中的訂閱。 已釋出並且已釋出的每個資料庫中,必須執行此命令。 執行此命令將同時刪除與斷開的釋出,同步任務。

   sp_droppublication 'all'
				


步驟 3-清除事務日誌的複製任何"非"

回到頂端

交易記錄

無法截斷事務日誌,只要有任何不分發的複製的事務。 一個"非複製的事務為已標記為已釋出的資料庫事務日誌中複製,但已不被"分發"的日誌讀取器任務的交易記錄。

您可以看到通過執行以下命令是否有任何"非複製的事務,已釋出的資料庫中:

   dbcc opentran(<published_database_name>) with tableresults
				


如果該資料庫了在某個點必須複製的事務,上面的命令將返回最早的分散式的行 ID ("REPL_OLD_DIST_RID") 和最早的非分散式的行 ID ("REPL_OLD_NONDIST_RID")。 如果資料庫不具有任何複製的事務,並且有沒有開啟的事務,上面的命令將返回 0 的行。

如果上面的命令不會返回最舊分散式和最早非-分散式行 ID,和如果這些行 ID 不相同,您有或多個 undistributed 複製該資料庫中的事務。 如果行 ID 相同,您沒有任何非複製的事務在資料庫中。 詳細資訊,請參閱 Transact-SQL 參考書中的 DBCC 語句 (英文)。

如果非複製的事務請執行下面的命令,將標記為"分配"的所有複製的事務,以便可以截斷日誌:

   sp_repldone 0, 0, null, 0, 0, 1
				


sp _ repldone 命令必須執行在每個具有非複製的事務的資料庫中。

如果資料庫被標記為釋出只能執行 sp _ repldone 命令。 如有必要,您可以將臨時標記資料庫為釋出的執行以下命令:

   sp_dboption <database_name>, pub, true
				


在執行 sp _ repldone 之後可以通過執行以下命令來標記不是釋出的資料庫:

   sp_dboption <database_name>, pub, false
				


您應該與您的主要支援提供者聯絡如果您持續看到完成本文中過程後的事務日誌中複製的事務中。

回到頂端

步驟 4-刪除資料庫的"釋出"和"訂閱"狀態

執行 sp _ helpdb 來驗證的資料庫有狀態為"釋出"或"已訂閱。

執行以下命令從資料庫中刪除"釋出"狀態。 執行此命令還會刪除資料庫的日誌讀取器任務。

   sp_dboption <database_name>, published, false
				


執行以下命令從資料庫中刪除"已訂閱"的狀態:

   sp_dboption <database_name>, subscribed, false
				
回到頂端

步驟 5-刪除不需要的遠端伺服器和遠端登入

安裝複製時,複製會自動定義遠端伺服器和遠端登入。 遠端伺服器和遠端登入是執行遠端過程呼叫所必需的。 如果不需要其他 SQL Server 應用程式,可以刪除遠端伺服器和遠端登入。

注意: 您不應刪除本地伺服器。

本地伺服器是執行 sp _ helpserver 時具有伺服器 ID 0。 有關遠端伺服器和遠端使用者的詳細資訊,請參閱第 10 章 SQL Server 管理員助理中。

您可以執行"sp _ helpserver"若要檢視遠端伺服器的列表。 您可以執行"sp_helpremotelogin"若要檢視遠端登入的列表。 執行以下命令刪除遠端登入:

   sp_dropremotelogin remoteserver_name [, loginame [, remotename]]
				


執行以下命令以刪除遠端伺服器: 注意: 不刪除本地伺服器。 本地伺服器具有伺服器 ID 0。

   sp_dropserver server_name [, droplogins]
				
回到頂端

步驟 6-刪除伺服器的釋出者、 訂閱伺服器和分發伺服器狀態

執行 sp _ helpserver 以驗證伺服器的狀態。 然後執行下面的命令,若要刪除伺服器的釋出伺服器 ("pub") 狀態:

   sp_serveroption <server_name>, pub, false
				


執行以下命令刪除伺服器的遠端釋出伺服器 ("dpub") 狀態:

   sp_serveroption <server_name>, dpub, false
				


執行以下命令刪除伺服器的訂閱伺服器 ("Sub") 狀態:

   sp_serveroption <server_name>, sub, false
				


執行以下命令刪除伺服器的分發伺服器 ("分發") 狀態:

   sp_serveroption <server_name>, dist, false
				
回到頂端

步驟 7-刪除任何剩餘的複製任務

開啟在 SQL 企業管理器管理計劃任務視窗,雙擊 SQL Executive 圖示。 刪除具有型別"日誌讀取器,"所有任務"通訊組"或"Sync"。 同時刪除所有複製清除任務。 清除任務具有名稱以下列格式:

   <publisher_server_name>_<subscriber_server_name>_cleanup.
				
回到頂端

步驟 8-刪除.Sch 和.Tmp 檔案,Repldata Directory 中

刪除.sch (已釋出的表架構指令碼) 和 MSSQL/Repldata 目錄中分發伺服器上的.tmp (同步資料) 檔案。

回到頂端

步驟 9-刪除分發資料庫

執行以下命令刪除分發資料庫:

   drop database distribution
				

刪除分發資料庫之後, 需要手動刪除資料,然後登入分發資料庫的裝置檔案,; 這要求停止並重新啟動該 SQL Server。

回到頂端

步驟 10-重置 MSlast_job_info 表

MSlast_job_info 表將存在於每個訂閱資料庫中,將跟蹤最後任務從每個已複製到該資料庫的釋出資料庫。 您訂閱了釋出後,將由分配任務建立了 MSlast_job_info 表。

如果訂閱的資料庫當前未訂閱任何釋出資料庫,可以每個訂閱資料庫中刪除 MSlast_job_info 表,只需使用下面的命令:

   drop table MSlast_job_info
				


如果訂閱資料庫仍然訂閱到一個或多個釋出的資料庫中,您應使用下面的命令刪除它不再訂閱到該資料庫與對應的 MSlast_job_info 表中行:

   delete MSlast_job_info
   where publisher = '<publishing_server_name>'
   and publisher_db = '<publishing_database_name>'
				
回到頂端

步驟 11-驗證複製登錄檔項

您可以重新安裝複製之前,HKEY_LOCAL_MACHINE/Software/Microsoft/MSSQLServer/Repliction 登錄檔項下的,"DistributionDB 值必須一個空字串。

可以從 master 資料庫將該字串為空執行以下命令:

   xp_regwrite 'HKEY_LOCAL_MACHINE',
   'SOFTWARE/Microsoft/MSSQLServer/Replication', 'DistributionDB',
   'REG_SZ', ''
				


警告: 錯誤地使用登錄檔編輯器可以導致嚴重問題,可能需要重新安裝 SQL Server。 Microsoft 不能保證可以解決因登錄檔編輯器使用不當導致的問題。 使用登錄檔編輯器需要您自擔風險。

也是可以更改此項使用登錄檔編輯器 (Regedt 32 在 Windows NT 3.50 和 Windows NT 3.51 中) 或 Windows NT 4.0 和 Windows 95 中的登錄檔編輯器。 如果您使用登錄檔編輯器,執行不刪除"DistributionDB 項本身 ; 而,雙擊 DistributionDB 條目並刪除編輯對話方塊框中的,字串。