数据库链:Database Link与GLOBAL_NAMES参数的关系

编辑手记:最近大讲堂中很多朋友在讨论DB Link的问题,我们精选一些文章与大家分享这方面的知识。

当GLOBAL_NAMES参数设置为TRUE时,使用DATABASE LINK时,DATABASE LINK的名称必须与被连接库的GLOBAL_NAME一致。

下面做一个测试,在测试中,创建数据库链接的库为XJ(WINDOWS 2003 ORACLE 10g 10.2.0.1),被链接的库为DMDB(LINUX AS5 ORACLE 10g 10.2.0.1 RAC)

首先查看DMDB的相关配置:

可以看到这个被链接的库其global_names参数为FALSE。

要创建数据库链接的库的配置:

可以看到数据库链接工作正常。

在DMDB库上将global_names设为TRUE:

在XJ库上再次查询,并新建一个DATABASE LINK再进行查询:

此时可以看数据库链接工作正常。我们再将XJ库的global_names参数设置为TRUE:

而再次将XJ库的global_names设为FALSE,则数据库链接又可用了。

再将DMDB库的global_names设为FALSE,数据库链接仍然可用:

在DMDB库上:

可以看到,链接仍然可以用。

如果在DMDB库上创建链接到XJ库上,可以观察到同样的结果。

可以得出一个结论:

global_names参数设置为TRUE(感谢Robert.Li指出的此前的错误),影响的是创建数据库链接的那个库对数据库链接的使用。也就是说,如果一个库(实例)的global_names参数设值为TRUE,则该库连接其他库的数据库链接,其名称必须要与被连接的库的global_name相同:

在XJ库上:

如果在GLOBAL_NAMES设置为TRUE的情况下,如果要建多个数据库链接到同一个库,怎么办呢?因为数据库链接的名称必须与目标库的GLOBAL_NAME相同。

可以按如下的方法:

也就是在GLOBAL_NAME后面加上@再加上一个标识。这样就能够创建多个数据库链接到同一目标库上了。

另外在创建数据库链接时,不能给其他SCHEMA创建链接,这是因为数据库链接(database link)其名称可以含有'.'即点号。比如A用户想给B用户创建一个DBLINK名叫LINKB,CREATE DATABASE LINK B.LINKB ......这个语句将会实际创建一个A用户下的名为B.LINKB的数据库链接。

设置 global_names 初始化参数为 true 后,本地的数据库链接名称必须与远程数据库的 global_name 相同,才能正常使用数据库链接。那么怎么查询数据库的global_name 呢?

那么怎么样修改 global_name?

注意不要直接用 update global_name set global_name=''将global_name 设置为空,否则数据库不能启动,会报 ORA-00600[18061] 或 ORA-00600[18062] 这样的错误。 只有用备份进行恢复后才能打开。(参见metalink note 743676.1)。

那么 global_name 到底是个什么对象呢?

可以看到 global_name 实际上是一个视图,来源于 sys.props$ 表,而这个表是非常重要的一个关于数据库属性的表,不要随意更改此表的内容,否则将引起无可预料的、无法挽回的损失。

在用 alert database rename global_name 时,如果设置了 global_name类似于"dmdb.com"这样的名称,则以后更改名称,则没有常规的办法去掉"."分隔符了。

要去掉点分隔符,只有用 update:

郑重提示:除非万不得已,不要去更新 global_name 视图,即使更新,也不要去更新 global_name 的基表 props$,更不要将 global_name 更新为空,否则数据库可能无法启动。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2016-07-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏MasiMaro 的技术博文

windows API实现用户选择文件路径的对话框

在编写应用程序时,有时需要用户选择某个文件,以供应用程序使用,比如在某些管理程序中需要打开某一个进程,这个时候需要弹出一个对话框来将文件路径以树形图的形式表示出...

682
来自专栏偏前端工程师的驿站

Chrome Extension in CLJS —— 搭建开发环境

842
来自专栏电光石火

springboot 定制个性 banner

使用spring boot 开发时,当程序启动的时候控制台会输出由字符组成的Spring符号。这个是SpringBoot为自己设计的Banner:

431
来自专栏编程

Vue-cli解析

前言 这段时间,算是空出手来写几篇文章了。由于很久都没有时间整理现在所用的东西了,所以,接下来会慢慢整理出一些文档来记录前段时间的工作和生活。 正文 首先,我们...

2466
来自专栏程序员互动联盟

【答疑解惑】如何安装eclipse

随着android应用开发的火热,eclipse使用的人也越来越多。好多初学者不知道如何安装eclipse,这里做一个简单回答。 首先我们要确认系统的版本,是3...

2454
来自专栏bboysoul

kali工具-DNSenmum

首先下载 git clone https://github.com/fwaeytens/dnsenum.git 根据里面的INSTALL.txt来安装 首...

481
来自专栏刺客博客

PHP利用phpexcel导入Excel表到Mysql数据库

1313
来自专栏编程

ansible2.4 源码分析-自定义inventory解析插件实现

微信公众号:进击的大杂烩 通过上一篇文章,初步的分析了ansible2.4的一个运行流程,没有对 ansible 解析 source 的过程进行详细分析。本文通...

26410
来自专栏阮一峰的网络日志

使用 Make 构建网站

网站开发正变得越来越专业,涉及到各种各样的工具和流程,迫切需要构建自动化。 所谓"构建自动化",就是指使用构建工具,自动实现"从源码到网页"的开发流程。这有利于...

2314
来自专栏存储

建立本地的Blast数据库

Blast(basic local alignment search tool) 局部序列比对基本检索工具,是NCBI开发的一款基于序列相似性的数据库搜索程序。...

2389

扫描关注云+社区