Klonowanie bazy danych w SQL Server

Czasami potrzebujemy coś przetestować, ale nie chcemy (lub nawet nie możemy) zrobić tego na aktualnej bazie. Dlatego dziś przedstawię trzy proste sposoby, jak klonować naszą bazę, by móc na niej działać bez szkody dla oryginału. Nie będziemy wykorzystywać żadnych dodatkowych narzędzi firm trzecich – wszystko robimy z poziomu Management Studio.

Sposób 1: Skrypty

Klikając prawym przyciskiem myszy na bazę w eksploratorze Management Studio mamy opcję Script Database as… -> CREATE to… -> New Query Editor Window. Utworzy nam się skrypt definiujący bazę, jej ustawienia. Ale – samą bazę, bez tabel. Te musimy przenieść w analogiczny sposób, czyli klikając prawym przyciskiem na tabelę i wybierając opcję Script Table as… -> CREATE To -> New Query Editor Window. Uzyskujemy schemat tabeli, łącznie z ustawieniami i relacjami. Sam schemat – bez danych.

Ten sposób jest prosty, ale mało wygodny, no i nie sprawdzi się jeżeli mamy dużo tabel. Do przeniesienia kilku tabel między bazami – tak, do większej “przeprowadzki” już nie.

Sposób 2: CLONEDATABASE

Jeżeli działamy na SQL Server w wersji 2012 lub wyższej, możemy skorzystać z tak zwanych DataBase Console Commands. Wszystko, co musimy zrobić by sklonować bazę, ogranicza się do napisania jednej linijki:

W nawiasie podajemy nazwę bazy oryginalnej i drugą, którą otrzyma nasz klon. I już, zrobione. Podobnie jak w przypadku skryptów – przeniesiony zostaje sam schemat, bez danych.

Sposób ten oferuje też dodatkowe możliwości, np sprawdzenie poprawności nowo utworzonej bazy czy zrobienie jej backupu. Po więcej informacji odsyłam do dokumentacji.

Sposób 3: Backup-Restore

Trzeci sposób to zrobienie backupu bazy oryginalnej (prawy przycisk myszy na bazę -> Tasks -> Back Up…), a następnie odtworzenie jej jako nowej bazy.

Możemy utworzyć nową bazę, kliknąć na nią PPM, wybrać Tasks -> Restore, następnie wybrać plik będący backupem bazy wzorcowej. W opcjach musimy zaznaczyć Overwrite the existing database (jeśli tego nie zaznaczymy, przywracanie nie powiedzie się).

Ta opcja, jako jedyna z tu prezentowanych, utworzy nam kopię bazy wraz z danymi – a to może być czasem pożądane.

Bonus: Pobieranie danych z wielu baz jednocześnie

Co, jeśli chcielibyśmy pobrać dane z kilku baz jednocześnie? Da się?

Nie dość, że się da, to jest to bardzo proste. Wystarczy przed nazwą tabeli podać nazwę bazy (i schemat), z której tą tabelę chcemy pobrać. Czyli, mając tabele Northwind i Northwind_Clone, nasze zapytanie może wyglądać np tak:

SELECT 'N', * FROM [Northwind].[dbo].[Categories]
UNION ALL
SELECT 'N_Clone', * FROM [Northwind_Clone].[dbo].[Categories]

W analogiczny sposób możemy też zrobić join między tabelami na różnych bazach.