Restore

無法恢復數據庫,因為它存在,無法刪除,因為它不存在

  • January 19, 2016

我已經多次看到這個問題,但沒有一個建議的解決方案對我有用,所以我將一個問題與解決方案一起發布,希望它可以幫助其他人。

在還原開發數據庫期間,我遇到了:

SQL1005N  The database alias "XXXX" already exists in either the local 
database directory or system database directory.

db2 drop db XXXX
SQL1031N  The database directory cannot be found on the indicated file system. 
SQLSTATE=58031

其他地方建議的解決方案是對數據庫進行編目,然後將其刪除:

db2 catalog db XXXX
DB20000I  The CATALOG DATABASE command completed successfully.
DB21056W  Directory changes may not be effective until the directory cache is 
refreshed.

db2 drop db XXXX
SQL1031N  The database directory cannot be found on the indicated file system. 
SQLSTATE=58031

所以它看起來就像潛伏著一個 Zoombie 數據庫,我們無法擺脫它。該怎麼辦?

免責聲明,以下解決方案適用於開發框。謹慎使用。對於類似生產的場景,請打開 PMR。

事實證明,在之前的恢復過程中,文件系統已滿,因此並非所有必要的文件都已創建。我對數據庫進行了編目:

db2 catalog db XXXX
DB20000I  The CATALOG DATABASE command completed successfully.
DB21056W  Directory changes may not be effective until the directory cache is 
refreshed.

並嘗試連接到它(失敗)。在 db2diag 日誌中,有一個條目顯示他的文件應該位於的位置,在我的例子中:

/data/db/db2/db2inst1/NODE0000/SQL00010

事實證明,這與中所示的位置相同

db2 list db directory

所以我所做的是:

db2stop force

然後從另一個數據庫中同步所有文件:

#> cd /data/db/db2/db2inst1/NODE0000/SQL00010
#> rsync -av ../SQL00011/* .
#> db2start

在刪除數據庫之前,我嘗試連接(為了好玩)並得到一個新錯誤:

#> db2 connect to XXXX
SQL0294N  The container is already in use.  SQLSTATE=42730

雖然刪除數據庫是可能的

#> db2 drop db XXXX
DB20000I  The DROP DATABASE command completed successfully.

如前所述,這是在沒有重要數據的開發人員機器上執行的,在生產環境中我會打開 PMR。

引用自:https://dba.stackexchange.com/questions/126532