it-swarm-eu.dev

Jak připojím databázi na serveru SQL?

Některé běžné otázky týkající se připojování databází na serveru SQL:

  • Co to znamená připojit nebo odpojit databázi?
  • Jak odpojím databázi?
  • Jak připojím databázi?
    • Co to znamená připojit a znovu vytvořit protokol?
  • Jak to mohu udělat v SQL Server Express?
  • Kdy mohu zvážit odpojení a připojení?
  • Existují nějaká rizika nebo varování?
  • A co připojení mezi verzemi a vydáními serveru SQL? (Standard pro Enterprise? 2000 až 2008? 2012 až 2008?)
32
Mike Walsh

Co je odpojit nebo připojit a jak fungují?

Začneme s odpojením Když odpojíte databázi na serveru SQL, převedete databázi do režimu offline a odeberete ji z instance serveru SQL, ze které odděluješ to. Databázová data a soubory protokolu zůstávají v kontaktu a jsou ponechány v konzistentním stavu, takže můžete databázi připojit později nebo k jiné instanci serveru SQL. Připojit spojí data a soubory protokolu z databáze, která byla správně odpojena (nebo která byla zkopírována z čistě vypnuté instance serveru SQL) do instance serveru SQL a přináší databázi online.

Jak odpojím databázi?

To lze provést v T-SQL nebo z rozhraní SQL Server Management Studio GUI.

V GUI klikněte pravým tlačítkem na databázi, kterou chcete odpojit, vyberte All Tasks a klikněte na Detach. Odtud se zobrazí dialog pro odpojení. Můžete se rozhodnout, že zrušíte připojení, abyste násilně odpojili všechna aktivní připojení a vrátili práci, která byla uprostřed provádění. Můžete také zvolit aktualizaci statistik před odpojením. Detaching through - Choose Detach...

V T-SQL:

-- You don't want to be in the database you are trying to detach
USE Master
GO

-- Optional step to drop all active connections and roll back their work
ALTER DATABASE DatabaseName
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

-- Perform the detach
EXEC sp_detach_db 'DatabaseName'
GO

Pro systémovou proceduru uloženou sp_detach_db existují dva parametry, které můžete volitelně předat:

  • @skipchecks - přijatelný vstup je 'True' nebo 'False' if 'True', SQL Server aktualizuje statistiky před odpojením. Pokud 'False' to nebude. Pokud zde nezadáte nic, budou statistiky aktualizovány v SQL Serveru 2005 nebo novějším.
    • @keepfulltextindexfile - Výchozí nastavení je 'True' - pokud je nastavena na true, metadata fulltextového indexu nebudou během odpojení zrušena.

Chcete-li vidět mnohem více o odloučení a některých dalších podrobnostech o rizicích, které zvýrazňuji níže, Knihy Online článek pro sp_detach_db je dobré místo, kde začít.

Jak připojím databázi?

Můžete to také provést v T-SQL nebo z GUI SQL Server Management Studio.

( POZNÁMKA: Pokud máte data a soubory protokolu z databáze, která nebyla správně odpojena, váš příloha nemusí fungovat. Když dojde k odpojení, databáze je offline a soubory protokolu a datové soubory jsou uvedeny do konzistentního stavu. K tomu také dochází, když je služba čistě vypnuta. )

V GUI klikněte pravým tlačítkem na složku nejvyšší úrovně Databases pro vaši instanci a vyberte Attach. V dalším dialogu byste pak vybrali primární datový soubor (.MDF) databáze, kterou chcete připojit, a zajistili, aby byly vybrány další soubory a jejich vhodná umístění, a klikněte na OK, připojte databázi.

V T-SQL je nejlepším způsobem, jak toho dosáhnout v SQL Server 2005 a vpřed, prostřednictvím CREATE DATABASE příkaz. Toto je metoda, která je podporována i mimo SQL Server 2012. Pokud chcete vidět, jak používat sp_attach_db, můžete to vidět v článcích o knihách online pro [sp_attach_db][3] nebo [sp_attach_single_file_db][4]

Pokud máte k dispozici svůj soubor protokolu a datové soubory a jsou konzistentní, jedná se o přístup T-SQL:

- Připojit pomocí Vytvořit databázi a klauzuli FOR ATTACH

