https://login.veeam.com/fr/oauth?client_id=nXojRrypJ8&redirect_uri=https%3A%2F%2Fwww.veeam.com%2Fservices%2Fauthentication%2Fredirect_url&response_type=code&scope=profile&state=eyJmaW5hbFJlZGlyZWN0TG9jYXRpb24iOiJodHRwczovL3d3dy52ZWVhbS5jb20vZnIva2IxOTUzIiwiaGFzaCI6ImYzNTk2MTRkLWEwM2UtNDQwNi1hYmExLTJmM2YxYjA4MTA4ZSJ9
+33 (805) 080 476 | 08:00 - 18:00 CET
FR

Failed to execute SQL scripts for Database

Challenge

La mise à jour de Veeam Backup & Replication 7 vers la V8 peut échouer avec "Failed to execute SQL scripts for Database <Databasename>"

Cause

Ce problème est causé après les mediapools qui ne sont liés à aucune librairie mais qui contiennent encore des cassettes entières. Cela peut survenir quand la librairie ou le lecteur en "standalone" a été remplacé, et que les tape mediapools et les cassettes ont été migrés manuellement sur la nouvelle librairie / lecteur en "standalone" sans avoir nettoyé les anciennes entrées.

Les logs affichent une erreur comme ci-dessous :  
***Veeam*** SRV: [timestamp]:<00000001> [VEEAM|ERROR] ExecuteNonQuery failed for Database 'VeeamBackup'. (Microsoft.SqlServer.Management.Smo.FailedOperationException)
...
***Veeam*** SRV: [timestamp]:<00000001> [VEEAM|ERROR] Cannot insert the value NULL into column 'media_pool_id', table 'VeeamBackup.dbo.Tape.tape_mediums'; column does not allow nulls. UPDATE fails.

Solution

Exécutez le script SQL suivant pour finir le nettoyage, après cela vous pouvez procéder avec la mise à jour habituelle :

USE VeeamBackup

DECLARE @id uniqueidentifier

DECLARE c CURSOR FOR
    SELECT
        t.id
    FROM
        [Tape.tape_mediums] t
        INNER JOIN [Tape.media_pools] m ON t.media_pool_id = m.id
    WHERE
        NOT EXISTS(SELECT * FROM [Tape.libraries] l WHERE l.id = m.library_id)

OPEN c
    
WHILE 1 = 1
BEGIN
    FETCH NEXT FROM c INTO @id
    if (@@FETCH_STATUS <> 0)
        BREAK

    EXEC [Tape.delete_tape_medium_from_catalogue] @tape_medium_id = @id
    DELETE FROM [Tape.tape_mediums] WHERE id = @id
END

CLOSE c
DEALLOCATE c

BEGIN
    DELETE FROM [dbo].[Tape.media_pools]
    WHERE
    NOT EXISTS(SELECT 1 FROM [dbo].[Tape.libraries] l where l.id = library_id)
END

More information

Veuillez consulter l'article suivant sur la façon de lancer les scriptes SQL : http://www.veeam.com/kb1443
KB ID:
1953
Product:
Veeam Backup & Replication
Version:
8.x
Published:
2014-11-13
Last Modified:
2020-08-13
Veuillez évaluer l’utilité de cet article :
5/5 d’après 1 évaluation
Thank you for helping us improve! : Merci de nous aider à nous améliorer !
An error occurred during voting. Please try again later.

Vous n'avez pas trouvé ce que vous cherchiez ?

Ci-dessous, vous pouvez envoyer une idée pour un nouvel article de base de connaissances.
Report a typo on this page:

Please select a spelling error or a typo on this page with your mouse and press CTRL + Enter to report this mistake to us. Thank you!

Spelling error in text

Knowledge base content request
En envoyant ce formulaire, vous acceptez que vos données à caractère personnel soient traitées par Veeam conformément à sa charte de confidentialité.
Your report was sent to the responsible team. Our representative will contact you by email you provided.
We're working on it please try again later