数据库链: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 条评论
登录 后参与评论

相关文章

来自专栏信安之路

PHP使用了PDO还可能存在sql注入的情况

“用 PDO 来防止 SQL 注入。”大概学过 PHP 的都听说过这句话。代码中出现了 PDO 就行了吗?答案肯定是否定的。接下来给大家介绍几种使用了 PDO ...

1310
来自专栏解Bug之路

MySQL多版本并发控制机制(MVCC)-源码浅析 顶

作为一个数据库爱好者,自己动手写过简单的SQL解析器以及存储引擎,但感觉还是不够过瘾。<<事务处理-概念与技术>>诚然讲的非常透彻,但只能提纲挈领,不能让你玩转...

1062
来自专栏程序员与猫

Elasticsearch 的一些关键概念

我更喜欢把 Elasticsearch 作为一种 nosql 去理解,它的一些开发概念和 MongoDB 以及 Redis 没有太大的区别,不过了解 Elast...

18510
来自专栏xingoo, 一个梦想做发明家的程序员

基于ELK的数据分析实践——满满的干货送给你

很多人刚刚接触ELK都不知道如何使用它们来做分析,经常会碰到下面的问题: 安装完ELK不知从哪下手 拿到数据样本不知道怎么分解数据 导入到elastics...

3277
来自专栏杨建荣的学习笔记

关于pl/sql的代码保护(r3笔记28天)

在开始学习数据库的时候,总是尝试手动创建数据库,安装完成之后需要运行一些脚本,总是看到屏幕上闪个不停,可以看到大多数的存储过程代码都是一堆乱码,最开始还以为是乱...

2977
来自专栏GreenLeaves

oracle 表空间tablespace

一、Oracle 表空间的组成 Everoone knows Oracle数据库真正存放数据的是数据文件,Oracle表空间是逻辑上的概念,他在物理上是并不存在...

2158
来自专栏魏琼东

一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM的批量删除与更新

系列回顾           前面的文章一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM的基本操作和一步一步教你使用AgileE...

1988
来自专栏Bingo的深度学习杂货店

PHP 笔试 + 面试题

本章主要介绍常见的 PHP 笔试 + 面试题,包括: ---- 基础及程序题 数据库技术题 综合技术题 项目及设计题 ---- 基础及程序题 [1] 写一...

6464
来自专栏李蔚蓬的专栏

实战LitePal(Android_Persistent Technology)

1.Debugexperience about SQLite & LitePal:创建数据库闪退?注意小括号

1143
来自专栏JackeyGao的博客

Django + MySQL 查询不区分大小写问题

由于测试环境的 sqlite 没有问题, 所以怀疑在 mysql 的配置上面。 原来是字符集校对规则的问题, utf8_general_ci 不区分大小写, 可...

782

扫码关注云+社区