CREATE DATABASE DatabaseName 
    ON (FILENAME = 'FilePath\FileName.mdf'), -- Main Data File .mdf
    (FILENAME = 'FilePath\LogFileName.ldf'), -- Log file .ldf
     (FILENAME = 'FilePath\SecondaryDataFile.ndf)  -- Optional - any secondary data files
    FOR ATTACH 
GO 

Další informace o příkazu Create Database najdete také v knihách online.

Jak mohu odpojit/připojit v SQL Server Express?

Je to vlastně to samé. Pokud používáte SQL Server Management Studio Express, můžete použít dialog odpojit/připojit ve výše popsaném GUI nebo kroky T-SQL prostřednictvím SSMS Express popsaného výše. Žádný rozdíl tam není.

Pokud nemáte SSMS Express, můžete si jej stáhnout ( zde je verze SQL Server 2012 Express).

Z toho můžete vstoupit do relace SQLCMD a použít stejné konstrukty T-SQL popsané výše.

Kdy mám zvážit provedení odpojení nebo připojení?

Nejprve slovo o tom, k jakému účelu není odpojení a připojení použito: Zálohování a zotavení Odpojení a připojení není způsob, jak zálohovat databázi pro rutinu účely zotavení. Neexistují žádné zálohy protokolu transakcí tímto způsobem, staví vaši databázi do stavu, ve kterém mohou být databázové soubory omylem smazány a pro tento účel není vůbec dobrý.

To znamená, že odpojení a připojení jsou dobré pro několik případů použití (ne vyčerpávající, bez obav upravte a přidejte nebo vytvořte novou odpověď s více):

  • Někdy pro migrace (i když dávám přednost zálohování/obnově pro ty, jak je uvedeno v mé odpovědi zde )
  • Pokud chcete odebrat databázi, která již není aktivně používána, ale máte možnost se k ní později připojit podle potřeby.
  • V určitých situacích pro odstraňování problémů to může být vyžadováno
  • Nemáte prostor pro zálohování nebo obnovení datových a logových souborů do jiného prostředí (neměli byste tu nikdy být, ale použil jsem jej k přesunu dev databází do prostředí občas .. Nechtěl ani nepotřeboval protokol také připojil/znovu vytvořil soubor protokolu)

Rizika a varování

Knihy online jsou opět dobrým zdrojem zde , ale budu vyžadovat určité konkrétní úvahy, které je třeba mít na paměti při odpojování nebo připojování databáze -

Odpojit

  • Berete databázi do režimu offline. Už to nebude přístupné. To by mělo být zřejmé, ale stojí za to zavolat. Proto to není skvělá možnost zálohování.
  • Když je databáze online, SQL Server soubory uzamkne. Nedoporučoval bych to zkusit, abych se prokázal špatně, protože by při hře mohla být jiná situace, ale obvykle není možné odstranit databázový soubor (data, sekundární data nebo soubor protokolu), když je SQL Server online. To je dobrá věc. Když se odpojíte, nemáte žádnou takovou ochranu - to může být špatná věc.
  • Pokud se zabýváte poškozením databáze a najdete nějaký článek někde, kde je první krok Detachu - je to špatně - pokud odpojíte poškozenou databázi, to může být. Možná nebudete znovu připojovat tuto databázi.
  • Vyjmutí a vložení produkčních databázových souborů do sítě je způsob, jak potenciálně zavést poškození na úrovni souborů. Dalším důvodem, proč při migracích dávám přednost zálohování/obnově.
  • Mohlo by to způsobit selhání plánu údržby. Situace je taková, že jste stejně jako já nastavili plán údržby pro pravidelné zálohování všech databází, aniž byste ověřovali osvědčené postupy. Funguje to dobře, takže o tom přestanete přemýšlet. Někdo jiný se pak rozhodne vzít databázi, kterou nepoužívá offline. Plán údržby od tohoto okamžiku selže, dokud neupravíte plán údržby zaškrtnutím možnosti „ignorovat databáze, jejichž stav není online“ v dialogu „Databáze (databáze)“. Všimněte si, že to nejen selže pro offline databázi - plán údržby selže s chybou v okamžiku, kdy se pokouší zálohovat offline databázi, takže některé online databáze nemusí být zálohovány. (jiný autor pro tento bod zacházejte s podezřením)

Attach - Stejně jako byste neměli spouštět skripty z internetu ani přijímat balíčky od cizinců na letišti, neměli byste připojovat databázi, kterou jste získali od někdo jiný bez nějakých kroků k ověření. Tato databáze může obsahovat kód uvnitř spouštěčů, uložených procedur atd., Které by mohly ohrozit vaše prostředí. Měli byste zkontrolovat databázi, kterou chcete připojit, v bezpečném a firewallovaném prostředí, nikoli ve vašem výrobním systému.

A co různé verze nebo vydání serveru SQL?

Nejedná se o jiná pravidla než o obnovení databází mezi verzemi. Obecně lze obnovit až na další verzi pro 3 verze (například bude fungovat SQL Server 2008 až SQL Server 2012. SQL Server 2000 na SQL Server 2012 nebude). Přes zálohování/obnovení nebo odpojení/připojení se nemůžete vrátit zpět - museli byste skriptovat objekty a skriptovat přílohy a provádět to ručně nebo pomocí nástroje, který to dělá. U vydání se můžete obecně pohybovat mezi hlavními SKU serveru SQL - například můžete přesunout databázi ze Standardu do Enterprise bez další práce. Pokud používáte funkce Enterprise (Řekněte, komprese nebo rozdělení), musíte je před provedením přesunu deaktivovat. Můžete získat představu o funkcích, které byste měli zvážit deaktivovat hledáním zde .

33
Mike Walsh