Sommario

Introduzione

Premesse

Problema

Soluzione

Stima dimensioni dati repository corrente

Determinazione del numero di righe nelle tabelle delle cartelle del repository

Determinare il numero di pagine utilizzate dalle tabelle delle cartelle del repository

Determinare il numero di pagine utilizzate dalle tabelle di file degli elementi del repository

Calcola

Prompt

Introduzione

Questo documento descrive un problema rilevato durante l'aggiornamento dei sistemi Cisco Unified Contact Center Express (UCCX) alle versioni 8 e successive e quando un numero elevato di elementi del repository viene caricato nel sistema o quando si tenta di caricare un numero elevato di elementi del repository nel sistema nelle versioni 8 e successive.

Premesse

UCCX versione 7.x e successive utilizzano Microsoft SQL (MSSQL) come motore di database. In termini di archiviazione dei dati, MSSQL non distingue tra dati di tipi diversi. Quando i dati vengono memorizzati in un database da 3 GB, MSSQL memorizza tutti i dati, indipendentemente dal tipo, in un blocco da 3 GB.

Informix, invece, il modulo di gestione di database utilizzato in UCCX versione 8.0 e successive, distingue tra i diversi tipi di dati quando li memorizza sul disco. I dati tipici del database, ad esempio Stringhe, Caratteri e Numeri interi, vengono memorizzati in un blocco di disco dedicato al database, mentre i dati BLOB (Binary Large Object), se presenti nei record della tabella del database, vengono memorizzati in una sezione separata del disco, denominata spazio secondario. Uno spazio secondario è un'unità logica composta da uno o più blocchi di disco in cui sono memorizzati i dati BLOB. Informix memorizza i dati tradizionali e i dati BLOB separatamente per migliorare le prestazioni di lettura e scrittura dei dati BLOB da e verso il database e il disco. Quando viene creato un database che contiene dati BLOB, l'amministratore deve specificare separatamente le dimensioni dei blocchi del disco per il database (per memorizzare i dati tradizionali) e le dimensioni dello spazio secondario.

Per i meccanismi di archiviazione dei dati, MSSQL suddivide tutti i dati in un singolo bucket di dimensioni N, mentre Informix suddivide l'archiviazione dei dati in due bucket: un bucket per le informazioni contestuali sui dati BLOB di dimensione X e un altro bucket per gli oggetti BLOB stessi di dimensione Y.

In UCCX, l'amministratore ha la possibilità di caricare elementi del repository costituiti da prompt, documenti, grammatiche e script. Il contenuto di questi elementi viene memorizzato nelle tabelle di database corrispondenti come dati BLOB e informazioni contestuali su di essi, ad esempio il nome del file, la cartella, l'ora dell'ultima modifica, l'utente dell'ultima modifica, la lunghezza e il checksum.

Gli elementi del repository vengono memorizzati nel database UCCX db_cra_repository. Nelle versioni 7.x e precedenti di UCCX che utilizzano MSSQL, db_cra_repository ha una dimensione di 3 GB e contiene le informazioni contestuali e BLOB. In UCCX versioni 8.0 e successive che utilizzano Informix, il blocco di archiviazione dati collegato al db_cra_repository ha una dimensione di 10,2 MB e memorizza solo le informazioni contestuali sugli elementi del repository. Il contenuto degli elementi del repository viene archiviato in formato BLOB in uno spazio secondario denominato uccx_sbspace. Nelle versioni UCCX 8.0 e successive, lo spazio uccx_sbspace ha una dimensione di 3 GB.

L'output del comando show uccx dbserver disk su un server UCCX versione 8.0+ rivela la distinzione tra questi due archivi dati:

A seconda della combinazione di dati nel database MSSQL, è possibile che le dimensioni dei dati BLOB memorizzati nel database MSSQL superino le dimensioni definite dello spazio secondario in Informix quando si tenta di eseguire una migrazione o un aggiornamento. Analogamente, è possibile che le informazioni contestuali sui dati BLOB memorizzati nel database MSSQL superino le dimensioni specificate a livello amministrativo per tali dati nel blocco di database Informix.

In questo caso, l'aggiornamento o la migrazione da UCCX versione 7.x a UCCX versione 8.x ha esito negativo perché db_cra_repository o uccx_sbspace non è sufficientemente grande per contenere le stesse informazioni archiviate in MSSQL. Si tratta in genere di un problema in un sistema UCCX che contiene un numero elevato di richieste. I dati di tipo Prompt contestuale e BLOB devono condividere db_cra_repository e uccx_sbspace con Documenti, Grammatiche e Script, ma questi altri tipi di repository sono in genere di dimensioni e numeri ridotti.

