`

Database Link与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 dual@test_link;

D
-
X

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

在DMDB库上将global_names设为TRUE:

SQL> alter system set global_names=true;

系统已更改。

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

SQL> select * from dual@test_link;

D
-
X

SQL> create database link test_link2 connect to test identified by test using 'D
MDB';

数据库链接已创建。

SQL> select * from dual@test_link2;

D
-
X

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

SQL> alter system set global_names=true;

系统已更改。

SQL> select * from dual@test_link2;
select * from dual@test_link2
                   *
第 1 行出现错误:
ORA-02085: 数据库链接 TEST_LINK2 连接到 DMDB

SQL> select * from dual@test_link
select * from dual@test_link
                   *
第 1 行出现错误:
ORA-02085: 数据库链接 TEST_LINK 连接到 DMDB

而再次将XJ库的global_names设为FALSE,则数据库链接又可用了。
SQL> alter system set global_names=false;

系统已更改。

SQL> select * from dual@test_link;

D
-
X

SQL> select * from dual@test_link2;

D
-
X

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

在DMDB库上:

SQL> alter system set global_names=false;

系统已更改。

在XJ库上:

SQL> select * from dual@test_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 dual@dmdb;

D
-
X
SQL> select * from dual@test_link;
select * from dual@test_link
*
第 1 行出现错误:
ORA-02085: 数据库链接 TEST_LINK 连接到 DMDB


SQL> select * from dual@test_link2;
select * from dual@test_link2
                   *
第 1 行出现错误:
ORA-02085: 数据库链接 TEST_LINK2 连接到 DMDB

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

SQL> create database linkdmdb@link1connect to test identified by test using 'dmdb';

数据库链接已创建。

SQL> create database linkdmdb@link2connect to test identified by test using 'dmdb';

数据库链接已创建。

SQL> select * fromdual@dmdb;

D
-
X

SQL> select * fromdual@dmdb@link1;

D
-
X

SQL> select * fromdual@dmdb@link2;

D
-
X

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

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

分享到:
评论

相关推荐

    Database Link经典详解

    - **设置global_names参数**: - 如果`global_names`设置为`true`,则dblink的命名需与远程数据库的global_name一致。 - 如果`global_names`设置为`false`,则可以自由命名dblink。 - 查询命令: ```sql SHOW ...

    Oracle10数据链路简单使用.doc

    1. global_names 参数:如果 global_names = true,则 [DB_LINK_NAME] 必须是数据库的真实名称;如果 global_names = false,则 [DB_LINK_NAME] 可以是一个随意的名字。 2. 链接字符串:链接字符串即服务名,需要在...

    database link详解

    SELECT owner, object_name FROM dba_objects WHERE object_type = 'DATABASELINK'; ``` 2. **使用 DBLink 进行查询**: - 在查询时可以直接使用 DBLink 名称作为表名的一部分: ```sql SELECT * FROM emp@...

    不同数据库的数据交互(建立DBLINK).docx

    - **注意事项**:当`GLOBAL_NAME`参数为`TRUE`时,`38GLOBAL_NAME`必须与远程数据库的`GLOBAL_NAME`一致;为`FALSE`时可以自定义。`mac2`是远程数据库的用户名,`mac2`是远程数据库的密码。`ORCL_SG_38`是本地建立...

    dblink详解

    **dblink**的命名规则与参数`global_names`有关: - 当`global_names=true`时,dblink的命名需要与远程数据库的全局名称(global name)保持一致。 - 当`global_names=false`时,可以自由命名dblink,但建议使用有...

    ORACLE_建立DBLINK详细讲解.pdf

    2. **确认 global_names 参数状态**:`global_names` 参数控制是否使用全局名称来解析 DB-LINK。当其值为 TRUE 时,DB-LINK 的名称必须与远程数据库的 GLOBAL_NAME 名称相匹配。可通过 `SHOW PARAMETER global_name;...

    oracle 使用dblink方式 连接远程数据库,内有详细描述,亲测可以

    - 方法一:在数据库的`init.ora`文件中设置`global_names`参数为`TRUE`或`FALSE`。 - 方法二:执行SQL语句来修改: ```sql ALTER SYSTEM SET GLOBAL_NAME=TRUE/FALSE; ``` 修改后需要重启数据库服务使设置生效...

    建立oracle 数据库的dblink

    2. **GLOBAL_NAMES参数**:GLOBAL_NAMES参数决定了DBLINK的命名规则。如果设为TRUE,DBLINK的名称必须与被连接数据库的全局数据库名称(GLOBAL_NAME)完全匹配。若设为FALSE,则可以自由指定DBLINK的名称,此时更...

    Oracle 10G 透明网关的配置

    在创建数据库链接之前,需确认`global_names`参数的设置情况。如果该参数被设置为`true`,则在创建数据库链接时需要带上Oracle默认的域名;若设置为`false`,则可以根据个人需求自由命名。 **步骤二:创建数据库...

    dblink实战

    在使用dblink时,也需要注意修改GLOBAL_NAME的方法,可以在远程数据库的init.ora文件中将global_names设为false,或者用sys用户执行以下语句: ``` ALTER SYSTEM SET GLOBAL_NAME=TRUE/FALSE; ``` 然后重新启动...

    oracle建立dblink步骤

    - 如果返回的`GLOBAL_NAMES`值为`TRUE`,则表示参数已启用,此时创建的DBLink名称必须与远程数据库的GLOBAL_NAME保持一致。 3. **验证远程数据库是否支持高级复制功能** - 执行以下命令来检查数据库是否支持高级...

    oracle数据库链接

    SELECT owner, object_name FROM dba_objects WHERE object_type = 'DATABASELINK'; ``` 此外,也可以查看数据库的全局名称配置,这有助于理解数据库链接的全局命名规则: ```sql SELECT * FROM GLOBAL_NAME; ``` ...

    streams配置实例

    - `global_names`: 设置为`TRUE`以启用全局名称识别功能。 - `streams_pool_size`: 设置为`25M`以分配给Streams使用的内存池大小。 - `shared_pool_size`: 设置为`500M`以增大共享池的大小。 - `aq_tm_processes`: ...

    oracle oracle_dblink详解.

    全局数据库链接(Global Database Link):Owner 是 PUBLIC.Global 的数据库链接是网络级的,When an Oracle network uses a directory server, the directory server automatically create and manages global ...

    Streams表级别复制配置(oracle9i,10g).pdf

    ALTER SYSTEM SET GLOBAL_NAMES = TRUE SCOPE = BOTH; ALTER SYSTEM SET AQ_TM_PROCESSES = 10 SCOPE = BOTH; ALTER SYSTEM SET STREAMS_POOL_SIZE = 20M SCOPE = SPFILE; -- 查看归档模式 ARCHIVELOG LIST; ...

    Oracle数据库的同步复制案例

    - **global_names=true** 要求数据库链接和被连接的数据库名称必须一致。这可以通过全局数据库名的形式表示:`db_name + "." + db_domain`。 - **与数据库作业执行相关的参数** - `job_queue_processes=1` ...

    在Oracle中实现数据库的复制

    ②、global_names = true (alter system set global_names=true),它要求数据库链接(database link)和被连接的数据库名称一致。 ③、有跟数据库 job 执行有关的参数(在 oracle\ora92\admin\sample\pfile 修改 ...

    Oracle报存储过程中调用DBLink同义词出现错误:PLS-00201: 必须声明标识符

    CREATE PUBLIC DATABASE LINK orcl@dbc CONNECT TO orcl IDENTIFIED BY orcl USING 'orcl'; CREATE SYNONYM mtb FOR mytable@orcl@dbc; 这里之所以用orcl@bdc为dblink的名称是为了设置global_names=true。 然后新建...

    数据库Oracle主从同步配置86.docx

    alter system set global_names=true scope=both; ---设置全局名称为 true alter system set undo_retention=3600 scope=both; ---设置回滚段时间,默认是 900 alter system set streams_pool_size=25M scope=spfile...

Global site tag (gtag.js) - Google Analytics