SQL - Alguna mente privilegiada

 
Vista:

Alguna mente privilegiada

Publicado por Alex (3 intervenciones) el 30/11/2012 15:01:23
Hola a todos os expongo un problema gordo a ver si hay alguien que pueda ayudarme ya que mi cerebro está a punto de explotar.

caso: tenemos dos servidores CMS que registran las llamadas en dos bases de datos separadas, cada una de estas bases registra los valores a su vez en otra base de datos (ECHI) hasta aqui todo bien, el problema es que cada uno de estos CMS registran en la ultima base de datos la misma llamada pero con CalliD distintos, con lo cual se nos duplican los datos en la replicación, he pensado usar algun script con un condicional para evitar esto, pero es imposible por lo grande de la base de datos y la cantidad de registros que registra por hora, unos 40.000 la base de datos ahora es 26 Gigas solo en datos..

es fundamental usar el Callid como PRIMARY key porque se utiliza en la creacion de informes en otra aplicación..

les dejo la info de la tabla y agradeciendo de antemano cualquier ayuda.

USE [ECHI]
GO
/****** Object: Table [dbo].[ECHITABLE_VERSION93] Script Date: 11/30/2012 13:45:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[ECHITABLE_VERSION93](
[callid] [bigint] NOT NULL,
[acwtime] [bigint] NULL,
[ansholdtime] [bigint] NULL,
[consulttime] [bigint] NULL,
[disptime] [bigint] NULL,
[duration] [bigint] NULL,
[segstart] [bigint] NULL,
[segstartutc] [bigint] NULL,
[segstop] [bigint] NULL,
[segstoputc] [bigint] NULL,
[talktime] [bigint] NULL,
[netintime] [bigint] NULL,
[origholdtime] [bigint] NULL,
[queuetime] [bigint] NULL,
[ringtime] [bigint] NULL,
[dispivector] [bigint] NULL,
[dispsplit] [bigint] NULL,
[firstivector] [bigint] NULL,
[split1] [bigint] NULL,
[split2] [bigint] NULL,
[split3] [bigint] NULL,
[tkgrp] [bigint] NULL,
[eq_locid] [bigint] NULL,
[orig_locid] [bigint] NULL,
[ans_locid] [bigint] NULL,
[obs_locid] [bigint] NULL,
[uui_len] [bigint] NULL,
[ASSIST] [bit] NULL,
[AUDIO] [bit] NULL,
[CONFERENCE] [bit] NULL,
[DA_QUEUED] [bit] NULL,
[HOLDABN] [bit] NULL,
[MALICIOUS] [bit] NULL,
[OBSERVINGCALL] [bit] NULL,
[TRANSFERRED] [bit] NULL,
[agtreleased] [bigint] NULL,
[acd] [bigint] NULL,
[call_disp] [bigint] NULL,
[disppriority] [bigint] NULL,
[held] [bigint] NULL,
[segment] [bigint] NOT NULL,
[ansreason] [bigint] NULL,
[origreason] [bigint] NULL,
[dispsklevel] [bigint] NULL,
[event1] [bigint] NULL,
[event2] [bigint] NULL,
[event3] [bigint] NULL,
[event4] [bigint] NULL,
[event5] [bigint] NULL,
[event6] [bigint] NULL,
[event7] [bigint] NULL,
[event8] [bigint] NULL,
[event9] [bigint] NULL,
[ucid] [varchar](21) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[dispvdn] [varchar](16) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[eqloc] [varchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[firstvdn] [varchar](16) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[origlogin] [varchar](16) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[anslogin] [varchar](16) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[lastobserver] [varchar](16) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[dialed_num] [varchar](25) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[calling_pty] [varchar](25) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[lastdigits] [varchar](17) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[lastcwc] [varchar](17) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[calling_ii] [varchar](3) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[cwc1] [varchar](17) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[cwc2] [varchar](17) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[cwc3] [varchar](17) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[cwc4] [varchar](17) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[cwc5] [varchar](17) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[vdn2] [varchar](16) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[vdn3] [varchar](16) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[vdn4] [varchar](16) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[vdn5] [varchar](16) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[vdn6] [varchar](16) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[vdn7] [varchar](16) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[vdn8] [varchar](16) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[vdn9] [varchar](16) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[asaiuui] [varchar](97) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[interruptdel] [bigint] NULL,
[agentsurplus] [bigint] NULL,
[agentskilllevel] [bigint] NULL,
[prefskilllevel] [bigint] NULL,
CONSTRAINT [PK_ECHITABLE_VERSION94_2] PRIMARY KEY CLUSTERED
(
[callid] ASC,
[segment] ASC,
[ucid] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
/****** Object: Statistic [_dta_stat_533576939_7_9] Script Date: 11/30/2012 13:45:22 ******/
CREATE STATISTICS [_dta_stat_533576939_7_9] ON [dbo].[ECHITABLE_VERSION93]([segstart], [segstop])
GO
/****** Object: Statistic [_dta_stat_533576939_9_17_7] Script Date: 11/30/2012 13:45:22 ******/
CREATE STATISTICS [_dta_stat_533576939_9_17_7] ON [dbo].[ECHITABLE_VERSION93]([segstop], [dispsplit], [segstart])
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Alguna mente privilegiada

Publicado por Isaias (1919 intervenciones) el 30/11/2012 17:42:00
Creo que mi mente no es privilegiada, ya que no entendí cual es el problema..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Alguna mente privilegiada

Publicado por Alex (3 intervenciones) el 03/12/2012 10:38:52
Isaias gracias por reponder el problema en pocas palabras es como puedo identificar en SQL 2registros como iguales cuando tienen 2 callid distintos porque vienen de Servidores CMS distintos aunque son la misma llamada.
Es decir en la base final se nos están registrando las llamadas 2 veces porque tienen Callid distintos y el Callid tenemos que usarlo obligatoriamente como key en la BD

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Alguna mente privilegiada

Publicado por Isaias (1919 intervenciones) el 04/12/2012 18:13:02
Creo que no tienes CALLID iguales, ya que no puedes tener 2 usuarios al mismo tiempo llamando, por un mismo teléfono.

En todo caso son 2 llamadas del mismo cliente en tiempos u horarios diferentes.

Aqui la pregunta seria, ¿Como identificar que 2 llamadas se vuelven las mismas?, ¿Por el numero telefonico del usuario?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Alguna mente privilegiada

Publicado por Alex (3 intervenciones) el 05/12/2012 09:49:47
No los dos servidores CMS son usados para evitar fallos, es como un cluster, la llamada es la misma, a la misma hora y misma duración, claro cada base de datos de CMS registra su propia Callid , nosotros hasta aquí simpre lo dejamos y no hay problemas, el problema gordo aquí, es que ahora debemos esa informacion guardarla en otro servidor en SQL también, pero obviamente se nos duplican los registros por cada llamada, pensamos primero sólo conectar uno de los CMS a la base de datos final pero eso es inviable, porque perderíamos la seguridad contra los fallos que pudieran ocurrir, luego pensamos bueno como los Callid son distintos, vamos a quitar el callid como llave de la última base de datos y así identificaría las llamadas como iguales y desecharía una, también es inviable porque el Callid se utiliza en una aplicación de creación de informes...Así que no se que más podemos hacer, si a tí se te ocurre algo te aagradecería mucho tus comentarios.

Espero me haya explicado bien.

Saludos

Alex
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar