如何理解Oracle分布式系统中的全局数据库名

63次阅读
没有评论

共计 4057 个字符,预计需要花费 11 分钟才能阅读完成。

今天就跟大家聊聊有关如何理解 Oracle 分布式系统中的全局数据库名,可能很多人都不太了解,为了让大家更加了解,丸趣 TV 小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

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

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

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

看完上述内容,你们对如何理解 Oracle 分布式系统中的全局数据库名有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注丸趣 TV 行业资讯频道,感谢大家的支持。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-20发表,共计4057字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)