0
votes

Sauvegarde d'une table avant de supprimer tous les enregistrements et de la recharger en SSIS

  • J'ai une table nommée AbctBL , les données de là sont peuplées des autres tables d'une base de données différente. Chaque fois que je loge Données sur AbctBL , je fais une suppression de la totalité et du chargement du tampon données à elle.
  • Ce paquet fonctionne tous les jours. Ma question est comment puis-je éviter de perdre des données De la table AbctBL Si nous ne manquons pas de charger les données. Donc mon La première étape consiste à supprimer toutes les données de la AbctBL et ensuite sélectionner les données de différentes sources dans un tampon, puis Chargement des données tampons dans AbctBL .
  • Puisque nous pouvons rencontrer des problèmes tels que les connexions échouées, le paquet s'arrêter prématurément et les forces surnaturelles essayant d'arrêter / briser mon paquet de fonctionnement en douceur, etc. qui se retrouveront avec le paquet perdant toutes les données dans le tampon après avoir déjà supprimé les données de AbctBL .
  • Ma première intuition était de sauvegarder les données de la AbctBL dans un
    table de sauvegarde, puis supprimant les données dans la AbctBL mais mon dbas ne serait pas trop ravi de créer une table de sauvegarde dans chaque
    Environnement dans le but de ce forfait et me donnant jus de jus à
    créer des tables de sauvegarde à la volée, puis la supprimer à nouveau est hors de la question aussi. Ces données ne sont pas critiques commerciales et peuvent être repeuplées à nouveau si perdu.

    Mais quelle est la meilleure approche ici? Quelles sont les meilleures pratiques pour ce problème?


3 commentaires

Bienvenue. Veuillez ajouter du code, des exemples et des sorties que vous souhaitez dans votre question. Cela nous aidera à vous aider.


Sauvegardez-le dans une table #temp. Cela serait automatiquement supprimé lorsque la connexion est fermée, par ex. SELECT * IN #ABCTBL de ABCTBL Créerait la table TEMP #ABCTBL et insérez toutes les données de AbctBL dans une commande.


La meilleure approche est de demander à votre équipe et, surtout, la personne responsable. Il n'y a pas de meilleure pratique car l'ETL est toujours très spécifique aux exigences de l'entreprise. Vous avez dit que le processus peut être répété et que les données ne sont pas critiques. Alors pourquoi tu t'inquiètes? Si le processus échoue, il suffit de le réexécuter après avoir corrigé tout problème. Où sont vos besoins? Encore une fois, demandez à votre équipe de conseiller.


3 Réponses :


0
votes

essayer de comprendre cela mais je pense que ce que vous demandez est une méthode de capture des données plus anciennes avant de charger les nouvelles données. Je conviendrais avec votre DBA selon lequel une table séparée pour chaque rechargement serait extrêmement désordonnée et pas très utilisable si vous en avez besoin.
Au lieu de cela, créez une table qui copie votre table de charge mais ajoute un seul champ DateTime (Dites History_Date). Chaque charge vous allez simplement couler toutes les données de votre table principale sur la table de sauvegarde. Utilisez une tâche de colonne dérivée dans le flux de données pour ajouter la valeur historique_date à la table de sauvegarde.
Une fois la table de sauvegarde terminée, tronquez ou supprimez le contenu de la table actuelle. Puis chargez les nouvelles données.


0 commentaires

0
votes

Au lieu de créer des tables supplémentaires créées, vous pouvez définir le package pour exécuter comme une seule transaction. En faisant cela, si un composant échoue, toutes les tâches qui ont déjà exécutées seront laminées et les suivantes ne seront pas exécutées. Pour ce faire, définissez le transactionoption sur requis sur l'emballage. Cela permettra à l'emballage de commencer une transaction. Après cela, toute cette propriété sur prise en charge pour tous les composants que vous souhaitez réussir ou échouer ensemble. Le niveau supporté par aura ces tâches rejoindre une transaction déjà en cours par le conteneur parent, étant le package dans ce cas. S'il y a d'autres composants de l'emballage que vous souhaitez commiser ou Rollback indépendant de ces tâches, vous pouvez placer les objets associés dans un conteneur de séquence et appliquer le niveau requis à la séquence. Une chose importante à noter est que si quelque chose effectue un tronducate , tous les autres composants accédant à l'objet tronqué devront avoir le paramètre validateexternalmetadata défini sur false Pour éviter le problème de blocage connu qui en résulte.


0 commentaires

0
votes

Pour sauvegarder votre table, au lieu de charger des données d'une table (original) à une autre table (sauvegarde), vous pouvez simplement renommer votre table d'origine à quelque chose (table de sauvegarde), créer une table d'origine à nouveau comme le dos Table en haut puis laissez tomber la table renommée uniquement lorsque votre charge de données est réussie. Cela peut économiser un peu de temps pour transférer des données d'une table à une autre. Vous voudrez peut-être tester quelle approche est plus rapide pour vous en fonction de votre structure de données / table, etc., mais ce que je voulais mentionner, c'est aussi l'une des tâches de le faire. Si vous avez beaucoup de données dans ce tableau ci-dessous, l'approche peut être plus rapide.

DROP TABLE abcTbl_bkp;


2 commentaires

Aucune commande de ce type "renommer" en SQL. Il n'y a pas non plus une commande «créer ... comme» dans SQL.


Merci d'avoir attrapé ça! C'était la syntaxe MySQL, ne remarqua pas celui-ci était pour TSQL. Édité la syntaxe maintenant. Mais l'idée était de renommer cette table et de créer une nouvelle, puis de déposer la table de sauvegarde.