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:

1BACKUP 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:

1BACKUP 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

01--------------------------------------------------------------------------------------
02-- Script     : AutomaticCreatedDatabases.sql
03-- Author     : Dariusz Brejnak aka 'DBSoft (c) 2010
04-- Created    : 2010-08-26
05-- Modified   : 2010-08-26
06-- Description: script designed to automatically create the databases on the SQL server.
07----------------------------------------------------------------------------------------
08USE master
09GO
10DECLARE @DBName varchar(255)
11DECLARE @DB_Fetch int
12-- Declare Cursor
13DECLARE DB_Cursor CURSOR FOR
14SELECT
15DATABASE_NAME   = db_name(s.dbid)
16FROM
17[master].[dbo].[sysdatabases] s
18WHERE
19( -- exclude master, model, tempdb, msdb or other
20db_name(s.dbid) not in ('master','model','tempdb','msdb')
21)
22-- Not multiple line
23GROUP BY s.dbid
24ORDER BY DATABASE_NAME
25PRINT '-- AutomaticCreatedDatabases.sql  script '
26PRINT '-- generated:'
27PRINT ''
28OPEN DB_Cursor
29FETCH NEXT FROM DB_Cursor INTO @DBName
30WHILE @@FETCH_STATUS = 0
31BEGIN
32PRINT 'CREATE DATABASE [' + @DBName + ']'
33PRINT 'GO'
34FETCH NEXT FROM DB_Cursor INTO @DBName
35END
36CLOSE DB_Cursor
37DEALLOCATE DB_Cursor
38PRINT ''
39PRINT '--------------------------------------'

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.