Restore
無法恢復數據庫,因為它存在,無法刪除,因為它不存在
我已經多次看到這個問題,但沒有一個建議的解決方案對我有用,所以我將一個問題與解決方案一起發布,希望它可以幫助其他人。
在還原開發數據庫期間,我遇到了:
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。