在看分布式数据库的时候,有一点小疑问。创建DB LINK的时候,DB LINK的名称与GLOBAL_NAME的关系。 官方的文档有下面一段话:

“The name that you give to a link on the local database depends on whether the remote
database that you want to access enforces global naming. If the remote database
enforces global naming, then you must use the remote database global database name
as the name of the link. For example, if you are connected to the local hq server and
want to create a link to the remote mfg database, and mfg enforces global naming,
then you must use the mfg global database name as the link name.”

这句话说明,如果你要创建一个连接到远程数据库的连接,且远程数据库GLOBAL_NAMES设置了TRUE 哪么数据连接的名字必须和远程数据库一样。下面验证一下是否如此:
    本地库:SID=devdb2 网络服务名:devdb
    远程库:SID=YSP  网络服务名:YSP10G
为了好区分,在本地和远程设置一下SQL提示符:

本地:
SQL> SET SQLPROMPT "_CONNECT_IDENTIFIER> "
devdb2>
远程:
SQL> SET SQLPROMPT "_CONNECT_IDENTIFIER> "
YSP>

1、本地GLOBAL_NAMES=FALSE,远程GLOBAL_NAMES=TRUE
此时远程数据库“enforces global naming” 按照文档所说的创建的数据库连接应该和远程数据的全局数据库名字一样才对。

设置本地库的GLOBAL_NAMES=FALSE:
devdb2> SHOW PARAMETER GLOBAL_NAMES

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
global_names                         boolean     TRUE
devdb2> ALTER SYSTEM SET GLOBAL_NAMES=FALSE;

System altered.

devdb2> SHOW PARAMETER GLOBAL_NAMES

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
global_names                         boolean     FALSE
devdb2>

设置远程数据库的GLOBAL_NAMES=TRUE:
YSP> SHOW PARAMETER GLOBAL_NAMES

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
global_names                         boolean     TRUE
已经为TRUE,不需要在设置。

查看本地的全局数据库名:

devdb2> SELECT * FROM GLOBAL_NAME;

GLOBAL_NAME
--------------------------------------------------------------------------------
DEVDB.ORACLE.COM.CN

查看远程的全局数据库名字:
YSP> SELECT * FROM GLOBAL_NAME;

GLOBAL_NAME
--------------------------------------------------------------------------------
YSP10G.ORACLE.COM.US

在本地DEVDB创建一个链接到远程YSP10G的数据库连接:
devdb2> CREATE PUBLIC DATABASE LINK YSPTEST
  2  CONNECT TO ORACLE
  3  IDENTIFIED BY ORACLE
  4  USING 'YSP10G';

Database link created.

devdb2> SELECT DB_LINK FROM DBA_DB_LINKS;

DB_LINK
--------------------------------------------------------------------------------
YSPTEST.ORACLE.COM.CN

数据库连接的名字是随意起的,并不是远程数据库的全局数据库名字(YSP10G.ORACLE.COM.US).
由于没有使用全局数据库名字,ORACLE将本地的数据库域名(ORACLE.COM.CN)作为后缀加到YSPTEST
上.

此时我们验证一下,是否能访问远程数据库的数据:
devdb2> SELECT * FROM T@YSPTEST;

ID NAME
---------- ----------
         1 ysp
        10 垃圾广告
        50 LINUX
可以看到没有什么问题。插入一条数据看看:
devdb2> INSERT INTO T@YSPTEST VALUES(2,'test');

1 row created.

devdb2> COMMIT;

Commit complete.

devdb2> SELECT * FROM T@YSPTEST;

ID NAME
---------- ----------
         2 test
         1 ysp
        10 垃圾广告
        50 LINUX

远程库上查看是否存在刚刚插入的数据:
YSP> SELECT * FROM ORACLE.T;

ID NAME
---------- ----------
         2 test
         1 ysp
        10 垃圾广告
        50 LINUX
可以看到没有问题。
当然此时你创建一个和远程数据库全局数据库名字一样的数据库连接也不会有什么问题。

devdb2> CREATE PUBLIC DATABASE LINK YSP10G.ORACLE.COM.US
  2  CONNECT TO ORACLE
  3  IDENTIFIED BY ORACLE
  4  USING 'YSP10G';

Database link created.

devdb2> SELECT DB_LINK FROM DBA_DB_LINKS;

DB_LINK
--------------------------------------------------------------------------------
YSP10G.ORACLE.COM.US
YSPTEST.ORACLE.COM.CN

devdb2> SELECT * FROM T@YSP10G.ORACLE.COM.US;

ID NAME
---------- ----------
         2 test
         1 ysp
        10 垃圾广告
        50 LINUX

可见:如果本地数据库的GLOBAL_NAMES=FALSE,远程数据库的GLOBAL_NAMES=TRUE,哪么在本地创建的数据库连接的名字既可以与远程的全局数据库的名字一样,也可以不一样,即名字可以随意起。

