PUBLIC資料庫鏈無法刪除的問題(二)
今天在一個二線資料庫中發現了一個奇怪的問題。有幾個已經存在的PUBLIC資料庫鏈無法正常刪除。
這篇文章給出解決的具體方法。
PUBLIC資料庫鏈無法刪除的問題(一):http://yangtingkun.itpub.net/post/468/259496
操作之前再次說明,處理這個問題的最好的方法是不去處理,如果一定要刪除的話,最好先做好備份。
問題的描述和產生原因在上面一篇文章中。這裡直接描述解決步驟。
第一種方法比較簡單:就是利用SYS使用者產生LINK$表中的記錄。
SQL> COL NAME FORMAT A30
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 16:40:23
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> SELECT OWNER#, NAME FROM LINK$;
OWNER# NAME
---------- ------------------------------
1 DATA
1 MAINDB
1 DATADB
67 SSISS.EMEDCHINA.NET
61 REPDB02.EMEDCHINA.NET
1 MAINDB.EMEDCHINA.NET
67 GPODB.EMEDCHINA.NET
1 DATA.EMEDCHINA.NET
已選擇8行。
SQL> DELETE LINK$ WHERE OWNER# = 1 AND NAME = 'DATADB';
已刪除 1 行。
SQL> COMMIT;
提交完成。
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 16:40:23
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
已選擇7行。
透過測試發現,第二種方式似乎對Oracle920版本無效:
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 16:40:23
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
已選擇7行。
SQL> DROP PUBLIC DATABASE LINK DATA;
資料庫連結已丟棄。
SQL> SELECT * FROM DBA_DB_LINKS;
OWNER DB_LINK USERNAME HOST CREATED
-------- ---------------------- ------------- ----------- ---------------------
PUBLIC DATA NDMAIN DATADB 2004-5月 -14 18:44:07
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
已選擇6行。
SQL> DROP PUBLIC DATABASE LINK DATA;
DROP PUBLIC DATABASE LINK DATA
*
ERROR 位於第 1 行:
ORA-02024: 未找到資料庫連結
由於GLOBAL_NAME的原因,刪掉的並非是希望刪掉的DBLINK,而希望刪掉的卻無法刪除。
SQL> SELECT * FROM GLOBAL_NAME;
GLOBAL_NAME
------------------------------------------------------------------------------
ORCL.EMEDCHINA.NET
SQL> SHOW USER
USER 為"SYS"
SQL> UPDATE PROPS$ SET VALUE$ = 'ORCL' WHERE NAME = 'GLOBAL_DB_NAME';
已更新 1 行。
SQL> SELECT * FROM GLOBAL_NAME;
GLOBAL_NAME
-----------------------------------------------------------------------------
ORCL
SQL> COMMIT;
提交完成。
SQL> DROP PUBLIC DATABASE LINK DATA;
DROP PUBLIC DATABASE LINK DATA
*
ERROR 位於第 1 行:
ORA-02024: 未找到資料庫連結
SQL> SELECT * FROM DBA_DB_LINKS;
OWNER DB_LINK USERNAME HOST CREATED
-------- ---------------------- ------------- ----------- ---------------------
PUBLIC DATA NDMAIN DATADB 2004-5月 -14 18:44:07
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
已選擇6行。
SQL> DROP PUBLIC DATABASE LINK DATA;
DROP PUBLIC DATABASE LINK DATA
*
ERROR 位於第 1 行:
ORA-02024: 未找到資料庫連結
SQL> SELECT * FROM GLOBAL_NAME;
GLOBAL_NAME
------------------------------------------------------------------------------
ORCL
SQL>
SQL> SHOW PARAMETER DOMAIN
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_domain string
SQL> CREATE DATABASE LINK TEST;
資料庫連結已建立。
SQL> SELECT * FROM DBA_DB_LINKS;
OWNER DB_LINK USERNAME HOST CREATED
-------- ---------------------- ------------- ----------- ---------------------
SYS TEST.EMEDCHINA.NET 2007-2月 -02 18:37:18
PUBLIC DATA NDMAIN DATADB 2004-5月 -14 18:44:07
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
已選擇7行。
SQL> DROP DATABASE LINK TEST;
資料庫連結已丟棄。
可以看到,Oracle給出的解決方法對於920環境並不試用。
看來只能透過上面的第一種方法來解決這個問題了。
SQL> ALTER DATABASE RENAME GLOBAL_NAME TO ORCL.EMEDCHINA.NET;
資料庫已更改。
SQL> SELECT * FROM GLOBAL_NAME;
GLOBAL_NAME
-----------------------------------------------------------------------------
ORCL.EMEDCHINA.NET
SQL> DROP PUBLIC DATABASE LINK DATA;
DROP PUBLIC DATABASE LINK DATA
*
ERROR 位於第 1 行:
ORA-02024: 未找到資料庫連結
SQL> DELETE LINK$ WHERE OWNER# = 1 AND NAME IN ('DATA', 'MAINDB');
已刪除2行。
SQL> SELECT * FROM DBA_DB_LINKS;
OWNER DB_LINK USERNAME HOST CREATED
-------- ---------------------- ------------- ----------- ---------------------
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
SQL> COMMIT;
提交完成。
SQL> SET VER OFF
SQL> ACCEPT SELE_PASSWORD PROMPT SELE_PASSWORD HIDE
SELE_PASSWORD
SQL> CREATE PUBLIC DATABASE LINK DATA CONNECT TO SELE IDENTIFIED BY &SELE_PASSWORD USING 'DATADB';
資料庫連結已建立。
SQL> SELECT * FROM DBA_DB_LINKS;
OWNER DB_LINK USERNAME HOST CREATED
-------- ---------------------- ------------- ----------- ---------------------
PUBLIC DATA.EMEDCHINA.NET SELE DATADB 2007-2月 -02 18:50:16
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
根據文件的描述,將GLOBAL_NAME重新命名之後,還應該重建所有的DBLINK。不過測試發現,所有的DBLINK都是正常的,這一步可以根據具體的情況是否執行。
在建立資料庫的時候最好直接指定DB_DOMAIN,否則就儘量不要修改GLOBAL_NAME。不然就很容易造成這個問題。
其實全域性資料庫重新命名以前建立的資料庫鏈一般對現有的資料庫鏈沒有什麼影響,因此即使出現這個問題也沒有必要進行刪除。如果一定要刪除時,先進行備份,然後檢查當前的資料庫版本是否和給出方法的文章中的版本一致。8i和9i中的方法是有區別的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-69157/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 解決sqlserver資料庫單一使用者無法刪除的問題SQLServer資料庫
- Oracle日常問題-資料庫無法啟動(案例二)Oracle資料庫
- 聊聊PG資料庫的防誤刪除問題資料庫
- PicGo無法刪除雲端圖片問題PicGo
- 也來談談無法刪除db link的問題
- SQL Server無法刪除資料庫 "xxx",因為該資料庫當前正在使用(如何刪除一個Sql Server資料庫)SQLServer資料庫
- “無法刪除資料庫,因為該資料庫當前正在使用” – 解決方法資料庫
- IDEA無法連線docker中的資料庫的問題IdeaDocker資料庫
- Elastic Beanstalk-自動生成的S3無法刪除問題ASTBeanS3
- 資料夾正在使用無法刪除怎麼辦
- Docker刪除倉庫中的映象問題Docker
- indexedDB 刪除資料庫Index資料庫
- 2.11 刪除資料庫資料庫
- Laravel 資料庫裡的資料刪除Laravel資料庫
- Oracle日常問題處理-資料庫無法啟動Oracle資料庫
- 解決codeblocks無法除錯的問題BloC除錯
- 無法刪除pod的處理
- 6.12php對資料庫的刪除和批量刪除PHP資料庫
- Kafka超過保留期限資料未刪除的問題Kafka
- 解決:rm: 無法刪除"tomcat": 裝置或資源忙,linux下資料夾不能刪除TomcatLinux
- 刪除linux下的oracle資料庫LinuxOracle資料庫
- PostgreSQL:資料庫的建立與刪除SQL資料庫
- photoshop無法刪除圖層
- 應用使用JNDI,資料庫無法連線,導致的程序無法啟動問題處理資料庫
- oracle adg主庫通過rman無法刪除歸檔Oracle
- whk我【資料刪除】你個【資料刪除】的
- 小程式批次刪除雲資料庫裡的資料資料庫
- React-Native 新版本無法Debug無法除錯問題React除錯
- MongoDB資料庫中更新與刪除資料MongoDB資料庫
- windows下Oracle資料庫完全刪除WindowsOracle資料庫
- indexedDB 刪除物件倉庫所有資料Index物件
- 如何刪除資料庫下的所有表(mysql)資料庫MySql
- 恢復Oracle資料庫誤刪除資料的語句Oracle資料庫
- 使用axios post 請求資料無法提交的問題iOS
- 解決Window安全中心對Kitematic-0.17.3-Ubuntu.zip提示病毒,但無法刪除的問題。Ubuntu
- derby 資料庫 伺服器模式 無法訪問資料庫伺服器模式
- kingsoft資料夾可以刪除嗎 kingsoft資料夾刪不掉的解決辦法
- u盤裡的檔案無法刪除 如何刪除u盤裡刪不掉的檔案
- 大資料量刪除的思考(二)大資料