Hola a todos!
Hoy queríamos compartir con vosotros un script que hemos utilizado en varias ocasiones para generar el fichero tnsnames.ora de conexión mediante una consulta a Cloud Control.
Para ello, utilizamos las vistas mgmt_target_properties y mgmt$target. De la primera vista consultamos los valores MachineName, Port y SID para extraer los datos que necesitamos. Los datos de la consulta los exportamos a fichero y con un pequeño programa shell script generamos nuestro nuevo tnsnames.ora.
La consulta que utilizamos para la primera parte es:
set pages 999 lines 200 heading off col host for a50 col port for a10 col sid for a10 spool db_all.txt select distinct mgmt$target.host_name||'|'||sid.PROPERTY_VALUE||'|'||port.PROPERTY_VALUE from sysman.mgmt_target_properties machine, sysman.mgmt_target_properties port, sysman.mgmt_target_properties sid, sysman.mgmt_target_properties domain, sysman.mgmt$target where machine.target_guid=sid.target_guid AND sid.target_guid=port.target_guid AND port.target_guid=domain.target_guid AND machine.PROPERTY_NAME='MachineName' AND port.PROPERTY_NAME='Port' AND sid.PROPERTY_NAME='SID' AND sid.PROPERTY_VALUE not like '%ASM%' AND machine.TARGET_GUID in (select TARGET_GUID from sysman.mgmt_current_availability where sysman.EM_SEVERITY.get_avail_string(current_status)='UP') AND machine.TARGET_GUID=mgmt$target.target_guid order by 1; spool off
En la consulta se buscan solo aquellas instancias que están con estado «UP», se puede quitar la condición para buscar todas. También tenemos la posibilidad de buscar las de una máquina en concreto, por lo que podemos consultar añadiendo:
AND machine.PROPERTY_VALUE=’maquina1′
Una ve generado el fichero, buscamos los valores y formateamos la salida en formato tnsnames.ora:
cat db_all.txt |grep -v "^$"| while read each_line do HOST_NAME=`echo $each_line |cut -d"|" -f1` ORACLE_SID=`echo $each_line |cut -d"|" -f2` PORT=`echo $each_line |cut -d"|" -f3` echo "${ORACLE_SID} =" >> tnsnames.ora echo " (DESCRIPTION =" >> tnsnames.ora echo " (ADDRESS = (PROTOCOL = TCP)" >> tnsnames.ora echo " (HOST = ${HOST_NAME})(PORT = ${PORT}))" >> tnsnames.ora echo " (CONNECT_DATA = " >> tnsnames.ora echo " (SID = ${ORACLE_SID})" >> tnsnames.ora echo " )" >> tnsnames.ora echo " )" >> tnsnames.ora echo " " >> tnsnames.ora done
Esperamos que os sea de tanta utilidad como a nosotros.
Un saludo.
Equipo DBA.