2、本地GLOBAL_NAMES=TRUE,远程GLOBAL_NAMES=TRUE

设置本地库的GLOBAL_NAMES=TRUE:
devdb2> ALTER SYSTEM SET GLOBAL_NAMES=TRUE;

System altered.

devdb2> SHOW PARAMETER GLOBAL_NAMES

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
global_names                         boolean     TRUE

设置远程库的GLOBAL_NAMES=TRUE:
YSP> ALTER SYSTEM SET GLOBAL_NAMES=TRUE;

System altered.

YSP> SHOW PARAMETER GLOBAL_NAMES

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
global_names                         boolean     TRUE

我们使用以前的创建的数据库连接是否还能继续使用:
对于数据库连接YSPTEST ,名字是我们随意起的 看看还能继续使用否:
devdb2> SELECT * FROM T@YSPTEST;
SELECT * FROM T@YSPTEST
                *
ERROR at line 1:
ORA-02085: database link YSPTEST.ORACLE.COM.CN connects to YSP10G.ORACLE.COM.US
可以看到此时报错了,不能使用了。
看看和远程全局数据库名字一样的数据库连接还能使用否:
devdb2> SELECT * FROM T@YSP10G.ORACLE.COM.US;

ID NAME
---------- ----------
         2 test
         1 ysp
        10 垃圾广告
        50 LINUX

可见:如果本地数据库的GLOBAL_NAMES=TRUE,远程数据库的GLOBAL_NAMES=TRUE,哪么在本地创建的数据库连接的名字必须和远程的数据库全局数据库的名字一样,名字不可以随意起。

3、本地GLOBAL_NAMES=TRUE,远程GLOBAL_NAMES=FALSE
设置本地库的GLOBAL_NAMES=TRUE:
devdb2> ALTER SYSTEM SET GLOBAL_NAMES=TRUE;

System altered.

devdb2> SHOW PARAMETER GLOBAL_NAMES

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
global_names                         boolean     TRUE

设置远程库的GLOBAL_NAMES=FALSE:
YSP> ALTER SYSTEM SET GLOBAL_NAMES=FALSE;

System altered.

YSP> SHOW PARAMETER GLOBAL_NAMES

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
global_names                         boolean     FALSE

看看数据库连接YSPTEST和YSP10G.ORACLE.COM.US还能继续使用否:
devdb2> SELECT * FROM T@YSPTEST;
SELECT * FROM T@YSPTEST
                *
ERROR at line 1:
ORA-02085: database link YSPTEST.ORACLE.COM.CN connects to YSP10G.ORACLE.COM.US
devdb2> SELECT * FROM T@YSP10G.ORACLE.COM.US;

ID NAME
---------- ----------
         2 test
         1 ysp
        10 垃圾广告
        50 LINUX
可见:如果本地数据库的GLOBAL_NAMES=TRUE,远程数据库的GLOBAL_NAMES=FALSE,哪么在本地创建的数据库连接的名字也必须和远程的数据库全局数据库的名字一样,名字不可以随意起。

4、本地GLOBAL_NAMES=FALSE,远程GLOBAL_NAMES=FALSE
设置本地库的GLOBAL_NAMES=FALSE:

devdb2> ALTER SYSTEM SET GLOBAL_NAMES=FALSE;

System altered.

devdb2> SHOW PARAMETER GLOBAL_NAMES

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
global_names                         boolean     FALSE

设置远程库的GLOBAL_NAMES=FALSE:
YSP> ALTER SYSTEM SET GLOBAL_NAMES=FALSE;

System altered.

YSP> SHOW PARAMETER GLOBAL_NAMES

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
global_names                         boolean     FALSE

看看数据库连接YSPTEST和YSP10G.ORACLE.COM.US还能继续使用否:
devdb2> SELECT * FROM T@YSPTEST;

ID NAME
---------- ----------
         2 test
         1 ysp
        10 垃圾广告
        50 LINUX

devdb2> SELECT * FROM T@YSP10G.ORACLE.COM.US;

ID NAME
---------- ----------
         2 test
         1 ysp
        10 垃圾广告
        50 LINUX
2个都可以正常使用。

可见:如果本地数据库的GLOBAL_NAMES=FALSE,远程数据库的GLOBAL_NAMES=FALSE,哪么在本地创建的数据库连接的名字既可以与远程的全局数据库的名字一样,也可以不一样,即名字可以随意起。

通过上面可以看出:数据库连接的名字与创建它的数据库的初始化参数GLOBAL_NAMES有关,与它所连接的远程的数据库的GLOBAL_NAMES无关。例如:你在本地数据库创建一个数据库连接,如果本地数据库的参数GLOBAL_NAMES=TRUE,哪么你创建的数据库连接的名字必须与远程的数据库的全局数据库名字一样,否则,你过你使用其他的名字,即使你能创建成功,也不能正常连接;如果本地数据库的参数GLOBAL_NAMES=FALSE,数据库连接的名字可以随便起。

