SQL Server : déplacer les fichiers du tempdb avec un bloc T-SQL
Le Transact-SQL est un langage de programmation à part entière avec ses types de données, variables, structures conditionnelles et répétitives. Les langages qui s’appliquent aux moteurs de bases de données incluent la prise en charge des curseurs, c’est-à-dire des espaces mémoires qui nous permettent de prendre en charge des tableaux de données issus d’instructions SELECT.
Pour visualiser l’emplacement des fichiers associés au tempdb, exécutez cette requête d’une vue appartenant au dictionnaire de données de SQL Server :
SELECT name,physical_name FROM tempdb.sys.database_files; GO
A partir de ce curseur, nous pourrons récupérer les champs name et physical_name de la vue passée en curseur et les affecter aux variables @strLogical et @strPhysical.
Le bloc Transact-SQL ci-dessous déplace les fichiers dans D:\MSSQL16.INSTANCE_DENIS\MSSQL\TEMPDB\, sur lequel vous devrez donner les droits au compte qui lance le process SQL Server, NT Service\MSSQLServer dans l’exemple ci-dessous.
DECLARE @strLogical VARCHAR(7), @strPhysical VARCHAR(260),@strSql VARCHAR(MAX), @str; DECLARE cursTempdb CURSOR FOR SELECT name,physical_name FROM tempdb.sys.database_files; OPEN cursTempdb; FETCH NEXT FROM cursTempdb INTO @strLogical,@strPhysical; USE master; WHILE @@FETCH_STATUS=0 BEGIN SET @strPhysical=RIGHT(@strPhysical,CHARINDEX('\',REVERSE(@strPhysical))-1); SET @strSql='ALTER DATABASE tempdb MODIFY FILE (name='+@strLogical+',FILENAME=''D:\MSSQL16.INSTANCE_DENIS\MSSQL\TEMPDB\'+@strPhysical+''')'; -- PRINT @strSql; EXEC(@strSql); FETCH NEXT FROM cursTempdb INTO @strLogical,@strPhysical; END; CLOSE cursTempdb; DEALLOCATE cursTempdb; GO