1. 程式人生 > >Oracle 中 db_name / service_name / sid 三者的關係和作用

Oracle 中 db_name / service_name / sid 三者的關係和作用

show parameter service_names

select instance_name from v$instance;

db_name是一個實在的物理名稱。service_name時帶有域名的,因為如果兩個資料庫不再同一個域可以有相同的名稱。而sid是資料庫的例項名稱,它是有SGA和後臺程序組成。一個數據庫只有一個db_name但是可以有兩個例項。每個例項各有自己的SGA和後臺程序。 Db_name:對一個數據庫(Oracle database)的唯一標識。這種表示對於單個數據庫是足夠的,但是隨著由多個數據庫構成的分散式資料庫的普及,這種命令資料庫的方法給資料庫的管理造成一定的負擔,因為各個資料庫的名字可能一樣,造成管理上的混亂。為了解決這種情況,引入了Db_domain引數,這樣在資料庫的標識是由Db_name和Db_domain兩個引數共同決定的,避免了因為資料庫重名而造成管理上的混亂。這類似於互連網上的機器名的管理。我們將Db_name和Db_domain兩個引數用’.’連線起來,表示一個數據庫,並將該資料庫的名稱稱為Global_name,即它擴充套件了Db_name。Db_name引數只能由字母、數字、’_’、’#’、’$’組成,而且最多8個字元。 Db_domain:定義一個數據庫所在的域,該域的命名同網際網路的’域’沒有任何關係,只是資料庫管理員為了更好的管理分散式資料庫而根據實際情況決定的。當然為了管理方便,可以將其等於網際網路的域。 Global_name:對一個數據庫(Oracle database)的唯一標識,oracle建議用此種方法命令資料庫。該值是在建立資料庫是決定的,預設值為Db_name. Db_domain。在以後對引數檔案中Db_name與Db_domain引數的任何修改不影響Global_name的值,如果要修改Global_name,只能用ALTER DATABASE RENAME GLOBAL_NAME TO 命令進行修改,然後修改相應引數。 Service_name:該引數是oracle8i新引進的。在8i以前,我們用SID來表示標識資料庫的一個例項,但是在Oracle的並行環境中,一個數據庫對應多個例項,這樣就需要多個網路服務名,設定繁瑣。為了方便並行環境中的設定,引進了Service_name引數,該引數對應一個數據庫,而不是一個例項,而且該引數有許多其它的好處。該引數的預設值為Db_name. Db_domain,即等於Global_name。一個數據庫可以對應多個Service_name,以便實現更靈活的配置。該引數與SID沒有直接關係,即不必Service name 必須與SID一樣。 Instance_name:資料庫例項名。用於和作業系統之間的聯絡,用於對外部連線時使用。在作業系統中要取得與資料庫之間的互動,必須使用資料庫例項名。例如,要和某一個數據庫server連線,就必須知道其資料庫例項名,只知道資料庫名是沒有用的,與資料庫名不同,在資料安裝或建立資料庫之後,例項名可以被修改。資料庫名與例項名之間的關係一般是一一對應關係,有一個數據庫名就有一個例項名,如果在一個伺服器中建立兩個資料庫,則有兩個資料庫名,兩個資料庫例項名,用兩個標識確定一個數據庫,使用者和例項相連線。 但在8i、9i的並行伺服器結構中,資料庫與例項之間不存在一一對應關係,而是一對多關係,(一個數據庫對應多個例項,同一時間內使用者只一個例項相聯絡,當某一例項出現故障,其它例項自動服務,以保證資料庫安全執行。) Oracle_SID:作業系統環境變數。在實際中,對於資料庫例項名的描述有時使用例項名(instance_name)引數,有時使用ORACLE_SID引數。這兩個都是資料庫例項名,它們有什麼區別呢?(經常弄混) (ORACLE_SID) OS<---------------->; ORACLE 資料庫 <--------(Instance_name(例項名)) 上例表示例項名instance_name、ORACLE_SID與資料庫及作業系統之間的關係,雖然這裡列出的兩個引數都是資料庫例項名,但instance_name引數是ORACLE資料庫的引數,此引數可以在引數檔案中查詢到,而ORACLE_SID引數則是作業系統環境變數。 作業系統環境變數ORACLE_SID用於和作業系統互動。也就是說,在作業系統中要想得到例項名,就必須使用ORACLE_SID。此引數與ORACLE_BASE、ORACLE_HOME等用法相同。在資料庫安裝之後,ORACLE_SID被用於定義資料庫引數檔案的名稱。如: ======================================= 在init.ora中有db_name,instance_name,service_name db_name是資料庫的名稱,在db安裝時就已經設定了,這裡不可修改,它覺得了資料庫安裝檔案的位置。 instance_name是例項名,是資料庫執行中名稱,其實在OO中db_name相當於類而instance_name向當於物件,它也是代表資料庫執行中的記憶體及其程序,同時影響到了這些程序的名稱,譬如:一個數據庫db_name=cus,而其例項instance_name=aking,那麼資料庫起來後,其程序名可能為:Pmon_aking_1。這裡的例項名稱要和PWDsid.ora和initSid.ora等檔案匹配上,否則,db起動報錯。從這裡可以看出db_name是類名,定義後是不可修改的,而對於instance_name例項名向當於物件,所以我們可以設定自己喜歡的物件名稱。不過話雖這樣講,但改了instance_name後,牽扯到很多其他的設定,還是最好不要動他,預設和db_name是一樣的,這樣多好。 service_name我覺得應該是指資料庫網路連線時的名稱,在listener配置中會有所考慮的。這個值也是可以隨意改動的,並且還可以有多個值。alter system set service_name=serv1,serv2 scope=both; 在listener.ora中有SID_NAME,GLOBAL_DBNAME 這裡SID_NAME指資料庫的執行的例項名,應該是和instance_name一致 而對於GLOBAL_DBNAME是listener配置的對外網路連線名稱,我們在配置tnsname.ora時會考慮這個引數。這個引數可以任意的設定。 另外有一點需要注意,一般我們會在listener.ora手工配置資料庫例項的監聽配置。但oracle可以通過pmon程序支援自動註冊,這時自動註冊的對外網路連線名稱就會用到init.ora檔案中service_name,有多個值的話就會註冊多個,對於上面的例子,在這裡就會註冊serv1和serv2兩個監聽服務。如果你還手工配置了一個GLOBAL_DBNAME=serv3的監聽服務的話,那麼對於例項instance_name=aking就會有三個監聽服務。 在tnsname.ora中有SERVICE_NAME,SID 下面配置客戶端的tnsname.ora 對於這裡的配置主要要給出要連線的資料庫的IP及其連線的例項或服務 在監聽配置中我們提到了對外網路連線名稱,在這裡如果我們用SERVICE_NAME的話,就需要SERVICE_NAME=(GLOBAL_DBNAME或者service_name這裡要求oracle已經自動註冊到了監聽器中),對於SID=(instance_name)即可,譬如: SERVICE_NAME=serv1,serv2,serv3都可以,或者 SID=aking 最後一個是ORACLE_SID引數,這個引數是作業系統中用到的,它是描述我們要預設連線的資料庫例項,對於一個機器上有多個例項的情況下,要修改後才能通過 conn / as sysdba連線,因為這裡用到了預設的例項名。 ============================================= 一直對ORACLE中各種名字不是很清晰,這兩天做了比較細緻的研究,也算是小有成就吧,哈哈! Service_name:資料庫邏輯上表現為一個服務,服務名可以任意取,並且一個數據庫可以有 多個服務名,名字由引數Service_names決定,如果該引數為空,預設的服務名為全域性資料庫名,即db_name.db_domain。 Instance_name:例項與資料庫的對應關係是多對一,由引數instance_name指定,當系統的例項與資料庫為一對一關係時,通常例項名即為資料庫名。 db_name:db_name與db_domain組成全域性資料庫名,唯一地標識一個Oracle資料庫,db_name在資料庫建立後就不能再更改。 ORACLE_SID:全稱是Oracle System Identifier,是以環境變數的形式出現,用於區分不同的例項。所以ORACLE_SID其實就是當前想連線的例項名,因為例項與資料庫是多對一的關係,所以確定了例項,就等於確定了要連線的資料庫。 連線識別符號:下面是一個tnsnames.ora檔案的基本內容: ORACLE = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.111)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = ora10g) ) ) 其中ORACLE即是連線識別符號,當使用本地命名的方式,在應用程式(如SQL*PLUS)連線Oracle時,使用的就是連線識別符號,如 “sqlplus scott/

