Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Hromadna migracia stoviek db MSSQL

Mam MSSQL, kde je asi 150-200 db v sucasnosti.
Ako ich elegantne previest na iny server? Verzie mam cca posledne, respektive jeden server je asi rok stary a druhy je novy, takze myslim, ze sa tam nejaky drobny rozdiel vo verzii bude.
Staci mi preniest db, userov uz mam.
Moj navrh by bol, ze si spravim skript, ktory mi hromadne detachne vsetky db, nakopirujem ich fyzicky na druhy server a tam ich pripojim?
Tolko teoria, v praxi neviem, ci je toto dobry sposob a ci to budem schopny uskutocnit.
Alebo pouzit nieco v style mass backup a mass restore?
Hladal som nejake nastroje, co by to elegantne zvladlia cuduj sa svete k nicomu som sa zatial nedopatral.

Předmět Autor Datum
S MSSQL jsej už léta nedělal, navíc s tolika db. S MySQL nebo Postgre bych to prostě na férovku zkop… nový
Rce 23.05.2023 22:58
Rce
Pokial nie je moznost preniest disky do noveho servera, tak asi jedine kopirovat db subory (pri 150-… nový
Michal2 23.05.2023 23:14
Michal2
Backup/restore, stejně jako detach/attach fungovat bude. Jen to druhé bude mnohem rychlejší. Jinak… nový
Jan Fiala 24.05.2023 07:55
Jan Fiala
No, ale toho sa ja obavam..."detach all" by este asi isiel spravit hromadne, ale pri tom pripajacom… nový
fleg 24.05.2023 16:33
fleg
3 parametry (jméno DB + 2 soubory MDF a LDF) jsou "kopec udaju"? Min parametru uz tam ani dat nemuze… poslední
Jan Fiala 24.05.2023 17:25
Jan Fiala

3 parametry (jméno DB + 2 soubory MDF a LDF) jsou "kopec udaju"? Min parametru uz tam ani dat nemuzes

Co ti brani si to vybrat, udelat z toho skript a pak spustit?

Tohle ti vypise vsechny DB vcetne souboru

SELECT
    db.name AS DBName,
    type_desc AS FileType,
    Physical_Name AS Location
FROM
    sys.master_files mf
INNER JOIN 
    sys.databases db ON db.database_id = mf.database_id

A ty z toho potrebujes udelat skript:

CREATE DATABASE MyAdventureWorks   
    ON (FILENAME = 'C:\MySQLServer\AdventureWorks2012_Data.mdf'),  
    (FILENAME = 'C:\MySQLServer\AdventureWorks2012_Log.ldf')  
    FOR ATTACH;  

Takze si spust tohle, zkopiruj sloupec a mas rovnou skript na hromadne pripojeni vsech DB:

select prikaz = 'create database ' + db.name + ' on (filename = ''' + mf.Physical_Name + '''), (filename = ''' + lf.physical_name + ''') for attach; go;' 
  from sys.databases db
  join sys.master_files mf ON db.database_id = mf.database_id and mf.type_desc = 'ROWS'
  left outer join sys.master_files lf ON db.database_id = lf.database_id and lf.type_desc = 'LOG'
  where not db.Name in ('master', 'tempdb', 'model', 'msdb')

Predpokladem je, ze kazda databaze ma jen MDF a LDF soubor, neni rozhozena do vice souboru. Ale to si zkontrolujes prvnim vypisem
Podobne si muzes udelat skript na detach vseho, ten bude jednodussi, protoze ti staci vypis ze sys.master_files

Zpět do poradny Odpovědět na původní otázku Nahoru