programmera.net -> oracledba -> normal     för utskrift      info@programmera.net

Steg5: TNS-namn för distansanrop

1. Kontakta databasen från en klient
2. Vad är TNS?
3. Hur fungerar Local Naming?
4. Exempel
5. TNSPING

1. Kontakta databasen från en klient

I Steg4 skapade vi en lyssnare för databasen, vilket gör att databasen kan anropas från klienter på andra maskiner. En klient kan vara SQL*Plus, Toad, SQL Developer eller t.ex. en Javaapplikation. För att kontakta en Oracleinstans krävs följande:

  1. Användarnamn: T.ex. "system".
  2. Lösenord: T.ex. "oracle".
  3. Net Service Name: Ett sätt att kontakta databasen.
I Oracle 10g finns 5 metoder för hur ett Net Service Name kan konfigureras:
  1. Local naming (TNS-namn): Det vanligaste sättet att kontakta en databas är en metod som heter "local naming" och som innebär att man använder ett TNS-namn som definieras i filen "tnsnames.ora". I filen "tnsnames.ora" mappas TNS-namnet mot URL, port och SID. Fördelen med att använda "local naming" är att det är ett ganska enkelt sätt att skapa Net Service Names. Ett TNS-namn är också lättare att komma ihåg än t.ex. ett värdnamn (som används i Hostnaming).
  2. Hostnaming: Passar för små TCP/IP-nätverk. Kräver att lyssnaren lyssnar på port 1521 men kräver ingen konfiguration på klientsidan. Klienten anropar databasen genom att använda databasens värdnamn (hostname) som Net Service Name. Kontrollera att värdnamnet finns tillgängligt via DNS eller i klientens /etc/hosts.
  3. Easy Connect: En ny metod för Oracle 10g. Fungerar som Hostnaming med tillägget att man även kan anropa lyssnare som inte ligger på defaultport 1521 och man kan även specifiera "service name". Nackdelen är att "Oracle Net Services 10g" måste installeras på klienten. Easy Connect konfigureras automatiskt då "Oracle Net" installeras.
  4. Oracle Internet Directory: Används då man har en komplex miljö med många instanser och databaser. Alla Net Service Names lagras och administreras på en central plats.
  5. External Naming: Man lagrar och administrerar Net Service Names med hjälp av någon extern standardmjukvara (som inte ägs av Oracle) .
"Local Naming" är defaultmetoden. Vi kommer på denna sida att använda metoden "Local Naming".
  • Om du vill använda någon annan metod än "Local Naming" så ska du ändra parametern NAMES.DIRECTORY_PATH som definieras i filen $ORACLE_HOME/network/admin/sqlnet.ora så att namnet på den metod du vill använda står först i listan.

2. Vad är TNS?

TNS står för "Transparent Network Substrate" och är en nätversteknologi som används av Oracle för att prata med databaser över nätverket. Applikationer kan öppna TNS-anslutningar mot varandra och på så sätt utbyta data. Fördelen med TNS är att TNS erbjuder ett gemensamt gränssnitt mot andra nätverksprotokoll, så att vi helt kan bortse från de underliggande protokollen.

3. Hur fungerar Local Naming?

För att förklara Local Naming tänker vi oss följande scenario: Du vill kontakta en databas och har följande information:

  • URL till maskinen: dator1.company1.se
  • Port: 1521
  • SID: db_namn1
  • Användare: x
  • Lösenord: y
Hur gör vi då? Jo, man ska skapa en fil tnsnames.ora, som per default har följande sökväg $ORACLE_HOME/network/admin/tnsnames.ora.
  • Du kan ändra sökvägen till denna fil genom att sätta OS-parametern TNS_ADMIN till den sökväg du vill ha.
Filen tnsnames.ora ska innehålla följande kod:

tns_namn1 =  (DESCRIPTION =
          (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(Host = dator1.company1.se)(Port = 1521)))
          (CONNECT_DATA = (SID = db_namn1)))	
  
För att sedan kontakta databasen använder vi det just definierade TNS-namnet:
[olle@dev1]$ sqlplus x/y@tns_namn1

SQL*Plus: Release 10.2.0.1.0 - Production on To Dec 8 10:46:36 2005

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Ansluten till:
Oracle9i Enterprise Edition Release 9.2.0.5.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.5.0 - Production

4. Exempel

Vi testar detta för vår nya installation. Jag skapar en fil $ORACLE_HOME/network/admin/tnsnames.ora med följande innehåll:

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = okullberg-pc)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
För att testa detta måste instansen och lyssnaren vara startade. Om så är fallet ska du utföra följande anrop från klientdatorn:
[olle@dev1]$  sqlplus system/oracle@ORCL

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Jul 25 13:14:20 2006

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

Funkar bra.

5. TNSPING

Om du har problem med ett TNS-namn och vill kolla om TNS-namnet funkar kan du använda TNSPING:
[olle@dev1]$ tnsping ORCL

TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 25-JUL-2006 14:16:26

Copyright (c) 1997, 2005, Oracle.  All rights reserved.

Used parameter files:


Used TNSNAMES adapter to resolve the alias
 )SERVICE_NAME = orcl)= TCP)(HOST = okullberg-pc)(PORT = 1521))
OK (20 msec)
Ett annat exempel från en större miljö:
[olle@dev1]$ tnsping t163.xcompany.net

TNS Ping Utility for 32-bit Windows: Version 9.2.0.1.0 - Production on 02-JUN-2005 10:48:52

Copyright (c) 1997 Oracle Corporation.  All rights reserved.

Used parameter files:
\\xcompany.net\dfs\config\net8\TCP\sqlnet.ora

Used LDAP adapter to resolve the alias
Attempting to contact (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)
(HOST=db13.xcompany.net)(PORT=10002)))(CONNECT_DATA=(SERVICE_NAME=T163)))
OK (60 msec)
Utskriften visar nyttig information. Här ser vi bl.a. vilken parameterfil (sqlnet.ora) som används.