Kilka słów o tym jak przenieść pliki bazy tempdb

SQLServer_tempdb_move_00

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():

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:

 

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 :

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:

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 🙂

Adrian Chodkowski
Follow me

Adrian Chodkowski

SQL geek, Data enthusiast, Consultant & Developer
Adrian Chodkowski
Follow me

3 Comments

  1. Piotr Ziuziański

    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).

    Reply
  2. Gość

    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?

    Reply
    1. Adrian ChodkowskiAdrian Chodkowski (Post author)

      Baza tempdb działa mniej więcej tak jak standardowa baza danych – tak więc musi posiadać pliki fizyczne.

      Reply

Leave a Comment

Your email address will not be published. Required fields are marked *