Ostatnio musiałem przenieść całą zawartość SQL Servera 2000 na inną maszyne. Od samego początku napotykałem problemy ale dzięki pomocy uzyskanej na forum Codeguru.pl i GoldenLine.pl zebrałem odpowiednią wiedzę, którą chce przedstawić poniżej.

1. Wykonanie kopii zapasowej dziennika transakcji za pomocą polecenia:


BACKUP LOG NazwaBazyDanych TO DISK='C:\NazwaBazyDanych_LogBackup.trn'

Wykonujemy to dla wszystkich baz danych umieszczonych na serwerze.
(Odpowiedni skrypt, który automatycznie wykonuje backup logu po „dopracowaniu” przedstawię wkrótce w osobnej poradzie.

2. Wykonanie kopii zapasowej bazy danych.
W celu wykonania kopii zapasowych bazy danych można użyć polecenia:

BACKUP DATABASE NazwaBazyDanych TO  DISK = C:\NazwaBazyDanych_Backup.bak'   WITH NOFORMAT, INIT,  NAME = N'NazwaBazyDanych - Full Database Backup',  SKIP, NOREWIND, NOUNLOAD,  STATS = 100;

Osobiście polecam użycie skryptu, który automatycznie wykona backup wszystkich baz danych zawartych na serwerze.

Skrypt taki napisałem , jego opis jak i kod umieściłem w poradzie:

Jak wykonać automatyczny backup i „zip” baz w MS SQL Server 2000 ?

(Wersja dla MS SQL Server 2005/2008 :

Jak wykonać automatyczny backup i „zip” baz w MS SQL Server 2005/2008 ? )

3. Na serwerze źródłowym należy uruchomić skrypt przedstawiony poniżej.
Wygeneruje on prosty kod służący do założenia pustych baz danych na serwerze docelowym.
Po uruchomieniu kopiujemy wygenerowany kod i uruchamiamy na serwerze docelowym


--------------------------------------------------------------------------------------
-- Script     : AutomaticCreatedDatabases.sql
-- Author     : Dariusz Brejnak aka 'DBSoft (c) 2010
-- Created    : 2010-08-26
-- Modified   : 2010-08-26
-- Description: script designed to automatically create the databases on the SQL server.
----------------------------------------------------------------------------------------
USE master
GO
DECLARE @DBName varchar(255)
DECLARE @DB_Fetch int
-- Declare Cursor
DECLARE DB_Cursor CURSOR FOR
SELECT
DATABASE_NAME   = db_name(s.dbid)
FROM
[master].[dbo].[sysdatabases] s
WHERE
( -- exclude master, model, tempdb, msdb or other
db_name(s.dbid) not in ('master','model','tempdb','msdb')
)
-- Not multiple line
GROUP BY s.dbid
ORDER BY DATABASE_NAME
PRINT '-- AutomaticCreatedDatabases.sql  script '
PRINT '-- generated:'
PRINT ''
OPEN DB_Cursor
FETCH NEXT FROM DB_Cursor INTO @DBName
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'CREATE DATABASE [' + @DBName + ']'
PRINT 'GO'
FETCH NEXT FROM DB_Cursor INTO @DBName
END
CLOSE DB_Cursor
DEALLOCATE DB_Cursor
PRINT ''
PRINT '--------------------------------------'

4. Na serwerze docelowym odtwarzamy stworzone w pkt 2. kopie baz danych, pamiętając o tym aby zaznaczyć opcję nadpisania istniejących baz danych (overwrite the existing database (WITH REPLACE).


Dariusz Brejnak

Od prawie trzydziestu lat jest pasjonatem informatyki, a zwłaszcza dziedzin dotyczących baz danych, hurtowni danych oraz ogólnie rozumianej tematyki BI. Jego druga pasja to fotografia http://dariuszbrejnak.pl

4 komentarze

roku · 11 września 2010 o 13:06

nie robienie backupu bazy master i msdb to DUŻY błąd

Dariusz Brejnak · 11 września 2010 o 13:15

Celowo jest wyłączony backup tych baz. Zawsze można włączyć. Jest to przykład, który można dostosować do swoich potrzeb. Mnie to służyło do przeniesienia danych na inny serwer z innymi bazami, więc nie mogłem podmienić master i msdb.

roku · 11 września 2010 o 13:50

msdb jaknajbardziej sie przenosi trzeba tylko potem update zrobic na tabeli z jobami w polu odpowiadającym za serwer docelowy (nie mam sql pod reką a nie chce zgadywac jak to pole sie nazywa)

Możliwość komentowania została wyłączona.