[email protected]” 連線識別符號等號右邊的內容全部為連線描述符,是使用本地命名連線Oracle時所需的資訊。 SERVICE_NAME就是引數Service_names中的值,必須與該引數的值對應,如果引數為空,那這裡的SERVICE_NAME只能是db_name.db_domain,否則無法連線Oracle。 ============================== PROTOCOL = TCP)(HOST = 192.168.0.6)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = epolice PROTOCOL --協義 host --資料庫伺服器ip port --資料庫伺服器埠 service_name -- 資料庫sid

相關推薦

Oracle db_name / service_name / sid 三者關係作用

show parameter service_names select instance_name from v$instance; db_name是一個實在的物理名稱。service_name時帶有域名的,因為如果兩個資料庫不再同一個域可以有相同的名稱。而sid是資料庫

oracle比較alter table t move alter table t shrink space

釋放空間。 管理 man shrink rac oracl 釋放 segment 但是 alter table t move和alter table t shrink space都可以用來進行段收縮,降低高水位HWM,也都可以用來消除行鏈接(Row Chaining)和行遷

oracle 常用的 join on 相關 集合運算的總結

nal 但是 總結 rom 全部 right light style 是把 sql常用聯合查詢的 join on 、 left join(左連接) 、 right join (右連接)、inner join (等值連接)以及常用的集合運算有:union、unionall、m

