Блог Cisco в России и СНГ
Share

Обзор таблиц базы данных телефонной станции Cisco UCM

- May 5, 2017 13:54

В этой статье рассматриваются особенности работы с базой данных (БД) телефонной станции Cisco Unified Communications Manager (CUCM) и Voice Operating System (VOS) систем в общем.

Статья рекомендована для инженеров телефонных сетей с опытом администрирования Cisco UCM более одного года.

Еще в 2006 году с выходом CUCM версии 5.0.1, первого релиза на основе VOS, было принято решение использовать IBM Informix Database в качестве хранилища настроек конфигурации.

В базе данных находиться несколько сотен таблиц которые содержат план набора номеров, настройку телефонов и шлюзов, а также пользователей. Администратор производит изменения в таблицах БД посредством веб сервера Tomcat. Производить изменения напрямую в таблицах базе данных с помощью SQL запросов крайне не рекомендуется.

В роли инженера поддержки часто приходится писать SQL SELECT запросы, которые позволяют вывести необходимую информацию в удобном экспортируемом текстовом формате. Ниже постараюсь вкратце описать типы таблиц и привести примеры часто используемых запросов.

Стоит отметить, что с версии 7.0 для ускорения работы телефонной станции во время старта её главного процесса – конфигурация базы копируется в оперативную память (In-memory database, IMDB). И основной процесс станции, Cisco Call Manager, фактически использует данные из IMDB, а не из таблиц базы данных.

Я бы выделил несколько типов таблиц базы данных для VOS продуктов.

  • Словари (type)
  • Системные (system)
  • Динамические (dynamic)
  • Функциональные
  • Соответствия (mapping)

Рекомендую использовать классификацию выше исключительно в целях обучения.

Для более удобного просмотра вывод SQL команд рекомендуется скопировать в текстовый редактор Notepad++ или один из его аналогов.

 

Type таблицы

Содержимое таблиц «type» типа создается во время установки системы и не может быть изменено администратором или пользователями каким либо образом. Эти таблицы содержат данные в формате «ключ-значение» (key-value) и на них могут ссылаться таблицы остальных типов.

Ниже несколько примеров. Первый (typemodel) – отображает перечень типов телефонов поддерживаемых конкретной версией CUCM.

admin:run sql SELECT enum,name,moniker FROM typemodel WHERE enum IN ('110','90','131','437','493')
enum name                    moniker
==== ======================= ================
110  Media Termination Point MODEL_MTP
90   Route List              MODEL_ROUTE_LIST
131  SIP Trunk               MODEL_SIP_TRUNK
437  Cisco 7975              MODEL_CISCO_7975
493  Cisco 9971              MODEL_Cisco_9971
...

 

Пример ниже отображает типы записей в плане нумерации.

admin:run sql SELECT enum,name FROM typepatternusage
enum name
==== ======================================
0    CallPark
1    Conference
2    Device
3    Translation
4    Call Pick Up Group
5    Route
...

 

Протоколы поддерживаемые Cisco UCM сервером.

admin:run sql SELECT enum,name FROM typedeviceprotocol
enum name
==== ============================
0    SCCP
1    Digital Access PRI
2    H.225
3    Analog Access
4    Digital Access T1
5    Route Point
6    Unicast Bridge
7    Multicast Point
8    Inter-Cluster Trunk
9    RAS
10   Digital Access BRI
11   SIP
12   MGCP
...

Системные таблицы

Системные таблицы также такие как typetableinfo, typefieldinfo, treecontrolgroupnodes.

Первая и вторая формируют схему базы (database schema) отображая таблицы и их поля. Последняя из трех хранит страницы веб сервера.

admin:run sql SELECT enum,tablename FROM typetableinfo
enum tablename
==== ================================
1    Device
...
13   DevicePool
...
18   H323Device
22   MediaMixer
24   NumPlan
...
46   TypeDeviceProtocol
...
77   DeviceNumPlanMap
79   TypeModel

 

Динамические таблицы

