共計(jì) 4057 個(gè)字符,預(yù)計(jì)需要花費(fèi) 11 分鐘才能閱讀完成。
今天就跟大家聊聊有關(guān)如何理解 Oracle 分布式系統(tǒng)中的全局?jǐn)?shù)據(jù)庫名,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
在分布式系統(tǒng)中,每個(gè)數(shù)據(jù)庫都有一個(gè)唯一的全局?jǐn)?shù)據(jù)庫名。全局?jǐn)?shù)據(jù)庫名能唯一標(biāo)識(shí)系統(tǒng)中的一個(gè)數(shù)據(jù)庫。在分布式系統(tǒng)中一個(gè)主要的任務(wù)就是創(chuàng)建與管理全局?jǐn)?shù)據(jù)庫名。
1. 全局?jǐn)?shù)據(jù)庫名的組成
一個(gè)全局?jǐn)?shù)據(jù)庫名由兩部分組成: 一個(gè)數(shù)據(jù)庫名與一個(gè)域名。在數(shù)據(jù)庫創(chuàng)建時(shí)數(shù)據(jù)庫名與域名是由以下參數(shù)來決定的。
數(shù)據(jù)庫名:db_name 小于等于 30 個(gè)字符,例如 sales
域名: db_domain 必須遵守標(biāo)準(zhǔn)互聯(lián)網(wǎng)規(guī)則。域名中的級(jí)別必須通過點(diǎn)號(hào)進(jìn)行分隔并且域名的順序是從葉子到根,從左到右。
db_domain 參數(shù)只是在數(shù)據(jù)庫創(chuàng)建時(shí)被使用的一個(gè)很重要的參數(shù),它與 db_name 參數(shù)一起來決定全局?jǐn)?shù)據(jù)庫名。全局?jǐn)?shù)據(jù)庫名是被存儲(chǔ)在數(shù)據(jù)字典中。必須通過 alter database 語句來改變?nèi)謹(jǐn)?shù)據(jù)庫名,不能通過修改參數(shù)文件中的 db_domain 參數(shù)來進(jìn)行修改。
決定是否強(qiáng)制執(zhí)行全局?jǐn)?shù)據(jù)庫名
在本地?cái)?shù)據(jù)庫中創(chuàng)建數(shù)據(jù)鏈路指定名稱時(shí)會(huì)根據(jù)是否強(qiáng)制執(zhí)行全局?jǐn)?shù)據(jù)庫名來生成鏈路名。如果本地?cái)?shù)據(jù)庫強(qiáng)制執(zhí)行全局?jǐn)?shù)據(jù)庫名,那么你必須像使用遠(yuǎn)程數(shù)據(jù)庫全局?jǐn)?shù)據(jù)庫名作為數(shù)據(jù)鏈路名。例如,如果連接到本地?cái)?shù)據(jù)庫 hq,并且想創(chuàng)建一個(gè)連接到遠(yuǎn)程數(shù)據(jù)庫的 mfg 的數(shù)據(jù)鏈路,并且本地?cái)?shù)據(jù)庫強(qiáng)制執(zhí)行全局?jǐn)?shù)據(jù)庫名,那么必須使用 mfg 全局?jǐn)?shù)據(jù)庫名作為鏈路名。
在創(chuàng)建數(shù)據(jù)鏈路時(shí)也可以使用服務(wù)名作為數(shù)據(jù)庫鏈路名的一部分。例如,如果使用服務(wù)名 sn1 和 sn2 來連接數(shù)據(jù)庫 hq.example.com,并且全局?jǐn)?shù)據(jù)庫名被強(qiáng)制執(zhí)行時(shí),那么可以對(duì)數(shù)據(jù)庫 hq 創(chuàng)建以下鏈路名:
hq.example.com@sn1
hq.example.com@sn2
為了判斷數(shù)據(jù)庫是否啟用了全局?jǐn)?shù)據(jù)庫名,可以檢查數(shù)據(jù)庫初始化參數(shù)文件或查詢 v$parameter 視圖。例如,為了查看對(duì)數(shù)據(jù)庫 mfg 是否強(qiáng)制執(zhí)行全局?jǐn)?shù)據(jù)庫名,可以執(zhí)行以下語句來進(jìn)行查詢:
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
查看全局?jǐn)?shù)據(jù)庫名
可以查詢視圖 global_name 來查看全局?jǐn)?shù)據(jù)庫名
SQL select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
JY
PDB
修改全局?jǐn)?shù)據(jù)庫名中的域名
可以使用 alter database 語句來改變?nèi)謹(jǐn)?shù)據(jù)庫名中的域名。在數(shù)據(jù)庫創(chuàng)建之后,修改 db_domain 參數(shù)不會(huì)影響全局?jǐn)?shù)據(jù)庫名或數(shù)據(jù)庫鏈路名。下面的例子顯示重命名全局?jǐn)?shù)據(jù)庫名的語句,database 是數(shù)據(jù)庫名,domain 是網(wǎng)絡(luò)域名:
alter database rename global_name to database.domain;
修改全局?jǐn)?shù)據(jù)庫名的操作如下:
1. 判斷當(dāng)前的全局?jǐn)?shù)據(jù)庫名:
SQL select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
JY
2. 執(zhí)行 alter database 語句來修改全局?jǐn)?shù)據(jù)庫名
SQL alter database rename global_name to jy.jydba.net;
Database altered.
3. 查詢視圖 global_name 來檢查新的全局?jǐn)?shù)據(jù)庫
SQL select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
JY
.JYDBA.NET
4. 修改全局?jǐn)?shù)據(jù)庫名中的域名
使用 alter database 語句來修改全避數(shù)據(jù)庫名中的域名。在數(shù)據(jù)庫創(chuàng)建之后,修改初始化參數(shù) db_domain 不會(huì)影響全局?jǐn)?shù)據(jù)庫名或?qū)?shù)據(jù)庫鏈路名的解析。下面的例子顯示了修改全局?jǐn)?shù)據(jù)庫名的語法,database 是數(shù)據(jù)庫名,domain 是網(wǎng)絡(luò)域名:
alter database rename global_name to database.domain;
使用下面的過程來修改全局?jǐn)?shù)據(jù)庫名中的域名:
1. 判斷當(dāng)前全局?jǐn)?shù)據(jù)庫名。
SQL select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
JY
.JYDBA.NET
2. 使用 alter database 語句來修改全局?jǐn)?shù)據(jù)庫名
SQL alter database rename global_name to jy.changde.net;
Database altered
3. 查詢 global_name 表來檢查新的全局?jǐn)?shù)據(jù)庫名
SQL select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
JY
.CHANGDE.NET
下面將介紹修改全局?jǐn)?shù)據(jù)庫名的場景
在這種情況下,可以修改本地?cái)?shù)據(jù)庫的全局?jǐn)?shù)據(jù)庫名中的域名部分。也可以使用全局名來創(chuàng)建數(shù)據(jù)鏈路來測(cè)試數(shù)據(jù)庫是如何解析鏈路名的。
1. 連接到 jy.jydba.net 并查詢 global_name 數(shù)據(jù)字典視圖來判斷當(dāng)前的數(shù)據(jù)為全局名:
SQL select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
JY
.JYDBA.NET
2. 查詢 v$parameter 視圖來判斷 db_domain 參數(shù)的當(dāng)前值
SQL select name, value from v$parameter where name = db_domain
NAME VALUE
------------------------------- ----------------
db_domain
3. 創(chuàng)建一個(gè)連接到數(shù)據(jù)庫 sjjh 的數(shù)據(jù)鏈路, 保指定全局名的一部分:
SQL create database link dblink_test using sjjh
Database link created
數(shù)據(jù)庫會(huì)通過將本地?cái)?shù)據(jù)庫的全局?jǐn)?shù)據(jù)庫名中的域名部分增加到數(shù)據(jù)鏈路的全局名中
4. 查詢 user_db_links 來判斷數(shù)據(jù)鏈路的域名
SQL select db_link from user_db_links;
DB_LINK
--------------------------------------------------------------------------------
DBLINK_TEST.JYDBA.NET
查詢結(jié)果顯示,本地?cái)?shù)據(jù)庫的全局名中的域名 jydba.net 被用來作為數(shù)據(jù)鏈路的域名
5. 因?yàn)橐獙?shù)據(jù)庫 jy 移到 changde.net 這個(gè)域中,所以執(zhí)行以下操作
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 發(fā)現(xiàn) db_domain 參數(shù)并沒有修改
SQL select name, value from v$parameter where name = db_domain
NAME VALUE
------------------------------- ----------------
db_domain
這也就說明了 db_domain 參數(shù)是獨(dú)立于 alter database rename global_name 語句的。alter database 語句決定了全局?jǐn)?shù)據(jù)庫名中的域名。
7. 可以創(chuàng)建另一個(gè)數(shù)據(jù)鏈路來連接數(shù)據(jù)庫 sjjh,并查詢 user_db_links 來查看數(shù)據(jù)鏈路中的域名
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
可以看到新創(chuàng)建的數(shù)據(jù)鏈路的域名,是使用當(dāng)前本地?cái)?shù)據(jù)庫全局?jǐn)?shù)據(jù)庫名中的域名。
看完上述內(nèi)容,你們對(duì)如何理解 Oracle 分布式系統(tǒng)中的全局?jǐn)?shù)據(jù)庫名有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝大家的支持。