最近在做一套DB2資料庫遷移時遭遇 SQL20321N報錯。
情境:一套乾淨的環境,剛裝了DB2,預計將一套老的DB2資料庫遷移至此。
在源端進行冷備:
db2 backup db sundb to /db2sys compress
將備份介質傳輸到目標端/db2sys目錄下。
在目標端進行恢複:
db2 restore db sundb from . on /db2sys replace existing without rolling forward
SQL20321N Storage paths cannot be provided because the database is not enabled for automatic storage.SQLSTAT=55062
報錯顯示資料庫沒有啟用自動儲存空間,所以不能提供儲存路徑。
查了大量資料,獲悉將on參數更改為to可以成功恢複資料庫。
db2 restore db sundb from . to /db2sys replace existing without rolling forward
事實證明的確如此,關於TO 參數的解釋:
TO target-directory參數我們這裡沒有使用,簡單介紹一下這個參數,因為在實際應用過程中,也會經常用到。此參數表示目標資料庫目錄,如果公用程式還原到一個現有資料庫,將忽略此參數。指定的磁碟機和目錄必須是本地的。如果備份映像包括啟用了自動儲存空間的資料庫,則僅資料庫目錄被更改,而與資料庫關聯的儲存路徑不更改。
ON參數重新定義與自動儲存區資料庫相關聯的儲存路徑。此參數只能用在啟用了自動儲存空間的資料庫上,如果將此參數與未啟用自動儲存空間的資料庫將導致錯誤(SQL20321N)。使用此參數後, 不再使用備份映像中定義的現有儲存路徑,自動儲存空間資料表空間自動重新導向至新路徑。如果沒有為自動儲存空間資料庫指定此參數,則儲存空間路徑仍為備份映像中定義的路徑,此時,備份映像中定義的路徑在我們要還原的伺服器上要真實存在,否則整個重新導向最終會失敗。