包含DOMAIN的資料庫建立資料庫鏈到不包含DOMAIN的資料庫
題目有點長,但是沒有辦法,只有這麼長的題目才能把問題描述清楚。實際上,這樣說還缺少一個條件,就是初始化引數GLOBAL_NAMES設定為TRUE的情況下。
如果一個資料庫沒有包含DOMAIN資訊,那麼建立資料庫鏈的時候,資料庫鏈的名稱和給定的名稱保持一致。一旦資料庫的GLOBAL_NAME包含了DOMAIN資訊,則建立資料庫鏈的時候如果只指定資料庫名而沒有包含DOMAIN資訊,則資料庫會自動將當前的DOMAIN資訊新增到資料庫鏈中。
[oracle@bjtest ~]$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.4.0 - Production on 星期五 8月 21 19:28:18 2009
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
連線到:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
TEST9
SQL> alter database rename global_name to test9.us.oracle.com;
資料庫已更改。
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
TEST9.US.ORACLE.COM
SQL> create database link test08 connect to test identified by test using 'test08';
資料庫連結已建立。
SQL> select db_link from user_db_links;
DB_LINK
--------------------------------------------------------------------------------
TEST08.US.ORACLE.COM
SQL> select * from global_name@test08;
GLOBAL_NAME
--------------------------------------------------------------------------------
TEST08
雖然資料庫鏈的名稱和使用者指定的不一樣,但是由於在訪問資料庫鏈時,Oracle同樣會自動進行資料庫鏈的DOMAIN補充工作,因此對訪問遠端物件沒有太大的影響。
但是,這只是在初始化引數GLOBAL_NAMES設定為FALSE的情況下,一旦這個引數設定為TRUE,則無法訪問不包含DOMAIN的資料庫:
SQL> show parameter global_names
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
global_names boolean FALSE
SQL> alter system set global_names = true;
系統已更改。
SQL> select * from global_name@test08;
select * from global_name@test08
*
ERROR 位於第 1 行:
ORA-02085: 資料庫連結TEST08.US.ORACLE.COM與TEST08相連結
SQL> drop database link test08.us.oracle.com;
資料庫連結已丟棄。
SQL> create database link test08. connect to test identified by test using 'test08';
create database link test08. connect to test identified by test using 'test08'
*
ERROR 位於第 1 行:
ORA-02084: 資料庫名不全
SQL> create database link test08@test08 connect to test identified by test using 'test08';
資料庫連結已建立。
SQL> select db_link from user_db_links;
DB_LINK
--------------------------------------------------------------------------------
TEST08.US.ORACLE.COM@TEST08
SQL> select * from global_name@test08@test08;
select * from global_name@test08@test08
*
ERROR 位於第 1 行:
ORA-02085: 資料庫連結TEST08.US.ORACLE.COM@TEST08與TEST08相連結
SQL> create database link "TEST08";
資料庫連結已建立。
SQL> select db_link from user_db_links;
DB_LINK
--------------------------------------------------------------------------------
TEST08.US.ORACLE.COM
TEST08.US.ORACLE.COM@TEST08
SQL> drop database link test08;
資料庫連結已丟棄。
SQL> create database link test08.null;
create database link test08.null
*
ERROR 位於第 1 行:
ORA-02084: 資料庫名不全
SQL> create database link test08.'';
create database link test08.''
*
ERROR 位於第 1 行:
ORA-02084: 資料庫名不全
SQL> create database link test08..;
create database link test08..
*
ERROR 位於第 1 行:
ORA-02084: 資料庫名不全
可以看到無論採用什麼樣的方法都無法避免Oracle自動新增DOMAIN資訊,也就使得在GLOBAL_NAMES為TRUE的情況下,無法再訪問那些不包含DOMAIN的資料庫。
好在這個GLOBAL_NAMES引數可以在會話級修改並覆蓋系統級的設定,這也是需要設定GLOBAL_NAMES為TRUE的環境(比較高階複製環境和流環境等)的唯一解決方法了:
SQL> alter session set global_names = false;
會話已更改。
SQL> create database link test08 connect to test identified by test using 'test08';
資料庫連結已建立。
SQL> select db_link from user_db_links;
DB_LINK
--------------------------------------------------------------------------------
TEST08.US.ORACLE.COM
TEST08.US.ORACLE.COM@TEST08
SQL> select * from global_name@test08;
GLOBAL_NAME
--------------------------------------------------------------------------------
TEST08
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-612985/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫索引中包含的資料結構有哪些資料庫索引資料結構
- 例項,資料庫,資料字典與資料庫建立的關係資料庫
- ACCESS資料庫C#操作類(包含事務)資料庫C#
- 建立資料庫資料庫
- 資料庫無法建立資料庫檢視資料庫
- Oracle 11gR2資料庫軟體不包含localconfigOracle資料庫
- DataX將MySql資料庫資料同步到Oracle資料庫MySql資料庫Oracle
- 如何建立與現有資料庫相同的空資料庫資料庫
- 本機資料庫資料庫鏈無法訪問遠端資料庫資料庫
- Oracle資料庫連結(DBLink)中如何訪問包含BLOB欄位的資料Oracle資料庫
- 靜默建立oracle資料庫及克隆資料庫Oracle資料庫
- ORACLE DATAGUARD 資料庫---建立物理備用資料庫Oracle資料庫
- Sql Server資料庫資料匯入到SQLite資料庫中Server資料庫SQLite
- DataX將Oracle資料庫資料同步到達夢資料庫Oracle資料庫
- 通過現有的資料庫備份建立新的資料庫資料庫
- 建立資料庫表資料庫
- Mysql建立資料庫MySql資料庫
- 建立資料庫命令資料庫
- 手工建立資料庫資料庫
- 建立ASM資料庫ASM資料庫
- Laravel 建立資料庫Laravel資料庫
- 不上資料庫資料庫
- 資料庫 資料庫的完整性資料庫
- 生產資料庫、開發資料庫、測試資料庫中的資料的區分資料庫
- oracle資料庫建立資料庫例項-九五小龐Oracle資料庫
- 【原】學習系列—資料庫優化—建立效能良好的資料庫資料庫優化
- 資料移植到Oracle資料庫(一)Oracle資料庫
- RAC資料庫恢復到單例項資料庫資料庫單例
- 【資料庫】mysql資料庫索引資料庫MySql索引
- Oracle資料庫-----資料庫的基本概念Oracle資料庫
- 【資料庫設計】資料庫的設計資料庫
- 配置ORACLE資料庫到達夢資料庫的異構DBLINKOracle資料庫
- VB6基本資料庫應用(二):建立資料庫資料庫
- 靜默安裝資料庫介質和建立資料庫資料庫
- MySQL 建立資料庫 建立表MySql資料庫
- oracle 10g建立資料庫鏈的簡化Oracle 10g資料庫
- 建立最優的oracle資料庫Oracle資料庫
- 資料庫建立索引的原則資料庫索引