Czasem istnieje potrzeba przeniesienia plików bazy tempdb z jednej lokalizacji do drugiej. Sam osobiście spotkałem się z przypadkiem gdzie pliki tejże bazy znajdowały się w domyślnej lokalizacji na dysku systemowym co jak wiemy nie jest najlepszym rozwiązaniem z kilku powodów. Samo przeniesienie nie jest wybitnie skomplikowane co postaram się przedstawić poniżej.
Na samym początku warto zdiagnozować gdzie znajdują się pliki systemowe naszej bazy danych – posłużą nam do tego widoki systemowe pod postacią sys.master_files. Widok ten zwraca dane na temat plików wszystkich baz danych dlatego też należy go przefiltrować tak aby pokazywał tylko informacje na temat plików bazy tempdb. Aby poznać identyfikator interesującej nas bazy danych najprościej będzie użyć funkcji DB_ID():
select DB_NAME(database_id) AS DatabaseName, file_id, type_desc, name, physical_name from sys.master_files where database_id=DB_ID(N'tempdb')
Powyższy rezultat jest jedynie podzbiorem informacji zawartych w widoku systemowym jednakże na ten moment jest to dla nas wiedza wystarczająca. Dane te możemy również otrzymać używając procedury systemowej o nazwie sp_helpfile, która zwraca ustawienia plików dla bieżącej bazy danych – sprawdźmy jego działanie:
USE tempdb GO sp_helpfile
Otrzymaliśmy analogiczne do poprzedniego przypadku informacje uzupełnione o rozmiary plików i ich przyrost. Osobiście zawsze wolę używać widoków systemowych jednakże korzystanie z procedur tego typu też jest w porządku. Tak więc stwórzmy sobie folder na dysku, który będzie nam służył za nową lokalizację plików bazy tempdb – będzie się on znajdował się w lokalizacji C:\Program Files\Tempdb_Files (wiem, że nie jest to wielka zmiana jednakże na ten moment wystarczająca). Teraz aby zmienić lokalizację wystarczy wykonać komendę ALTER DATABASE MODIFY FILE tak jak zostało to przedstawione poniżej :
USE master GO ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'C:\Program Files\Tempdb_Files\tempdev.mdf') GO ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'C:\Program Files\Tempdb_Files\templog.ldf') GO ALTER DATABASE tempdb MODIFY FILE (NAME = temp2, FILENAME = 'C:\Program Files\Tempdb_Files\temp2.ndf') GO ALTER DATABASE tempdb MODIFY FILE (NAME = temp3, FILENAME = 'C:\Program Files\Tempdb_Files\temp3.ndf') GO ALTER DATABASE tempdb MODIFY FILE (NAME = temp4, FILENAME = 'C:\Program Files\Tempdb_Files\temp4.ndf') GO
Zapytanie to musiało zostać wykonane osobno dla każdego pliku gdzie wskaźnikiem do pliku jest jego nazwa logiczna. Po wykonaniu powyższego zestawu otrzymamy następujący komunikat:
The file "tempdev" has been modified in the system catalog. The new path will be used the next time the database is started. The file "templog" has been modified in the system catalog. The new path will be used the next time the database is started. The file "temp2" has been modified in the system catalog. The new path will be used the next time the database is started. The file "temp3" has been modified in the system catalog. The new path will be used the next time the database is started. The file "temp4" has been modified in the system catalog. The new path will be used the next time the database is started.
Tak więc na ten moment modyfikacja plików wymaga zrestartowania usługi – zmodyfikowane przez nas dane zostały zapisane jednakże fizyczna modyfikacja zostanie wykonana po restarcie. Zróbmy więc to – zrestartujmy usługę używając Configuration Manager (więcej o tym narzędziu i o usługach SQL Server możecie przeczytać tutaj). Po restarcie nasze pliki powinny zostać utworzone w nowej lokalizacji – aby to sprawdzić możemy ponownie odpytać widok systemowy sys.master_files:
Jak widać wszystko przebiegło bez większych problemów. Cały proces jest bardzo prosty i stosunkowo szybko możemy osiągnąć pożądany efekt jednakże zawsze może pojawić się jakaś przeszkoda jak np. to że pomyliliśmy się i podaliśmy błędną ścieżkę do nowych plików – jak to naprawić? Uruchamiając usługę SQL Server z ustawieniami minimalnymi, ale to już temat na osobny artykuł. Mam nadzieję, że teraz będziecie potrafili przenosić pliki tempdb i umieszczać je w pożądanych lokalizacjach 🙂
- Avoiding Issues: Monitoring Query Pushdowns in Databricks Federated Queries - October 27, 2024
- Microsoft Fabric: Using Workspace Identity for Authentication - September 25, 2024
- Executing SQL queries from Azure DevOps using Service Connection credentials - August 28, 2024
Nigdy nie miałem takiej potrzeby, by przenosić pliki baz systemowych. Ale faktycznie, dobrze jest się nad tym zastanowić, bo czasami może zajść taka potrzeba. Zwłaszcza jeśli poprzedni DBA instalował SQL Servera z domyślnymi ustawieniami (wszystko na jednej partycji: pliki baz systemowych, logi transakcyjne i pliki baz danych).
Czy baza tempdb musi być umieszczona na dysku fizycznym, czy można ją umieścić w pamięci operacyjnej? Tak analogicznie do baz in-memory?
Baza tempdb działa mniej więcej tak jak standardowa baza danych – tak więc musi posiadać pliki fizyczne.
A jak sprawa wygląda z pozostałymi bazami sys – master i msdb?
Tutaj raczej jak ze zwykłymi bazami:
– stop usługi
-detach database
– fizyczne skopiowanie 4 plików (mdf i ldf) do nowej lokalizacji
-attach database
– start usługi.