Bonjour,
Je suis débutant en TRANSAC-SQL.
J'ai essayer de faire un script qui tronque le transaction log de toutes les bases utilisateurs de mon serveur dont voici le code :
le problème c'est que j'obtient l'erreur suivante quand je l'insère dans un job :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 /*Procedure permettant de tronquer tous les logs de toutes base de données du server sauf les bases systeme (master,model,msdb,Northwind,pubs,tempdb)*/ CREATE PROCEDURE TRUNCATE_TRANSACTION_LOG_ALL_DB AS DECLARE @dbname varchar(50) DECLARE @logname varchar (50) DECLARE alldbname CURSOR FOR --On selectionne tous les noms des base dans la table sysdatabases SELECT name from master.dbo.sysdatabases; OPEN alldbname --On initialise la variable @dbname avec la première valeur renvoyée par la requête FETCH alldbname INTO @dbname --Tant que l'on a des résultats WHILE @@fetch_status = 0 BEGIN SET @logname = @dbname + '_log' -- Si la base n'est pas une base systeme if @dbname <> 'master' and @dbname <> 'model' and @dbname <> 'msdb' and @dbname <> 'Northwind' and @dbname <> 'pubs' and @dbname <> 'tempdb' BEGIN --On tronque le transaction log backup log @dbname with truncate_only dbcc shrinkfile (@logname, truncateonly) END --On initialise @dbname avec l'enregistrement suivant FETCH alldbname INTO @dbname END CLOSE alldbname DEALLOCATE alldname
Cette erreur apparait en fait car je ne suis pas positionné sur la base avant de faire le shrinkfile.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Msg 8985, Sev 16: Could not locate file 'xxxxx_log' in sysfiles. [SQLSTATE 42000] Msg 2528, Sev 16: DBCC execution completed. If DBCC printed error messages, contact your system administrator. [SQLSTATE 01000]
Mais quand j'essaye de faire un "USE @dbname" j'obtient l'erreur suivante :
Comment faire autrement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Server: Msg 154, Level 15, State 1, Procedure TRUNCATE_TRANSACTION_LOG_ALL_DB, Line 25 a USE database statement is not allowed in a procedure or trigger.
Merci d'avance
Partager