Professional Documents
Culture Documents
This current document is a guideline to help when facing problem with an OmniPCX Record.
Revision History
Edition 7: June 30, 2017 update of the document
Edition 8: April 12, 2018 update of the document
Edition 9: June 14, 2018 update of the document
Edition 10: July 17, 2018 update of the document
Edition 11: October 31, 2018 update of the document
Edition 12: February 08, 2019 update of the document
Edition 13: April 10, 2019 update of the document
Edition 14: July 12, 2019 update of the document
Edition 15: September 20, 2019 update of the document
Edition 16: January 20, 2020 update of the document
Edition 17: April 02, 2020 update of the document
Edition 18: June 30, 2020 update of the document
Legal notice:
The Alcatel-Lucent name and logo are trademarks of Nokia used under license by ALE. To view other trademarks used by affiliated
companies of ALE Holding, visit: www.al-enterprise.com/en/legal/trademarks-copyright. All other trademarks are the property of
their respective owners. The information presented is subject to change without notice. Neither ALE Holding nor any of its affiliates
assumes any responsibility for inaccuracies contained herein. © 2018 ALE International. All rights reserved. www.al-enterprise.com
Table of contents
1 Document History ....................................................................................................................................... 7
2 Introduction ................................................................................................................................................ 9
4 OmniPCX Enterprise Management for recording with the Alcatel-Lucent OmniPCX Record.............................. 39
4.1 DR-Link & IP DR-Link : Record Authorization for user ............................................................................ 39
4.2 DR-Link recording mode ...................................................................................................................... 40
4.2.1 Creation of PCM2 board ................................................................................................................ 40
4.2.2 Create Virtual Equipments channels ............................................................................................... 40
4.2.3 OmniPCX Enterprise Software locks................................................................................................ 41
4.3 Remote DR-Link recording mode.......................................................................................................... 41
4.3.1 Centralized DR-Link node .............................................................................................................. 41
4.3.1.1 Centralized DR-Link node -- CSTA parameter ........................................................................................... 41
4.3.1.2 Centralized DR-Link node - Creation of PCM2 board and virtual equipments channels .................................. 41
4.3.2 Remote DR-Link node ................................................................................................................... 42
4.3.2.1 Remote DR-Link node - CSTA parameter ................................................................................................. 42
4.3.2.2 Remote DR-Link node – Recording resources ........................................................................................... 42
4.3.2.3 Remote DR-Link node - OmniPCX Enterprise Software locks ...................................................................... 42
4.4 IP DR-Link recording mode .................................................................................................................. 43
17 11/02/2020 Modification:
10.1.2 – Additional checks for DR-Link (add the name of the firmware of the
packetizer for DR-Link recording mode)
Add Recording ISDN Trunk (chapter 3.6)
Modification in chapter 13.2
Add Chapter 27.2 “Beep not heard when listening the record”
18 30/06/2020 Modification:
13.2 Lost your admin password
This current document is a guideline to help when facing problem with an Alcatel-Lucent OmniPCX
Record.
Please refer to Alcatel Lucent Business Partner Web Site at the following URL:
http://www.businesspartner.alcatel-lucent.com/ to get latest available edition of this document.
The DR-Link records all types of sets available by the Alcatel-Lucent CSTA protocol (TDM, IP, analog
sets, etc…).
The IP DR-Link records only 8 Series IP Touch sets + 8000 Series sets + 8082/noe set and the IP Desktop
Softphones.
For IP DR-Link double IP recording only the following phone types are compliant:
all NOE 3G EE IPTOUCH 8008, 8018, 8028s, 8058s, 8068s, 8078s with NOE 3G EE R500 5.40.09 binay
version and IP Desktop Softphone with minimum version 11.2.0.
Port mirroring works with both IPDSP and physical phone sets but RTP redirection only works with
IPDSP.
Check the available sets in the OmniPCX Record Hardware-Software specification guide for more
information.
For DR-Link & IP DR-Link, the call informations are provided by the CSTA.
For the IP attendant 4059EE (port mirroring and RTP redirection), the call informations
are provided via the client utility Notifier installed on the attendant PC.
For SIP Mode, the call informations are provided via the port mirroring of the SIP Phone.
The OmniPCX Enterprise and the OmniPCX Record are linked by a CSTA link typed DR-Link.
The OmniPCX Enterprise is the CSTA server. It means that the OXE generates CSTA events (DELIVERED,
ESTABLISHED, etc…) for the users.
The CSTA server is done by the process CSTAMONO of the OmniPCX Enterprise.
The OmniPCX Record is the CSTA client. It means that the OmniPCX Record will send requests to the
OmniPCX Enterprise to record users.
-1- Until the OXE Release R12 M1, OXE can only accept one OmniPCX Record system.
-2- From OXE Release R12.1 M2.300, OXE is able to accept more than one OmniPCX Record system.
Now the value of the lock 130 (in the OXE, command spadmin (option 2)) can take one the following
value:
- Value 0 (none)
- Value 1 (Nice voice recorder)
- Value 2 (DR-Link voice recorder)
- Value 3 (multiple Nice voice recorder)
- Value 4 (multiple DR-Link voice recorder)
Remark:
The number of recorder links is restricted by the max number of CSTA clients.
For multiple voice recorder connection, OXE can only accept DR-Link recorders of the same type.
Each DR-Link recorder works independently, if more than 1 DR-Link recorder is accepted by the OXE.
If several DR-Link recorders are connected to an OXE, each recorder monitors a group of TDM or IP extensions,
and different recorder is not allowed to manage the same user.
(If the extension is already monitored by another DR-Link application, the service is rejected with the error
message: Service busy).
See example at the next page:
Extension 3000 is requested to be monitored by the OmniPCX Record “172.xx.xxx.25” and also this
extension 3000 is requested to be monitored by the OmniPCX Record “172.xx.xxx.16”
172.xx.xxx.25 => Send Monitoring Request for Device:3000 => no error in the Monitoring response
Extension 3000 is monitored
Then 172.xx.xxx.16 => Send Monitoring Request for Device:3000 => error: Service busy
For a same directory number: The first Monitoring request received by the OXE will be accepted but the
second (or more) will be refused (Service busy error message)
-3- From OXE Release R12.3.1 M4.500, OXE is still able to accept more than one OmniPCX Record
system and the following IP Phones are able to duplicate their IP stream to 2 different IP addresses
(OmniPCX Record): all NOE 3G EE IPTOUCH 8008, 8018, 8028s, 8058s, 8068s, 8078s with NOE 3G EE
R500 5.40.09 binary version and IP Desktop Softphone with minimum version 11.2.0.
Remark:
The number of recorder links is restricted by the max number of CSTA clients.
For multiple voice recorder connections, OXE can only accept DR-Link recorders of the same type.
Each DR-Link recorder works independently, if more than 1 DR-Link recorder is accepted by the OXE.
If several DR-Link recorders are connected to an OXE, each recorder monitors a group of TDM or IP extensions,
and different recorders are allowed to monitor the same user. No limitation to monitor the same directory
number.
If 3 voice recorders (all typed as DR_Link) are connected to the OXE, and request to monitor the same IP Touch
(8068s), the 2 first StartIPRecording will be accepted but the third will be refused (INVALID_OBJECT_STATE)
because the IP extensions is able to duplicate 2 * 2 flows.
The CSTA mono is accessible by executing telnet localhost 2555 on the OmniPCX Enterprise.
Then enter character D (shift + d). You can display the list of all connected CSTA clients with the
command ls.
The CSTA client corresponding to the OmniPCX Record is a TAPIPREMSERV link with the type DR-
Link
Remark : it is tagged DR-Link even if the OmniPCX Record is used for IP DR-Link recording.
The cable between the PCM2 board and the packetizer depends on the specific OmniPCX
Enterprise hardware and mustn’t exceed 1,5m.
Note:
ULAW is currently being used by companies in North America and in Japan while ALAW is being used
in Europe.
The packetizer used in DR-Link recording mode is not the same as the one used in ISDN Trunk
recording.
c- Recording request :
a. An ESTABLISHED CSTA event is handled in the OXE as soon as a recordable user is in
conversation.
b. The OmniPCXRecord receives this ESTABLISHED CSTA event for this recordable user
c. According to the OmniPCX Recorder recording rules, the OmniPCX Recorder records or
not this conversation of this user.
d. If the OmniPCX Record records, this one sends the recording request to the OXE
The OmniPCX Record sends the CSTA request to the OXE :
“Start listening : Device_ID, PCM rack Id, PCM2 coupler Id, PCM2 Time Slot”
a- The request “Start listening : Device_ID, PCM rack Id, PCM2 coupler Id, PCM2 Time Slot”
handles a virtual conference in the OXE between the recorded user A, the user B and the
time slot of the PCM2.
d- This TDM flow of the time slot of the PCM2 is sent to the Packetizer ( Blue Box )
f- The RTP flow is sent from the packetizer to the OmniPCX Record.
At the end of the conversation, the OmniPCX Record builds the record with the audio and the
detailed CSTA information.
c- Recording request :
a. An ESTABLISHED CSTA event is handled in the OXE as soon as a recordable user is in
conversation.
b. The OmniPCXRecord receives this ESTABLISHED CSTA event for this recordable user
c. According to the OmniPCX Recorder recording rules, the OmniPCX Recorder records or
not this conversation of this user.
d. If the OmniPCX Record records, this one sends the recording request to the OXE
The OmniPCX Record sends the CSTA request to the OXE :
“Start IP Recording : Device_ID, IP@of the OmniPCX Record,Port X1, Port X2”
The request “Start IP Recording : Device_ID, IP@of the OmniPCX Record,Port X1, Port X2” handles a
duplicated RTP flow from the recorded user A to the OmniPCX Record.
It means that on the Start Recording request, the IP set sends the RTP flow to the OmniPCXRecord
− From Recorded to Remote sets towards port X1 of the OmniPCX Record
− From Remote to Recorded sets towards port X2 of the OmniPCX Record
At the end of the conversation, the OmniPCX Record builds the record with the audio and the
detailed CSTA information.
Warning: Only the following phone sets are compliant: all NOE 3G EE IPTOUCH 8008, 8018, 8028s,
8058s, 8068s, 8078s with NOE 3G EE R500 5.40.09 binary version and IP Desktop Softphone with
minimum version 11.2.0.
The OXE will have 2 CSTA clients (typed DR_Link) connected. Recordable devices will be monitored thru those
CSTA clients.
From the OXE (telnet interface), we can check those connections by the command telnet localhost 2555:
(1)vrec_cs1> telnet localhost 2555
Trying 172.27.xxx.20...
Connected to vrec_cs1.
Escape character is '^]'.
D
dbg> ls
1 : [172.27.xxx.10] CSTA (DR_LINK, Ecma II, TSERVERECMAV2, Null, SessionAssociated) - 0 monitoring(s)
client connection time : 17:37:11 - 25 Apr 2019 ( 4min 17sec )
2 : [172.27.xxx.11] CSTA (DR_LINK, Ecma II, TAPIPREMSERV, Null, SessionAssociated) - 0 monitoring(s)
client connection time : 17:37:38 - 25 Apr 2019 ( 3min 50sec )
3 : [vrec_cs1] CSTA (AFE, Afe II, AFE, CSTA V2, SessionAssociated) - 36 monitoring(s)
client connection time : 17:37:44 - 25 Apr 2019 ( 3min 44sec )
4 : [vrec_cs1] CSTA Debug
client connection time : 17:40:26 - 25 Apr 2019 ( 1min 2sec )
dbg> ls
1 : [172.27.xxx.10] CSTA (DR_LINK, Ecma II, TSERVERECMAV2, Null, SessionAssociated) - 3 monitoring(s)
client connection time : 17:37:11 - 25 Apr 2019 ( 4min 17sec )
2 : [172.27.xxx.11] CSTA (DR_LINK, Ecma II, TAPIPREMSERV, Null, SessionAssociated) - 3 monitoring(s)
client connection time : 17:37:38 - 25 Apr 2019 ( 3min 50sec )
3 : [vrec_cs1] CSTA (AFE, Afe II, AFE, CSTA V2, SessionAssociated) - 36 monitoring(s)
client connection time : 17:37:44 - 25 Apr 2019 ( 3min 44sec )
4 : [vrec_cs1] CSTA Debug
client connection time : 17:40:26 - 25 Apr 2019 ( 1min 2sec )
(1)vrec_cs1> cstainfo
As soon as the StartIPRecording request is accepted by the OXE, the Phone set should duplicate its UDP stream
to the two voice recorder IP addresses:
(1)vrec_cs1> zdpost d 3400 | grep cstaRec
cstaRecording[0] : IP recording (type=1)
cstaRecording[1] : IP recording (type=1)
CSTA LOCKS
CSTA profile = 2
IVR access = 30 (99999 max)
CCD agents = 1 (1000 max)
RSI agents = 0 (99999 max)
CCD pilot can be monitored = true
Feature SOSM = false
Feature Emirats Arabes Unis = false
Feature NICE - DR-Link = Multi DR-Link => Lock 130 = 4
DR-Link recording time slot = 0 (600 max)
DR-Link recording net time slot = 0 (99999 max)
DR-Link IP recording = 2 (99999 max) => Lock 334, 2 locks taken related to the 2
StartIPRecording accepted by the OXE.
The request “Start IP Recording : Device_ID, IP@of the OmniPCX Record,Port X1, Port X2” handles a
duplicated RTP flow from the recorded user A to the OmniPCX Record.
Duplicated RTP flow to the OmniPCX Record 1 (172.27.xxx.10)
Duplicated RTP flow to the OmniPCX Record 2 (172.27.xxx.11)
It means that on the Start Recording request, the IP Phone set sends the RTP flow to each
OmniPCXRecord:
OmniPCX Record 1
− From Recorded to Remote sets towards port X1 of the OmniPCX Record
− From Remote to Recorded sets towards port X2 of the OmniPCX Record
OmniPCX Record 2
− From Recorded to Remote sets towards port X3 of the OmniPCX Record
− From Remote to Recorded sets towards port X4 of the OmniPCX Record
At the end of the conversation, the OmniPCX Records build the record with the audio and the
detailed CSTA information.
The OmniPCX Record is able to do DR-Link and IP DR-link recording modes in the same
installation.
The 8 Series Ip Touch sets + 8000 Series sets + 8082/noe set and the IP Desktop Softphones are recorded
in IP DR-Link and the other types of sets are recorded in DR-Link.
The Remote DR-Link recording and the IP DR-Link network recording solutions allow to centralize
the recordings of a homogeneous Alcatel-Lucent network.
The cable between the PCM2 board and the Blue Box depends on the specific OmniPCX
Enterprise hardware and mustn’t exceed 1,5m.
The centralized DR-Link node is the node where PCM2 resources are located.
The remote node DR-Link is the node where the recorded user(s) are located.
Remark regarding the CSTA request : The OmniPCX Record sends the CSTA request to the OXE :
“Start listening : Device_ID, 128 + PCM rack Id, PCM2 coupler Id, PCM2 Time Slot”
Commercial reference is :
3JE10103AB => Trunk E1
3JE10104AB => Trunk T1
Note:
One dedicated packetizer can be associated with one ISDN trunl line only.
The packetizer used in ISDN Trunk recording is not the same as the one used in DR-Link recording
mode.
The ISDN Trunk recording is a passive recording mode. No CSTA monitoring involved.
b- The ISDN flow of the ISDN trunk line is splitted (Splitter). Identical flow sent to the
packetizer and sent to the T2 board.
d- The RTP flow is sent from the packetizer to the OmniPCX Record.
At the end of the conversation, the OmniPCX Record builds the record with the audio.
Do not confuse the following described feature (audio call flow encryption) with the storage of the
OmniPCX record audio files encryption
The CSTA is not encrypted between the OmniPCX Record and the OXE.
The recording flow is encrypted from the IP Phone to the MSM module in front of the OmniPCX
Record.
The OmniPCX Record is able to do the mixed recording mode with OXE in encryption in the same
installation.
The CSTA is not encrypted between the OmniPCX Record and the OXE.
As the OmniPCX Enterprise doesn’t generate CSTA events for attendants, the 4059EE IP
attendants CAN NOT be recorded in DR-Link OR in IP DR-Link.
There are two ways to record attendant console : the port mirroring and the RTP redirection
The RTP will be provided through port mirroring from managed switch and call informations are
provided via the client utility Notifier ( called also OmniPCX Record Console or OmniPCX TAPI
attendant client )installed on the attendant PC.
1- When the attendant PC answers a call, the internal Alcatel API of the attendant PC notifies it
to the client utility Notifier.
2- The client utility Notifier sends the beginning of the call information to the OmniPCX Record.
3- In parallel, at the connection of the call, the phone set associated to the attendant is in
conversation with the caller via RTP.
To have the RTP recorded flow, it is necessary to make a port mirroring of the phone set
associated to the attendant using a managed switch and the OmniPCX Record makes IP
sniffing on a 2nd dedicated LAN adapter.
So at the connection of the call, the OmniPCX Record begins the IP sniffing on the 2nd
dedicated LAN adapter.
4- At the disconnection of the call, the internal Alcatel API of the attendant PC notifies it to the
client utility Notifier.
5- The client utility Notifier sends the end call information to the OmniPCX Record
7- The OmniPCX Record builds the record with the audio and the detailed call information.
Remarks or limitations :
1- The “Hold on” of the attendant during a conversation generates two records for the same
conversation.
2- As the client utility Notifier is needed to have the call information, we can see easily that
attendants phone sets ONLY ( so without PC ) can not be recorded.
3- The OmniPCX Record must have TWO LAN cards in case of port mirroring : one for all
attendants and one for the DR & IP DR-Link.
The RTP redirection works ONLY with an embedded IPDSP phone set in the A4059EE IP attendant.
1- When the attendant PC answers a call, the internal Alcatel API of the attendant PC notifies it
to the client utility Notifier.
2- The client utility Notifier sends the beginning of the call information to the OmniPCX Record.
3- In parallel, at the connection of the call, the IPDSP associated to the attendant is in
conversation with the caller via RTP.
To have the RTP recorded flow, the client utility notifier is able to redirect its RTP flow to
the OmniPCX Record.
4- At the disconnection of the call, the internal Alcatel API of the attendant PC notifies it to the
client utility Notifier.
5- The client utility Notifier sends the end call information to the OmniPCX Record.
6- The IPDSP stops its RTP flow, so end of the RTP recorded flow.
7- The OmniPCX Record builds the record with the audio and the detailed call information.
Remark for this mode: The WinpCap has to be installed on the attendant PC
The SIP Phones, created as “SIP device”, should be recorded in SIP Recording mode.
This mode applies to any SIP sets that are not associated to an OXE or for OXE sets declared as “SIP
device”.
From OXE (mgr) \ Users => Set Type : SIP device
For OXE sets declared as “SIP extension”, DR-Link recording is the supported way. Please note that
the recording of OXE SIP extension with port mirroring is not a supported way as it may generate
double records.
The SIP Recording mode consists in port mirroring of the SIP phone from managed switch, for the
RTP Flow and also for the call information.
SIP Signalling
& RTP recording flow
Conversation flow
Connecting cable
1- It is necessary to make a port mirroring of the SIP phone set using a managed switch and the
OmniPCX Record makes IP sniffing on a 2nd dedicated LAN adapter.
2- When the SIP Phone set answers a call or makes a call ( and until the end of the conversation
), the OmniPCXRecord receives the SIP Phone signaling ( INVITE, 200 OK, BYE, etc… ) via the
managed switch.
3- In parallel, at the connection of the call, the OmniPCXRecord receives from the managed
switch the RTP flow of this SIP Phone.
4- At the disconnection of the call, the OmniPCXRecord receives the SIP BYE event of the SIP
Phone via the managed switch.
5- The OmniPCX Record builds the record with the received audio and the detailed call
information.
Regarding the detailed information, the OmniPCXRecord is able to decrypt the SIP events
information ( for instance, “from”, “to”, beginning / end of the record ) and to build the
record detailed information.
Firewall/Network Router
Switch managed
Ext A
Port mirroring
Managed swicth with duplication of the RTP flow
and the SIP signalling of the Trunk SIP to the LAN
2 network adapter of the OmniPCX Record.
LAN 2
"SIP Trunk
Recording SIP Signalling
LAN 1
server" service & RTP recording flow
Conversation flow
1- It is necessary to make a port mirroring of the SIP Trunk using a managed switch and the
OmniPCX Record makes IP sniffing on a 2nd dedicated LAN adapter (LAN 2 in the above
diagram)
2- When “Ext A” extension answers a call or makes a call ( and until the end of the conversation
), the OmniPCXRecord receives the SIP Trunk signaling ( INVITE, 200 OK, BYE, etc… ) thru the
managed switch.
3- In parallel, at the connection of the call, the OmniPCXRecord receives from the managed
switch the RTP flow of the SIP Trunk.
4- At the disconnection of the call, the OmniPCXRecord receives the SIP BYE event thru the SIP
Trunk via the managed switch.
5- The OmniPCX Record builds the record with the received audio and the detailed call
information.
Regarding the detailed information, the OmniPCXRecord is able to decrypt the SIP events
information ( for instance, “from”, “to”, beginning / end of the record ) and to build the
record detailed information.
Firewall/Network Router
Ext A
LAN
OmniPCXRecord
SIPRecServer
1- There is no port mirroring in SIPREC recording mode. The SBC component will send the SIP
messages and SIP RTP to OmniPCX Record.
2- When “Ext A” extension answers a call or makes a call ( and until the end of the conversation
), a SIP dialog is established between OXE and SIP Provider thru the SBC component.
3- As soon as the SIP call is established, The SBC initiates another SIP dialog to the
OmniPCXRecord (SRS process).
OmniPCX Record (SRS process) receives the SIP messages signaling ( INVITE, 200 OK, BYE,
etc… ) from the SBC .
4- When the SIP signaling is processed, the RTP flow is duplicated by the SBC to the OmniPCX
Record (SIPREC process).
5- At the disconnection of the call, the OmniPCXRecord (SRS process) receives the SIP BYE event
from the SBC. The RTP flow is stopped.
6- The OmniPCX Record builds the record with the received audio and the detailed call
information.
Regarding the detailed information, the OmniPCXRecord is able to decrypt the SIP events
information by the SRS process ( for instance, “from”, “to”, beginning / end of the record )
and to build the record detailed information.
The OmniPCX Record can request a “beep” tone (tone: 22) or a voice guide (voice guide: 565) to all
parties involved in a call to inform the users that the current conversation is recorded.
The service is executed if the device is in the conversation state and if a recording operation has
been launched.
In DR-Link, the OmniPCX Record sends the CSTA request to the OXE :
StartBeep_DR: Device_ID, tone, presence Timer, silence Timer”
Example taken from the recorder logs, for the TDM extension 3005:
[GetStartBeepRequest_DR] Device :3005 ToneId:22 presenceDuration:50 silenceDuration:15
In IP DR-Link, the OmniPCX Record sends the CSTA request to the OXE :
StartBeep : Device_ID, tone, presence Timer, silence Timer”
Example taken from the recorder logs, for the IP Phone 3000:
[GetStartBeepRequest] Device :3000 ToneId:22 presenceDuration:50 silenceDuration:15
The requests “StartBeep_DR” and “StartBeep” handles a generation of the tone to the recorded
user.
Time
OmniPCX Record - Release 2.3 and above – ALESVC50173
OmniPCX Record: Troubleshooting guide ALESVC50173 ed.18
Copyright © ALE International 2020 page 36/238
The silence timer can be chosen in OmniPCX Record Console / Site Administration/ System :
It is possible to request only one beep. This beep will be generated at the beginning of the recorded
conversation and so in theory, the value of silence timer must be set to 0.
In DR-Link, the OmniPCX Record sends the CSTA request to the OXE :
StartBeep_DR: <mcdu> <vg> <presence_duration=50> <silence_duration=0>
Example taken, from the recorder logs, for the TDM extension 3005:
[GetStartBeepRequest_DR] Device :3005 ToneId:565 presenceDuration:50 silenceDuration:0
In IP DR-Link, the OmniPCX Record sends the CSTA request to the OXE :
StartBeep_DR <mcdu> <vg> <presence_duration=50> <silence_duration=3>
Example taken from the recorder logs, for the IP Phone 3000:
[GetStartBeepRequest] Device :3000 ToneId:565 presenceDuration:50 silenceDuration:3
The requests “StartBeep_DR” and “StartBeep” handles a generation of the voice guide to the
recorded user.
By configuration from the OmniPCX Record web console (Site Administration \ System), you are able
to configure a voice guide (it is the number 565 which is mandatory).
The voice guide number is the 565 (and could not be another voice guide number).
The associated message (according to the choosen languge) has to be created and assigned to a GD,
GA or GPA board.
As soon as a recorded call is established, the voice guide is played at the beginning. The recording is
starting at the beginning of the call (so during the period the voice guide is played, the parties in
conversation can speak together and are recorded).
The parameter called “Record Authorization” in Categories / Phone Facilities Categories from
the “Rights” menu must be set accordingly:
“0” means unauthorized recording. When recording is forbidden on a device, the recording request is
rejected with the “SECURITY VIOLATION” error code.
Create 30 new users on the Z30 board by declaring analog sets with a physical location on this
board (30 phone numbers must be defined in the Phonebook). Start from Eqt Address 1 to 30.
4.3.1.2 Centralized DR-Link node - Creation of PCM2 board and virtual equipments channels
In the remote node, check in “mgr : Applications\ Recording resource” that the recording resources
of the centralized node are present.
If the recording resources are not present, please make an audit of the recording resources
from the centralized DR-Link node to the remote DR-Link node. This is the choice 53 (Recording
Resource ) in the audit menu.
In IP DR-Link recording type, the recorded set (8 Series Ip Touch sets + 8000 Series sets + 8082/noe
set and the IP Desktop Softphones) will duplicate its RTP flow directly to the IP Logger.
To use the IP DR-Link recording mode, it is necessary to create an IP Logger in the OmniPCX
Enterprise and to validate the parameter Application\CSTA\ “DR-Link on IP supported” = YES.
4068 set
In Console / Manage / System : Choose the correct LAN network adapter which is used for the
port mirroring of the Attendant IP 4059EE
In Windows \ Control Panel \ Network and Internet\Network and Sharing Center, configure the
LAN2 :
5.2.4 Creation of Attendants in the OmniPCX Record Console for Port Mirroring
In OmniPCX Record Console / Manage/ Extension : create an extension which is the associated
set of the Attendant and fill the mac address of this IP phone set. The parameter “Enable
Recording Redirect” is not validated.
After installed, the application icon will appear in the System tray :
Remark : The Alcatel-Lucent 4059 EE Attendant must be running before starting the
"OmniPCX Console Recording Agent"
Headset
6.4.2 Creation of Attendants in the OmniPCX Record Console for RTP Redirection
In OmniPCX Record Console / Manage/ Extension : create an extension which is the associated
set of the Attendant and fill the mac address of this IP phone set. The parameter “Enable
Recording Redirect” is validated.
After installed, the application icon will appear in the System tray :
Once the OmniPCX Console Recording Agent is connected, the Application Icon should turn
green.
In Console / Manage / System : Choose the correct LAN network adapter which is used for the
port mirroring of the SIP Phone set
In Windows \ Control Panel \ Network and Internet\Network and Sharing Center, configure the
LAN2 :
In OmniPCX Record Console / Manage/ Extension : create the extension SIP and fill the mac
address of this phone set.
In case that it is not possible to identify an issue, it will be necessary to enable the software traces.
The trace files produced are generated for all of the OmniPCX RECORD services, these consist of the
following:
• Archiving Server
• Administration Auditing
• Omni Console Recorder
• General Recorder
• Recording Transfer Service
• Replication Service
• SNMP Agent
• Screen Capture
• Recording Mixer
No of Files *
Specifies the number of days that trace files should be regenerated before recycling. By default the
value is set to 20.
Update Button
Saves any configuration changes.
Marker
Marker Comment
Insert Button
Inserts the Marker Comment into the recorder trace file. This enables a support engineer to easily
identify the entries that were being written to the trace file when the user indicated that a problem
had been identified.
Note: These Traces are only for the log files which are written in Logs folder
C:\Program Files (x86)\Alcatel-Lucent\OmniPCXRecord Suite\Logs
Note: Auto log Backup of one day and Auto file deletion older than last 3 days is not offered in
Restricted Mode
Note: Logs backup and Snapshot features are not available in restricted mode.
Note: The compressed zip file containing the trace files is named using the current date.
If you want to modify the backup interval, you can do so by amending the “LogBackupTimerInterval”
in the following file:
C:\Program Files (x86)\Alcatel-Lucent\OmniPCXRecord Suite\SNMP Agent\OmniPCXRECORD-
SNMPAgent.exe
Note: The backup process can operate using a “Copy (Default)” or “Cut” method.
• Copy, duplicates the trace files in a compressed zip file, and copies the file to the backup
path, leaving the existing files in the original folder (Recommended)
• Cut, duplicates the trace files in a compressed zip file, copies them to the Backup path and
the ‘deletes’ the traces from the original file.
Your preferred method can be specified by setting the LogBackupMethod=”Copy” or “Cut” in the
following configuration file:
Update Button
Saves any configuration changes.
Snapshot Button
Takes an instant 1 day snapshot of the current trace files, zips them into a compressed file and
stores them in a folder named “Backup Snapshot” located under the “Backup log path”
Marker
Marker Comment
Insert Button
Inserts the Marker Comment into the recorder trace file. This enables a support engineer to easily
identify the entries that were being written to the trace file when the user indicated that a problem
had been identified.
Note: After changing traces mode, user is automatically logged out from the web interface and
OmniPCX RECORD suite requires a restart.
9.1 Test ping to control the communication between OmniPCX Record and
OmniPCX Enterprise
9.1.1 Environment of the test
Ping 1
Ping from the OmniPCX Record server to the OmniPCX Enterprise
Ping 2
Ping from the OmniPCX Enterprise to the OmniPCX Record server
Ping 3
Ping from another PC (let's name it PC Test “1”) on the same LAN / Router / Switch /Hub
as the OmniPCX Record server to another PC (let's name it PC Test “2”) on the same LAN /
Router / Switch / Hub as the OmniPCX Enterprise.
Ping 4
Ping from PC Test “1” to PC Test “2”.
On the OmniPCX Record server, create a batch file named "pingOXRtoOXE.bat" that will contain:
Warning:
192.168.2.20 is the OXE IP address.
Launch the "pingOXRtoOXE.bat" file and do not close the console, otherwise it will stop the script.
On the OmniPCX Enterprise, create a batch file named "pingOXEtoOXR" that will contain:
while true
do
date >> LOGOXEtoOXR.TXT
ping 192.168.1.10 -c 1 >> LOGOXEtoOXR.TXT
echo >> LOGOXEtoOXR.TXT
echo >> LOGOXEtoOXR.TXT
sleep 1
done
Warning:
192.168.1.10 is the OXR IP address.
This batch will create the "LOGOXEtoOXR.TXT" file that will contain all pings (good and bad) since I
did not find a way to log only bad ones.
The size of this file will be roughly 1Mb per hour.
Launch it as follow:
Open a console and telnet the OXE, the enter: ./pingOXEtoOXR
Keep the console open otherwise the script will stop.
On PC Test “1”, create a batch file named "pingPC1toPC2.bat" that will contain:
Warning:
192.168.2.40 is the PC Test “2” IP address.
This batch will create the "Ping Errors PC1 to PC2.txt" file only if there are some ping errors. It will
contain the date and time.
Launch the "pingPC1toPC2.bat" file and do not close the console, otherwise it will stop the script.
Warning:
192.168.1.30 is the PC Test “1” IP address.
This batch will create the "Ping Errors PC2 to PC1.txt" file only if there are some ping errors. It will
contain the date and time.
Launch the "pingPC2toPC1.bat" file and do not close the console, otherwise it will stop the script.
=> If "Ping Errors OXR to OXE.txt" or "LOGOXEtoOXR.TXT" files contains loss of packets, then the
trouble is at OmniPCX Enterprise or OmniPCX Record server level.
=> Get the following files and open a ticket at ALE Technical Support:
- "Ping Errors OXR to OXE.txt" file
- "LOGOXEtoOXR.TXT" file
- "Ping Errors PC1 to PC2.txt" file
- "Ping Errors PC2 to PC1.txt" file
- The OmniPCX Enterprise infocollect.
- The OmniPCX Record Wireshark log.
- All OmniPCX Recordlog files
- The date time the trouble occurred.
Ping 1
Ping from the OmniPCX Record server to the Packetizer (BlueBox)
Ping 2
Ping from the OmniPCX Record server to the PC Test “2” on the same LAN / Router /
Switch /Hub as the Packetizer
Ping 3
Ping from the PC Test “2” on the same LAN / Router / Switch /Hub as the Packetizer to
OmniPCX Record server
On the OXR, create a batch file named "pingOXRtoPacketizer.bat" that will contain:
Warning:
192.168.2.50 is the Packetizer IP address.
This batch will create the "Ping Errors OXR to Packetizer.txt" file only if there are some ping errors.
It will contain the date and time.
Launch the "pingOXRtoPacketizer.bat" file and do not close the console, otherwise it will stop the
script.
On the OXR, create a batch file named "pingOXRtoPC2.bat" that will contain:
Warning:
192.168.2.40 is the PC Test “2” IP address.
This batch will create the "Ping Errors OXR to PC2.txt" file only if there are some ping errors. It will
contain the date and time.
Launch the "pingOXRtoPC2.bat" file and do not close the console, otherwise it will stop the script.
Warning:
192.168.1.10 is the OmniPCX Record IP address.
This batch will create the "Ping Errors PC2 to OXR.txt" file only if there are some ping errors. It will
contain the date and time.
Launch the "pingPC2toOXR.bat" file and do not close the console, otherwise it will stop the script.
=> If "Ping Errors OXR to Packetizer.txt" file contains loss of packets, then the trouble is at
Packetizer level.
=> Get the following files and open a ticket at ALE Technical Support:
- "Ping Errors OXR to Packetizer.txt" file
- "LOGOXEtoOXR.TXT" file
- "Ping Errors PC2 to OXR.txt" file
- "Ping Errors OXR to PC2.txt" file
- The OmniPCX Enterprise infocollect.
- The OmniPCX Record Wireshark log.
- All OmniPCX Recordlog files
- The date time the trouble occurred.
2- According to the recording mode, verify the OmniPCX Enterprise software locks with
spadmin option2
• Ensure lock 145 (CSTA Recording B channel) is set to the maximum available recording
channels (so maximum simultaneous recordings in the DR-Link node)
• Ensure lock 334 (Max. IP recording) is set to the maximum number of IP Extensions to be
simultaneously recorded via the IP-DR Link.
• Ensure lock 164 (CSTA Record networked) is set to the maximum available remote recording
channels (so maximum simultaneous recordings in the remote DR-Link node)
• Ensure lock 386 (UC as a service) is set to 0 to use the limit of the locks 145, 164 or 334.
If the lock 386 is set to 1 that means you are in “Cloud” configuration. The above locks (145,
164 or 334) will be not used and the limit must be managed from System \ Other System
Param. \ RTU Parameters:
CSTA recording B Channel => replaces the lock 145
Remote recording TS => replaces the lock 164
CSTA record B Channel Over IP => replaces the lock 334
Log on the PBX (using for example mtcl/mtcl) then execute telnet localhost 2555
Then enter character D (shift + d)
Within the telnet session, you can display the list of all connected CSTA clients, you have to see
which one is your Recording system (by using for example the IP address). Notice the related client
number.
dbg> ls
1 : [172.27.138.25] CSTA (CCATServer, Ecma II, TSERVERCCA, Null, SessionAssociated, Authenticate) - 3
monitoring(s)
client connection time : 15:48:52 - 15 Dec 2014 ( 1j 1h 45min 53sec )
2 : [xa000011] CSTA (AFE, Afe II, AFE, CSTA V2, SessionAssociated) - 21 monitoring(s)
client connection time : 14:46:51 - 10 Dec 2014 ( 6j 2h 47min 54sec )
The CSTA client corresponds to the OmniPCX Record which is typed DR-Link.
In the above example the OmniPCX Record at the IP address (172.27.138.30) is typed DR_LINK.
To see all users monitored with the OmniPCX Record, enter the command “log –m <client
number>”
In our instance :
dbg> log –m 4
dbg> ls -m 4
11015 :
(XrefId=184756993, client=4, filter=2)
11010 :
(XrefId=185010176, client=4, filter=2)
11006 :
(XrefId=185076224, client=4, filter=2)
11011 :
(XrefId=186861058, client=4, filter=2)
11008 :
(XrefId=190800384, client=4, filter=2)
The cstainfo is a realtime command very helpful to see the current used OmniPCX Enterprise
locks
In CSTA locks :
===============
=> For instance : Nice recording time slot = 3 <400 max >
It means that 3 PCM2 channels are currently used and that 400 is the number max of
simultaneous PCM2 channels used in DR-Link. Here, the lock 145 = 400.
Nice recording net time slot : corresponds to the current simultaneous recording PCM2
channels used in remote DR-Link
=> For instance : Nice recording net time slot = 24 <200 max >
It means that 24 PCM2 channels are currently used for the remote DR-Link and that 200 is the
number max of simultaneous PCM2 channels for the remote DR-Link. Here, the lock 164 =
200.
=> For instance : Nice recording time slot = 3 <400 max >
It means that 3 PCM2 channels are currently used and that 400 is the number max of
simultaneous PCM2 channels. Here, the lock 145 = 400.
Remark : the limits of the locks are in the OmniPCX Record Hardware-Software specifications
Remark : the limit of the PARAMAO 21 is equal to 1600 from OmniPCX Record.
7- Please check the incidents 4032 in the OXE using incvisu command
For instance :
000001M|---/--/-/---|=4:4032=CSTA : monitoring limit exceed type=DRLink maximun=1000
It means that the maximum of users monitoring for the OmniPCX Record is reached.
In order to increase this number to the maximum 1600, please use ACTIS.
1- Please verify that 30 users are created per each PCM2 board
2- Please check the Jumper settings on the PCM2 board when using Crystal Hardware. It should be
set as shown below to receive the connection of the OmniPCX Record packetizer.
3- Please verify that the PCM2 board is IN SERVICE with cplstat command of the OmniPCX
Enterprise
5- Please verify there is no dis-synchronization with the PCM2 board with incvisu
For Crystal and Common hardware, the loopback must be put on the packetizer as shown below:
If the lights in front of the paketizer are not has shown below, Please flash again the packetizer to
be sure you have loaded the correct firmware (for DR-Link recording mode).
This is detailed clearly in the Install Guide (chapter 10.1.2 Flashing the Packetizer).
The name of the firmware files are PK-AMIGO-PRI-TDM or PK-AMIGO-PRI-TDM-ULAW. According to our
configuration, one of this file must be selected when extensions are recorded in DR-Link mode.
PCM 2 Hardware Common : Use the NetW connector ( Front Face of the Female PCM Board
connector ) when using a direct cable
RJ45 pin 1 2 3 4 5 6 7 8
There is different category 5 cable type , please use the STP ( Shielded Twisted Pair ) to protect
against interference , and limit the length to 1,5 meter.
The Shield Twisted Pair cable contains a protection around the twisted pair , this cable is
surrounded by a shielding.
3BA28166AA
OmniPCX
Alcatel
Lan Ethernet cable 4400
C B A REMARKS
Cable : 3BA28166 AA : This cable allow the direct connection between PCM crystal
3BA28166AA RJ45E1NT 6 m system cable AA15
TY2 96PTSDIN ( 3BA 58010 ) Cable can be used to connect to Main frame distributor : different
length are available : form 10 m to 95 meter . To avoid synchronization issue , it is better to
use the direct cable 3BA28166AA.
Check the Led of the PCM board to detect synchronization issue and the incvisu maintenance
command to detect the LOS ( Lost of Synchronization ).
The LOS alarms can be some time very short and not permanent, so the Oxe record those alarm
in the incident list.
In Common Hardware architecture, DR-Link solution requires additional Conference resources that can
involve possible incident in the system.
Thus, in case of failure for recording resource reservation, the following incident message is
generated.
- 251 : missing resources for recording a simple conversation or a member of a three party
telephonic conference located in another crystal
- 252 : missing resources for recording a member of a three party telephonic conference in the
same crystal and in the same board (GA or GACONF)
- 253 : the telephonic conference resource has been reserved within a MEX or GD board and the
recording of a member in the same crystal P2 is impossible
As in chapter 3.3.1.2, please check the recording resources are well broadcasted.
b. In DR-link :
In OmniPCX Record Console / Manage / Nodes :
c. In Remote DR-link :
Check the remote OXE node is associated to the right centralized recorder
IMPORTANT: The Remote Node drop down list will NOT include Nodes that do not have a
Packetizer assigned to them.
4- Please verify if the extensions are correctly added in the OmniPCX RECORD and recording is
enabled on these extensions.
In OmniPCX Record Console / Manage / Extensions :
6- Please verify if any call recording & ROD filters rule is preventing the call from being recorded.
For more explanation, please see the Appendix A at the end of the document.
The rules of the recording and ROD filters are managed in recordings filters, agent and extension
tabs.
In OmniPCX Record Console / Manage / User rules => Edit Recording rule button : these are
the User rules
See below the diagrammatic illustration of how the recording filters are applied:
8- Please verify if there are any “Security Violation” errors in the recorder logs.
Eg :
In IP DR-Link :
a) OXE and/or Omni PCX Record Licenses not available
b) IP logger not managed in the OmniPCX Enterprise under mgr>Applications>IPLogger
c) Record authorization flag in the OXE.
d) The parameter “DR-Link on IP” not well managed under mgr>Applications>CSTA. Modify
it to YES and reboot the OXE
e) If occurs at the start-up phase, it can mean a DR-Link connection already exists. Check
the existing connection.
9- Please verify if there are any “Request Incompatible with objects” errors in the recorder logs.
If these errors are observed then please check the following:
In DR-Link :
a) The station is not monitored
b) The station is not supported by the CSTA
In IP DR-Link :
a) The station is not monitored
b) The station is not supported by the CSTA
c) The station is not an IP Phone
Verify if the extension type is supported in the used recording mode. The supported
extensions list is available in the OmniPCX RECORD Hardware and Software specification guide.
If the call is recorded but without any Audio then please verify the following:
1- Please verify that the codecs being used are supported. Please note that G723 is unsupported.
To check in real time the used codec for one user, use the OmniPCX Enterprise command :
cnx d <directory_number>
2- If there are firewall(s) involved in the network then they should be configured to work with
OmniPCXRecord
Before configuring the Firewall to enable the ports, Please make a call (to be recorded) and check from the
recorder logs which pair of ports are proposed by the OmnipCX Record in the StartIPRecording request:
4- In case of a TDM call, please verify that there are not exceptions related to BlueBox in the same
recorder logs.
Current
version Final version or Transit version
2.2.2.10 Same License 2.2.2.22
SQL Server :
-7- Configure the services and the IIS using the utility
CMAUtility
-8- Request of new license for 2.4.0.x is necessary
Note: OPCXR_Config is the newly created database and the OPCXR_Tenant_010001 is the one which was
upgraded.
-- upgrade to 2.2.3.0.25 --
>
Site administration
Connection to the OmniPCX Record via the web console:
=> the username admin exists, so the problem of log in is linked to a wrong password.
Password has to be changed.
To change the password of the admin username, we have to do it from the SQL Table dbo.Users.
=> note that the password is encrypted in the Table dbo.Users.
-1- Open the SQL Database Management Server and expand the OmniPCXRecord Database
-2- Expand Tables, right click on the dbo.Users and click on “Script Table as” \ UPDATE To \ New Query Editor
Window
=> delete the contain of the window => Ctrl A and then Suppr
USE [OmniPCXRecord]
GO
UPDATE [dbo].[Users]
SET
[Password] =
'F6niHkDzUw5GcjpnTNr4U6s0IdEmjaxEqC94SfE4GSzlPXgA1BhnSC0K4RQKbMmU/dYcCs3hhyUEvOZW2scWiXgW+
Wz3iRDPzZG7vPA5QiZfp7ennJrRNXcouFUoIQz7fjxQO4iRW+o52i58pQHU/g==', [IsOPRActive] = 'True'
WHERE username = 'admin'
GO
-5- close the OXR web page if opened and then open the OXR web page. Try the password Recorder1 for the
Username admin.
The password is encrypted. Please find below a password “Recorder1” which is encrypted:
F6niHkDzUw5GcjpnTNr4U6s0IdEmjaxEqC94SfE4GSzlPXgA1BhnSC0K4RQKbMmU/dYcCs3hhyUEvOZ
W2scWiXgW+Wz3iRDPzZG7vPA5QiZfp7ennJrRNXcouFUoIQz7fjxQO4iRW+o52i58pQHU/g==
-1- Open the SQL Database Management Server and expand the Database OPCXR_Tenant_010001
-2- Expand Tables, right click on the dbo.Users and click on “Script Table as” \ UPDATE To \ New Query Editor
Window
=> delete the contain of the window => Ctrl A and then Suppr
-3- Now, copy the following SQL script:
USE [OPCXR_Tenant_010001]
GO
UPDATE [dbo].[Users]
SET
[Password] =
'F6niHkDzUw5GcjpnTNr4U6s0IdEmjaxEqC94SfE4GSzlPXgA1BhnSC0K4RQKbMmU/dYcCs3hhyUEvOZW2scWiXgW+
Wz3iRDPzZG7vPA5QiZfp7ennJrRNXcouFUoIQz7fjxQO4iRW+o52i58pQHU/g==',
[IsOPRActive] = 'True'
WHERE Username = 'admin'
GO
-5- Close the OXR web page if opened and then open the OXR web page \ Site Administration. Try the password
Recorder1 for the Username admin.
Please note for the OmniPCXRecord 2.4.0.7 and onward, the user will land on change password page on web
interface.
Remark: You can't enter any of your previous 4 passwords.
-1- Open the SQL Database Management Server and expand the Database OPCXR_Config
-2- Expand Tables, right click on the dbo.Users and click on “Script Table as” \ UPDATE To \ New Query Editor
Window
=> delete the contain of the window => Ctrl A and then Suppr
-3- Now, copy the following SQL script:
USE [OPCXR_Config]
GO
UPDATE [dbo].[Users]
SET
[Password] =
'F6niHkDzUw5GcjpnTNr4U6s0IdEmjaxEqC94SfE4GSzlPXgA1BhnSC0K4RQKbMmU/dYcCs3hhyUEvOZW2scWiXgW+
Wz3iRDPzZG7vPA5QiZfp7ennJrRNXcouFUoIQz7fjxQO4iRW+o52i58pQHU/g==',[IsOPRActive] = 'True'
WHERE Username = 'admin'
GO
-5- Close the OXR web page if opened and then open the OXR web page \ Server Administration. Try the
password Recorder1 for the Username admin.
Please note for the OmniPCXRecord 2.4.0.7 and onward, the user will land on change password page on web
interface.
Remark: You can't enter any of your previous 4 passwords.
=>
Click “This account”, then enter the administrator account and password (the new password: 1903).
Click “Update”
Enter the administrator account and the password (the new password: Record1903)
Check if the application “OmniPCXRecordAppPool” is started, if not you have to start it:
The correct procedure after changing the windows password for the administrator user, is to apply the CMAUtility
tool before any resboot of the server machine.
We retrieve the licenses status also in the logs files in c:\Program Files(x86)\Alcatel-
Lucent\OmnipcxRecord Suite\OmniPCXConsole\Startup Logs\OMNI Operator Console Logs :
For instance :
2014-09-11 08:30:45,451 - [OnStartHandler] Server license is available. Now getting log details from
DB...
Eg :
<connectionStrings>
<add name="OmniPCXRECORDConnectionString" connectionString="workstation id=172.27.145.31;packet size=4096
;user id=sa;password=sa;data source=172.27.145.31;persist security info=false;initial catalog=OmniPCXRecord;" />
<add name="OmniPCXRECORDConnectionStringSecondary" connectionString="" />
</connectionStrings>
3- Please check the latest “Startup”,“Web” and “Recorder” logs. Now search for the word
“exception”. If found, consult with Technical Support.
The startup logs are under :
C:\Program Files (x86)\Alcatel-Lucent\OmniPCXRecord Suite\Server\Startup Logs
4- Please verify the Windows event viewer on recorder server machine and check if there are
any exception(s) for OmniPCXRecord service. If “fault bucket error” or “omnipcxrecord service
5- Search for keyword “error”, “memory”, “socket error”, “timeout”, “i/o race condition” in the
recorder logs. If found, consult with Technical Support.
16.1 In IP DR-Link
1- Download the issued record file from OmniPCX Record with its CDR.
As there are two streams in an IP call so please observe the number of packets for both streams.
2- Compare the above packet difference between few “Bad” and “normal” calls.
3- To verify packet loss, collect Wireshark traces from the IP Phone and from server machine and
compare the calls.
See below the procedure to take wireshark traces in front of the IP Phone :
---------
The IP@ of the IP phone is needed :
To know the IP address of the IP Phone 11010
> ippstat d 11010
4- Check compression type being used in OXE from the path System -> Descend Descend
hierarchy -> Other system param -> Descend hierarchy -> Compression Parameters -> Review
Modify -> Compression Type
OXERecordServer.exe.config is under :
C:\Program Files (x86)\Alcatel-Lucent\OmniPCXRecord Suite\Server
6- Please verify if VAD in OXE is disabled for every codec. To verify it, go to the path System -
> Descend hierarchy -> Other system param -> Descend hierarchy -> Compression Parameters -
> Review Modify -> Voice Activity Detection on G711.
7- Please verify if the “Recorder’s installed location” and “Audio file path location” are set to
different hard disks.
If yes then this might cause bad quality issues where the call load is very high. In such cases,
“Recorder’s installed location” and “Audio file path location” should be on the same hard disk.
They can be on different drives but the hard disk should be the same.
16.2 In DR-Link
1- In case of TDM calls, please verify if the correct firmware is installed on the packetizer.
2- Please verify the cable length between packetizer and OXE. It should not be more than 1.5
meters. The recommended cable has the reference 3BA28166AA.
1- Please verify if the machine has a sound card installed. Normally, server machine does not
have sound cards.
2- Please verify if the Windows Media player is installed on that machine.
3- Download the call from OmniPCX RECORD and play. If the call is playing fine then please verify
if the Windows Media Player plug-in is installed and enabled in the Internet Explorer browser.
6- If Screen Capture calls for more than 2 or 3 minutes are not being played, then please check
if the “ffmpeg” file is present at the location “…\OmniPCX RECORD Suite\Screen Capture” and
the parameter “mixing through ffmpeg” is enabled in OmniPCXScreenCapture config file.
When you try to “Search Calls” from the OmniPCX Record web console, no records are displayed:
When you check the web logs ( ) the following exception occurs:
Also, if the record files (for the same selected period of Search Calls) are stored correctly on the storage folder
(see the Storage Path Configuration on the OmniPCX Record web console => Storage Settings), the issue could
be related to the SQL collation.
If the SQL collation is not set to SQL_Latin1_General_CP1_CI_AS, find below the procedure to change the SQL
collation.
Note: Downtime is required to perform the following procedure. All the services of OmniPCX RECORD MUST
be stopped.
There 3 steps in the procedure to change the SQL Collation to “SQL_Latin1_General_CP1_CI_AS”:
1- Database backup
2- Changing the SQL collation for the appropriated SQL database
3- Create a user in SQL server
OmniPCX Record Release One SQL Database: More than one SQL Databases:
OmniPCXRecord OPCXR_Config
OPCXR_Tenant_010001
OPCXR_Tenant_01000x
5. From the left panel select Options: following screen will appear
7. The Default backup path is already set but if you want to change the path then please press Add.
8. The following screen will appear, add the destination path or backup device and click OK, as shown
below.
For an OmniPCX Record Release equal to 2.3.0.19 or higher, the database backup concerns:
- If one site, the SQL database OPCXR_Config and OPCXR_Tenant_010001
Follow this chapter 14.1 but at the point 3., you have to right click on OPCXR_Config database, select Tasks
then click Backup. Then continue to the points 10.
Do the same steps for the second SQL database OPCXR_Tenant_010001.
If you have more than one site configured, do also the same for also the OPCXR_Tenant database.
4. In the new query window, copy and paste the following query1 for OmniPCXRecord:
USE [OmniPCXRecord]
GO
/****** Object: UserDefinedFunction [dbo].[SplitString] Script Date: 02/23/2018 20:36:19 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SplitString]') AND type in (N'FN',
N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[SplitString]
GO
USE [master];
GO
ALTER DATABASE OmniPCXRecord SET Single_USER WITH ROLLBACK IMMEDIATE;
GO
USE [master]
GO
ALTER DATABASE omnipcxrecord
COLLATE SQL_Latin1_General_CP1_CI_AS ;
GO
USE [OmniPCXRecord]
/****** Object: UserDefinedFunction [dbo].[SplitString] Script Date: 02/23/2018 20:36:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SplitString]') AND type in (N'FN',
N'IF', N'TF', N'FS', N'FT'))
BEGIN
execute dbo.sp_executesql @statement = N'
CREATE FUNCTION [dbo].[SplitString]
(
@SplitStr nvarchar(max),
@SplitChar nvarchar(5)
)
RETURNS @RtnValue table
(
Data nvarchar(50)
)
AS
BEGIN
Declare @Count int
Set @Count = 1
While (Charindex(@SplitChar,@SplitStr)>0)
Begin
Insert Into @RtnValue (Data)
Select
Data = ltrim(rtrim(Substring(@SplitStr,1,Charindex(@SplitChar,@SplitStr)-1)))
Return
END
'
END
GO
7. Now, again right click on OmniPCXRecord database and select New Query.
/*******************************************************************************
*
*
*
* This script will check individual columns collations and check it against the
* database default collation, where they are different it will create the scripts
* required to drop all the objects dependant on the column, change the collation
* to the database default and then recreate the dependant objects.
* Some of the code has been reused from stuff found online the majority from
* created scripts to drop and recreate constraints
*
*********************************************************************************/
/*****************************************************************************************************************
*******************
* Generates a list of all the columns where their collation doesn't match the database default and
the depenmdancies they have. *
******************************************************************************************************************
******************/
DECLARE collationfix CURSOR FOR
SELECT t.object_id, c.column_id, COUNT(kc.object_id) AS [has_key_constraint], COUNT(ic.index_id) AS
[has_index], COUNT(fk.constraint_object_id) AS [has_foreign_key], COUNT(st.stats_id) AS [has_stats],
COUNT(uq.object_id) AS [has_unique_constraint]
FROM sys.columns c
INNER JOIN sys.tables t ON c.object_id=t.object_id
INNER JOIN sys.types ty ON c.system_type_id=ty.system_type_id
LEFT JOIN sys.index_columns ic ON ic.object_id=c.object_id AND ic.column_id=c.column_id
LEFT JOIN sys.key_constraints kc ON kc.parent_object_id=c.object_id AND
kc.unique_index_id=ic.index_id AND kc.type='PK'
LEFT JOIN sys.key_constraints uq ON uq.parent_object_id=c.object_id AND
uq.unique_index_id=ic.index_id AND uq.type='UQ'
/*****************************************************************************************************************
*******************
* Generates the code to update the columns colation
*
******************************************************************************************************************
******************/
INSERT INTO #tempscriptstore(ScriptType, script)
SELECT DISTINCT 'AlterCollation', 'ALTER TABLE '+QUOTENAME(t.name)+' ALTER COLUMN
'+QUOTENAME(c.name)+' '+CASE WHEN (ty.name='ntext'OR ty.name='text') THEN ty.name+' COLLATE '+@DatabaseCollation+'
' ELSE ty.name+'('+CASE WHEN c.max_length=-1 THEN 'MAX' ELSE CASE WHEN ty.name='nvarchar' THEN CAST(c.max_length /
2 AS VARCHAR(20))ELSE CAST(c.max_length AS VARCHAR(20))END END+') COLLATE '+@DatabaseCollation+' ' END+CASE WHEN
c.is_nullable=1 THEN 'NULL;' ELSE 'NOT NULL;' END
FROM sys.columns c
INNER JOIN sys.tables t ON c.object_id=t.object_id
INNER JOIN sys.types ty ON c.system_type_id=ty.system_type_id
LEFT JOIN sys.index_columns ic ON ic.object_id=c.object_id AND ic.column_id=c.column_id
WHERE t.is_ms_shipped=0 AND c.collation_name<>@DatabaseCollation AND ty.name !='sysname' AND
c.column_id=@Collation_columnid AND t.object_id=@Collation_objectid;
/*****************************************************************************************************************
*******************
* If the column is in an index this creates the drop and recreate index script
*
******************************************************************************************************************
******************/
IF @Collation_index>0 BEGIN
DECLARE CursorIndex CURSOR FOR
SELECT DISTINCT SCHEMA_NAME(t.schema_id) [schema_name], t.name, ix.name, CASE WHEN
ix.is_unique=1 THEN 'UNIQUE ' ELSE '' END, ix.type_desc, CASE WHEN ix.is_padded=1 THEN 'PAD_INDEX = ON, ' ELSE
'PAD_INDEX = OFF, ' END+CASE WHEN ix.allow_page_locks=1 THEN 'ALLOW_PAGE_LOCKS = ON, ' ELSE 'ALLOW_PAGE_LOCKS =
OFF, ' END+CASE WHEN ix.allow_row_locks=1 THEN 'ALLOW_ROW_LOCKS = ON, ' ELSE 'ALLOW_ROW_LOCKS = OFF, ' END+CASE
WHEN INDEXPROPERTY(t.object_id, ix.name, 'IsStatistics')=1 THEN 'STATISTICS_NORECOMPUTE = ON, ' ELSE
'STATISTICS_NORECOMPUTE = OFF, ' END+CASE WHEN ix.ignore_dup_key=1 THEN 'IGNORE_DUP_KEY = ON, ' ELSE
'IGNORE_DUP_KEY = OFF, ' END+'SORT_IN_TEMPDB = OFF, FILLFACTOR ='+CASE WHEN ix.fill_factor=0 THEN CAST(100 AS
VARCHAR(3))ELSE CAST(ix.fill_factor AS VARCHAR(3))END AS IndexOptions, ix.is_disabled,
FILEGROUP_NAME(ix.data_space_id) FileGroupName
FROM sys.tables t
JOIN sys.indexes ix ON t.object_id=ix.object_id
JOIN sys.columns c ON c.object_id=t.object_id
JOIN sys.index_columns ic ON ic.index_id=ix.index_id AND ic.column_id=c.column_id AND
ic.object_id=t.object_id
WHERE ix.type>0 AND ix.is_primary_key=0 AND ix.is_unique_constraint=0
--AND schema_name(tb.schema_id)= @SchemaName
--AND tb.name=@TableName
AND t.is_ms_shipped=0 AND t.name<>'sysdiagrams' AND c.column_id=@Collation_columnid AND
t.object_id=@Collation_objectid AND ic.column_id=@Collation_columnid
ORDER BY SCHEMA_NAME(t.schema_id), t.name, ix.name;
OPEN CursorIndex;
FETCH NEXT FROM CursorIndex
/*****************************************************************************************************************
*******************
* If the column has a primary key constraint this creates the drop and recreate constraint script
*
* *
******************************************************************************************************************
******************/
IF @Collation_constraint>0 BEGIN
---------------------------------------------------
--ALTER TABLE CREATE PRIMARY KEY CONSTRAINT Queries
---------------------------------------------------
SELECT
QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id))+'.'+QUOTENAME(OBJECT_NAME(parent_object_id)) AS pk_table, --PK
table name
skc.object_id AS constid, QUOTENAME(skc.name) AS constraint_name, --PK name
QUOTENAME(iskcu.COLUMN_NAME)+CASE WHEN sic.is_descending_key=1 THEN ' DESC' ELSE ' ASC'
END AS pk_col, iskcu.ORDINAL_POSITION, CASE WHEN unique_index_id=1 THEN 'UNIQUE' ELSE '' END AS index_unique_type,
si.name AS index_name, si.type_desc AS index_type, QUOTENAME(fg.name) AS filegroup_name, 'WITH('+' PAD_INDEX =
'+CASE WHEN si.is_padded=0 THEN 'OFF' ELSE 'ON' END+','+' IGNORE_DUP_KEY = '+CASE WHEN si.ignore_dup_key=0 THEN
'OFF' ELSE 'ON' END+','+' ALLOW_ROW_LOCKS = '+CASE WHEN si.allow_row_locks=0 THEN 'OFF' ELSE 'ON' END+','+'
ALLOW_PAGE_LOCKS = '+CASE WHEN si.allow_page_locks=0 THEN 'OFF' ELSE 'ON' END+')' AS index_property
--,*
INTO #temp_pk
FROM sys.key_constraints skc
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE iskcu ON skc.name=iskcu.CONSTRAINT_NAME
INNER JOIN sys.indexes si ON si.object_id=skc.parent_object_id AND si.is_primary_key=1
INNER JOIN sys.index_columns sic ON si.object_id=sic.object_id AND
si.index_id=sic.index_id
INNER JOIN sys.columns c ON sic.object_id=c.object_id AND sic.column_id=c.column_id
INNER JOIN sys.filegroups fg ON si.data_space_id=fg.data_space_id
WHERE skc.type='PK' AND iskcu.COLUMN_NAME=c.name AND skc.parent_object_id=@Collation_objectid
ORDER BY skc.parent_object_id, skc.name, ORDINAL_POSITION;
WITH cte AS (SELECT pk_table, constraint_name, index_type, SUBSTRING((SELECT ','+pk_col FROM
#temp_pk WHERE constid=t.constid FOR XML PATH('')), 2, 99999) AS pk_col_list, index_unique_type, filegroup_name,
index_property
FROM #temp_pk t)
--forming the ADD CONSTRAINT query
INSERT INTO #tempscriptstore(ScriptType, script)
SELECT DISTINCT 'AddPrimaryKey', 'ALTER TABLE '+pk_table+' ADD CONSTRAINT '+constraint_name+'
PRIMARY KEY '+CAST(index_type COLLATE DATABASE_DEFAULT AS VARCHAR(100))+' ('+pk_col_list+')'+index_property+' ON
'+filegroup_name+''
FROM cte;
/*****************************************************************************************************************
*******************
* If the column has a foreign key constraint this creates the drop and recreate constraint script
*
* *
******************************************************************************************************************
******************/
IF @Collation_foreign>0 BEGIN
DECLARE foreignkeycursor CURSOR FOR
SELECT constraint_object_id
FROM sys.foreign_key_columns
WHERE referenced_object_id=@Collation_objectid AND referenced_column_id=@Collation_columnid;
OPEN foreignkeycursor;
FETCH NEXT FROM foreignkeycursor
INTO @Collation_fkid;
---------------------------------------------
--ALTER TABLE DROP FOREIGN CONSTRAINT Queries
---------------------------------------------
INSERT INTO #tempscriptstore(ScriptType, script)
SELECT DISTINCT 'DropForeignKey', 'ALTER TABLE
'+QUOTENAME(OBJECT_SCHEMA_NAME(fkeyid))+'.'+QUOTENAME(OBJECT_NAME(fkeyid))+' DROP CONSTRAINT
'+QUOTENAME(OBJECT_NAME(constid))
FROM sys.sysforeignkeys sfk
WHERE sfk.constid=@Collation_fkid;
------------------------------------------------
--ALTER TABLE CREATE FOREIGN CONSTRAINT Queries
------------------------------------------------
/*****************************************************************************************************************
*******************
* If the column has statistics that aren't part of an index this creates the drop and recreate
scripts *
******************************************************************************************************************
******************/
IF @Collation_stats>0 AND @Collation_index=0 BEGIN
/*****************************************************************************************************************
*******************
* If the column has a unique constraint this creates the drop and recreate scripts
*
******************************************************************************************************************
******************/
IF @Collation_unique>0 BEGIN
-------------------------------------------------
--ALTER TABLE DROP UNIQUE CONSTRAINT Queries
-------------------------------------------------
INSERT INTO #tempscriptstore(ScriptType, script)
SELECT DISTINCT 'DropUniqueKey', 'ALTER TABLE
'+QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id))+'.'+QUOTENAME(OBJECT_NAME(parent_object_id))+' DROP CONSTRAINT
'+QUOTENAME(name)
FROM sys.key_constraints skc
---------------------------------------------------
--ALTER TABLE CREATE UNIQUE CONSTRAINT Queries
---------------------------------------------------
SELECT
QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id))+'.'+QUOTENAME(OBJECT_NAME(parent_object_id)) AS uq_table, --PK
table name
skc.object_id AS constid, QUOTENAME(skc.name) AS constraint_name, --PK name
QUOTENAME(iskcu.COLUMN_NAME)+CASE WHEN sic.is_descending_key=1 THEN ' DESC' ELSE ' ASC'
END AS uq_col, iskcu.ORDINAL_POSITION, CASE WHEN unique_index_id=1 THEN 'UNIQUE' ELSE '' END AS index_unique_type,
si.name AS index_name, si.type_desc AS index_type, QUOTENAME(fg.name) AS filegroup_name, 'WITH('+' PAD_INDEX =
'+CASE WHEN si.is_padded=0 THEN 'OFF' ELSE 'ON' END+','+' IGNORE_DUP_KEY = '+CASE WHEN si.ignore_dup_key=0 THEN
'OFF' ELSE 'ON' END+','+' ALLOW_ROW_LOCKS = '+CASE WHEN si.allow_row_locks=0 THEN 'OFF' ELSE 'ON' END+','+'
ALLOW_PAGE_LOCKS = '+CASE WHEN si.allow_page_locks=0 THEN 'OFF' ELSE 'ON' END+')' AS index_property
--,*
INTO #temp_uq
FROM sys.key_constraints skc
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE iskcu ON skc.name=iskcu.CONSTRAINT_NAME
INNER JOIN sys.indexes si ON si.object_id=skc.parent_object_id AND si.is_unique=1
INNER JOIN sys.index_columns sic ON si.object_id=sic.object_id AND
si.index_id=sic.index_id
INNER JOIN sys.columns c ON sic.object_id=c.object_id AND sic.column_id=c.column_id
INNER JOIN sys.filegroups fg ON si.data_space_id=fg.data_space_id
WHERE skc.type='UQ' AND iskcu.COLUMN_NAME=c.name AND skc.parent_object_id=@Collation_objectid
AND c.column_id=@Collation_columnid
ORDER BY skc.parent_object_id, skc.name, ORDINAL_POSITION;
WITH cte AS (SELECT uq_table, constraint_name, index_type, SUBSTRING((SELECT ','+uq_col FROM
#temp_uq WHERE constid=t.constid FOR XML PATH('')), 2, 99999) AS uq_col_list, index_unique_type, filegroup_name,
index_property
FROM #temp_uq t)
--forming the ADD CONSTRAINT query
INSERT INTO #tempscriptstore(ScriptType, script)
SELECT DISTINCT 'AddUniqueKey', 'ALTER TABLE '+uq_table+' ADD CONSTRAINT '+constraint_name+'
UNIQUE '+CAST(index_type COLLATE DATABASE_DEFAULT AS VARCHAR(100))+' ('+uq_col_list+')'+index_property+' ON
'+filegroup_name+''
FROM cte;
/*****************************************************************************************************************
*******************
* Returns all the created scripts in the correct order for running
*
******************************************************************************************************************
******************/
SELECT DISTINCT script, CASE WHEN ScriptType='DropForeignKey' THEN 1
WHEN ScriptType='DropPrimaryKey' THEN 2
WHEN ScriptType='DropUniqueKey' THEN 3
WHEN ScriptType='DropIndex' THEN 4
WHEN ScriptType='DropStatistics' THEN 5
WHEN ScriptType='AlterCollation' THEN 6
WHEN ScriptType='CreateIndex' THEN 7
WHEN ScriptType='DisableIndex' THEN 8
Procedure of changing the database collation has been completed for OmniPCX Record release 2.3.0.18 or lower.
Please find below the query1 and the query2 for the SQL Database OPCXR_Config:
4. In the new query window, copy and paste the following query1 for OPCXR_Config:
USE [OPCXR_Config]
GO
/****** Object: UserDefinedFunction [dbo].[SplitString] Script Date: 02/23/2018 20:36:19 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SplitString]') AND type in (N'FN',
N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[SplitString]
GO
USE [master];
GO
ALTER DATABASE OPCXR_Config SET Single_USER WITH ROLLBACK IMMEDIATE;
GO
USE [master];
GO
ALTER DATABASE OPCXR_Config SET Multi_USER WITH ROLLBACK IMMEDIATE;
GO
USE [OPCXR_Config]
/****** Object: UserDefinedFunction [dbo].[SplitString] Script Date: 02/23/2018 20:36:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SplitString]') AND type in (N'FN',
N'IF', N'TF', N'FS', N'FT'))
BEGIN
execute dbo.sp_executesql @statement = N'
CREATE FUNCTION [dbo].[SplitString]
(
@SplitStr nvarchar(max),
@SplitChar nvarchar(5)
)
RETURNS @RtnValue table
(
Data nvarchar(50)
)
AS
BEGIN
Declare @Count int
Set @Count = 1
While (Charindex(@SplitChar,@SplitStr)>0)
Begin
Insert Into @RtnValue (Data)
Select
Data = ltrim(rtrim(Substring(@SplitStr,1,Charindex(@SplitChar,@SplitStr)-1)))
Return
END
'
END
GO
6. Click Execute button until getting “Commands completed successfully” at the bottom for the query
execution.
7. Now, again right click on OPCXR_Config database and select New Query.
/*************************************************************************************************************
**********************
* Generates a list of all the columns where their collation doesn't match the database
* default and the depenmdancies they have.
**************************************************************************************************************
**********************/
DECLARE collationfix CURSOR FOR
SELECT t.object_id, c.column_id, COUNT(kc.object_id) AS [has_key_constraint],
COUNT(ic.index_id) AS [has_index], COUNT(fk.constraint_object_id) AS [has_foreign_key],
COUNT(st.stats_id) AS [has_stats], COUNT(uq.object_id) AS [has_unique_constraint]
FROM sys.columns c
INNER JOIN sys.tables t ON c.object_id=t.object_id
INNER JOIN sys.types ty ON c.system_type_id=ty.system_type_id
LEFT JOIN sys.index_columns ic ON ic.object_id=c.object_id AND ic.column_id=c.column_id
LEFT JOIN sys.key_constraints kc ON kc.parent_object_id=c.object_id AND
kc.unique_index_id=ic.index_id AND kc.type='PK'
LEFT JOIN sys.key_constraints uq ON uq.parent_object_id=c.object_id AND
uq.unique_index_id=ic.index_id AND uq.type='UQ'
LEFT JOIN sys.foreign_key_columns fk ON fk.referenced_object_id=c.object_id AND
fk.constraint_column_id=c.column_id
/*************************************************************************************************************
**********************
* Generates the code to update the columns colation
**************************************************************************************************************
**********************/
INSERT INTO #tempscriptstore(ScriptType, script)
SELECT DISTINCT 'AlterCollation', 'ALTER TABLE '+QUOTENAME(t.name)+' ALTER COLUMN
'+QUOTENAME(c.name)+' '+CASE WHEN (ty.name='ntext'OR ty.name='text') THEN ty.name+' COLLATE
'+@DatabaseCollation+' ' ELSE ty.name+'('+CASE WHEN c.max_length=-1 THEN 'MAX' ELSE CASE
WHEN ty.name='nvarchar' THEN CAST(c.max_length / 2 AS VARCHAR(20))ELSE CAST(c.max_length AS
VARCHAR(20))END END+') COLLATE '+@DatabaseCollation+' ' END+CASE WHEN c.is_nullable=1 THEN
'NULL;' ELSE 'NOT NULL;' END
FROM sys.columns c
INNER JOIN sys.tables t ON c.object_id=t.object_id
INNER JOIN sys.types ty ON c.system_type_id=ty.system_type_id
LEFT JOIN sys.index_columns ic ON ic.object_id=c.object_id AND
ic.column_id=c.column_id
WHERE t.is_ms_shipped=0 AND c.collation_name<>@DatabaseCollation AND ty.name !='sysname'
AND c.column_id=@Collation_columnid AND t.object_id=@Collation_objectid;
/*************************************************************************************************************
***********************
* If the column is in an index this creates the drop and recreate index script
*
**************************************************************************************************************
**********************/
IF @Collation_index>0 BEGIN
DECLARE CursorIndex CURSOR FOR
SELECT DISTINCT SCHEMA_NAME(t.schema_id) [schema_name], t.name, ix.name, CASE WHEN
ix.is_unique=1 THEN 'UNIQUE ' ELSE '' END, ix.type_desc, CASE WHEN ix.is_padded=1
THEN 'PAD_INDEX = ON, ' ELSE 'PAD_INDEX = OFF, ' END+CASE WHEN ix.allow_page_locks=1
THEN 'ALLOW_PAGE_LOCKS = ON, ' ELSE 'ALLOW_PAGE_LOCKS = OFF, ' END+CASE WHEN
ix.allow_row_locks=1 THEN 'ALLOW_ROW_LOCKS = ON, ' ELSE 'ALLOW_ROW_LOCKS = OFF, '
END+CASE WHEN INDEXPROPERTY(t.object_id, ix.name, 'IsStatistics')=1 THEN
'STATISTICS_NORECOMPUTE = ON, ' ELSE 'STATISTICS_NORECOMPUTE = OFF, ' END+CASE WHEN
ix.ignore_dup_key=1 THEN 'IGNORE_DUP_KEY = ON, ' ELSE 'IGNORE_DUP_KEY = OFF, '
END+'SORT_IN_TEMPDB = OFF, FILLFACTOR ='+CASE WHEN ix.fill_factor=0 THEN CAST(100 AS
VARCHAR(3))ELSE CAST(ix.fill_factor AS VARCHAR(3))END AS IndexOptions,
ix.is_disabled, FILEGROUP_NAME(ix.data_space_id) FileGroupName
FROM sys.tables t
JOIN sys.indexes ix ON t.object_id=ix.object_id
JOIN sys.columns c ON c.object_id=t.object_id
JOIN sys.index_columns ic ON ic.index_id=ix.index_id AND
ic.column_id=c.column_id AND ic.object_id=t.object_id
WHERE ix.type>0 AND ix.is_primary_key=0 AND ix.is_unique_constraint=0
--AND schema_name(tb.schema_id)= @SchemaName
--AND tb.name=@TableName
AND t.is_ms_shipped=0 AND t.name<>'sysdiagrams' AND
c.column_id=@Collation_columnid AND t.object_id=@Collation_objectid AND
ic.column_id=@Collation_columnid
ORDER BY SCHEMA_NAME(t.schema_id), t.name, ix.name;
OPEN CursorIndex;
FETCH NEXT FROM CursorIndex
INTO @SchemaName, @TableName, @IndexName, @is_unique, @IndexTypeDesc, @IndexOptions,
@is_disabled, @FileGroupName;
WHILE(@@fetch_status=0)BEGIN
/*************************************************************************************************************
***********************
* If the column has a primary key constraint this creates the drop and recreate
constraint script *
*
**************************************************************************************************************
**********************/
IF @Collation_constraint>0 BEGIN
-------------------------------------------------
--ALTER TABLE DROP PRIMARY KEY CONSTRAINT Queries
-------------------------------------------------
INSERT INTO #tempscriptstore(ScriptType, script)
---------------------------------------------------
--ALTER TABLE CREATE PRIMARY KEY CONSTRAINT Queries
---------------------------------------------------
SELECT
QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id))+'.'+QUOTENAME(OBJECT_NAME(parent_obje
ct_id)) AS pk_table, --PK table name
skc.object_id AS constid, QUOTENAME(skc.name) AS constraint_name, --PK name
QUOTENAME(iskcu.COLUMN_NAME)+CASE WHEN sic.is_descending_key=1 THEN ' DESC' ELSE '
ASC' END AS pk_col, iskcu.ORDINAL_POSITION, CASE WHEN unique_index_id=1 THEN 'UNIQUE'
ELSE '' END AS index_unique_type, si.name AS index_name, si.type_desc AS index_type,
QUOTENAME(fg.name) AS filegroup_name, 'WITH('+' PAD_INDEX = '+CASE WHEN
si.is_padded=0 THEN 'OFF' ELSE 'ON' END+','+' IGNORE_DUP_KEY = '+CASE WHEN
si.ignore_dup_key=0 THEN 'OFF' ELSE 'ON' END+','+' ALLOW_ROW_LOCKS = '+CASE WHEN
si.allow_row_locks=0 THEN 'OFF' ELSE 'ON' END+','+' ALLOW_PAGE_LOCKS = '+CASE WHEN
si.allow_page_locks=0 THEN 'OFF' ELSE 'ON' END+')' AS index_property
--,*
INTO #temp_pk
FROM sys.key_constraints skc
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE iskcu ON
skc.name=iskcu.CONSTRAINT_NAME
INNER JOIN sys.indexes si ON si.object_id=skc.parent_object_id AND
si.is_primary_key=1
INNER JOIN sys.index_columns sic ON si.object_id=sic.object_id AND
si.index_id=sic.index_id
INNER JOIN sys.columns c ON sic.object_id=c.object_id AND
sic.column_id=c.column_id
INNER JOIN sys.filegroups fg ON si.data_space_id=fg.data_space_id
WHERE skc.type='PK' AND iskcu.COLUMN_NAME=c.name AND
skc.parent_object_id=@Collation_objectid
ORDER BY skc.parent_object_id, skc.name, ORDINAL_POSITION;
WITH cte AS (SELECT pk_table, constraint_name, index_type, SUBSTRING((SELECT
','+pk_col FROM #temp_pk WHERE constid=t.constid FOR XML PATH('')), 2, 99999) AS
pk_col_list, index_unique_type, filegroup_name, index_property
FROM #temp_pk t)
--forming the ADD CONSTRAINT query
INSERT INTO #tempscriptstore(ScriptType, script)
SELECT DISTINCT 'AddPrimaryKey', 'ALTER TABLE '+pk_table+' ADD CONSTRAINT
'+constraint_name+' PRIMARY KEY '+CAST(index_type COLLATE DATABASE_DEFAULT AS
VARCHAR(100))+' ('+pk_col_list+')'+index_property+' ON '+filegroup_name+''
FROM cte;
/*************************************************************************************************************
***********************
* If the column has a foreign key constraint this creates the drop and recreate
constraint script *
*
**************************************************************************************************************
**********************/
IF @Collation_foreign>0 BEGIN
DECLARE foreignkeycursor CURSOR FOR
SELECT constraint_object_id
FROM sys.foreign_key_columns
WHERE referenced_object_id=@Collation_objectid AND
referenced_column_id=@Collation_columnid;
OPEN foreignkeycursor;
FETCH NEXT FROM foreignkeycursor
---------------------------------------------
--ALTER TABLE DROP FOREIGN CONSTRAINT Queries
---------------------------------------------
INSERT INTO #tempscriptstore(ScriptType, script)
SELECT DISTINCT 'DropForeignKey', 'ALTER TABLE
'+QUOTENAME(OBJECT_SCHEMA_NAME(fkeyid))+'.'+QUOTENAME(OBJECT_NAME(fkeyid))+' DROP
CONSTRAINT '+QUOTENAME(OBJECT_NAME(constid))
FROM sys.sysforeignkeys sfk
WHERE sfk.constid=@Collation_fkid;
------------------------------------------------
--ALTER TABLE CREATE FOREIGN CONSTRAINT Queries
------------------------------------------------
/*************************************************************************************************************
***********************
* If the column has a unique constraint this creates the drop and recreate scripts
*
**************************************************************************************************************
**********************/
IF @Collation_unique>0 BEGIN
-------------------------------------------------
---------------------------------------------------
--ALTER TABLE CREATE UNIQUE CONSTRAINT Queries
---------------------------------------------------
SELECT
QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id))+'.'+QUOTENAME(OBJECT_NAME(parent_obje
ct_id)) AS uq_table, --PK table name
skc.object_id AS constid, QUOTENAME(skc.name) AS constraint_name, --PK name
QUOTENAME(iskcu.COLUMN_NAME)+CASE WHEN sic.is_descending_key=1 THEN ' DESC' ELSE '
ASC' END AS uq_col, iskcu.ORDINAL_POSITION, CASE WHEN unique_index_id=1 THEN 'UNIQUE'
ELSE '' END AS index_unique_type, si.name AS index_name, si.type_desc AS index_type,
QUOTENAME(fg.name) AS filegroup_name, 'WITH('+' PAD_INDEX = '+CASE WHEN
si.is_padded=0 THEN 'OFF' ELSE 'ON' END+','+' IGNORE_DUP_KEY = '+CASE WHEN
si.ignore_dup_key=0 THEN 'OFF' ELSE 'ON' END+','+' ALLOW_ROW_LOCKS = '+CASE WHEN
si.allow_row_locks=0 THEN 'OFF' ELSE 'ON' END+','+' ALLOW_PAGE_LOCKS = '+CASE WHEN
si.allow_page_locks=0 THEN 'OFF' ELSE 'ON' END+')' AS index_property
--,*
INTO #temp_uq
FROM sys.key_constraints skc
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE iskcu ON
skc.name=iskcu.CONSTRAINT_NAME
INNER JOIN sys.indexes si ON si.object_id=skc.parent_object_id AND
si.is_unique=1
INNER JOIN sys.index_columns sic ON si.object_id=sic.object_id AND
si.index_id=sic.index_id
INNER JOIN sys.columns c ON sic.object_id=c.object_id AND
sic.column_id=c.column_id
INNER JOIN sys.filegroups fg ON si.data_space_id=fg.data_space_id
WHERE skc.type='UQ' AND iskcu.COLUMN_NAME=c.name AND
skc.parent_object_id=@Collation_objectid AND c.column_id=@Collation_columnid
ORDER BY skc.parent_object_id, skc.name, ORDINAL_POSITION;
WITH cte AS (SELECT uq_table, constraint_name, index_type, SUBSTRING((SELECT
','+uq_col FROM #temp_uq WHERE constid=t.constid FOR XML PATH('')), 2, 99999) AS
uq_col_list, index_unique_type, filegroup_name, index_property
FROM #temp_uq t)
--forming the ADD CONSTRAINT query
INSERT INTO #tempscriptstore(ScriptType, script)
SELECT DISTINCT 'AddUniqueKey', 'ALTER TABLE '+uq_table+' ADD CONSTRAINT
'+constraint_name+' UNIQUE '+CAST(index_type COLLATE DATABASE_DEFAULT AS
VARCHAR(100))+' ('+uq_col_list+')'+index_property+' ON '+filegroup_name+''
FROM cte;
/*************************************************************************************************************
***********************
11. In the result window, left click on Script column header then right click and select Copy as shown below:
Procedure of changing the database collation has been completed for OPCXR_Config database.
Please find now the query1 and the query2 for the SQL Database OPCXR_Tenant_0100X.
Let’s take an example below using the Tenant 010001.
Note: for another Tenant or another site, use the same query but change the number of the Tenant or site to be
compliant to the name of the SQL database.
USE [master];
GO
ALTER DATABASE OPCXR_Tenant_010001 SET Single_USER WITH ROLLBACK IMMEDIATE;
GO
USE [master]
GO
ALTER DATABASE OPCXR_Tenant_010001
COLLATE SQL_Latin1_General_CP1_CI_AS ;
GO
USE [master];
GO
ALTER DATABASE OPCXR_Tenant_010001 SET Multi_USER WITH ROLLBACK IMMEDIATE;
GO
USE [OPCXR_Tenant_010001]
While (Charindex(@SplitChar,@SplitStr)>0)
Begin
Insert Into @RtnValue (Data)
Select
Data = ltrim(rtrim(Substring(@SplitStr,1,Charindex(@SplitChar,@SplitStr)-1)))
Return
END
'
6. Click Execute button until getting “Commands completed successfully” at the bottom for the query
execution.
7. Now, again right click on OPCXR_Tenant_010001 database and select New Query.
/*****************************************************************************************************************
*******************
* Generates a list of all the columns where their collation doesn't match the database default
* and the depenmdancies they have.
*********************************************************************************************************
***************************/
DECLARE collationfix CURSOR FOR
SELECT t.object_id, c.column_id, COUNT(kc.object_id) AS [has_key_constraint], COUNT(ic.index_id) AS
[has_index], COUNT(fk.constraint_object_id) AS [has_foreign_key], COUNT(st.stats_id) AS [has_stats],
COUNT(uq.object_id) AS [has_unique_constraint]
FROM sys.columns c
INNER JOIN sys.tables t ON c.object_id=t.object_id
INNER JOIN sys.types ty ON c.system_type_id=ty.system_type_id
LEFT JOIN sys.index_columns ic ON ic.object_id=c.object_id AND ic.column_id=c.column_id
LEFT JOIN sys.key_constraints kc ON kc.parent_object_id=c.object_id AND
kc.unique_index_id=ic.index_id AND kc.type='PK'
LEFT JOIN sys.key_constraints uq ON uq.parent_object_id=c.object_id AND
uq.unique_index_id=ic.index_id AND uq.type='UQ'
/*****************************************************************************************************************
*******************
* Generates the code to update the columns colation *
******************************************************************************************************************
******************/
INSERT INTO #tempscriptstore(ScriptType, script)
SELECT DISTINCT 'AlterCollation', 'ALTER TABLE '+QUOTENAME(t.name)+' ALTER COLUMN
'+QUOTENAME(c.name)+' '+CASE WHEN (ty.name='ntext'OR ty.name='text') THEN ty.name+' COLLATE '+@DatabaseCollation+'
' ELSE ty.name+'('+CASE WHEN c.max_length=-1 THEN 'MAX' ELSE CASE WHEN ty.name='nvarchar' THEN CAST(c.max_length /
2 AS VARCHAR(20))ELSE CAST(c.max_length AS VARCHAR(20))END END+') COLLATE '+@DatabaseCollation+' ' END+CASE WHEN
c.is_nullable=1 THEN 'NULL;' ELSE 'NOT NULL;' END
FROM sys.columns c
INNER JOIN sys.tables t ON c.object_id=t.object_id
INNER JOIN sys.types ty ON c.system_type_id=ty.system_type_id
LEFT JOIN sys.index_columns ic ON ic.object_id=c.object_id AND ic.column_id=c.column_id
WHERE t.is_ms_shipped=0 AND c.collation_name<>@DatabaseCollation AND ty.name !='sysname' AND
c.column_id=@Collation_columnid AND t.object_id=@Collation_objectid;
/*****************************************************************************************************************
*******************
* If the column is in an index this creates the drop and recreate index script *
******************************************************************************************************************
******************/
IF @Collation_index>0 BEGIN
DECLARE CursorIndex CURSOR FOR
SELECT DISTINCT SCHEMA_NAME(t.schema_id) [schema_name], t.name, ix.name, CASE WHEN
ix.is_unique=1 THEN 'UNIQUE ' ELSE '' END, ix.type_desc, CASE WHEN ix.is_padded=1 THEN 'PAD_INDEX = ON, ' ELSE
'PAD_INDEX = OFF, ' END+CASE WHEN ix.allow_page_locks=1 THEN 'ALLOW_PAGE_LOCKS = ON, ' ELSE 'ALLOW_PAGE_LOCKS =
OFF, ' END+CASE WHEN ix.allow_row_locks=1 THEN 'ALLOW_ROW_LOCKS = ON, ' ELSE 'ALLOW_ROW_LOCKS = OFF, ' END+CASE
WHEN INDEXPROPERTY(t.object_id, ix.name, 'IsStatistics')=1 THEN 'STATISTICS_NORECOMPUTE = ON, ' ELSE
'STATISTICS_NORECOMPUTE = OFF, ' END+CASE WHEN ix.ignore_dup_key=1 THEN 'IGNORE_DUP_KEY = ON, ' ELSE
'IGNORE_DUP_KEY = OFF, ' END+'SORT_IN_TEMPDB = OFF, FILLFACTOR ='+CASE WHEN ix.fill_factor=0 THEN CAST(100 AS
VARCHAR(3))ELSE CAST(ix.fill_factor AS VARCHAR(3))END AS IndexOptions, ix.is_disabled,
FILEGROUP_NAME(ix.data_space_id) FileGroupName
FROM sys.tables t
JOIN sys.indexes ix ON t.object_id=ix.object_id
JOIN sys.columns c ON c.object_id=t.object_id
JOIN sys.index_columns ic ON ic.index_id=ix.index_id AND ic.column_id=c.column_id AND
ic.object_id=t.object_id
WHERE ix.type>0 AND ix.is_primary_key=0 AND ix.is_unique_constraint=0
--AND schema_name(tb.schema_id)= @SchemaName
--AND tb.name=@TableName
AND t.is_ms_shipped=0 AND t.name<>'sysdiagrams' AND c.column_id=@Collation_columnid AND
t.object_id=@Collation_objectid AND ic.column_id=@Collation_columnid
ORDER BY SCHEMA_NAME(t.schema_id), t.name, ix.name;
OPEN CursorIndex;
FETCH NEXT FROM CursorIndex
INTO @SchemaName, @TableName, @IndexName, @is_unique, @IndexTypeDesc, @IndexOptions,
@is_disabled, @FileGroupName;
WHILE(@@fetch_status=0)BEGIN
/*****************************************************************************************************************
*******************
* If the column has a primary key constraint this creates the drop and recreate constraint script
*
******************************************************************************************************************
******************/
IF @Collation_constraint>0 BEGIN
-------------------------------------------------
--ALTER TABLE DROP PRIMARY KEY CONSTRAINT Queries
-------------------------------------------------
INSERT INTO #tempscriptstore(ScriptType, script)
---------------------------------------------------
--ALTER TABLE CREATE PRIMARY KEY CONSTRAINT Queries
---------------------------------------------------
SELECT
QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id))+'.'+QUOTENAME(OBJECT_NAME(parent_object_id)) AS pk_table, --PK
table name
skc.object_id AS constid, QUOTENAME(skc.name) AS constraint_name, --PK name
QUOTENAME(iskcu.COLUMN_NAME)+CASE WHEN sic.is_descending_key=1 THEN ' DESC' ELSE ' ASC'
END AS pk_col, iskcu.ORDINAL_POSITION, CASE WHEN unique_index_id=1 THEN 'UNIQUE' ELSE '' END AS index_unique_type,
si.name AS index_name, si.type_desc AS index_type, QUOTENAME(fg.name) AS filegroup_name, 'WITH('+' PAD_INDEX =
'+CASE WHEN si.is_padded=0 THEN 'OFF' ELSE 'ON' END+','+' IGNORE_DUP_KEY = '+CASE WHEN si.ignore_dup_key=0 THEN
'OFF' ELSE 'ON' END+','+' ALLOW_ROW_LOCKS = '+CASE WHEN si.allow_row_locks=0 THEN 'OFF' ELSE 'ON' END+','+'
ALLOW_PAGE_LOCKS = '+CASE WHEN si.allow_page_locks=0 THEN 'OFF' ELSE 'ON' END+')' AS index_property
--,*
INTO #temp_pk
FROM sys.key_constraints skc
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE iskcu ON skc.name=iskcu.CONSTRAINT_NAME
INNER JOIN sys.indexes si ON si.object_id=skc.parent_object_id AND si.is_primary_key=1
INNER JOIN sys.index_columns sic ON si.object_id=sic.object_id AND
si.index_id=sic.index_id
INNER JOIN sys.columns c ON sic.object_id=c.object_id AND sic.column_id=c.column_id
INNER JOIN sys.filegroups fg ON si.data_space_id=fg.data_space_id
WHERE skc.type='PK' AND iskcu.COLUMN_NAME=c.name AND skc.parent_object_id=@Collation_objectid
ORDER BY skc.parent_object_id, skc.name, ORDINAL_POSITION;
WITH cte AS (SELECT pk_table, constraint_name, index_type, SUBSTRING((SELECT ','+pk_col FROM
#temp_pk WHERE constid=t.constid FOR XML PATH('')), 2, 99999) AS pk_col_list, index_unique_type, filegroup_name,
index_property
FROM #temp_pk t)
--forming the ADD CONSTRAINT query
INSERT INTO #tempscriptstore(ScriptType, script)
SELECT DISTINCT 'AddPrimaryKey', 'ALTER TABLE '+pk_table+' ADD CONSTRAINT '+constraint_name+'
PRIMARY KEY '+CAST(index_type COLLATE DATABASE_DEFAULT AS VARCHAR(100))+' ('+pk_col_list+')'+index_property+' ON
'+filegroup_name+''
FROM cte;
/*****************************************************************************************************************
*******************
* If the column has a foreign key constraint this creates the drop and recreate constraint script
*
******************************************************************************************************************
******************/
IF @Collation_foreign>0 BEGIN
DECLARE foreignkeycursor CURSOR FOR
SELECT constraint_object_id
FROM sys.foreign_key_columns
WHERE referenced_object_id=@Collation_objectid AND referenced_column_id=@Collation_columnid;
OPEN foreignkeycursor;
FETCH NEXT FROM foreignkeycursor
INTO @Collation_fkid;
WHILE(@@FETCH_STATUS=0)BEGIN
---------------------------------------------
--ALTER TABLE DROP FOREIGN CONSTRAINT Queries
---------------------------------------------
INSERT INTO #tempscriptstore(ScriptType, script)
------------------------------------------------
--ALTER TABLE CREATE FOREIGN CONSTRAINT Queries
------------------------------------------------
/*****************************************************************************************************************
*******************
* If the column has statistics that aren't part of an index this creates the drop and recreate *
scripts *
******************************************************************************************************************
******************/
IF @Collation_stats>0 AND @Collation_index=0 BEGIN
DECLARE stats_cursor CURSOR FOR
SELECT sc.stats_id
FROM sys.stats_columns sc
JOIN sys.stats s ON s.object_id=sc.object_id AND s.stats_id=sc.stats_id AND
s.user_created=1
WHERE sc.object_id=@Collation_objectid AND sc.column_id=@Collation_columnid;
/*****************************************************************************************************************
*******************
* If the column has a unique constraint this creates the drop and recreate scripts *
******************************************************************************************************************
******************/
IF @Collation_unique>0 BEGIN
-------------------------------------------------
--ALTER TABLE DROP UNIQUE CONSTRAINT Queries
-------------------------------------------------
INSERT INTO #tempscriptstore(ScriptType, script)
SELECT DISTINCT 'DropUniqueKey', 'ALTER TABLE
'+QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id))+'.'+QUOTENAME(OBJECT_NAME(parent_object_id))+' DROP CONSTRAINT
'+QUOTENAME(name)
FROM sys.key_constraints skc
JOIN sys.index_columns ic ON ic.object_id=skc.parent_object_id AND
ic.index_id=skc.unique_index_id
WHERE type='UQ' AND parent_object_id=@Collation_objectid AND ic.column_id=@Collation_columnid;
---------------------------------------------------
--ALTER TABLE CREATE UNIQUE CONSTRAINT Queries
---------------------------------------------------
/*****************************************************************************************************************
*******************
* Returns all the created scripts in the correct order for running *
******************************************************************************************************************
******************/
SELECT DISTINCT script, CASE WHEN ScriptType='DropForeignKey' THEN 1
WHEN ScriptType='DropPrimaryKey' THEN 2
WHEN ScriptType='DropUniqueKey' THEN 3
WHEN ScriptType='DropIndex' THEN 4
WHEN ScriptType='DropStatistics' THEN 5
WHEN ScriptType='AlterCollation' THEN 6
WHEN ScriptType='CreateIndex' THEN 7
WHEN ScriptType='DisableIndex' THEN 8
WHEN ScriptType='AddStatistics' THEN 9
WHEN ScriptType='AddUniqueKey' THEN 10
WHEN ScriptType='AddPrimaryKey' THEN 11
WHEN ScriptType='AddForeignKey' THEN 12 ELSE 99 END AS [exec_order]
FROM #tempscriptstore
WHERE script !=''
ORDER BY exec_order ASC;
DROP TABLE #tempscriptstore;
Changing the database collation has been completed for OPCXR_Tenant_010001 database.
Procedure of changing the database collation has been completed for OmniPCX Record release 2.3.0.19 or higher.
If you see any exception while deleting the SQL user then please perform the following steps to recreate the
SQL user and assign the proper permissions on database(s)
Note: If the same SQL user is being used to access other(s) database(s) then leave that user as it is and create a
new SQL user.
7. Now you need to change the database owner. For this, right click on OmniPCXRecord database and select
properties as shown below
10. Click OK
15. Click OK
Procedure to create a user SQL has been completed for OmniPCX Record release 2.3.0.18 or lower.
If you see any exception while deleting the SQL user then please perform the following steps to recreate the
SQL user and assign the proper permissions on database(s)
Note: If the same SQL user is being used to access other(s) database(s) then leave that user as it is and create a
new SQL user.
7. Now you need to change the database owner. For this, right click on OmniPCX RECORD databases
(OPCXR_Config and OPCXR_Tenant_010001) and select properties as shown below
11. Now you need to update the newly created SQL user permissions on OmniPCX RECORD databases. For this,
expand Login, right click on the SQL user and select properties as shown below:
15. Click OK
Procedure to create a user SQL has been completed for OmniPCX Record release 2.3.0.19 or higher.
This error occurs when setup tries to perform compulsory steps such as creating directories, database
and files but fails to do that.
1- Please verify if all the pre-requisites (Roles and Features) are installed as mentioned in the
install guide.
2- Please verify if the user has proper user rights.
IMPORTANT
OmniPCX RECORD installation can be performed only via Local machine Administrator or local
machine user with full administrator rights. It cannot be performed via domain user.
Check the supervisor belongs to a group admin which has the right of silent monitoring on
supervised teams
4- Please verify if the VLC Player plug-in is installed and enabled in Internet Explorer.
Under IE, Tools > Managed Add-ons :
1- Please verify if the screen capture licenses are available in OmniPCX RECORD.
In OmniPCX Record Console / General / Licensing :
2- Please verify if the screen capture server and client versions are same.
In the Omni PCX Record server and client, in Control Panel / All Control Panel Items / Program
and Features :
6- The agent must be logged on his PC with same username which is configured in OmniPCX
RECORD agent settings.
9- Please verify that ports required for screen capture are enabled in the firewall and any anti
virus running on agent’s machine. Please see “Firewall configuration” section in the install
guide.
10- The screen capture client should be running on agent’s machine only with
one username which is configured in OmniPCX RECORD agent settings. Verify this from Task
Manger > Processes
11- The screen capture will not work if the agent machine is locked or another user is logged in by
using windows “switch user” option. So the agent must log off or shutdown his machine for
screen capture to work properly.
1- Please verify if the configuration of Primary and Secondary servers is correct in system
settings page.
2- Please verify if “OmniPCXRecord SQL Replication” service is running on both primary and
secondary servers. This service is independant of the recorder service.
3- Check if the audio file paths are shared for both servers.
4- Please verify if the secondary database is accessible from the primary server with the SQL
user configured in OmniPCXRecord and vice versa.
5- Please verify from SQL Configuration Manager that “TCP/IP” and “Named Pipes” are enabled
on both primary and secondary servers.
Start / All Programs / Microsoft SQL Server 2008 / Configuration Tools / SQL Server Configuration
Manager
7- Check the replication logs from the primary and secondary servers and see if there is any error
in the logs. Please check the replication activity after section “Large table replication” in the
logs.
The replication logs are under :
C:\Program Files (x86)\Alcatel-Lucent\OmniPCXRecord Suite\Logs\Replication
8- In the replication logs from the primary and secondary servers, please checkif there are no
errors for accessing audio file path.
1- Please verify Attendant Client is installed and startedon the client PC.
Windows / Taskbar Menu / Check the Attendant Client is in green state
4068 set
7- Please verify if the same associated IP extension is provided in the Attendant Client
machine configuration.
In C:\Program Files (x86)\Alcatel-Lucent\OmniPCXRecord Suite\OmniPCX Console Recording Agent
\ OmniPCXConsoleRecordingAgentService.exe.config file
Attendant Number
9- Please verify if the RTP traffic is coming from an IP Phone (associated phone) to the server.
To do it, launch wireshark traces in mirroring port of the IP Phone. Refer to chapter 8.1.3
10- Please verify agent logged on console client machine must have admin rights
From wireshark you should see the UDP stream on port with value more than 32512, and
redirection to the port 13000 (from IP attendant 4059EE to OmniPCX Record):
If Quality Monitor is not accessible and shows error “error loading rad chart image telerik”, then
perform the following steps.
1- Go to the path “…\OmniPCX Record Suite\Quality Monitor” on the server machine and open
the file “web.config” in notepad.
2- Copy the following tags and paste in the “web.config” file under“<system.webServer>” at the
bottom and save the file.
<handlers>
<add name="Telerik.ReportViewer.axd_*" path="Telerik.ReportViewer.axd" verb="*"
type="Telerik.ReportViewer.WebForms.HttpHandler, Telerik.ReportViewer.WebForms,
Version=6.0.12.215, Culture=neutral, PublicKeyToken=a9d7983dfcc261be"
preCondition="integratedMode" />
<add name="ChartImage_axd" verb="*" preCondition="integratedMode" path="ChartImage.axd"
type="Telerik.Web.UI.ChartHttpHandler" />
<add name="Telerik.Web.UI.SpellCheckHandler.axd_*"
path="Telerik.Web.UI.SpellCheckHandler.axd" verb="*" type="Telerik.Web.UI.SpellCheckHandler,
Telerik.Web.UI, Culture=neutral, PublicKeyToken=121fae78165ba3d4" preCondition="integratedMode"
/>
<add name="Telerik.Web.UI.DialogHandler.aspx_*" path="Telerik.Web.UI.DialogHandler.aspx"
verb="*" type="Telerik.Web.UI.DialogHandler, Telerik.Web.UI, Culture=neutral,
PublicKeyToken=121fae78165ba3d4" preCondition="integratedMode" />
<add name="Telerik.RadUploadProgressHandler.ashx_*"
path="Telerik.RadUploadProgressHandler.ashx" verb="*"
type="Telerik.Web.UI.Upload.RadUploadProgressHandler, Telerik.Web.UI"
preCondition="integratedMode" />
<add name="Telerik.Web.UI.WebResource.axd_*" path="Telerik.Web.UI.WebResource.axd" verb="*"
type="Telerik.Web.UI.WebResource, Telerik.Web.UI" preCondition="integratedMode" />
</handlers>
If Aspire coach was installed previously, uninstalling Aspire coach will not remove coach links from
OmniPCXRecord web page.
1- Go to the path “…\OmniPCXRecord Suite\OmniPCXRecord” and open the file “web.config” in
notepad.
2- Search the key “ <add key="CoachVDirectory" value="Aspire" />” and change the name to
“Aspire1” from “Aspire” and save the file.
Right click on the file and select Properties. If the file is blocked by Windows then you will find the
security option available at the bottom:
Note: after any change, the Recording Server must be restarted for the new the change to take effect.
When you select the choice “Voice Guide”, the OmniPCX Record will request to the OXE to play the voice guide
565.
By default, this voice guide 565 has the following messages associated to the languages:
Nb Constant Backup Function VG Message Nb for Language
tone start 1 2 3 4 5 6 7 8
565 VG_DRLINK_IS 56 Mono Yes Conversation in 565 779 777 776 775 774 773 772
_RECORDING message progress may is
being recorded
According to the language you use, you must create and record the right message (example: message 565 for
the language 1).
-3- Check the voice message is assigned to a GD/GD3, GA/GA3 or GPA board
(example for a GD Board 1-1)
System \Dynamic Voice Guides \Assigment
You can change the number of the message if you don’t want to use 565 but the Voice Guide number must be
565.
As soon as the message is created, recorded (recordable prefix) and selected, it will be played just after a
recorded call is established.
If the participants are speaking during the voice guide is played, all the voice will be overlapped.
The voice guide will be recorded in the record file.
The principle to play the voice guide is a 3 parties conference is used on the OXE.
In DR-Link recording mode, you must check the settings of the GD, GA (common hardware) or GPA board
(crystal hardware). Management of N part conference is required because a 3 parties conference is already used
to record the call through the PCM channels (connected to a packetizer).
• Management ressources
Connect the OXE (telnet command
Type the command:
cd /DHS3data/mao
Then type the command:
cfgUpdate
Press return and enter the value 62 for the Value to modify
Value to modify (0 = Exit): 62
Old value: 0
New value: 10
After entering the value 10, press return
Enter Y to validate your choice and press return
Validation (Yes/No) Y
You should be in the list:
62 Maximum simultaneous casual conferences : 10
Enter 0 to exit
• To take the update into account, don’t forget to reboot the OXE.
The beep (interval: 15 sec configured in the OmniPCX Record) is heard properly in the telephonic conversation
but when we listen to the record file, the beep is not heard.
This issue occurred during an internal between 2 TDM sets (monitored and recordable).
= > the minimum version of the OXE must be the R12.3.1 m4.501.7.a
Should you not be able to resolve your issue using the information given above, it will be
necessary to contact a technical support engineer who can assist you in resolving the problem.
However, before contacting support it is important that you have the following details to hand:
2- The software version number, this can be located at the bottom of the page on the
administration interface
3- Trace files (These can be retrieved from the OmniPCX SERVER in the following folder)
“C:\Program Files\Alcatel-Lucent\OmniPCXRecord Suite\Logs”
4. IP Attendant Problem:
We need the following log from client regarding this issue.
6. HA Problem:
We need the following log from client regarding this issue.
This appendix describes the following scenarios to explain in detail the recording filters rules
Scenario 1:
Extensions are to be recorded automatically (by default) by OmniPCX Record.
OXR checks the agent associated to the extension 3000 (in this example) to control the
Recording rules(s).
2.2.1- Extension without ROD configured => same Recording filter configured at the Scenario 1.
2.2.2- Extensions with ROD configured => for those extensions we need to consider 2 cases:
=> we don’t need to add recording filter in order to record the call for which ROD has been activated
because the Default Action is “Record” and Default Action is checked by the OXR before the ROD.
The difference between the call for which the ROD has been activated and the call for which the ROD
hasn’t been activated will appear during the End of Call phase.
2.2.2.1- If the ROD is activated (ROD entire call) during the call, the call must be recorded.
“End of call” Description step by step for ROD activated:
Step 1- During the call, the extension has activated the ROD
Step 1- During the call, the extension has NOT activated the ROD
As you can see the call is recording and saved. This is not what the customer wants.
Calls not recorded if ROD is not activated during the call.
To respect the requirement, a User recording filter has to be created in order to Ignore the calls for which the
ROD is not activated during the call.
Edit the agent view associated to extension for which ROD is configured
Then click on “Recording Rules”
This appendix describes the OmniPCX Record call flow following different scenarios.
twitter.com/ALUE_Care
facebook.com/ALECustomerCare
- END OF DOCUMENT -