Servigistics InService 部署 > 備份及復原 > 手動從失敗復原
  
手動從失敗復原
Servigistics InService 設計為可在意外終止後自行復原。自動復原的一些要點如下:
1. Servigistics InService 能夠在啟動期間回復為一致的狀態。如果伺服器當機,則系統在下一次啟動期間,將會清除其狀態並中止處於「暫停」、「失敗」或「進行中」狀態的任務。在該復原期間內,Servigistics InService 將不允許管理員登入 Task Manager 應用程式。相反地,會顯示 System is in recovery mode 錯誤訊息。
* 
在復原期間,請勿停止伺服器。欲監視復原進度,您可以在 Viewer 上檢視 enigma.log 檔案,因為此檔案會在執行復原期間更新。此記錄檔位於 <安裝>/log/System/Log/enigma.log
2. 如果任務處於「已中止」狀態,則 Servigistics InService 會將其復原為最後已知的良好狀態。在此任務執行期間進行的所有變更都會回復。
不過,在某些情況下,Servigistics InService 可能無法自動復原。如果任務轉至「失敗」狀態,或者伺服器於正在進行啟動復原時停止,便可能會發生這種情況。此時,您需要手動復原系統。要這樣做,請遵循下列步驟。
使用 Task Manager 記下失敗時正在進行的所有執行中任務。
* 
1. 此文件適用於 Servigistics InService 6.3 發行版本。
2. 下列範例中提到的區段名稱為 "TestNew"。
3. 存放庫資料夾名稱中包含以其名稱命名的時間戳記,因此實際值根據建立存放庫的環境與時間而定。下面的值僅作範例之用。
4. 以下所示的流程涵蓋絕大多數情況下的復原步驟。不過,也有可能還需要執行其他復原步驟,這要視失敗的原因而定。如果遇到任何問題,請連絡「PTC 技術支援」。
先決條件
在開始此流程之前,請先注意下列事項︰
1. 您擁有存取 Publisher 與 Viewer 的權限。
2. 沒有 Servigistics InService 任務正在執行,或處於「暫停」或「失敗」狀態。您必須在執行接下來的步驟之前先使用 Task Manager > Task Monitor 標籤對此進行核對。
* 
伺服器必須正在執行,才能從 Task Monitor 標籤收集資訊。確認任務狀況之後,請停止伺服器,並依照如下所述的步驟繼續。完成所有復原步驟之後,需要重新啟動伺服器。
手動復原
資料庫失敗導致在任務記錄檔或 enigma.log 檔案中出現例外錯誤。例如:
java.lang.RuntimeException: java.sql.SQLRecoverableException: No more data to read from socket
如果出現這些錯誤,請遵循下列步驟來手動復原資料。
1. 如果尚未執行,請啟動資料庫,然後再啟動應用程式伺服器。
2. 伺服器重新啟動後,應用程式會回復資料庫操作中斷時的剩餘流程。此流程可能耗費的時間取決於資料量。
3. 檢查復原狀況︰
在 Publisher 上,登入 Task Manager。如果您能夠登入,則表示復原流程已完成。System is in recovery mode 表示復原流程仍在進行中。
在 Viewer 上,請參閱下列檔案︰<安裝>/log/System/Log/enigma.log file。伺服器重新啟動之後,請瀏覽一下記錄檔,看看是否存在下列訊息:Action RollbackTasksCommand has finished successfully。請注意時間戳記,以確保訊息是最新的,而不是之前重新啟動 Viewer 所產生的訊息。
4. 復原完成之後,請確保所有區段中的以下目錄都為空
..\data\Titles\<SegmentName>-20141229124706\Data\Core\Tr.
\data\Titles\<SegmentName>-20141229124706\Data\Core\Delta
如果這些目錄「不是」空的,請連絡「PTC 技術支援」。
5. 進行完上述所有檢查之後,請在 Publisher 與 Viewer 的 E3C 結構描述上建立並執行 XAWorkflow.sql 指令集。此指令集可從「PTC 技術支援」網站下載︰
https://support.ptc.com/appserver/cs/portal/
6. 重新啟動所有伺服器。
核對點
在 Viewer 機器上︰
檔案或目錄
核對點
「資訊」
Config/System/Config/Core/coreCMIPublications.xml
<Publication ID="TestNew" Version="Version3" Preload="NO">
檢查預先載入旗標;針對除 CoreUtils 之外的所有出版品,其值應為 Preload="NO"。如果 Preload ="YES",請將其手動變更為 "NO"。
Config/System/Config/Core/corePublications.xml
<Publication ID="SHARED" Version="Version3" Preload="YES">
檢查預先載入旗標;針對所有出版品,其值應為 Preload="YES"。如您看到 Preload ="NO",請將其手動變更為 "YES"。
請確保 MaxDeltaLevel 值為 1。
Config/Titles/<SegmentName>/Config/BusinessLogic/runtimeProperties.conf.xml
<Property Name="RepositoryFlipStatus" Value="Regular"/>
<Property Name="ActiveConnectionManager" Value="IConnectionManager"/>
對於所有區段而言,這些內容都應該具有如上所示的精確值;如果出現其他任何值,例如 "Flipped" 或 "IConnectionManager2",請予以修正,使其指向 "Regular" 與 "IConnectionManager"。
Config/Titles/<SegmentName>/Config/Presentation/runtimeProperties.conf.xml
<Property Name="ActiveConnectionManager" Value="IConnectionManager"/>
<Property Name="DataSource_<SegmentName>_Read_FS" Value="Regular"/>
對於所有區段而言,這些內容都應該具有如上所示的精確值。
Tr 目錄
<安裝>\data\Titles\<SegmentName>-20141229124706\Data\Core\Tr
對於所有區段而言,此目錄都應為空。如果「不」為空,請連絡「PTC 技術支援」。
../Data/Titles/<SEGMENT_NAME>-20160212161907/Data/Core/Delta
此目錄應為空。如果不為空,請刪除此目錄中的所有內容。
資料庫復原
在開始之前,請先確保下列事項:
您擁有資料庫的適當存取權限。
您必須事先知道資料庫、帳戶使用者名稱與密碼。
您會看到具有後綴 ID 的備份表格,例如 TN_CM_ADMIN_TREE_<AXD3ER> (此後綴是變數)。
* 
如果您沒有看到任何備份表格,則不需要執行以下查詢。這說明系統已自行執行資料庫回復,或者失敗點未對資料庫交易產生影響。
如果下列任何表格出現,請參閱復原查詢
Publisher 結構描述
E3C 結構描述︰
如果備份存在,將會存在下列項目的備份表格︰
TN_CM_ADMIN_TREE
TN_CM_SOURCES
TN_CM_FOLDERS
TN_CM_FEED
TN_CM_SHARED
Viewer 結構描述
1. CMI 結構描述。從備份複製所有表格。存在四個備份表格︰
TN_CM_ADMIN_TREE
TN_CM_SOURCES
TN_CM_FOLDERS
TN_CM_SHARED
2. TitanDB 與 TitanDB2
將所有表格的資料從 TitanDB 結構描述複製到 TitanDB2 結構描述。TitanDB 與 TitanDB2 使用者帳戶具有彼此表格的存取權,因此,您可以將資料從一個結構描述複製到另一個結構描述。
不必使用 TitanDB2 上的結構描述。請改為使用 TitanDB 建立表格。
復原查詢
Publisher:E3C 結構描述
* 
CollectionName 是在發生失敗時,針對其執行任務之集合的名稱。
請將備份表格名稱取代為在實際環境中建立的原始備份表格名稱。
1. DELETE FROM TN_CM_FOLDERS WHERE NODE_ID IN (SELECT NODE_ID FROM TN_CM_SHARED WHERE COLL_NAME = CollectionName)
2. DELETE FROM TN_CM_SOURCES WHERE NODE_ID IN (SELECT NODE_ID FROM  TN_CM_SHARED WHERE COLL_NAME = CollectionName)
3. DELETE FROM TN_CM_SOURCES WHERE NODE_ID IN (SELECT NODE_ID FROM  TN_CM_SOURCES_BACKUP)
4. DELETE FROM TN_CM_ADMIN_TREE WHERE NODE_ID IN (SELECT NODE_ID FROM TN_CM_SHARED WHERE COLL_NAME = CollectionName)
5. DELETE FROM TN_CM_ADMIN_TREE WHERE NODE_ID IN (SELECT NODE_ID FROM TN_CM_ADMIN_TREE_BACKUP)
6. DELETE FROM TN_CM_SHARED WHERE COLL_NAME = CollectionName
7. DELETE FROM TN_CM_FEED where FEED_ID in (SELECT FEED_ID FROM  TN_CM_FEED_BACKUP)
8. INSERT INTO TN_CM_ADMIN_TREE SELECT * FROM TN_CM_ADMIN_TREE_BACKUP
9. INSERT INTO TN_CM_FOLDERS SELECT * from TN_CM_FOLDERS_BACKUP
10. INSERT INTO TN_CM_SOURCES SELECT * from TN_CM_SOURCES_BACKUP
11. INSERT INTO TN_CM_FEED SELECT * from TN_CM_FEED_BACKUP
12. INSERT INTO TN_CM_SHARED SELECT * from TN_CM_SHARED_BACKUP
13. DELETE FROM TN_CM_FEED where FEED_ID NOT IN (SELECT NODE_ID FROM TN_CM_SOURCES)
Viewer CMI 結構描述
* 
Collectioname 是在發生失敗時,針對其執行任務之集合的名稱。
1. DELETE FROM TN_CM_FOLDERS WHERE NODE_ID IN (SELECT NODE_ID FROM TN_CM_SHARED WHERE COLL_NAME = CollectionName)
2. DELETE FROM TN_CM_SOURCES WHERE NODE_ID IN (SELECT NODE_ID FROM  TN_CM_SHARED WHERE COLL_NAME = CollectionName)
3. DELETE FROM TN_CM_SOURCES WHERE NODE_ID IN (SELECT NODE_ID FROM  TN_CM_SOURCES_BACKUP)
4. DELETE FROM TN_CM_ADMIN_TREE WHERE NODE_ID IN (SELECT NODE_ID FROM TN_CM_SHARED WHERE COLL_NAME = CollectionName)
5. DELETE FROM TN_CM_ADMIN_TREE WHERE NODE_ID IN (SELECT NODE_ID FROM TN_CM_ADMIN_TREE_BACKUP)
6. DELETE FROM TN_CM_SHARED WHERE COLL_NAME = CollectionName
7. INSERT INTO TN_CM_ADMIN_TREE SELECT * FROM TN_CM_ADMIN_TREE_BACKUP
8. INSERT INTO TN_CM_FOLDERS SELECT * from TN_CM_FOLDERS_BACKUP
9. INSERT INTO TN_CM_SOURCES SELECT * from TN_CM_SOURCES_BACKUP
10. INSERT INTO TN_CM_SHARED SELECT * from TN_CM_SHARED_BACKUP