Ad esempio, si consideri un sistema UCCX versione 7.x con decine di migliaia di richieste, ognuna con pochi secondi di audio. In UCCX versione 7.x che utilizza MSSQL, il contenuto del prompt e le informazioni contestuali vengono archiviati nello stesso blocco da 3 GB. Poiché sono presenti molti prompt di piccole dimensioni, il database potrebbe memorizzare 50 MB di informazioni contestuali sui prompt, ma solo 2 GB di dati BLOB che rappresentano l'audio dei prompt. Pertanto, i prompt nel repository occupano poco più di 2 GB del limite di 3 GB impostato durante la creazione del database.

Quando si tenta di migrare il sistema a UCCX versione 8.x e Informix, la migrazione non riesce in quanto i 50 MB di informazioni contestuali superano il limite di 10,2 MB del db_cra_repository anche se i 2 GB di contenuto Prompt rientrano ampiamente nel limite del uccx_sbspace.

Al contrario, si consideri un sistema UCCX versione 7.x con un numero inferiore di prompt, ma ancora numerosi. Con un numero minore di richieste ma di dimensioni maggiori, il rapporto tra il contenuto di richiesta e le informazioni contestuali è diverso. In UCCX versione 7.x e MSSQL, il contenuto del prompt potrebbe occupare 2,8 GB del db_cra_repository, e le informazioni contestuali 3 MB. Il sistema viene aggiornato correttamente, poiché i 3 MB si adattano al db_cra_repository, mentre i 2,8 GB si adattano allo spazio sucx_sbspace allocato.

In genere, quando si tenta di eseguire la migrazione a UCCX versione 8.x e successive, i dati contestuali relativi ai prompt caricati nel sistema UCCX versione 7.x o precedente superano il limite di dimensioni di db_cra_repository prima che il contenuto del prompt superi il limite di dimensioni di uccx_sbspace. Inoltre, lo spazio disponibile per gli elementi del repository personalizzato è di 6,9 MB, in quanto la configurazione predefinita utilizza 3,4 MB di db_cra_repository.

Problema

Quando si tenta di caricare nuovi elementi del repository (documenti, grammatiche, prompt, script) in un sistema UCCX che esegue la versione 8 o successive, viene visualizzato questo messaggio di errore:

The files uploaded are not valid or not structured

according to languages. Please check the help

documentation for more details.

La migrazione da UCCX versione 7.0(2) e precedenti a UCCX versione 8.0 e successive modifica il sistema operativo e il motore di database su cui viene eseguita l'applicazione. Il modulo di gestione di database utilizzato in UCCX versione 8.0 e successive memorizza i dati in modo diverso rispetto a UCCX versione 7.x e successive. Questo ha implicazioni sulla migrazione di UCCX, in quanto i database che contengono dataset di grandi dimensioni in UCCX versione 7.x potrebbero non essere migrati correttamente in UCCX versione 8.x.

Soluzione

Prima di eseguire la migrazione a UCCX versione 8.x, stimare la quantità di db_cra_repository e uccx_sbspace necessaria per memorizzare gli elementi del repository corrente nel sistema UCCX versione 7.x, in modo da includere eventuali future espansioni.

Stima dimensioni dati repository corrente

Per iniziare, determinare il numero di righe in ciascuna delle tabelle del repository che contengono informazioni sia sugli elementi del repository che sulle cartelle.

Determinazione del numero di righe nelle tabelle delle cartelle del repository

Utilizzare Microsoft SQL Query Analyzer per registrare il numero di righe dalle tabelle delle cartelle del repository con i seguenti comandi:

- SELECT CONTEGGIO(*) FROM documenticartellabella

- SELECT CONTEGGIO(*) FROM grammaticartellabella

- SELECT COUNT(*) FROM prompt

- SELECT COUNT(*) FROM scriptsfoldertbl

Determinare il numero di pagine utilizzate dalle tabelle delle cartelle del repository

Informix considera le dimensioni su disco in termini di pagine. Determinare il numero di pagine occupate dal contenuto delle tabelle delle cartelle del repository con questa formula e sostituire il numero di righe per i conteggi ottenuti dai comandi precedentemente menzionati. Calcolare questa formula per ogni tabella e aggiungere il numero di pagine. Non è possibile determinare con precisione il numero di pagine se il numero di righe di ogni tabella viene aggiunto per primo e quindi viene calcolato il risultato della formula.