Содержимое динамических таблиц может быть изменено как администратором системы, так и, что более часто происходит, её конечными пользователями. Пользователи используют такие функции как переадресация, DND (do not disturb),  hunt group, extension mobility и прочие. Информация о текущем состоянии переадресации на отдельно взятой линии конкретного пользователя, как и все остальные настройки хранятся в базе.

Запрос ниже отображает номера всех линий (здесь только одна с номером 1411) с безусловной переадресацией (CFA) на номер 5000.

admin:run sql SELECT c.pkid,c.cfadestination,n.dnorpattern line,n.fkroutepartition pt,c.datetimestamp FROM callforwarddynamic c INNER JOIN numplan n ON n.pkid==c.fknumplan WHERE c.cfadestination='5000'
pkid                                 cfadestination line pt   datetimestamp
==================================== ============== ==== ==== =============
7ded9e18-f706-4d7b-8f96-aa54fa3898c6 5000           1411 NULL 1493195338

 

Таблицы конфигурации

Таблицы последнего типа хранят текущую конфигурацию системы. Изменения в неё могут быть внесены только администратором системы.

Этот запрос отображает все номера телефонов настроенных администратором, т.е. телефонную таблицу маршрутизации.

admin:run sql SELECT pkid,dnorpattern num,fkroutepartition pt,tkpatternusage FROM numplan
pkid                                 num         pt                      tkpatternusage
==================================== =========== =========== ==========================
00ee7548-6ac0-1828-0b6c-d542d63f445a 1110        NULL                                 2
87398763-efa2-8a8c-9693-745300db3b72 134X        NULL                                 5
f2856fc5-dcbe-1a7a-f4dc-a7685d4ac0cd 1411        NULL                                 2
a4dd3b81-dc2e-8b59-6ae1-032f5df8e829 1461        NULL                                 2
fb0471f2-01d0-2a2a-f1cc-d45b16bb5573 5111        NULL                                 7
7916b98d-3974-6e8e-5dc8-6e1aa4ec6ecd 1120        NULL                                 2
2c30de37-cf1d-6060-dc0c-7e2959e34c9a 5102        NULL                                 2
4d3de192-6692-37d5-aaad-63cfc5cfdd24 1100        NULL                                 2
a16d29ba-b0c0-c0cf-35ec-63abbaa38009 1011        NULL                                 2

 

Еще один пример с выводом устройств сконфигурированных в системе – телефонов, SIP транков, CTI Route Point и медиа ресурсов.

admin:run sql SELECT pkid,name,tkmodel,tkdeviceprotocol proto FROM device WHERE pkid NOT IN ('7248bc9-53a8-4940-90df-1a2335c76a72','1ecbc4f3-eef3-45c5-9be1-7756bbdf1bd8','59765051-833a-435d-9d9d-783eab0297a6','27abd0a0-c549-4656-9f96-67c8308f610c','07248bc9-53a8-4940-90df-1a2335c76a72')
pkid                                 name                 tkmodel proto
==================================== ==================== ======= =====
ee4c9f70-ea2b-45d5-8ffe-31fb4e9681a6 MTP_2                110     6    
0d874bc4-c7bc-4949-a140-58e640d94629 CFB_2                50      6    
47bb29fe-4e71-4dd9-b057-4520c1b6c548 ANN_2                126     0    
f1c32bf7-e309-47db-931c-a6219a0c792a MOH_2                70      0    
474729f0-f3da-ffcd-d289-271f441445a3 std-hl               90      0    
2633e474-b883-4cbe-8f07-3a7dddd4f7bc SEP005056996F7E      30016   0    
9f86b82f-89c4-72bd-c04b-a24cc3adaee8 7962-em-5102         404     0    
d76b4ce1-3da3-cd1c-6f07-841fdc3302e0 ICM-TR-Trig1380      73      0    
34de5b13-d98a-47f6-a35b-9427c1c2f5eb SEPA45630BB07AF      437     0    
5a358a31-80b7-6a8a-cfe3-487624d49a09 ICM_RP_1120          73      0    
4f03ff2f-d89a-415b-8262-2d775230dddc SEPA45630BB06F9      437     0    
36f07a4d-74f8-2ee0-5779-460caa1ed923 SEP0024142DDF24      437     0    
87655d65-0317-5ac1-1a4e-7a7bbc1b278f ccx15_1464           72      0    
00984b02-3c20-46ae-aa5d-bd3ed3b2179d ccx15_1465           72      0    
3e17cd58-1731-cfb8-92b2-707f4b34b8ab ccx215_1460_aa       73      0    
0aa53d21-b192-436d-8d56-f77cd508fca5 SEPA45630BB0387      437     0    

