[TRANSAC-SQL] Problème dbcc shrinkfile
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 :
Code:
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 |
le problème c'est que j'obtient l'erreur suivante quand je l'insère dans un job :
Code:
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] |
Cette erreur apparait en fait car je ne suis pas positionné sur la base avant de faire le shrinkfile.
Mais quand j'essaye de faire un "USE @dbname" j'obtient l'erreur suivante :
Code:
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. |
Comment faire autrement.
Merci d'avance