- # pagine documentifoldertbl = Numero di righe nei documentifoldertbl / (2020 / (180 + 4))

- # pagine grammarsfoldertbl = Numero di righe in grammarsfoldertbl / (2020 / (180 + 4))

- # Pagine promptsfoldertbl = Numero di righe in promptsfoldertbl / (2020 / (180 + 4))

- # pagine scriptsfoldertbl = Numero di righe negli scriptsfoldertbl / (2020 / (180 + 4))

# Pagine documentifocartellabella + # Pagine grammaticafartellabella + # Pagine prompt foldertbl + # Pagine scriptsfoldertbl = Numero totale di pagine per le tabelle delle cartelle

Determinare il numero di pagine utilizzate dalle tabelle di file degli elementi del repository

Completare lo stesso calcolo per determinare il numero totale di pagine per le tabelle file che contengono gli elementi effettivi del repository. Immettere i seguenti comandi con Microsoft SQL Query Analyzer:

- SELECT COUNT(*) FROM documentifiletbl

- SELECT COUNT(*) FROM grammaticafiletbl

- SELECT CONTEGGIO(*) FROM prompt filetbl

- SELECT COUNT(*) FROM scriptsfiletbl

Determinare il numero di pagine occupate dal contenuto delle tabelle dei file del repository con questa formula e sostituire il numero di righe con i conteggi ottenuti dai comandi precedentemente menzionati. Calcolare la formula per ogni tabella e aggiungere il numero di pagine.

- # pagine documentifiletbl = Numero di righe nei documentifiletbl / (2020 / (229 + 4))

- # pagine grammarsfiletbl = Numero di righe in grammarsfiletbl / (2020 / (229 + 4))

- # Pagine promptsfiletbl = Numero di righe in promptsfiletbl / (2020 / (229 + 4))

- # pagine scriptsfiletbl = Numero di righe in scriptsfiletbl / (2020 / (229 + 4))

# Pagine documentifiletbl + # Pagine grammaticafiletbl + # Pagine prompt filetbl + # Pagine scriptsfiletbl = Numero totale di pagine per le tabelle file

Calcola

Per completare la stima corrente delle dimensioni dei dati del repository, eseguire i seguenti calcoli:

1. Determinare il numero totale di pagine necessarie per memorizzare il repository corrente in Informix con:

Numero totale di pagine = Numero totale di pagine per le tabelle file + Numero totale di pagine per le tabelle cartelle

2. Determinare lo spazio totale, in MB, utilizzato dalle pagine:

Numero totale di pagine x 2 = Dimensioni totali in MB

Se i calcoli mostrano che le informazioni contestuali relative agli elementi e alle cartelle del repository attualmente caricati in UCCX versione 7.x superano i 3,4 MB, si consiglia di eseguire il refactoring della progettazione degli elementi del repository. Sebbene lo spazio disponibile per le informazioni contestuali sugli elementi del repository in db_cra_repository sia di 6,9 MB, si consiglia di lasciare il 50% disponibile per la crescita futura. Le stime di crescita e lo spazio occupato massimo consentito vengono calcolati per installazione, in base ai fattori di crescita previsti.

Prompt

Poiché i prompt sono in genere il consumer più grande dello spazio del repository, i metodi utilizzati per ridurre il numero di prompt nel repository sono illustrati nel resto di questo articolo.

Se i prompt attualmente caricati nel repository UCCX versione 7.x occupano una parte significativa dello spazio di storage complessivo del repository, eseguire il refactoring di Progettazione prompt, storage e recupero prima di migrare a UCCX versione 8.x. Quando tentate di effettuare il refactoring della progettazione del prompt, tenete presenti le seguenti opzioni:

- Ridurre il numero di cartelle Prompt. Come illustrato nei calcoli precedenti, ogni cartella Prompt occupa una riga nel database del repository e pertanto utilizza lo spazio disponibile rispetto al limite db_cra_repository. Se si riduce il numero di cartelle, è possibile liberare spazio per i file.

- Condividere le richieste di parole o frasi comuni tra applicazioni/script per ridurre il numero di richieste necessarie nel sistema.

- Utilizzare i prompt forniti dal sistema per le caratteristiche comuni tra i prompt, ad esempio numeri e valute.

- Memorizzare i prompt su un server Web separato all'interno dell'azienda e recuperare e riprodurre i prompt necessari su richiesta con Voice XML (VXML).

