Problème de journalisation de transaction T-SQL

C'est une longue histoire, mais je travaille pour le département de search d'un système scolaire, et nous avons du boeuf avec notre département informatique. Il y a un certain time, le département informatique. m'a donné un server avec SQL installé dessus et essentiellement m'a dit que j'étais seul – ils ne vont pas aider avec la maintenance du server ou le fonctionnement en coulisses de la database SQL. Pour l'essentiel, cela me va bien, mais je ne suis pas un administrateur DB et je n'ai jamais été capable de résoudre la configuration des sauvegardes de bases de données et la journalisation des transactions.

Le problème que j'essaie de résoudre pour l'instant est la journalisation des transactions. Chaque nuit, j'utilise SSIS pour extraire une grande quantité d'loggings de notre database master dans ma database. J'ai découpé ce process en 18 étapes individuelles, et les étapes 9 et 15 consistent à faire des sauvegardes du journal des transactions. Malheureusement, mon process se bloque régulièrement à cause du remplissage du journal des transactions – parfois même à l'étape 10 juste après une sauvegarde. J'allais désactiver la journalisation au cours de mon process, mais j'ai lu et vu que vous ne pouvez pas désactiver la journalisation. J'espère qu'il existe une solution simple que je ne connais pas …

Je suis entrain de courir:

Microsoft SQL Server 2012 (SP3-GDR) (KB3194721) - 11.0.6248.0 (X64) Sep 23 2016 15:49:43 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor). 

Honnêtement, je ne sais même pas quel type d'logging de transaction je fais ou comment vérifier et découvrir.

Toute aide serait grandement appréciée

D'abord, quand vous dites,

Chaque nuit, j'utilise SSIS pour extraire une grande quantité d'loggings de notre database master dans ma database

Je présume que cela ne signifie pas littéralement la database maître du système. Si c'est le cas, il ne devrait pas y avoir d'objects user et il ne devrait pas traiter ou stocker de données user. Si c'est le cas, migrez-le vers une database user.

Deuxièmement, la réponse courte au problème de journalisation est la suivante: Le model de récupération par défaut pour une database est Full . Comme indiqué dans les commentaires, cela signifie qu'aucun journal n'est remplacé jusqu'à ce qu'une sauvegarde se produise. Ce model fonctionne pour la récupération ponctuelle et a un sens pour un système transactionnel. Donc, il y a quelques options:

  • S'il s'agit d'un système de reporting, il est généralement judicieux de le mettre dans simple recovery model et de faire des sauvegardes nocturnes. Surtout si datatables ne changent qu'une fois par jour.
  • Si vous avez besoin d'une récupération à la minute près, les sauvegardes de journal doivent être effectuées toutes les 15 minutes. Je suppose que la gestion et la conservation de ces sauvegardes n'auront aucun sens pour vous et vous devriez utiliser l'option 1.
  • Lors du traitement des données dans un stream de données SSIS, chaque tampon est validé un à la fois. Si vous n'avez pas sortingché avec les valeurs par défaut, cela signifie que vous commettez 10k lignes au maximum. Donc, tout est déjà bien rangé. Le problème n'est donc pas que les tailles de lots sont trop grandes, c'est que vous êtes dans le mauvais model de récupération ou que vous ne sauvegardez pas vos journaux assez souvent.