Differenze tra le versioni di "Errore connection is busy"

Da SIGLAkb.
(Segnalazione di connessione occupata)
 
m (una versione importata)
 
(Nessuna differenza)

Versione attuale delle 18:48, 10 apr 2020

Segnalazione di connessione occupata

Dp-ingranaggio3.png Operando con MS SQLServer è possibile riscontrare la segnalazione: "La connessione è occupata dai risultati di un altro comando/statement (Connection is busy)'"'.

Tale segnalazione è tipicamente determinata dalla presenza di record con chiave duplicata in una o più tabelle della base dati di SIGLA® (potrebbe anche accadere che la segnalazione non sia direttamente visibile e si ottenga solo un errore generico di protezione).

La prima cosa da fare in questo caso (connessione occupata) è un'analisi approfondita dei dati al fine di determinare se in una certa tabella esistono dei duplicati (record doppi rispetto alla chiave univoca della tabella). Inoltre, l'utilizzo di database con una collating sequence di tipo CASE INSENSITIVE può aumentare la probabilità di incorrere nella presenza di record doppi.

Per l'analisi è necessario operare direttamente sulla base dati con gli strumenti messi a disposizione dal DBMS. Per la definizione delle varie tabelle della base dati di SIGLA® è disponibile l'apposito file di documentazione Tecnotes.chm.

I seguenti comandi SQL possono risultare di ausilio per l'analisi:

1) chiave univoca composta da un singolo campo (lo statement consente di individuare immediatamente duplicati attraverso la corrispondente chiave univoca)
 
 
  SELECT <chiave>
  FROM <tabella>
  GROUP BY <chiave>
  HAVING COUNT(<chiave>)>1
 


2) chiave univoca composta da più campi (lo statement consente di determinare se nella tabella esistono dei duplicati, che poi potranno essere individuati con altri comandi)
 
 
  SELECT COUNT(*)
  FROM <tabella>
  GROUP BY <chiave>
  HAVING (COUNT(*) > 1)
 


Dp-acceptn72x72.png In generale le tabelle per le quali è necessario controllare la presenza di duplicati sono tutte quelle dei database dei dati comuni e ditta.

In ogni caso, per semplificare la procedura, come punto di partenza per l'analisi si può fare riferimento al seguente elenco di tabelle (sono quelle dove la presenza dei duplicati è più probabile che generi la segnalazione di connessione occupata):

Dati comuni Dati ditta
TABIVA DPCONFIG
CPG NUMERAT
RPG ESC
TIDOIVA CLIFO
DITTE CFVEN
UTENTI PIACON
DPAPPCON ANAMAGA
  CONTROPA
  TASALSOT
  TIPODOCU
  GIAC
  GIACESE
  GIACTAG
  GIALOTTI
  GIAUBICA
  CAUSCONT
  INDSPED
  BANCHE


N.B.: come già evidenziato, per sapere quali siano i campi chiave per ognuna delle tabelle precedenti consultare il file Tecnotes.chm.

Dp-acceptn72x72.png Nel caso in cui l'esame delle suddette tabelle non porti ad alcun risultato utile è necessario procedere nell'analisi basandosi sull'elenco completo delle tabelle, partendo dalle tabelle che compongono il database dei dati della ditta.

Script SQL di esempio

Ricerca di possibili duplicati in alcune tabelle del database dei dati comuni
 
 
  --
  -- SCRIPT PER LA RICERCA DEI DUPLICATI IN ALCUNE TABELLE DEL
  -- DATABASE DEI DATI COMUNI DI SIGLA
  --
  -- LA RISPOSTA AD OGNI STATEMENT DEVE ESSERE: 0 row(s) affected
  -- IN CASO CONTRARIO ESISTONO DEI DUPLICATI CHE VANNO ELIMINATI
  --
  -- Questo script è fornito da Delta Phi SIGLA srl a titolo d'esempio
  -- e può essere liberamente modificato per adattarlo alle proprie
  -- necessità
  --
  SELECT CODICE,'TABIVA' AS TAB FROM TABIVA GROUP BY CODICE HAVING COUNT(CODICE)>1
  GO
  SELECT CODICE,'CPG' AS TAB FROM CPG GROUP BY CODICE HAVING COUNT(CODICE)>1
  GO
  SELECT CODICE,MRIGA3,'RPG' AS TAB FROM RPG GROUP BY CODICE,MRIGA3 HAVING COUNT(*)>1
  GO
  SELECT CODICE,'TIDOIVA' AS TAB FROM TIDOIVA GROUP BY CODICE HAVING COUNT(CODICE)>1
  GO
  SELECT CODDITTA,'DITTE' AS TAB FROM DITTE GROUP BY CODDITTA HAVING COUNT(CODDITTA)>1
  GO
  SELECT CODICE,'UTENTI' AS TAB FROM UTENTI GROUP BY CODICE HAVING COUNT(CODICE)>1
  GO
 