Il formato VXML viene utilizzato per recuperare e riprodurre i prompt su richiesta da una posizione esterna. Se si memorizzano grandi quantità di richieste in un server Web separato, è possibile:

- Eliminare i problemi di migrazione precedentemente menzionati, in quanto i prompt non vengono più memorizzati in db_cra_repository.

- Maggiore accesso e facilità di gestione.

- Riduzione dei tempi di versione, aggiornamento, migrazione e backup dello switch.

Sebbene esistano molte opzioni per instrumentare la personalizzazione di Interactive Voice Response (IVR) in VXML, lo script UCCX e l'applicazione VXML utilizzati per recuperare un prompt da un server Web esterno e riprodurlo al chiamante vengono utilizzati come base per ulteriori sviluppi. Analogamente ad altri script personalizzati in UCCX, gli script forniti in questa sezione vengono forniti come guida e non sono supportati da Cisco Technical Assistance Center (TAC).

Nota: Un'applicazione VXML viene richiamata da uno script UCCX con il passaggio Voice Browser. Ulteriori informazioni sul passaggio Voice Browser sono disponibili nelle guide alla programmazione di Cisco Unified Contact Center Express.

Il passaggio Voice Browser utilizza un documento VXML. Questo documento deve essere creato come risultato del passaggio Crea documento URL e deve essere ospitato in un server Web esterno a UCCX. Sebbene l'applicazione VXML sia scritta per accettare l'input del chiamante tramite DTMF (Dual Tone Multi Frequency), questa applicazione è progettata solo per riprodurre un prompt che è ospitato in modalità off-box. Tuttavia, può essere ampliata per includere funzionalità aggiuntive. Si presume che il resto dello script UCCX, prima che il passaggio Voice Browser venga richiamato, abbia la logica necessaria per determinare quale prompt viene riprodotto e una variabile String impostata sul nome file Prompt.

Poiché il documento VXML è statico, ma il prompt riprodotto attraverso di esso è dinamico, per crearlo viene utilizzato un linguaggio di script sul lato server. Può trattarsi di qualsiasi linguaggio di script sul lato server che abbia la capacità di impostare l'intestazione Content-type della risposta XML GET Request. Nell'esempio viene utilizzato PHP.

La pagina PHP viene scritta per accettare un parametro URL in una richiesta GET che rappresenta il nome del prompt audio riprodotto. La pagina PHP concatena il modello VXML con il nome file Prompt passato nei parametri URL della richiesta GET per formare il documento VXML completo. Imposta quindi l'intestazione Content-type della risposta su XML e il corpo della risposta su VXML.

<?php

$wav_filename = $_GET['wav'];

$xml_string = '<?xml version="1.0"?>

<vxml xmlns="http://www.w3.org/2001/vxml" version="2.0">

<form>

<block>

<prompt bargein="true">

<audio src="http://<Servername or IP Address>/

<Path>/'.$wav_filename.'.wav" />

</prompt>

</block>

</form>

</vxml>';

header('Content-type: text/xml');

echo $xml_string;

?>

Per produrre un documento VXML ben formato, è necessario accedere alla pagina PHP di esempio con una richiesta GET che contiene un parametro wav e un valore String, presupponendo che la pagina PHP di esempio sia denominata generatevxml.php:

http://

/path/generatevxml.php?wav=MenuPrompt

Verificare che il file MenuPrompt.wav si trovi nel percorso del server Web esterno specificato nel modello VXML contenuto nella pagina PHP.

Nello script UCCX, usare il passo Create URL Document per eseguire una richiesta GET di generatevxml.php concatenando l'URL di base di http://<Servername or IP Address>/path/generatevxml.php?wav= con il nome file Prompt derivato dalla logica di script precedente, quindi inserire il risultato in una variabile di documento.

Creare un passaggio di Voice Browser che utilizza la variabile di documento.

Quando viene chiamato questo script, a condizione che sia generatevxml.php che MenuPrompt.wav siano accessibili sul server Web da UCCX, il prompt MenuPrompt.wav viene eseguito al chiamante.

Quando si utilizzano applicazioni VXML per archiviare i prompt in modo che vi si possa accedere solo quando necessario per poterli riprodurre al chiamante, è possibile ottenere una maggiore efficienza, gestibilità e facilità di manutenzione. Si tratta di un problema da considerare se un sistema UCCX versione 7.x viene aggiornato a un sistema UCCX versione 8.x e il numero di Prompt è tale che il contenuto delle informazioni contestuali è maggiore di db_cra_repository o di uccx_sbspace.