Таблицы mapping типа

Как подкатегорию можно выделить таблицы соответствия (mapping). Они необходимы при ассоциации линии с телефоном, пользователя с телефоном и в некоторых других случаях.

Пример ассоциации в виде ключей. Обратите внимание на идентификатор устройства (device) и номера (numplan) и сравните с выводом команд выше.

admin:run sql SELECT pkid,fkdevice,fknumplan FROM devicenumplanmap WHERE fkdevice='34de5b13-d98a-47f6-a35b-9427c1c2f5eb' AND fknumplan='f2856fc5-dcbe-1a7a-f4dc-a7685d4ac0cd'
pkid                                 fkdevice                             fknumplan
==================================== ==================================== ====================================
018ab5e8-9218-48ef-a55d-9dcc84ec8f81 34de5b13-d98a-47f6-a35b-9427c1c2f5eb f2856fc5-dcbe-1a7a-f4dc-a7685d4ac0cd

 

Пример той же ассоциации в удобном для администратора формате. Телефону с МАК адресом A45630BB07AF присвоена номер 1411 в партиции NULL на первую линию.

admin:run sql SELECT m.pkid,d.name device,n.dnorpattern line,m.numplanindex pos,p.name FROM devicenumplanmap m INNER JOIN device d ON d.pkid=m.fkdevice INNER JOIN numplan n ON n.pkid=m.fknumplan LEFT JOIN routepartition p ON p.pkid=n.fkroutepartition WHERE n.dnorpattern LIKE '%1411%'
pkid                                 device          line pos name
==================================== =============== ==== === ====
018ab5e8-9218-48ef-a55d-9dcc84ec8f81 SEPA45630BB07AF 1411 1   NULL

 

Часто используемые запросы

Ниже приведено несколько полезных SQL запросов которые могут быть использованы при анализе разных проблем.

 

Отобразить все линии с текущей настройкой записи звонков (call recording) на них.

admin:run sql select rd.pkid,n.dnorpattern,n.fkroutepartition AS pt,trec.name AS recflag from recordingdynamic AS rd INNER JOIN devicenumplanmap AS mdn ON mdn.pkid==rd.fkdevicenumplanmap INNER JOIN numplan AS n ON n.pkid==mdn.fknumplan INNER JOIN typerecordingflag AS trec ON trec.enum==rd.tkrecordingflag WHERE rd.pkid!='4ef381b2-ff24-47f9-bdb2-022b7e8fcaf9'
pkid                                 dnorpattern pt   recflag
==================================== =========== ==== ================================
c5611b10-c5d4-4365-b55c-23edb300fbbb 101X        NULL Call Recording Disabled
f52ea03c-fffe-4787-a4d6-b070a580ce4e 5035        NULL Call Recording Disabled
c6c3263e-281c-4bb4-b75b-e5ad8fef0506 5034        NULL Automatic Call Recording Enabled
88d28cd8-0580-46cb-a523-724f69dd9998 3014        NULL Automatic Call Recording Enabled

Отобразить текущие настройки логирования на CUCM.

admin:run sql select ts.name,p.servername,p.enable AS traceon,p.tracelevel,p.numfiles,p.maxfilesize,p.numlines,p.numminutes from processnodeservice AS p INNER JOIN typeservice AS ts ON ts.enum==p.tkservice
name                                              servername   traceon tracelevel numfiles maxfilesize numlines numminutes
================================================= ============ ======= ========== ======== =========== ======== ==========
Cisco CallManager                                 10.48.47.143 t       1          1        2           10000    1440
Cisco CallManager                                 10.48.47.136 t       127        1        2           10000    1440
Cisco Tftp                                        10.48.47.143 t       127        1        2           10000    1440
Cisco Tftp                                        10.48.47.136 t       127        1        2           10000    1440

 

