Migrarea unei baze de date catre o versiune de SQL Server anterioara

Pentru a migra o baza de date la o versiune anterioara (de exemplu avem o baza de date de SQL Server 2008 si dorim sa o restauram pe o instanta de SQL Server 2005) nu sunt suportate optiunile bine cunoscute adica: detach - attach si backup - restore.

Pentru a migra o baza de date de la o versiune curenta la o versiune anterioara de SQL server vom folosi atat interfata SQL Server Management Studio cat si comenzi T-SQL.

Etape:

1. Generare script pentru intreaga baza de date si a obiectelor din aceasta: deschidem SQL Server Management Studio - Click dreapta pe baza de date - Tasks - Generate Scripts si alegem toate obiectele din baza respectiva, salvand scriptul intr-un fisier:

clip_image001

clip_image002

2. După generare script putem sa deschidem scriptul si sa verificam daca avem toate obiectele au fost create ( inclusiv index, key si alte obiecte).

Mergem pe instanta unde dorim sa importam baza de date, deschidem scriptul intr-un nou query si daca este nevoie modificam path-ul pentru locatia fisierelor necesare crearii bazei de date :

De exemplu in script vom avea:

CREATE DATABASE [AdventureWorks] ON PRIMARY

( NAME = N'AdventureWorks_Data', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.BEATRICE2008R2\MSSQL\DATA\AdventureWorks.mdf' , SIZE = 174080KB , MAXSIZE = UNLIMITED, FILEGROWTH = 16384KB )

LOG ON

( NAME = N'AdventureWorks_Log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.BEATRICE2008R2\MSSQL\DATA\AdventureWorks_1.ldf' , SIZE = 67584KB , MAXSIZE = 2048GB , FILEGROWTH = 16384KB )

GO

După modificarea locatiei fisierelor verificam datele din script si executam scriptul , astfel creem structura bazei de date cu toate obiectele in ea.

3. Al treilea pas consta in importarea propriu zisa a datelor. Pentru a face acest lucru, mergem pe instanta curenta si folosind Wizard-ul de Import and Export data, vom exporta datele in baza de date cu versiune anterioara. Pentru informatii de folosire a Wizard-ului de Import and Export data accesati link-ul: https://msdn.microsoft.com/en-us/library/ms141209(v=SQL.100).aspx

· Putem porni acest Wizard din meniul de Start, din SQL Server Management Studio, din Business Intelligence Development Studio sau chiar din linie de comanda How to: Run the SQL Server Import and Export Wizard ;

· In SQL Server Management Studio, conectati-va la Database Engine, click dreapta pe baza de date pe care dorim sa o exportam - Tasks - Export Data...;

· Se va deschide SQL Server Import and Export Wizard;

· Pe paginile de wizard corespunzatoare, selectati data source si data destination;

· Selectati optiunea ‘Copy data from one or more tables or views’;

· Selectati tabelele pe care doriti sa le copiati:

· Pentru tabelele unde aveti coloane cu proprietatea ‘IDENTITY’ , selectati tabelul, click pe ‘Edit Mappings…’ , selectati optiunea ‘Enable Identity Insert’, si click OK;

· Salvati si rulati pachetul;

· Verificati raportul pentru a verifica daca operatia a fost cu success sau daca aveti erori (in cazul in care apar erori, verificati mesajul de eroare si reveniti la pasul anterior pentru a elimina eroarea);

Pentru a verifica daca aveti acelasi numar de linii pentru toate tabelele din cele 2 baze de date (cea veche si cea restaurata) executati comanda urmatoare:

execute sp_MSforeachtable 'select count(*) from ?'

Importul si exportul de date poate fi facut folosind, flat files, fisiere Excel, SQL Server Native Client (eu sugerez folosirea ultimei optiuni);

De asememea pentru ca operatiile sa fie cu success (mai ales la nivel de primary key si foreign key ), acestea trebuie realizate de o persoana care sa cunoasca structura bazei de date .

După ce baza de date este restaurata, vom restaura loginuri-le folosind articolul KB urmator: https://support.microsoft.com/kb/918992

4. In cazul in care aveti joburi sau alerte configurate pentru aceasta baza de date, folosing link-ul https://support.microsoft.com/kb/314546 , putem sa le exportam , respectiv sa le importam in noua baza de date restaurata.