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