Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    76

    aggiornamento tabella di grandi dimensioni

    Ciao Folks!

    ho il seguente problema

    ho una tabella (chiamata "Replica") con milioni di righe in SQL Server.

    Replica al suo interno non ha nessuna colonna che mi indichi se una riga è stata modificata o creata

    la tabella Replica è la copia di un'altra tabella di un altro sistema completamente indipendente

    da questo sistema posso ricevere quante volte voglio la lista delle righe

    Azione attuale:
    ogni notte elimino Replica e la ricreo

    Cosa vorrei:
    un aggiornamento più costante e meno traumatico

    conoscete qualche modo per fare questi aggiornamenti in maniera più mirata?

  2. #2
    Ciao
    direi che dipende da cosa intendi per "un altro sistema completamente indipendente".
    Se è un database su cui puoi mettere mano la cosa migliore sarebbe impostare dei trigger (On Update, On Delete, On Insert) che aggiornino la tua tabella...

    ***************************
    Non può piovere per sempre...
    ***************************

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    76
    ehhh sarebbe bello.....questo sistema completamente indipendente non è toccabile (possiamo chiamarlo sap -.-') se non da queste funzioni le quali (essendo una tabella senza campi temporali di modifica o creazione) ti puo ritornare tutta la tabella o porte di essa

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    363
    Nel database di destinazione crei una tabella con il checksum dei records origine più la chiave naturale del record stesso, poi con una stored procedure aggiorni soltanto i records che hanno subito modifiche (cioe quelli per i quali il checksum è cambiato).

  5. #5
    Originariamente inviato da Squid70
    Nel database di destinazione crei una tabella con il checksum dei records origine più la chiave naturale del record stesso, poi con una stored procedure aggiorni soltanto i records che hanno subito modifiche (cioe quelli per i quali il checksum è cambiato).
    per fare questo devi comunque rileggere *tutto* il db di origine per ricalcolare il checksum di ogni riga! bisogna vedere i tempi...

  6. #6
    Un sistema per questo genere di necessità è la replica di SqlServer. Puoi scegliere tra 4 tipi diversi di replica a seconda delle esigenze. Il publisher può essere Oracle o Sql Server presente nella tua intranet o anche remoto mentre il subscriber è la tua istanza di sql server dove hai la tua tabella Replica.
    Saluti a tutti
    Riccardo

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    76
    secondo me squid70 ha dato una buona soluzione (sicuramente migliore della mia zappa e riscrivi)...però ha un bug, non posso sapere se è stata cancellata una riga...

    sistA 2 righe
    ID CS
    1 ad3w
    2 bfdx

    sistReplica 3 righe
    ID CS
    1 ad3w
    2 bfdx
    3 hyl3

    siccome il sistema è assimmetrico, controllero le due righe di sistA su sistReplica, ma non avrò modo di verificare l'ID 3 di sistReplica (che in questo caso è stato cancellato)

    riccardone, purtroppo non posso utilizzare i sistemi di replica integrati in SQLServer perchè, purtroppo, il sistema da dove vengono prese le informazioni non è toccabile, quindi sqlserver non può farci accessi diretti

  8. #8
    Originariamente inviato da HammerOn
    secondo me squid70 ha dato una buona soluzione (sicuramente migliore della mia zappa e riscrivi)...però ha un bug, non posso sapere se è stata cancellata una riga...
    questa la risolvi facilmente con una LEFT JOIN (tua tabella LEFT JOIN altra tabella), e ti cancelli quei record che hanno la chiave a NULL in 'altra tabella'

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    76
    siamo sempre li ......non posso fare una join, perche il sistema di partenza non è SQL...

    cribbio è proprio una bella gatta da pelare...

  10. #10
    Originariamente inviato da HammerOn
    riccardone, purtroppo non posso utilizzare i sistemi di replica integrati in SQLServer perchè, purtroppo, il sistema da dove vengono prese le informazioni non è toccabile, quindi sqlserver non può farci accessi diretti
    Non mi è chiaro come fai a ricevere i dati, su file di testo?
    Se non puoi usare la replica, puoi usare un pacchetto di integration services (SSIS) la cui esecuzione è schedulabile e al cui interno puoi leggere i dati da qualsiasi posto file di testo web service o chissà cos'altro, trasformarli se ne hai bisogno e caricarli in una destinazione che può essere la tua tabella replica.
    Saluti a tutti
    Riccardo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.