oracle的替換函數replacetranslate函數

轉換成 www char 總結 就是 cnblogs lec replace html 1.translate 語法:TRANSLATE(char, from, to) 用法:返回將出現在from中的每個字符替換為to中的相應字符以後的字符串。

Oracletrunc、round 、ceilfloor函式的區別

1、trunc函式 處理數值,對給定數值進行擷取處理,不會對給定數值做四捨五入處理。 語法格式: TRUNC(number[,decimals])--number 待處理的資料,decimals指明需保留小數點後的位數,預設為0 如果引數為負數,則小數點往前取位數

Oracle時間日期轉化函式to_dateto_char用法總結

  在實際的工作中會經常會用到to_char()、to_date()函式來對時間、日期進行處理。 1、to_char()函式的用法  1.1、將時間日期按照指定的格式輸出,得到的是字串,而非date型別。 select sysdate,to_char(sysdate,'y

oracle比較兩表表結構差異資料差異的方法

在工作中經常會遇到導資料的情況,有時候需要比較生產庫和測試庫的表結構是否有變化,找出差異,並且可以找出差異資料。 分析:手工方式不可取,因為要比較的表結構比較多,不容易看出來,採取兩表差集並集的方式查詢。 MINUS(差集): SQL中有一個MINUS關鍵字,它運用在兩個S

Hive元資料表的關係如何在元資料刪除表

各表之間主鍵的關係圖 這個整理很不容易呀,能夠更好地瞭解他們,其中有一種場景需要使用的 傳統的方法刪除這張表: 方式一:僅刪除表中資料,保留表結構 truncate table 表名; (truncate用於刪除所有的行,這個行為在hive元儲存刪除資料是不可逆的) 或 d

171207之Oracledecode函式、SIGN函式INSTR函式

一:DECODE的語法: DECODE(value,if1,then1,if2,then2,if3,then3,…,else),表示如果value 等於if1時,DECODE函式的結果返回then1,…,如果不等於任何一個if值,則返回else。 dec

ORACLE-012:oracle純數字的varchar2型別number型別自動轉換

使用過一個關聯查詢,兩個表的欄位定義了不同的型別。一個欄位是varchar2型別,另一個欄位是number型別,內容如下:'00187'和187。在使用中發現會自動將varchar2型別轉換為number,即187和187。效果與to_number()一樣。專門寫了兩個sql

OracleNUMBER型別不指定長度小數點精度與指定的區別!

在Oracle中Number型別可以用來儲存0,正負定點或者浮點數,可表示的資料範圍在  1.0 * 10(-130) —— 9.9...9 * 10(125) {38個9後邊帶88個0}的數字,當Oracle中的數學表示式的值>=1.0*10(126)時,Oracle

XMLSchemaxmlns,targetNamespacexsi:schemaLocation的關係作用

XML的名稱空間:在w3c的官方說法中,名稱空間提供了避免元素命名衝突的作用,即相同的元素名稱表示不同含義的情況。這裡就不再舉例詳細說明了,在網上很容易找到。如果要避免重名的衝突,那很明顯的,在xml文件中就可以出現多個不同的名稱空間。名稱空間的語法:xmlns:namesp

關於Oracle執行儲存過程使用callexec區別說明

在sqlplus中這兩種方法都可以使用:  exec pro_name(引數1..);  call pro_name(引數1..);  區別:  1. 但是exec是sqlplus命令,只能在sqlplus中使用;call為SQL命令,沒有限制.  2. 儲存過程沒有

ORACLE如何查詢前20個 修改特殊資料

ORACLE中如何查詢前20個 SELECT * FROM (SELECT * FROM TAB ORDER BY 1) WHERE ROWNUM <= 20; 如果一張表中有多條產品資料。主鍵不唯一;生成時間相同。例如: Pbh            Wtime

Oracle查看錶欄位註釋的方法

select * from user_tab_commentsuser_tab_comments:table_name,table_type,comments相應的還有dba_tab_comments,all_tab_comments,這兩個比user_tab_comments多了ower列。獲取欄位註釋:s

javajdk jre jvm三者關係

JDK是JAVA的核心,包括JRE(JAVA 虛擬環境)、編譯器等,JDK的主流產品是由SUN公司開發的,JDK本身是用JAVA編寫的,安裝包的SRC.ZIP就是JDK的原始碼 JVM(JAVA虛擬機器),是可以執行JAVA程式碼的假想計算機,主要任務是把JAVA位元組碼編譯成特定計算機的機器指令,是JAVA

oracle只修改年,月日不變

update tmp_table set targetdate=to_date('2006'||substr(to_char(targetdate,‘yyyymmdd’),5,4),'yyyy-mm-dd') where substr(to_char(targetdate,‘yyyymmdd’),,1,4)=

Oracle刪除表操作trunc deletedrop的說明

相同點: 1.truncate和不帶where子句的delete, 以及drop都會刪除表內的資料。 2.drop,truncate都是DDL語句,執行後會自動提交。 不同點: 1. truncate和 delete只刪除資料不刪除表的結構(定義)     drop語句將

Oracle執行存儲過程callexec區別

completed pro spa 數據 -- gif insert ESS sqlplus命令 在sqlplus中這兩種方法都可以使用: exec pro_name(參數1..); call pro_name(參數1..); 區別: 1. 但是exec是sqlpl

jswindow.location.search的用法作用

bst 地址 用法 屬性獲取 net bstr src log 協議 用該屬性獲取頁面 URL 地址: window.location 對象所包含的屬性 屬性描述 hash 從井號 (#) 開始的 URL(錨) host 主機名和當前 URL 的端口號 h