Solved

Retrieve list of IP Address from tnsnames.ora file.

Posted on 2007-11-20
9
1,127 Views
Last Modified: 2008-02-01
Hi Experts,

I want to write a code in delphi to find out the existing IP addresses in the tnsnames.ora file.
How can it be done.

Thanks
0
Comment
Question by:Asmitagoyal
  • 4
  • 4
9 Comments
 
LVL 19

Expert Comment

by:MerijnB
ID: 20326261
can you post the contents of the file you want to extract the ip's from?
0
 

Author Comment

by:Asmitagoyal
ID: 20326398
hi
the contents of the tnsnames.ora file are as under:

TEST1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 100.10.10.1)(PORT = 1111))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = TestService)
    )
  )

TEST2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 100.10.10.2)(PORT = 1111))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = TestService)
    )
  )

TEST3 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 100.10.10.3)(PORT = 1111))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = TestService)
    )

These are the values stored in tnsnames.ora file. now through delphi code i want to get the list of all the IPs.
0
 
LVL 19

Accepted Solution

by:
MerijnB earned 200 total points
ID: 20326455
see this working example
procedure CollectIPs(FileName: string; IPs: TStringList; IncludePortNumbers: boolean);

const HOST_SEP = 'HOST = ';

      PORT_SEP = 'PORT = ';

var Data: TStringList;

    i: integer;

    p: integer;

    IP, Port: string;

begin

 Data := TStringList.Create();
 

 try

  Data.LoadFromFile(FileName);
 

  for i := 0 to Data.Count - 1 do

  begin

   IP := '';

   Port := '';
 

   p := Pos(HOST_SEP, Data[i]);
 

   if p > 0 then

   begin

    IP := Copy(Data[i], p + Length(HOST_SEP), 255);

    IP := LeftStr(IP, Pos(')', IP) - 1);
 

    if IncludePortNumbers then

    begin

     p := Pos(PORT_SEP, Data[i]);
 

     if p > 0 then

     begin

      Port := ':' + Copy(Data[i], p + Length(PORT_SEP), 255);

      Port := LeftStr(Port, Pos(')', Port) - 1);

     end;
 

     if IP <> '' then

      IPs.Add(IP + Port);

    end;

   end;
 

  end;
 

 finally

  Data.Free();

 end;

end;
 

procedure TForm2.Button1Click(Sender: TObject);

var IPs: TStringList;

begin

 IPs := TStringList.Create();
 

 try

  CollectIPs('c:\tnsnames.ora', IPs, true);

  IPs.SaveToFile('c:\addresses.lst');

 finally

  IPs.Free();

 end;

end;

Open in new window

0
 

Author Comment

by:Asmitagoyal
ID: 20326793
Hi
This has solved the problem.
In continuation with this i've another problem.
Suppose i'm connected to Test2 server. Now is there any way to find out the location of the tnsnames.ora file and then get the IP address of the corresponding server.

Thanks
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 19

Expert Comment

by:MerijnB
ID: 20327007
do you mean you want to know where the tnsnames.ora file is located, or how to find an ip for given server (Test2) in this tnsnames.ora file?
0
 

Author Comment

by:Asmitagoyal
ID: 20327167
hi
you have told the solution for getting the IP address but is there any way to find the location of tnsnames.ora other than hardcoding it.

Thanks
0
 
LVL 19

Expert Comment

by:MerijnB
ID: 20327179
I don't know where it is normally located. Do you have any information on this?
0
 
LVL 1

Assisted Solution

by:Metalnib
Metalnib earned 50 total points
ID: 20327798
It can be found in the ORACLE_HOME/network/admin directory on the client, usually.
echo %ORACLE_HOME%
Or it can be in any directory pointed by TNS_ADMIN
But if you use DBX connection with SID, oracle driver will find it for you.
0
 

Author Comment

by:Asmitagoyal
ID: 20338443
Hi
i want a delphi code which automatically finds out the file. Is there any way to find it out.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

The uses clause is one of those things that just tends to grow and grow. Most of the time this is in the main form, as it's from this form that all others are called. If you have a big application (including many forms), the uses clause in the in…
This article explains how to create forms/units independent of other forms/units object names in a delphi project. Have you ever created a form for user input in a Delphi project and then had the need to have that same form in a other Delphi proj…
This Micro Tutorial demonstrates using Microsoft Excel pivot tables, how to reverse engineer competitors' marketing strategies through backlinks.
Migrating to Microsoft Office 365 is becoming increasingly popular for organizations both large and small. If you have made the leap to Microsoft’s cloud platform, you know that you will need to create a corporate email signature for your Office 365…

920 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now