Подписка телефонов на XML сервисы.

admin:run sql select mt.pkid,d.name as device,mt.servicename,mt.fktelecasterservice from telecastersubscribedservice as mt INNER JOIN device as d ON d.pkid==mt.fkdevice
pkid                                 device               servicename fktelecasterservice
==================================== ==================== =========== ====================================
ab11d152-fdba-0cc6-a6dc-b6658e8a8ae7 7962-em-5102         EM          49ce7246-de87-1eb4-e768-ddc34f2b9ccf
a2c8399c-89a0-3169-d914-93eebaceb948 SEPA45630BB07AF      FIPPA       dbb3533c-7301-8175-7e03-616b9e4f100f
491a4ec1-2d4b-c2b0-93c4-edf97df84c09 milnagy 8861 Profile EM          49ce7246-de87-1eb4-e768-ddc34f2b9ccf

 

Запрос ниже полезен при анализе проблем с сертификатами.

admin:run sql select c.pkid,c.servername,c.ipv4address,c.serialnumber,tctr.name AS role,tsc.name AS type,c.subjectname,c.issuername,c.timetolive from certificate AS c  INNER JOIN certificatetrustrolemap as ctr ON ctr.fkcertificate==c.pkid INNER JOIN certificateservicecertificatemap AS sc ON sc.fkcertificate==c.pkid INNER JOIN typecertificateservice AS tsc ON tsc.enum==sc.tkcertificateservice INNER JOIN typetrustrole AS tctr ON tctr.enum==ctr.tktrustrole
pkid                                 servername ipv4address  serialnumber                           role                             type              subjectname                                                                                                                                      issuername                                                                                                                                                             timetolive
==================================== ========== ============ ====================================== ================================ ================= ================================================================================================================================================ ====================================================================================================================================================================== ==========
9e045d3a-be58-6e75-690e-0086541b1632 ucm11-1    10.48.47.143 360000005923e9c225e8f6d963000100000059 CallManagerTFTP                  CallManager       CN=ucm11-1.allevich.local,OU=TAC,O=Cisco,L=Krakow,ST=Malopolskie,C=PL                                                                            CN=allevich-DC12-CA,DC=allevich,DC=local                                                                                                                               NULL
9e045d3a-be58-6e75-690e-0086541b1632 ucm11-1    10.48.47.143 360000005923e9c225e8f6d963000100000059 CallManagerTFTP                  CallManager-trust CN=ucm11-1.allevich.local,OU=TAC,O=Cisco,L=Krakow,ST=Malopolskie,C=PL                                                                            CN=allevich-DC12-CA,DC=allevich,DC=local                                                                                                                               NULL
9e045d3a-be58-6e75-690e-0086541b1632 ucm11-1    10.48.47.143 360000005923e9c225e8f6d963000100000059 CallManagerTFTP                  Phone-SAST-trust  CN=ucm11-1.allevich.local,OU=TAC,O=Cisco,L=Krakow,ST=Malopolskie,C=PL                                                                            CN=allevich-DC12-CA,DC=allevich,DC=local                                                                                                                               NULL
9e045d3a-be58-6e75-690e-0086541b1632 ucm11-1    10.48.47.143 360000005923e9c225e8f6d963000100000059 SAST                             CallManager       CN=ucm11-1.allevich.local,OU=TAC,O=Cisco,L=Krakow,ST=Malopolskie,C=PL                                                                            CN=allevich-DC12-CA,DC=allevich,DC=local                                                                                                                               NULL
9e045d3a-be58-6e75-690e-0086541b1632 ucm11-1    10.48.47.143 360000005923e9c225e8f6d963000100000059 SAST                             CallManager-trust CN=ucm11-1.allevich.local,OU=TAC,O=Cisco,L=Krakow,ST=Malopolskie,C=PL                                                                            CN=allevich-DC12-CA,DC=allevich,DC=local                                                                                                                               NULL
9e045d3a-be58-6e75-690e-0086541b1632 ucm11-1    10.48.47.143 360000005923e9c225e8f6d963000100000059 SAST                             Phone-SAST-trust  CN=ucm11-1.allevich.local,OU=TAC,O=Cisco,L=Krakow,ST=Malopolskie,C=PL                                                                            CN=allevich-DC12-CA,DC=allevich,DC=local                                                                                                                               NULL
9e045d3a-be58-6e75-690e-0086541b1632 ucm11-1    10.48.47.143 360000005923e9c225e8f6d963000100000059 TFTP                             CallManager       CN=ucm11-1.allevich.local,OU=TAC,O=Cisco,L=Krakow,ST=Malopolskie,C=PL                                                                            CN=allevich-DC12-CA,DC=allevich,DC=local                                                                                                                               NULL

 