Ricerca di possibili duplicati in alcune tabelle del database dei dati ditta
 
 
  --
  -- SCRIPT PER LA RICERCA DEI DUPLICATI IN ALCUNE TABELLE DEL
  -- DATABASE DEI DATI DITTA DI SIGLA
  --
  -- LA RISPOSTA AD OGNI STATEMENT DEVE ESSERE: 0 row(s) affected
  -- IN CASO CONTRARIO ESISTONO DEI DUPLICATI CHE VANNO ELIMINATI
  --
  -- Questo script è fornito da Delta Phi SIGLA srl a titolo d'esempio
  -- e può essere liberamente modificato per adattarlo alle proprie
  -- necessità
  --
  SELECT CODICE,'DPCONFIG' AS TAB FROM DPCONFIG GROUP BY CODICE HAVING COUNT(CODICE)>1
  GO
  SELECT ESERCIZIO,CODICE,'NUMERAT' AS TAB FROM NUMERAT GROUP BY ESERCIZIO,CODICE HAVING COUNT(*)>1
  GO
  SELECT CODICE,'ESC' AS TAB FROM ESC GROUP BY CODICE HAVING COUNT(CODICE)>1
  GO
  SELECT CODICE,'CLIFO' AS TAB FROM CLIFO GROUP BY CODICE HAVING COUNT(CODICE)>1
  GO
  SELECT CODCF,'CFVEN' AS TAB FROM CFVEN GROUP BY CODCF HAVING COUNT(CODCF)>1
  GO
  SELECT SOTTOCONTO,'PIACON' AS TAB FROM PIACON GROUP BY SOTTOCONTO HAVING COUNT(SOTTOCONTO)>1
  GO
  SELECT CODICE,'ANAMAGA' AS TAB FROM ANAMAGA GROUP BY CODICE HAVING COUNT(CODICE)>1
  GO
  SELECT COUNT(*) AS NRECS,'CONTROPA' AS TAB FROM CONTROPA HAVING COUNT(*)>1
  GO
  SELECT ESERCIZIO,CODSOTT,'TASALSOT' AS TAB FROM TASALSOT GROUP BY ESERCIZIO,CODSOTT HAVING COUNT(*)>1
  GO
  SELECT CODICE,'TIPODOCU' AS TAB FROM TIPODOCU GROUP BY CODICE HAVING COUNT(CODICE)>1
  GO
  SELECT ARTICOLO,MAGAZZINO,'GIAC' AS TAB FROM GIAC GROUP BY ARTICOLO,MAGAZZINO HAVING COUNT(*)>1
  GO
  SELECT ESERCIZIO,ARTICOLO,MAGAZZINO,'GIACESE' AS TAB FROM GIACESE
  GROUP BY ESERCIZIO,ARTICOLO,MAGAZZINO HAVING COUNT(*)>1
  GO
  SELECT ESERCIZIO,ARTICOLO,MAGAZZINO,'GIACTAG' AS TAB FROM GIACTAG
  GROUP BY ESERCIZIO,ARTICOLO,MAGAZZINO HAVING COUNT(*)>1
  GO
  SELECT CODICE,MAGAZZINO,UBICAZIONE,'GIALOTTI' AS TAB FROM GIALOTTI
  GROUP BY CODICE,MAGAZZINO,UBICAZIONE HAVING COUNT(*)>1
  GO
  SELECT ARTICOLO,MAGAZZINO,UBICAZIONE,'GIAUBICA' AS TAB FROM GIAUBICA
  GROUP BY ARTICOLO,MAGAZZINO,UBICAZIONE HAVING COUNT(*)>1
  GO
  SELECT CODICE,'CAUSCONT' AS TAB FROM CAUSCONT GROUP BY CODICE HAVING COUNT(CODICE)>1
  GO
  SELECT CODCF,CODIND,'INDSPED' AS TAB FROM INDSPED GROUP BY CODCF,CODIND HAVING COUNT(*)>1
  GO
  SELECT SOTTOCONTO,'BANCHE' AS TAB FROM BANCHE GROUP BY SOTTOCONTO HAVING COUNT(SOTTOCONTO)>1
  GO
 


Bibliografia