转载

Oracle分布式系统中的全局数据库名

在分布式系统中,每个数据库都有一个唯一的全局数据库名。全局数据库名能唯一标识系统中的一个数据库。在分布式系统中一个主要的任务就是创建与管理全局数据库名。

1.全局数据库名的组成
一个全局数据库名由两部分组成:一个数据库名与一个域名。在数据库创建时数据库名与域名是由以下参数来决定的。
数据库名:db_name 小于等于30个字符,例如sales
域名: db_domain 必须遵守标准互联网规则。域名中的级别必须通过点号进行分隔并且域名的顺序是从叶子到根,从左到右。

db_domain参数只是在数据库创建时被使用的一个很重要的参数,它与db_name参数一起来决定全局数据库名。全局数据库名是被存储在数据字典中。必须通过alter database语句来改变全局数据库名,不能通过修改参数文件中的db_domain参数来进行修改。

决定是否强制执行全局数据库名
在本地数据库中创建数据链路指定名称时会根据是否强制执行全局数据库名来生成链路名。如果本地数据库强制执行全局数据库名,那么你必须像使用远程数据库全局数据库名作为数据链路名。例如,如果连接到本地数据库hq,并且想创建一个连接到远程数据库的mfg的数据链路,并且本地数据库强制执行全局数据库名,那么必须使用mfg全局数据库名作为链路名。

在创建数据链路时也可以使用服务名作为数据库链路名的一部分。例如,如果使用服务名sn1和sn2来连接数据库hq.example.com,并且全局数据库名被强制执行时,那么可以对数据库hq创建以下链路名:
hq.example.com@sn1
hq.example.com@sn2

为了判断数据库是否启用了全局数据库名,可以检查数据库初始化参数文件或查询v$parameter视图。例如,为了查看对数据库mfg是否强制执行全局数据库名,可以执行以下语句来进行查询:

SQL> col name format a12
SQL> col value format a6
SQL> select name, value from v$parameter  where name = 'global_names'
  2  /

NAME         VALUE
------------ ------
global_names FALSE

查看全局数据库名
可以查询视图global_name来查看全局数据库名

SQL> select * from global_name;

GLOBAL_NAME
--------------------------------------------------------------------------------
JYPDB

修改全局数据库名中的域名
可以使用alter database语句来改变全局数据库名中的域名。在数据库创建之后,修改db_domain参数不会影响全局数据库名或数据库链路名。下面的例子显示重命名全局数据库名的语句,database是数据库名,domain是网络域名:

alter database rename global_name to database.domain;

修改全局数据库名的操作如下:
1.判断当前的全局数据库名:

SQL> select * from global_name;

GLOBAL_NAME
--------------------------------------------------------------------------------
JY

2.执行alter database语句来修改全局数据库名

SQL> alter database rename global_name to jy.jydba.net;

Database altered.

3.查询视图global_name来检查新的全局数据库

SQL> select * from global_name;

GLOBAL_NAME
--------------------------------------------------------------------------------
JY.JYDBA.NET

4.修改全局数据库名中的域名
使用alter database语句来修改全避数据库名中的域名。在数据库创建之后,修改初始化参数db_domain不会影响全局数据库名或对数据库链路名的解析。下面的例子显示了修改全局数据库名的语法,database是数据库名,domain是网络域名:

alter database rename global_name to database.domain;

使用下面的过程来修改全局数据库名中的域名:
1.判断当前全局数据库名。

SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
JY.JYDBA.NET

2.使用alter database语句来修改全局数据库名

SQL> alter database rename global_name to jy.changde.net;
Database altered

3.查询global_name表来检查新的全局数据库名

SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
JY.CHANGDE.NET

下面将介绍修改全局数据库名的场景
在这种情况下,可以修改本地数据库的全局数据库名中的域名部分。也可以使用全局名来创建数据链路来测试数据库是如何解析链路名的。

1.连接到jy.jydba.net并查询global_name数据字典视图来判断当前的数据为全局名:

SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
JY.JYDBA.NET

2.查询v$parameter视图来判断db_domain参数的当前值

SQL> select name, value from v$parameter where name = 'db_domain';
NAME                            VALUE
------------------------------- ----------------
db_domain

3.创建一个连接到数据库sjjh的数据链路,保指定全局名的一部分:

SQL> create database link dblink_test using 'sjjh';
Database link created

数据库会通过将本地数据库的全局数据库名中的域名部分增加到数据链路的全局名中

4.查询user_db_links来判断数据链路的域名

SQL> select db_link from user_db_links;
DB_LINK
--------------------------------------------------------------------------------
DBLINK_TEST.JYDBA.NET

查询结果显示,本地数据库的全局名中的域名jydba.net被用来作为数据链路的域名

5.因为要将数据库jy移到changde.net这个域中,所以执行以下操作

SQL> alter database rename global_name to jy.changde.net;
Database altered

SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
JY.CHANGDE.NET

6.查询v$parameter发现db_domain参数并没有修改

SQL> select name, value from v$parameter where name = 'db_domain';
NAME                            VALUE
------------------------------- ----------------
db_domain

这也就说明了db_domain参数是独立于alter database rename global_name语句的。alter database语句决定了全局数据库名中的域名。

7.可以创建另一个数据链路来连接数据库sjjh,并查询user_db_links来查看数据链路中的域名

SQL> create database link dblink_cs using 'sjjh';
Database link created

SQL> select db_link from user_db_links;
DB_LINK
--------------------------------------------------------------------------------
DBLINK_CS.CHANGDE.NET
DBLINK_TEST.JYDBA.NET

可以看到新创建的数据链路的域名,是使用当前本地数据库全局数据库名中的域名。

正文到此结束
Loading...