共计 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
--------------------------------------------------------------------------------
JY
PDB
修改全局数据库名中的域名
可以使用 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 行业资讯频道,感谢大家的支持。