Надеюсь информация будет полезной не только инженерам технической поддержки Cisco.

Оставляйте комментарии, если нужно написать какой-то другой запрос. По возможности постараюсь помочь.

Tags:
Оставить комментарий

9 Comments

  1. Анександр, приветствую.

    Спасибо за статью. Полезно.
    Можете дать подсказку, где найти список таблиц базы ? (в идеале это были бы таблицы с параметрами, чтобы было видно, какой запрос строить).
    Так как может возникнуть потребность в построении разных запросов, подо все запросы шаблоны не написать.
    Конечно же стандартным инструментом массовых изменений является bulk, но хотелось бы уметь составлять запросы самому:
    например, выгрузка всех translation с определённым параметром (галочкой), и многие другие.

    • Федор, и Вам спасибо за комментарий.

      Этот запрос отображает перечень таблиц системы.
      run sql SELECT enum,tablename,description FROM typetableinfo

      А этот структура каждой таблицы. Для краткости вывода настроен фильтр, который отображает данные по таблице Device.
      run sql SELECT f.enum,f.fieldtype,t.tablename,f.fieldname,f.remarks FROM typefieldinfo f INNER JOIN typetableinfo t ON t.enum==f.tktableinfo WHERE tktableinfo=’1′

      • Александр,
        Получилось получить список таблиц по запросу: admin:run sql select * from typetableinfo (сохранил в выборке все параметры). В CUCM 10.5 их оказалось 2845.
        Спасибо.

        • Федор, должно быть примерно в 4 раза меньше. Около 700 таблиц.
          Проверил запрос только что – работает.

          Александр

          • Ок. Проверю.
            В любом случае, ситуация с run sql select для меня прояснилась )
            Спасибо.

  2. Спасибо, хорошая статья – мне помогла в решении проблемы.

    • Михаил, очень рад и спасибо за отзыв – всегда мотивирует писать дальше)

  3. Здравствуйте.

    Можете подсказать, как правильно написать запрос отображающий список всех номеров телефонов с привязкой к имени пользователя?

    • Олег,
      Я думаю Вам нужен этот запрос.
      run sql SELECT e.pkid,e.userid,e.islocaluser,n.dnorpattern,n.fkroutepartition from enduser AS e INNER JOIN endusernumplanmap AS men ON men.fkenduser==e.pkid INNER JOIN numplan AS n ON n.pkid==men.fknumplan

      Но я чаще пользуюсь запросом ниже, т.к. нужно еще видеть ассоциацию телефона с линией.
      # user – device – number – partition
      run sql SELECT e.pkid,e.userid,e.islocaluser,d.name,n.dnorpattern,n.fkroutepartition from enduser AS e INNER JOIN enduserdevicemap AS med ON med.fkenduser==e.pkid INNER JOIN endusernumplanmap AS men ON men.fkenduser==e.pkid INNER JOIN numplan AS n ON n.pkid==men.fknumplan INNER JOIN device AS d ON d.pkid==med.fkdevice

      Попробуйте оба и дайте знать, если это то что Вам нужно.

      Александр

Share