PUBLIC資料庫鏈無法刪除的問題(一)
今天在一個二線資料庫中發現了一個奇怪的問題。有幾個已經存在的PUBLIC資料庫鏈無法正常刪除。
這個資料庫建立很早,且一直不是我在維護,所以資料庫一直沒有打PATCH,資料庫版本仍然是9201。
SQL> SELECT * FROM V$VERSION;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production PL/SQL Release 9.2.0.1.0 - Production
CORE 9.2.0.1.0 Production
TNS for Linux: Version 9.2.0.1.0 - Production
NLSRTL Version 9.2.0.1.0 - Production
檢查資料庫鏈,並嘗試刪除:
SQL> SELECT * FROM DBA_DB_LINKS;
OWNER DB_LINK USERNAME HOST CREATED
-------- --------------------- ------------ ------------ ----------------------
PUBLIC DATA NDMAIN DATADB 2004-5月 -14 18:44:07
PUBLIC DATA.EMEDCHINA.NET SELE datadb 2007-2月 -01 10:39:10
PUBLIC DATADB DNMAIN DATADB 2004-5月 -14 18:41:35
PUBLIC MAINDB LOG MAINDB 2004-2月 -19 18:27:30
PUBLIC MAINDB.EMEDCHINA.NET LOG MAINDB 2004-6月 -04 14:03:37
LAS REPDB02.EMEDCHINA.NET REPORT report2_90 2006-2月 -28 14:46:29
LAS_NEW GPODB.EMEDCHINA.NET SELE_LAS_NEW gpodb 2007-1月 -19 09:52:01
LAS_NEW SSISS.EMEDCHINA.NET USERTSP ssiss 2007-1月 -22 10:03:29
已選擇8行。
SQL> DROP PUBLIC DATABASE LINK DATADB;
DROP PUBLIC DATABASE LINK DATADB
*
ERROR 位於第 1 行:
ORA-02024: 未找到資料庫連結
SQL> ALTER SYSTEM SET GLOBAL_NAMES = TRUE;
系統已更改。
SQL> DROP PUBLIC DATABASE LINK DATADB;
DROP PUBLIC DATABASE LINK DATADB
*
ERROR 位於第 1 行:
ORA-02024: 未找到資料庫連結
SQL> ALTER SYSTEM SET GLOBAL_NAMES = FALSE;
系統已更改。
看來常規的辦法已經行不通了。由於資料庫鏈已經建立了很長的時間,產生問題的原因可能已經無法找到,不過現在可以做的是至少找到無法產生的原因。
SQL> ALTER SESSION SET SQL_TRACE = TRUE;
會話已更改。
SQL> DROP PUBLIC DATABASE LINK DATADB;
DROP PUBLIC DATABASE LINK DATADB
*
ERROR 位於第 1 行:
ORA-02024: 未找到資料庫連結
SQL> ALTER SESSION SET SQL_TRACE = FALSE;
會話已更改。
從TRACE檔案中沒有找到具體的錯誤原因,於是新建立一個資料庫鏈,並對刪除操作進行trace:
SQL> CREATE PUBLIC DATABASE LINK TEST;
資料庫連結已建立。
SQL> ALTER SESSION SET SQL_TRACE = TRUE;
會話已更改。
SQL> DROP PUBLIC DATABASE LINK TEST;
資料庫連結已丟棄。
SQL> ALTER SESSION SET SQL_TRACE = FALSE;
會話已更改。
進行了簡單的對比後,仍然找不到導致刪除失敗的原因。不過到是找到了一個解決問題的方法。
從DROP PUBLIC DATABASE LINK的trace檔案看,Oracle在刪除資料庫鏈時,對資料字典進行的修改只有一個,就是從link$表中將對應的記錄刪除。那麼只要將需要刪除的資料庫鏈對應的記錄從表中清除掉就可以了。當然,即使從TRACE檔案上看,只包含了這一個操作,仍然不建議採用這樣的方法去操作,畢竟,對資料字典進行操作是危險的。
於是檢視了一下Metalink,檢查是否存在類似的問題,結果很快就查到了問題的真正原因:
如果Oracle的global_name僅包括db_name,也就是說DB_DOMAIN的值為空。那麼這個時候建立的資料庫鏈,在資料庫修改全域性名GLOBAL_NAME之後(修改為db_name.db_domain格式),會無法刪除。
如果要產生資料庫鏈,必須將GLOBAL_NAME改回DB_NAME格式,即去掉後面的DOMAIN,但是這個時候,RENAME操作會自動新增域名,使得Oracle全域性名無法恢復到初始狀態。
SQL> SELECT * FROM GLOBAL_NAME;
GLOBAL_NAME
-----------------------------------------
ORCL.EMEDCHINA.NET
SQL> ALTER DATABASE RENAME GLOBAL_NAME TO ORCL;
資料庫已更改。
SQL> SELECT * FROM GLOBAL_NAME;
GLOBAL_NAME
-----------------------------------------
ORCL.EMEDCHINA.NET
這個錯誤本來是8i上的,不知道為什麼9201又重現了這個問題。
而Oracle給出的解決問題的方法居然是UPDATE PROPS$。透過修改PROPS$將資料庫的GLOBAL_NAME修改回原來的值。刪除資料庫鏈後將GLOBAL_NAME恢復,並重建目前所有的資料庫鏈。
Oracle在給出這個方法的時候強調了這是一種不支援的方法。說實話,我認為Oracle提供的方法還沒有直接從LINK$中刪除記錄方便呢,反正同樣都是修改資料字典,更新PROPS$表還需要重新RENAME並重建索引。
如果沒有必要,其實最好的方法是不去處理,如果一定要刪除的話,最好先做好備份。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-69156/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 解決sqlserver資料庫單一使用者無法刪除的問題SQLServer資料庫
- SQL Server無法刪除資料庫 "xxx",因為該資料庫當前正在使用(如何刪除一個Sql Server資料庫)SQLServer資料庫
- 聊聊PG資料庫的防誤刪除問題資料庫
- PicGo無法刪除雲端圖片問題PicGo
- 也來談談無法刪除db link的問題
- “無法刪除資料庫,因為該資料庫當前正在使用” – 解決方法資料庫
- IDEA無法連線docker中的資料庫的問題IdeaDocker資料庫
- Elastic Beanstalk-自動生成的S3無法刪除問題ASTBeanS3
- 資料夾正在使用無法刪除怎麼辦
- Docker刪除倉庫中的映象問題Docker
- indexedDB 刪除資料庫Index資料庫
- 2.11 刪除資料庫資料庫
- Laravel 資料庫裡的資料刪除Laravel資料庫
- Oracle日常問題-資料庫無法啟動(案例二)Oracle資料庫
- Oracle日常問題處理-資料庫無法啟動Oracle資料庫
- 解決codeblocks無法除錯的問題BloC除錯
- 無法刪除pod的處理
- 6.12php對資料庫的刪除和批量刪除PHP資料庫
- Kafka超過保留期限資料未刪除的問題Kafka
- 資料夾無法刪除顯示在另一程式中開啟
- 解決:rm: 無法刪除"tomcat": 裝置或資源忙,linux下資料夾不能刪除TomcatLinux
- 刪除linux下的oracle資料庫LinuxOracle資料庫
- PostgreSQL:資料庫的建立與刪除SQL資料庫
- MySQL資料庫表誤刪除恢復(一)MySql資料庫
- photoshop無法刪除圖層
- 應用使用JNDI,資料庫無法連線,導致的程序無法啟動問題處理資料庫
- oracle adg主庫通過rman無法刪除歸檔Oracle
- whk我【資料刪除】你個【資料刪除】的
- 小程式批次刪除雲資料庫裡的資料資料庫
- React-Native 新版本無法Debug無法除錯問題React除錯
- MongoDB資料庫中更新與刪除資料MongoDB資料庫
- oracle 12c 資料庫例項監聽無法註冊問題一例Oracle資料庫
- windows下Oracle資料庫完全刪除WindowsOracle資料庫
- indexedDB 刪除物件倉庫所有資料Index物件
- 如何刪除資料庫下的所有表(mysql)資料庫MySql
- 恢復Oracle資料庫誤刪除資料的語句Oracle資料庫
- 使用axios post 請求資料無法提交的問題iOS
- 解決Window安全中心對Kitematic-0.17.3-Ubuntu.zip提示病毒,但無法刪除的問題。Ubuntu
- 一定要有密碼才能刪除資料庫的表嗎?密碼資料庫