Oracle数据库GLOBAL_NAMES参数的详细研究 (创建DBLINK时有用)

Oracle数据库GLOBAL_NAMES参数的相关知识是本文我们主要要介绍的内容,当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的相关配置:

以下是代码片段:

SQL> show parameter global_names
NAME TYPE VALUE
------------------------------------ ----------- ---------
global_names boolean FALSE
SQL> select * from global_name;;
GLOBAL_NAME
----------------------------------------------------------
DMDB
  可以看到这个被链接的库其global_names参数为FALSE。

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

以下是代码片段:

SQL> show parameter global_names
NAME TYPE VALUE
------------------------------------ ----------- -------
global_names boolean FALSE
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------
XJ
  然后做下面的操作:

以下是代码片段:

SQL> create database link test_link connect to test identified by test using ‘DMDB‘;
数据库链接已创建。
SQL> select * from [email protected]_link ;
D
-
X

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

  在DMDB库上将global_names设为TRUE:

  SQL> alter system set global_names=true;

  系统已更改。

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

以下是代码片段:

SQL> select * from [email protected]_link ;
D
-
X
SQL> create database link test_link2 connect to test identified by test using ‘DMDB‘;
数据库链接已创建。
SQL> select * from [email protected]_link2 ;
D
-
X
  此时可以看数据库链接工作正常。我们再将XJ库的global_names参数设置为TRUE:

以下是代码片段:

SQL> alter system set global_names=true;
系统已更改。
SQL> select * from [email protected]_link2 ;
select * from [email protected]_link2
*第 1 行出现错误:
ORA-02085: 数据库链接 TEST_LINK2 连接到 DMDB
SQL> select * from [email protected]_link
select * from [email protected]_link
*第 1 行出现错误:
ORA-02085: 数据库链接 TEST_LINK 连接到 DMDB
而再次将XJ库的global_names设为FALSE,则数据库链接又可用了。
SQL> alter system set global_names=false;
系统已更改。
SQL> select * from [email protected]_link ;
D
-
X
SQL> select * from [email protected]_link2 ;
D
-
X
  再将DMDB库的global_names设为FALSE,数据库链接仍然可用:

以下是代码片段:
在DMDB库上:
SQL> alter system set global_names=false;
系统已更改。
在XJ库上:
SQL> select * from [email protected]_link ;
D
-
X
  可以看到,链接仍然可以用。如果在DMDB库上创建链接到XJ库上,可以观察到同样的结果。可以得出一个结论:global_names参数设置为FALSE,影响的是创建数据库链接的那个库对数据库链接的使用。也就是说,如果一个库(实例)的global_names参数设值为TRUE,则该库连接其他库的数据库链接,其名称必须要与被连接的库的global_name相同:

以下是代码片段:

在XJ库上:
SQL> alter system set global_names=true;
系统已更改。
SQL> create database link dmdb connect to test identified by test using ‘dmdb‘;
数据库链接已创建。
SQL> select * from [email protected] ;
D
-
X
SQL> select * from [email protected]_link ;
select * from [email protected]_link
*
第 1 行出现错误:
ORA-02085: 数据库链接 TEST_LINK 连接到 DMDB
SQL> select * from [email protected]_link2 ;
select * from [email protected]_link2
*第 1 行出现错误:
ORA-02085: 数据库链接 TEST_LINK2 连接到 DMDB
如果在GLOBAL_NAMES设置为TRUE的情况下,如果要建多个数据库链接到同一个库,怎么办呢?因为数据库链接的名称必须与目标库的GLOBAL_NAME相同。可以按如下的方法:

以下是代码片段:

SQL> create database [email protected] to test identified by test using ‘dmdb‘;
数据库链接已创建。
SQL> create database [email protected] to test identified by test using ‘dmdb‘;
数据库链接已创建。
SQL> select * [email protected] ;
D
-
X
SQL> select * [email protected]@link1 ;
D
-
X
SQL> select * [email protected]@link2 ;
D
-
X

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

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

时间: 2024-10-22 20:48:27

Oracle数据库GLOBAL_NAMES参数的详细研究 (创建DBLINK时有用)的相关文章

从Oracle数据库中查询前几个月数据时需要注意的一些问题

