10. 7. 2007

 

Obnova databáze na SQL Serveru na "100 %"

Řešil jsem následující požadavek:

"Potřebuji zazálohovat ostrou databázi a obnovit ji do cvičné s tím, že cvičná databáze může existovat a mohou v ní být přihlášeni uživatelé. V tom případě je chci odpojit a obnovu provést."

Jelikož výchozí chování obnovy (SQL-příkazu RESTORE DATABASE) je, že pokud jsou v obnovované databázi přihlášení uživatelé, tak selže na chybovou hlášku:

Server: Msg 3102, Level 16, State 1, Line 1
RESTORE cannot process database 'Cvicna' because it is in use by this session. It is recommended that the master database be used when performing this operation.
Server: Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

A protože vím, že až to budu příště potřebovat, tak bych ten skript určitě vymýšlel znovu, tak si ho znamenám sem.

--záloha databáze Ostra
BACKUP DATABASE Ostra TO DISK='C:\ZALOHA\Ostra.bak' WITH INIT

--obnova do Cvicne; pokud databáze existuje, dej ji
--natvrdo OFFLINE, abys vykilloval případné uživatele

USE master

IF DB_ID('Cvicna')IS NOT NULL
  ALTER DATABASE Cvicna SET OFFLINE WITH ROLLBACK IMMEDIATE

RESTORE DATABASE Cvicna
FROM DISK='C:\ZALOHA\Ostra.bak'
WITH FILE=1,
MOVE 'Ostra'     TO 'C:\DATA\Cvicna.mdf',
MOVE 'Ostra_log' TO 'C:\DATA\Cvicna_log.ldf',
REPLACE

Skript funguje od verze SQL Serveru 2000.

Štítky:

Komentáře:
Fajn, jen mám dotaz. Nechybí tam nastavení cvičné opět do On-line režimu? Nebo je to zbytečné a po "REPLACE" se sama tak přepne??
 
Není to potřeba. "REPLACE" to samo přepne.
 
Okomentovat

Přihlášení k odběru Komentáře k příspěvku [Atom]





<< Domovská stránka