читать содержимое TNSNAMES с помощью SQL-заявления - PullRequest
0 голосов
/ 05 декабря 2018

Есть способ прочитать определения в текущем tnsname с помощью sql-оператора?

Например, мой текущий tnsnames.ora содержит следующее:

MYSID_MYSERVER =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = myserver.abc.com)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = mysid)
    )
  )

Конечно, я могуdo

$SQL  conn scott@MYSID_MYSERVER

Я буду знать, смогу ли я прочитать свойства "MYSID_MYSERVER", например, с системным представлением

$SQL select * from TNSNAME_V

или смогу ли я получить "HOST"Атрибут, связанный с «MYSID_MYSERVER»

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Вы можете прочитать V $ DIAG_ALERT_EXT.В этом представлении отображается содержимое журнала предупреждений на основе XML в автоматическом диагностическом репозитории (ADR)

<msg time='2018-12-06T11:10:24.349+03:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='xxx.yyy.zzz'
 host_addr='10.xx.xx.xx'>
 <txt>06-DEC-2018 11:10:24 * (CONNECT_DATA=(SID=edcu)(CID=(PROGRAM=perl)(HOST=xxx.yyy.zzz)(USER=web))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.xx.xx.xx)(PORT=23631)) * establish * edcu * 0
 </txt>
</msg>

select HOST_ID,HOST_ADDRESS,MESSAGE_TEXT,FILENAME
from V$DIAG_ALERT_EXT WHERE trim(COMPONENT_ID)='tnslsnr'

Пример вывода

XX.YYY.ZZZ  10.xx.xx.xx 28-NOV-2018 06:42:13 * (CONNECT_DATA=(SID=edcu)(CID=(PROGRAM=perl)(HOST=XX.YYY.ZZZ)(USER=web))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.xx.xx.xx)(PORT=48143)) * establish * edcu * 0
                        /oracle/app/oracle/product/11.2/diag/tnslsnr/xx.yy.zz/listener_edcu/alert/log.xml
XX.YYY.ZZZ  10.xx.xx.xx 28-NOV-2018 06:42:13 * (CONNECT_DATA=(SID=edcu)(CID=(PROGRAM=perl)(HOST=XX.YYY.ZZZ)(USER=web))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.xx.xx.xx)(PORT=48144)) * establish * edcu * 0
                        /oracle/app/oracle/product/11.2/diag/tnslsnr/xx.yy.zz/listener_edcu/alert/log.xml
XX.YYY.ZZZ  10.xx.xx.xx 28-NOV-2018 06:42:13 * (CONNECT_DATA=(SID=edcu)(CID=(PROGRAM=perl)(HOST=XX.YYY.ZZZ)(USER=web))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.xx.xx.xx)(PORT=48145)) * establish * edcu * 0
                        /oracle/app/oracle/product/11.2/diag/tnslsnr/xx.yy.zz/listener_edcu/alert/log.xml
XX.YYY.ZZZ  10.xx.xx.xx 28-NOV-2018 06:42:14 * (CONNECT_DATA=(SID=edcu)(CID=(PROGRAM=perl)(HOST=XX.YYY.ZZZ)(USER=web))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.xx.xx.xx)(PORT=48146)) * establish * edcu * 0
                        /oracle/app/oracle/product/11.2/diag/tnslsnr/xx.yy.zz/listener_edcu/alert/log.xml
XX.YYY.ZZZ  10.xx.xx.xx 28-NOV-2018 06:42:14 * (CONNECT_DATA=(SID=edcu)(CID=(PROGRAM=perl)(HOST=XX.YYY.ZZZ)(USER=web))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.xx.xx.xx)(PORT=48147)) * establish * edcu * 0
                        /oracle/app/oracle/product/11.2/diag/tnslsnr/xx.yy.zz/listener_edcu/alert/log.xml
XX.YYY.ZZZ  10.xx.xx.xx 28-NOV-2018 06:42:26 * (CONNECT_DATA=(SID=edcu)(CID=(PROGRAM=perl)(HOST=XX.YYY.ZZZ)(USER=web))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.xx.xx.xx)(PORT=48160)) * establish * edcu * 0
                        /oracle/app/oracle/product/11.2/diag/tnslsnr/xx.yy.zz/listener_edcu/alert/log.xml
XX.YYY.ZZZ  10.xx.xx.xx 28-NOV-2018 06:42:26 * (CONNECT_DATA=(SID=edcu)(CID=(PROGRAM=perl)(HOST=XX.YYY.ZZZ)(USER=web))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.xx.xx.xx)(PORT=48161)) * establish * edcu * 0
                        /oracle/app/oracle/product/11.2/diag/tnslsnr/xx.yy.zz/listener_edcu/alert/log.xml
XX.YYY.ZZZ  10.xx.xx.xx 28-NOV-2018 06:42:31 * (CONNECT_DATA=(SERVER=DEDICATED)(SID=edcu)(CID=(PROGRAM=perl)(HOST=XX.YYY.ZZZ)(USER=oraweb))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.xx.xx.xx)(PORT=48167)) * establish * edcu * 0
    /oracle/app/oracle/product/11.2/diag/tnslsnr/xx.yy.zz/listener_edcu/alert/log.xml