在最近的一个项目中,有一个需求就是要查询数据库中前几个月的历史数据,但是由于自己考虑不全面造成了程序的bug,现在将这一块好好作一个总结,希望以后不再犯这种很低级的错误,首先贴出查询中用到的一个子函数,然后就此作出详细的分析: private string AddMonths(string originalTime, int months) { string returnString = string.Empty; string[] dataAndTime = originalTime.Spli

创建Oracle数据库、数据库名与实例名与SID之间的关系(图文详解)

目录 目录 软件环境 前言 安装Oracle监听程序 启动停止监听程序 创建数据库 数据库名db_name 数据库实例名instance_name 数据库名与实例名的关系 操作系统环境变量ORACLE_SID 软件环境 操作系统 RHEL 6.1 软件环境 Oracle10gr2 前言 在上一篇RHEL6.1 安装 Oracle10gr2 (图文.解析)中记录了如何成功的在RHEL6.1安装Oracle10gr2,但是在安装的过程中没有创建数据库,本篇主要记录了如果创建数据库和监听程序. 安装O

如何在Mysql数据库中创建Oracle数据库scott的几张表格

我们先来看看Oracle中scott用户几张表的数据结构: ============================================================== 以下操作在Oracle数据库进行(如果需要) ============================================================== 创建表格: CREATE TABLE dept ( deptno INT PRIMARY KEY, dname VARCHAR(14), lo

Oracle数据库序列详解

前言: 做过web开发的人员基本上都知道,数据库表中的主键值有的时候我们会用数字类型的并且自增.这样mysql.sql server中的都可以使用工具创建表的时候很容易实现.但是oracle中没有设置自增的方法,一般情况我们会使用序列和触发器来实现主键自增的功能.下面这面文章主要介绍序列. 一.什么是序列 序列: Sequence 是oracle提供的用于产生一系列唯一数字的数据库对象.由于oracle中没有设置自增列的方法,所以我们在oracle数据库中主要用序列来实现主键自增的功能. 二.怎

java连接oracle数据库的实现代码

package connectionOracleDatabase; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class ConnectionOracleDa

Oracle数据库迁移-基础

Oracle数据库迁移-基础 作为一个开发人员,数据库知识肯定是需要我们掌握的.但是目前公司的数据库都是有专门的DBA维护的,一般都是给我们一个环境地址,然后我们书写CRUD SQL.而且公司产品要求是可以跨数据源的,这样平时基本上都不太关心特定数据库平台的操作.结果导致自己的DB知识严重不足.今天因为一些原因,需要在外网服务器上搭建演示环境,结果需要"悲剧"的自己操作数据库. 任务:在外网服务器上搭建演示环境,包括服务器.代码.数据库.     解决方案: (1)找一个新的产品安装程

Oracle 数据库名、实例名、Oracle_SID

本文参考自ORACLE 数据库名.实例名.ORACLE_SID的区别,纯属读书笔记,加深记忆 在ORACLE7.8数据库中只有数据库名(db_name)和数据库实例名(instance_name).在ORACLE8i.9i中出现了新的参数,即数据库域名(db_domain).服务名(service_name).以及操作系统环境变量(ORACLE_SID).这些都存在于同一个数据库中的标识,用于区分不同数据库的参数. 1.数据库名 数据库名是用于区分数据的标识,是以二进制形式存储于数据库控制文件中

如何手动的干净的删除linux上的ORACLE数据库

最近在用VMWARE虚拟机做ORACLE的数据库实验,我们都知道在WINDOWS上,我可以到添加删除程序里去自动删除已经安装的所有的应用程序,但是在LINUX上没有这个服务可以进行自动的删除,于是尝试了下手动的删除ORACLE数据库.具体步骤如下: 1,先查下ORACLE_SID,ORACLE_HOME.ORACLE_BASE的信息: [[email protected] dbs]$ echo $ORACLE_SID PROD [[email protected] dbs]$ echo $ORA

Oracle数据库对象

Oracle数据库对象又称模式对象,它是逻辑结构的集合,其中最基本的数据库对象是表.常见的数据库对象包括同义词.序列.视图等. 1.视图 视图可以限制表中一组行为访问.隐藏了数据的复杂性.简化了用户的sql.基表定义修改隔离.通过重命名列从另一个角度提供了数据. 2.触发器(Trigger) 如果想对视图进行增删改,就可以使用触发器. 3.数据字典 oracle中分为了静态数据字典和动态数据字典. 静态数据字典: dba_*** :查看所有的用户表 all_*** :查看该用户下能看到的所有表