使用命令刪除DB2數據庫,然後新建 我們在創建新的數據庫時,經常會碰上數據庫別名已經存在的錯誤,產生這個錯誤的原因可能有兩種: 1. 這個數據庫在系統數據庫目錄中存在。 在控制中心能夠看到和 DB2CLP 窗口中使用 LIST DB DIRECTORY 可以看到。 2. 該數據庫被“除去”,而不是被“刪除”。 另一個可能,這是由於之前我們在控制中心,使用了“除去”數據庫功能,而不是“刪除”數據庫功能(或者在 DB2CLP 窗口中使用“ UNCATALOG DB 數據庫名”命令),“除去”數據庫只是在邏輯上把數據庫的編目信息刪除,並沒有真實的刪除該數據庫。只是我們用 LIST DB DIRECTORY 或在控制中心查看的時候,看不到該數據庫而已。在我們用這個數據庫名創建新的數據庫時,就會報 SQL1005N 錯。 解決的這個問題的具體的步驟如下: 1. 首先通過在 DB2CLP 窗口中,發出“ DB2 LIST DB DIRECTORY ”命令,查看系統數據庫目錄中有沒有該數據庫。如果有,看這個數據庫是否還有用,如果沒有用,就刪除掉該數據庫重新創建即可。 2. 如果系統數據庫目錄下沒有該數據庫存在,就通過 db2 list database directory on location 查看在本地數據庫目錄中有沒有該數據庫,location 指定數據庫的位置(在 Windows 下只能是各個盤符,比如 C: 或 D:,在 UNIX 下可以是具體的文件目錄),如果有,就先使用 db2 catalog database 數據庫名 on location 將數據庫 catalog 到節點上,再刪除該數據庫並重新創建。 下面我們來通過具體的例子來看一下。繼續在 DB2CLP 窗口中,發出 LIST DB DIRECTORY 命令,來查看我們目前在系統數據庫目錄下都有哪些數據庫,具體如清單 22 所示: 清單 22. 查看系統數據庫目錄,都有哪些數據庫 C:\>DB2 LIST DB DIRECTORY 系統數據庫目錄 目錄中的條目數 = 7 數據庫 1 條目: 數據庫別名 = EMR 數據庫名稱 = EMR 本地數據庫目錄 = C: 數據庫發行版級別 = c.00 注釋 = 目錄條目類型 = 間接 目錄數據庫分區號 = 0 備用服務器主機名 = 備用服務器端口號 = 數據庫 2 條目: 數據庫別名 = DBSAMPL2 數據庫名稱 = DBSAMPL2 本地數據庫目錄 = C: 數據庫發行版級別 = c.00 注釋 = 目錄條目類型 = 間接 目錄數據庫分區號 = 0 備用服務器主機名 = 備用服務器端口號 = 數據庫 3 條目: 數據庫別名 = ABC 數據庫名稱 = SAMPLE 本地數據庫目錄 = C: 數據庫發行版級別 = c.00 注釋 = 目錄條目類型 = 間接 目錄數據庫分區號 = 0 備用服務器主機名 = 備用服務器端口號 = 數據庫 4 條目: 數據庫別名 = TEST 數據庫名稱 = EMR 節點名 = NEW 數據庫發行版級別 = c.00 注釋 = 目錄條目類型 = 遠程 目錄數據庫分區號 = -1 備用服務器主機名 = 備用服務器端口號 = 數據庫 5 條目: 數據庫別名 = MYABC 數據庫名稱 = ABC 節點名 = MYREMOTE 數據庫發行版級別 = c.00 注釋 = 目錄條目類型 = 遠程 目錄數據庫分區號 = -1 備用服務器主機名 = 備用服務器端口號 = 數據庫 6 條目: 數據庫別名 = SAMPLE_1 數據庫名稱 = SAMPLE_1 本地數據庫目錄 = C: 數據庫發行版級別 = c.00 注釋 = 目錄條目類型 = 間接 目錄數據庫分區號 = 0 備用服務器主機名 = 備用服務器端口號 = 數據庫 7 條目: 數據庫別名 = SAMPLE 數據庫名稱 = SAMPLE 本地數據庫目錄 = C: 數據庫發行版級別 = c.00 注釋 = 目錄條目類型 = 間接 目錄數據庫分區號 = 0 備用服務器主機名 = 備用服務器端口號 = 命令成功完成。我們可以看到,目前在系統數據庫目錄下有 7 條記錄,也就是有 7 個數據庫或別名。此時我們在控制中心“除去”數據庫 SAMPLE_1,具體如圖 5 所示: 圖 5. 在控制中心除去數據庫 SAMPLE_1 此時我們在 DB2CLP 窗口中,發出“ CREATE DB SAMPLE_1 ”命令,會得到“ SQL1005N 數據庫別名 "SAMPLE_1" 已存在於本地數據庫目錄或系統數據庫目錄中。”錯誤,提示已經有數據庫 SAMPLE_1 存在了,具體如清單 24 所示: 清單 24. 創建數據庫 SAMPLE_1 C:\> DB2 CREATE DB SAMPLE_1 SQL1005N 數據庫別名 "SAMPLE_1" 已存在於本地數據庫目錄或系統數據庫目錄中。 解決這個問題的辦法,就是把原來存在的數據庫重新 CATALOG 上,然後再“刪除”掉,而不是“除去”,這樣處理過後,就可以使用這個數據庫名創建新的數據庫成功了。 下面我們繼續在當前 DB2CLP 窗口中,發出“ LIST DB DIRECTORY ON C: ”命令,可以看到數據庫 SAMPLE_1 還在本地目錄中存在,參照本小節開頭的解決方法第二步,需要先 CATALOG 該數據庫,再 DROP 掉該數據庫,才能重新創建,具體如清單 25 所示: 清單 25. 創建數據庫 SAMPLE_1 C:\> db2 list db directory on c: c: 上的本地數據庫目錄 目錄中的條目數 = 4 數據庫 1 條目: 數據庫別名 = EMR 數據庫名稱 = EMR 數據庫目錄 = SQL00001 數據庫發行版級別 = c.00 注釋 = 目錄條目類型 = 本地 目錄數據庫分區號 = 0 數據庫分區號 = 0 數據庫 2 條目: 數據庫別名 = DBSAMPL2 數據庫名稱 = DBSAMPL2 數據庫目錄 = SQL00004 數據庫發行版級別 = c.00 注釋 = 目錄條目類型 = 本地 目錄數據庫分區號 = 0 數據庫分區號 = 0 數據庫 3 條目: 數據庫別名 = SAMPLE_1 數據庫名稱 = SAMPLE_1 數據庫目錄 = SQL00003 數據庫發行版級別 = c.00 注釋 = 目錄條目類型 = 本地 目錄數據庫分區號 = 0 數據庫分區號 = 0 數據庫 4 條目: 數據庫別名 = SAMPLE 數據庫名稱 = SAMPLE 數據庫目錄 = SQL00002 數據庫發行版級別 = c.00 注釋 = 目錄條目類型 = 本地 目錄數據庫分區號 = 0 數據庫分區號 = 0 C:\> db2 catalog db sample_1 DB20000I CATALOG DATABASE 命令成功完成。 DB21056W 直到刷新目錄高速緩存之後,目錄更改才生效。 C:\> db2 terminate DB20000I TERMINATE 命令成功完成。 C:\> db2 drop db sample_1 DB20000I DROP DATABASE 命令成功完成。 C:\> db2 create db sample_1 DB20000I CREATE DATABASE 命令成功完成。 命令成功完成。