XX.YYY.ZZZ  10.xx.xx.xx 28-NOV-2018 06:42:34 * (CONNECT_DATA=(SERVER=DEDICATED)(SID=edcu)(CID=(PROGRAM=perl)(HOST=XX.YYY.ZZZ)(USER=oraweb))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.xx.xx.xx)(PORT=48174)) * establish * edcu * 0
    /oracle/app/oracle/product/11.2/diag/tnslsnr/xx.yy.zz/listener_edcu/alert/log.xml

Если добавить значение sqlnet.ora, вы можетесм. строку подключения в файле трассировки * .trc

trace_level_client = 16
trace_directory_client = C:\oracle\network\trace

(14676) [06-DEC-2018 11:08:17:949] nspsend: packet dump
(14676) [06-DEC-2018 11:08:17:949] nspsend: 01 12 00 00 01 00 00 00  |........|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 01 38 01 2C 00 00 08 00  |.8.,....|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 7F FF 86 0E 00 00 01 00  |........|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 00 D8 00 3A 00 00 02 00  |...:....|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 61 61 00 00 00 00 00 00  |aa......|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 00 00 00 00 3B 64 00 0B  |....;d..|
(14676) [06-DEC-2018 11:08:17:949] nspsend: AA 62 00 00 00 00 00 00  |.b......|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 00 00 28 44 45 53 43 52  |..(DESCR|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 49 50 54 49 4F 4E 3D 28  |IPTION=(|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 41 44 44 52 45 53 53 3D  |ADDRESS=|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 28 50 52 4F 54 4F 43 4F  |(PROTOCO|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 4C 3D 54 43 50 29 28 48  |L=TCP)(H|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 4F 53 54 3D 67 69 66 74  |OST=xxxx|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 2E 6B 72 77 2E 72 7A 64  |.xxx.xxx|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 29 28 50 4F 52 54 3D 31  |)(PORT=1|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 35 32 31 29 29 28 43 4F  |521))(CO|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 4E 4E 45 43 54 5F 44 41  |NNECT_DA|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 54 41 3D 28 53 49 44 3D  |TA=(SID=|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 65 64 63 75 29 28 43 49  |edcu)(CI|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 44 3D 28 50 52 4F 47 52  |D=(PROGR|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 41 4D 3D 43 3A 5C 50 72  |AM=C:\Pr|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 6F 67 72 61 6D 20 46 69  |ogram.Fi|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 6C 65 73 5C 51 75 65 73  |les\Ques|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 74 20 53 6F 66 74 77 61  |t.Softwa|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 72 65 5C 53 51 4C 20 4E  |re\SQL.N|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 61 76 69 67 61 74 6F 72  |avigator|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 20 66 6F 72 20 4F 72 61  |.for.Ora|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 63 6C 65 5C 73 71 6C 6E  |cle\sqln|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 61 76 69 67 61 74 6F 72  |avigator|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 2E 65 78 65 29 28 48 4F  |.exe)(HO|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 53 54 3D 49 56 43 2D 50  |ST=xxx-x|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 54 4B 2D 44 45 4D 49 4E  |xx-DEMIN|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 29 28 55 53 45 52 3D 44  |)(USER=D|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 65 6D 69 6E 44 56 29 29  |eminDV))|
(14676) [06-DEC-2018 11:08:17:949] nspsend: 29 29                    |))      |
(14676) [06-DEC-2018 11:08:17:949] nspsend: normal exit
0 голосов
/ 05 декабря 2018

Некоторая информация в ConnectionString, которую вы можете получить с помощью SQL:

SELECT 
    SYS_CONTEXT('USERENV', 'NETWORK_PROTOCOL'),
    SYS_CONTEXT('USERENV', 'SERVER_HOST'),
    SYS_CONTEXT('USERENV', 'DB_NAME'),
    SYS_CONTEXT('USERENV', 'DB_DOMAIN'), 
    SYS_CONTEXT('USERENV', 'DB_UNIQUE_NAME'), 
    SYS_CONTEXT('USERENV', 'SERVICE_NAME') 
FROM DUAL;

Однако ваша реальная запись tnsnames.ora может выглядеть совсем иначе.Например, вы не можете описать конфигурацию восстановления после отказа следующим образом:

(DESCRIPTION=
    (FAILOVER=ON)
    (ADDRESS_LIST=
        (ADDRESS=(PROTOCOL=TCP)(HOST=server-1)(PORT=1901))
        (ADDRESS=(PROTOCOL=TCP)(HOST=server-2)(PORT=1901))
    )
    (CONNECT_DATA=
        (SERVICE_NAME=DB_SERVICE)
    )
)

База данных, размещенная на сервере-1, не знает сервер-2 - если вы не запросите некоторые параметры init.ora, такие как fal_server

...