| Előző változat mindkét oldalonElőző változatKövetkező változat | Előző változat |
| it:oracle:nevek [2014/12/05 14:17] – [Adatbázisnév] rblst | it:oracle:nevek [Unknown date] (aktuális) – külső szerkesztés (Unknown date) 127.0.0.1 |
|---|
| | ====== Oracle adatbázishoz kapcsolódó nevek ====== |
| | Ez a leírás az adatbázissal kapcsolatos különböző neveket (SID, DB_NAME, SERVICE_NAMES, GLOBAL_NAME, TNSNAME stb.) kívánja tisztázni. |
| | |
| | ===== Adatbázis és adatbázispéldány ===== |
| | //Adatbázis// vs. //adatbázispéldány// (//instance//): az Oracle terminológiában az //adatbázis// leegyszerűsítve magát az adathalmazt jelenti, az //adtbázispéldány// (//instance//) pedig az adatbázist kezelő folyamatokat (//PMON//, //SMON//, //DBW//, //LOGW// stb.), valamint a folyamatok által használt egyedi (//PGA//) és közös (//SGA//) memóriastruktúrákat jelenti. A //példány// indításkor hozzárendelődik a megadott //adatbázishoz// (//mount//), és így együtt alkotják az adatbáziskezelő-rendszert (RDBMS). |
| | |
| | Egy //példány// csak egy adatbázishoz tartozik, egy adatbázishoz viszont tartozhat több //példány// (lásd //RAC//). |
| | |
| | ===== SID ===== |
| | A **//SID//** az "Oracle System Identifier" rövidítése . A system szó helyett pontosabb lenne az //instance// szó használata, mivel a //SID// az adatbázis //instance// (//példány//) egyedi neve: az //INSTANCE_NAME// //inicializációs paraméter// értéke. |
| | |
| | Egy gépen nem lehet két //példány// azonos //SID//-del. |
| | |
| | Mivel egy adatbázishoz legalább egy //példány// tartozik, így minden adatbázishoz legalább egy //SID// tartozik. //Single instance// esetén egyértelmű megfeleltetés van az //SID// és az adatbázis között, //RAC// estén viszont egy adatbázishoz több példány, és így több különböző //SID// tartozik. |
| | ===== Adatbázisnév ===== |
| | A **//DB_NAME//** a //példányhoz// tartozó //inicializációs paraméter//, használata nem kötelező, de bevett gyakorlat.<sup>*</sup> A //DB_NAME// paraméter értéke meg kell hogy egyezzen az adatbázis nevével, vagyis azzal a névvel, amely az adatbázis létrehozásakor szerepel a ''CREATE DATABASE'' parancsban, és amely lekérdezhető a ''v$database'' nézetből: ''SELECT name from v$database''. |
| | |
| | Ha több adatbázis van egy gépen, akkor érdemes a //SID//-del megegyező //DB_NAME//-et beállítani. |
| | |
| | //RAC// esetén kötelező beállítani, és összes //instance//-hoz ugyanazt az értéket kell beállítani. |
| | |
| | //Dataguard// esetén a //készenléti// és az //éles// oldalon ugyanazt az értéket kell beállítani. |
| | |
| | <sup>*</sup> Ha a //DB_NAME// paraméter nincs beállítva, akkor a ''STARTUP'' és az ''ALTER DATABASE ... MOUNT'' parancsoknál meg kell adni az adatbázis nevét is. |
| | |
| | |
| | ===== Adatbázisdomén===== |
| | |
| | A **//DB_DOMAIN//** a példányhoz tartozó //inicializációs paraméter//, amely a példány logikai helyét adja meg egy hálózatban. |
| | |
| | Az internetes doménnevek konvencióját követi: a szintek ponttal vannak elválasztva, és a szintek balról jobbra nőnek. |
| | |
| | Ha be van állítva, akkor egy cég különböző szervezeti egységei használhatják ugyanazt a //DB_NAME// beállítást. |
| | |
| | Ha DB linkben nincs benne a //DB_DOMAIN//, akkor az Oracle az adatszótárból automatikusan hozzáilleszti azt. |
| | |
| | |
| | ===== Globális név ===== |
| | A **//GLOBAL_NAME//** az adatbázishoz tartozó beállítás, az adatbázis globális neve. A //DB_NAME// és a //DB_DOMAIN// paraméterek értékéből ponttal képzett összetétel, pl. ''sales.au.oracle.com'', ''sales.us.oracle.com'', ahol a ''sales'' a //DB_NAME//, az ''au.oracle.com'', ill. az ''us.oracle.com'' két //DB_DOMAIN//. |
| | |
| | A globális név lekérdezhető a következő módón: ''SELECT * FROM GLOBAL_NAME;'' |
| | |
| | |
| | Fontos, hogy létezik **//GLOBAL_NAMES//** is, a //példányhoz// tartozó //inicializációs paraméter//, amely megadja, hogy kötelező-e globális nevet használni. Ha igen, akkor az adatbázisra mutató DB link neve meg kell, hogy egyezzen az adatbázis globális nevével. Ezt az Oracle maga intézi. Érdemes TRUE-ra állítani elosztott környezetbe, hogy konzinsztens nevezéket lehessen használni. |
| | |
| | |
| | ===== Egyedi adatbázisnév ===== |
| | A **//DB_UNIQUE_NAME//** a //példányhoz// tartozó //inicializációs paraméter//, amely az adatbázis egyedi neve egy tartományon (//DB_DOMAIN//) belül. |
| | |
| | Ha két példány ugyanabba a //DB_DOMAIN//-be tartozik, és ugyanaz a //DB_NAME// van beállítva benne, akkor kötelezően eltérő //DB_UNIQUE_NAME// értéket kell beállítani. Erre tipikus példa a Dataguard: az éles és a készenléti adatbázispéldányhoz külön //DB_UNIQUE_NAME// beállítás tartozik. |
| | |
| | RAC esetén az összes példányhoz azonos a //DB_UNIQUE_NAME// értéket kell beállítani (ez esetben a //DB_NAME// egyezik, a //SID// viszont eltér.) |
| | |
| | |
| | ===== Szolgáltatásnév ===== |
| | A //service// (adatbázis-szolgáltatás) az adatbázisrendszer logikai egysége. Szeveroldalról a terhelés kezelésére (workload management) szolgál: minden //service//-hez egyedi attribútumok, küszöbértékek és prioritások rendelhetők. Kliensoldalról az adatbázis logikai reprezentációja. |
| | |
| | Egy adatbázishoz több //service// is létrehozható. A //SERVICE_NAMES// a //példányhoz// tartozó //inicializációs paraméter//, amely megadja, hogy a //példányon// mely //service//-ekhez csatlakozhat a kliens. |
| | |
| | RAC esetén egy //service// több //instance//-on is futhat (ez az általános). |
| | |
| | Az //instance// PMON folyamata automatikusan beregisztrálja az //instance//-t, és az aktív //service//-eket az alapértelmezett listener folyamatba (lásd ''lsnrctl services''). (A ''listener.ora'' fájlban ezek explicite is megadhatók.) |
| | |
| | Az adatbázishoz történő csatlakozáskor megadható a kívánt szolgáltatás neve. Ha ez nincs megadva, akkor az alapértelemzett (a //SID//-del megegyező nevű) //service//-hez kapcsolódik a kliens. |
| | |
| | ===== Hálózati szolgáltatásnév ===== |
| | A //hálózati szolgáltatásnév// (//net service name//) egy olyan név, amely egy //kapcsolatleíróra// (//connect descriptor//) oldódik fel. |
| | |
| | A //kapcsolatleíró// egy hálózati célt azonosít: egyrészt a //szolgáltatást// (//SID// vagy //szolgáltatásnév// formájában), másrészt a szerver hálózati elérhetőségét (hálózati protokoll, hálózati cím és port). |
| | |
| | A hálózati szolgáltatásnév és a kapcsolatleíró általában egy helyi konfigurációs fájlban, a ''tnsnames.ora'' fájlban van definiálva, ezt nevezi az Oracle //local naming method//-nak. A ''tnsnames.ora'' használata esetén a hálózati szolgáltatásnévre mint TNS-név hivatkoznak. (A TNS (Transparent Network Substrate) az Oracle saját, egységes hálózati megoldása az adatbázishoz történő csatlakozáshoz, amely elfedi az alsóbb hálózati rétegeket, pl. TCP/IP. Az SQL*Net (amelynek legfontosabb eleme a TNS Listener) erre épül.) |
| | |
| | A hálózati szolgáltatásnév valamilyen címtárszolgáltatásból is jöhet, de ez jóval ritkább megoldás. |
| | |
| | ===== Példák ===== |
| | ==== Csatlakozás az adatbázishoz ==== |
| | |
| | Az adatbázishoz történő csatlakozás a következőképpen történik: |
| | |
| | <code> |
| | CONNECT <username>/<password>@<connect_identifier> |
| | </code> |
| | |
| | ahol a ''<connect_identifier>'' lehet szolgáltatásnév vagy hálózati szolgáltatásnév. |
| | |
| | |
| | ==== Nevek lekérdezése==== |
| | <code sql> |
| | SHOW PARAMETER db_name; |
| | </code> |
| | |
| | |
| | NAME TYPE VALUE |
| | ------------- ----------- -------------- |
| | db_name string SALES |
| | |
| | |
| | <code sql> |
| | SELECT * FROM GLOBAL_NAME; |
| | </code> |
| | |
| | GLOBAL_NAME |
| | ------------------ |
| | SALES.US.ACME.COM |
| | |
| | |
| | <code sql> |
| | SHOW PARAMETER db_domain; |
| | </code> |
| | |
| | NAME TYPE VALUE |
| | ------------- ----------- -------------- |
| | db_domain string US.ACME.COM |
| | |
| | |
| | ==== DB-link ==== |
| | |
| | DB-link létrehozása: |
| | |
| | <code sql> |
| | CREATE DATABASE LINK hq USING 'sales'; |
| | </code> |
| | |
| | <code sql> |
| | SELECT DB_LINK FROM USER_DB_LINKS; |
| | </code> |
| | |
| | DB_LINK |
| | ------------------ |
| | HQ.US.ACME.COM |
| | |
| | |
| | A globális adatbázisnév domén részének megváltoztatása: |
| | |
| | <code sql> |
| | ALTER DATABASE RENAME GLOBAL_NAME TO sales.jp.acme.com; |
| | </code> |
| | |
| | <code sql> |
| | |
| | SELECT * FROM GLOBAL_NAME; |
| | </code> |
| | |
| | |
| | GLOBAL_NAME |
| | ------------------------ |
| | SALES.JP.ACME.COM |
| | |
| | |
| | A domén ellenőrzése külön is: |
| | |
| | <code sql> |
| | SHOW PARAMETER db_domain; |
| | </code> |
| | |
| | NAME TYPE VALUE |
| | ------------- ----------- -------------- |
| | db_domain string US.ACME.COM |
| | |
| | |
| | A //DB_DOMAIN// nem változott meg, mivel független a //GLOBAL_NAME// paraméter értékétől. A domént az utóbbi határozza meg. (A //DB_DOMAIN// paraméter értékét szinkronba kell hozni a //GLOBAL_NAME// paraméterben megadott doménnel.) |
| | |
| | |
| | Az új doménbeállítások tesztelése: |
| | |
| | <code sql> |
| | CREATE DATABASE LINK supply USING 'supply'; |
| | </code> |
| | |
| | <code sql> |
| | SELECT DB_LINK FROM USER_DB_LINKS; |
| | </code> |
| | |
| | DB_LINK |
| | ------------------ |
| | HQ.US.ACME.COM |
| | SUPPLY.JP.ACME.COM |
| |