感觉好像与远程数据库的GLOBAL_NAMES毫无关系?????????????

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16162908/viewspace-600556/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16162908/viewspace-600556/

ORACLE官方文档中 DB LINK的名字 与全局数据库的名字关系的疑问相关推荐

  1. 如何快速掌握oracle,教你如何快速从 Oracle 官方文档中获取需要的知识

    以下链接可查看 11g 到 20c 的在线官方文档. https://docs.oracle.com/en/database/oracle/oracle-database/index.html 如图, ...

  2. oracle语法官方文档,Oracle官方文档必备语法知识

    很多Oracle DBA虽然接触Oracle时间很长,但是一旦想不起语法或找不出相应参数时,习惯百度或谷歌.虽然已经下载了官方文档,但是 Oracle官方文档必备语法知识 [日期:2015-04-21 ...

  3. oracle上移下移置顶,[置顶]       阅读Oracle官方文档指南

    [置顶]       阅读Oracle官方文档指南 还在整理中.... EXPDP/IMPDP 相关文档:Utilities 2 Data Pump Export 3 Data Pump Import ...

  4. Oracle官方文档网址收录

    oracle不同版本的官方文档在线参考和打包下载地址汇总,罗列在这里,供你我参考. 1.9i Oracle官方文档 1)在线浏览 http://www.oracle.com/pls/db92/home ...

  5. jca oracle官方文档,Oracle 官方文档说明

    Oracle 官方文档说明 相关的部分并没有全部罗列,只列举了常用的文档. 没有罗列开发相关的部分(SQL / PL/SQL例外). 部分内容是在OCP课程之外的. oracle 错误号参考 Erro ...

  6. Mybatis官方文档中的(XML映射文件)模块(半途凉了)

    Mybatis官方文档中的(XML映射文件)模块(半途凉了) 一.XML映射器属性的介绍 Mybatis的真正强大之处在于它的语句映射.他即可以自动的映射数据库中的字段和对象的属性. SQL映射文件有 ...

  7. 如何全文搜索oracle官方文档

    如何全文搜索oracle官方文档 [技巧]如何全文搜索oracle官方文档 一.1  BLOG文档结构图 一.2  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它 ...

  8. 【技巧】如何全文搜索oracle官方文档

    一.1  BLOG文档结构图 一.2  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 如何在线和离线查看oracle官 ...

  9. 深入理解Java 8 Lambda表达式(Oracle官方文档版)

    Java 8 问世三年了,9马上也要问世了,所以,嗯,我要开始学8了-- 官方文档:http://docs.oracle.com/javase/tutorial/java/javaOO/lambdae ...

最新文章

  1. [导入]XmlReader 读取器读取内存流 MemoryStream 的注意事项
  2. 01背包【动态规划】
  3. Java数据结构与算法(12) - ch06递归(回文anagram)
  4. dump mysql database,Mysql Database 逻辑备份: mysqldump
  5. Teams 可被滥用于安装恶意软件,微软或不打算修复
  6. JAVA中Random分析
  7. 关于最新版的JCreator只能编译不能运行的问题
  8. c语言从入门到精通的几个阶段
  9. 2019足协超级杯花落苏州 开幕战上演“京沪对决”
  10. SpringBoot(30) 整合PageOffice实现在线编辑Word和Excel
  11. 认识常见壳与程序的特征
  12. 昆石VOS3000/VOS2009 Web手机管理说明
  13. Micropython——关于通信I2C协议的应用和原理讲解
  14. 乘法运算中的有效数据位
  15. 如何查找python各种路径
  16. TCP 三次握手的原因是什么?
  17. 函数闭包--JavaScript权威指南--基础篇4
  18. python制作贪吃蛇游戏下载_自动玩贪吃蛇,满屏的蛇影当然由python制作AI贪吃蛇!...
  19. 如何检测电阻及电池内阻的测量方法
  20. 光绘文件 c语言 解析,长篇干货 | 光绘摄影,从前期到后期完整解析!

热门文章

  1. 1024 程序员节首日,全球开源掌门人领衔云上云下嘉年华
  2. git本地分支 远程分支简单操作(后续更新)
  3. java.lang.ClassNotFoundException: org.springframework.web.servlet.HandlerMapping解决方法
  4. 2020互联网大厂硕士生薪资出炉!来源OfferShow爆料整理!
  5. 【运筹学】对偶理论 : 对偶性质 ( 对称性质 | 对称性质推导 )
  6. 联想miix325可以安装android,联想miix325怎么重装win10系统
  7. 关于Mono的好网站
  8. uniApp调用高德地图时遇到的问题记录
  9. html5中如何让图片向下移动,如何调整HTML5的图像移动
  10. qc35 说明书_BOSE QC35