• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1218
  • Last Modified:

Retrieve list of IP Address from tnsnames.ora file.

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
Asmitagoyal
Asked:
Asmitagoyal
  • 4
  • 4
2 Solutions
 
MerijnBSr. Software EngineerCommented:
can you post the contents of the file you want to extract the ip's from?
0
 
AsmitagoyalAuthor Commented:
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
 
MerijnBSr. Software EngineerCommented:
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
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
AsmitagoyalAuthor Commented:
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
 
MerijnBSr. Software EngineerCommented:
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
 
AsmitagoyalAuthor Commented:
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
 
MerijnBSr. Software EngineerCommented:
I don't know where it is normally located. Do you have any information on this?
0
 
MetalnibCommented:
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
 
AsmitagoyalAuthor Commented:
Hi
i want a delphi code which automatically finds out the file. Is there any way to find it out.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 4
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now