Monday, February 8, 2021

TNSNames entry checker in python

 #!/usr/bin/python

# $ORACLE_HOME and other os variables need to be set prior.


import os

import re

import sys

import subprocess as sub

from subprocess import Popen, PIPE, call



l_os_env=os.environ.copy()


def TupleToString(tup):

    str =''.join(tup)

    return str



def tns_test(tnsentry):

    try:

        l_list1 =[]

        l_test_runstr='tnsping ' + tnsentry

        l_test_tns=sub.Popen(l_test_runstr, env=l_os_env, shell=True, stdout=sub.PIPE, stderr=sub.PIPE)

        l_tns_out = l_test_tns.communicate()

        l_out = tnsentry + ' ' + TupleToString(l_tns_out).split('\n')[11]

    except KeyboardInterrupt:

        exit(1)

    except:

        l_out = tnsentry + ' something went wrong'

    return l_out


os.chdir('full_path_of_tns_admin_directory') 


tns = open('tnsnames.ora', 'r')              # open file

sList = tns.read()                           # read file into string

sList = re.sub("#.*\n","",sList)             # strip all comments

sList = re.sub("\(.*\n","",sList)            # remove "(" to end of line

sList = re.sub("\)","",sList)                # clean up ")"

sList = re.sub(" ","",sList)                 # remove spaces

sList = re.sub("\n","",sList)                # remove carriage returns

sList = re.sub("=$","",sList)                # remove last "="

sList = sList.split("=")                     # create list

tns.close()

#print '\n'.join(sList)

#print(sList)

#print sList[4]

for i in sList:

    print(tns_test(i))


# sample out
oracle> ./tns_tester.py
test_db_1.world OK (10 msec)
test_db_2.world TNS-12545: Connect failed because target host or object does not exist
test_db_3.world OK (0 msec)