Як додати базу даних у SQL Server?


32

Деякі поширені питання, пов’язані з приєднанням баз даних у SQL Server:

  • Що означає приєднання чи вилучення бази даних?
  • Як вилучити базу даних?
  • Як додати базу даних?
    • Що означає прикріпити та відновити журнал?
  • Як це зробити в SQL Server Express?
  • Коли я можу розглянути питання про від'єднання та кріплення?
  • Чи є якісь ризики чи попередження?
  • А як щодо приєднання між версіями та виданнями SQL Server? (Стандарт для підприємств? 2000 - 2008? 2012 - 2008?)

Відповіді:


33

Що таке від'єднання чи прикріплення та як вони працюють?

Почнемо з відриву. Коли ви від'єднуєте базу даних у SQL Server, ви виймаєте базу даних в автономному режимі та видаляєте її з екземпляра SQL Server, з якого ви відлучаєте її. Дані баз даних і файли журналів залишаються в такті і залишаються в послідовному стані, щоб потім можна було приєднати базу даних в більш пізній момент або до іншого екземпляра SQL Server. Додавання з'єднує дані та файли журналів із належним чином відірваною базою даних (або скопійованою з чисто закритого екземпляра SQL Server) до екземпляра SQL Server та передає базу даних в Інтернеті.

Як вилучити базу даних?

Це можна зробити в T-SQL або в GUI SQL Server Management Studio.

У графічному інтерфейсі ви клацніть правою кнопкою миші на базі даних, яку ви хочете відключити, виберіть All Tasksі натисніть на Detach. Звідти ви отримаєте діалогове вікно від'єднання. Ви можете спочатку відмовитись від з'єднань, щоб примусово відключити будь-які активні з'єднання та роботу відкату, які вони були в середині виконання. Ви також можете оновлювати статистику перед загоном. Відкручування - виберіть «Від’єднати» ...

У 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

Для системної збереженої процедури sp_detach_db є два параметри, які можна додатково передавати:

  • @skipchecks- прийнятне введення є, 'True'або 'False'якщо 'True'SQL Server оновлюватиме статистику перед від'єднанням. Якщо ' False', це не буде. Якщо ви нічого не вкажете тут, статистика буде оновлена ​​в SQL Server 2005 або новіших версіях.
    • @keepfulltextindexfile- Тут за замовчуванням є 'True'- якщо для цього встановлено значення true, метадані повного тексту індексу не будуть скинуті під час від'єднання.

Для того, щоб побачити набагато більше про від'єднатися і деякої більш докладної інформації про ризики , я виділяю нижче, стаття Книги Інтернет для sp_detach_dbхорошого місце , щоб почати.

Як я можу долучити базу даних?

Ви також можете це зробити в T-SQL або в GUI SQL Server Management Studio.

( ПРИМІТКА. Якщо у вас є дані та файли журналів із бази даних, яка не була належним чином від'єднана, ваше вкладення може не працювати. Коли відбувається від'єднання, база даних переводиться в офлайн, а файли журналу та даних приводяться в узгоджений стан. Це також трапляється, коли послуга чисто закрита. )

У графічному інтерфейсі ви клацніть правою кнопкою миші на Databasesпапці верхнього рівня для свого примірника та виберіть Attach. У наступному діалоговому вікні ви виберете основний файл даних (.MDF) бази даних, який ви хочете долучити, і переконаєтесь, що вибрані інші файли та їх відповідні місця, та натисніть кнопку ОК, приєднавши свою базу даних.

У T-SQL найкращий спосіб зробити це в SQL Server 2005 і вперед - через CREATE DATABASEкоманду. Це метод, який підтримується за межами SQL Server 2012. Якщо ви хочете дізнатися, як їх використовувати sp_attach_db, ви можете бачити це в статтях онлайн-книг для книг [sp_attach_db][3]або[sp_attach_single_file_db][4]

Коли у вас є доступ до файлу журналу та файлів даних, і вони несумісні, це підхід T-SQL:

- Використовуючи створення бази даних та додаток для AT ATACH для додавання

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 

Докладніше про оператор « Створення бази даних» ви також можете побачити в книгах в Інтернеті.

Як від'єднати / приєднати в SQL Server Express?

Це насправді те саме. Якщо ви використовуєте SQL Server Management Studio Express, ви можете використовувати діалогове вікно "від'єднати / приєднати" в описаному вище графічному інтерфейсі або кроки T-SQL через SSMS Express, описані вище. Ніякої різниці з Експресом немає.

Якщо у вас немає SSMS Express, ви можете завантажити його ( Ось версія SQL Server 2012 Express).

Ви можете вступити в SQLCMDсеанс і використовувати ті самі конструкції T-SQL, як описано вище.

Коли я можу подумати про те, щоб зробити загін чи прикріпити?

По-перше, слово про те, що від'єднати та приєднати, не призначене для використання для: резервного копіювання та відновлення Detach і Attach - це не спосіб резервного копіювання вашої бази даних для рутинних цілей відновлення. Таким чином, немає резервного копіювання журналу транзакцій, він переводить вашу базу даних у такий стан, коли файли бази даних можуть бути видалені випадково, і зовсім не є хорошим способом для цієї мети.

Враховуючи це, вилучення та прикріплення є корисними для кількох випадків використання (не вичерпно, не соромтесь редагувати, щоб додати або створити нову відповідь з більшою кількістю):

  • Іноді для міграцій (хоча я віддаю перевагу резервного копіювання / відновлення для тих, про які йдеться у моїй відповіді тут )
  • Коли ви хочете видалити базу даних, яка більше не використовується активно, але маєте можливість приєднуватись пізніше, за необхідності.
  • У певних ситуаціях усунення несправностей це може бути застосовано
  • У вас немає місця для резервного копіювання або відновлення як даних, так і файлів журналів в іншому середовищі (ви ніколи не повинні бути тут, але я використовував це для переміщення баз даних розробників по середовищах часом. Не хотів і не потребував журнал, таким чином, зробив вкладення / відновлення файлу журналу)

Ризики та попередження

Знову ж , книги онлайн хороший ресурс тут , але я буду називати деякі конкретні міркування , щоб мати на увазі при знятті або установці бази даних -

Від'єднати

  • Ви переносите свою базу даних в автономний режим. Він більше не буде доступний. Це повинно бути очевидним, але варто закликати. Ось чому це не чудовий варіант резервного копіювання.
  • Коли ваша база даних в Інтернеті, SQL Server блокує файли. Я б не рекомендував спробувати це, щоб довести мене неправильно, тому що при програванні може виникнути інша ситуація, але ви, як правило, не можете видалити файл бази даних (дані, вторинні дані або файл журналу), коли SQL Server знаходиться в мережі. Це гарна річ. Коли ви відстороняєтесь, у вас немає такого захисту - це може бути погано.
  • Якщо ви маєте справу з корупцією в базі даних, і ви знайдете якусь статтю, де є перший крок відриву - це неправильно - якщо ви вилучите корумповану базу даних, це може бути. Можливо, ви не будете знову додавати цю базу даних.
  • Вирізання та вставлення файлів виробничої бази в вашу мережу - це спосіб потенційно ввести корупцію на рівні файлів. Ще одна причина, чому я віддаю перевагу резервного копіювання / відновлення під час міграцій.
  • Це може призвести до виходу з ладу плану технічного обслуговування. Ситуація така, що ви, як і я, створили план технічного обслуговування для регулярного резервного копіювання всіх баз даних без перевірки найкращої практики. Це прекрасно працює, тому ви перестаєте думати про це. Потім хтось вирішить взяти базу даних, яку вони не використовують в режимі офлайн. План технічного обслуговування відмовиться від цієї точки вперед, поки ви не зміните план технічного обслуговування, перевіривши параметр «ігнорувати бази даних, стан яких не в мережі», у діалоговому вікні «Бази даних». Зауважте, що він не буде просто збоєм для автономної бази даних - план технічного обслуговування вийде з ладу в момент, коли він намагається створити резервну копію автономної бази даних, тому деякі веб-бази даних можуть бути не резервні. (різний автор для цього моменту, тому ставляться з підозрою)

Вкласти - Так само, як ви не повинні запускати сценарії з Інтернету або приймати пакунки від незнайомих людей в аеропорту, ви не повинні додавати базу даних, отриману від когось іншого, без певних кроків, щоб перевірити це. Ця база даних може містити код всередині неї в тригерах, збережених процедурах тощо, що може пошкодити ваше середовище. Вам слід переглянути базу даних, яку ви хочете підключити в безпечному та захищеному середовищі, а не виробничій системі.

Що про різні версії або видання SQL Server?

Вони не відрізняються від правил відновлення баз даних між версіями. Зазвичай ви можете відновити до наступної версії для 3 версій (наприклад, буде працювати SQL Server 2008 до SQL Server 2012. SQL Server 2000 до SQL Server 2012 не буде). Ви взагалі не можете повертатися назад за допомогою резервного копіювання / відновлення чи від'єднання / прикріплення - вам доведеться викреслити об'єкти та скрипт із вставок та зробити це вручну або за допомогою інструменту, який це робить. Для видань, як правило, ви можете переміщатися між основними SKU-серверами SQL-сервера - наприклад, ви можете переміщати базу даних зі стандарту до підприємства без зайвих робіт. Якщо ви використовуєте корпоративні функції (Скажімо, стиснення або розділення), вам потрібно буде вимкнути ці функції, перш ніж зробити рух. Ви можете отримати уявлення про функції, які ви '


@Mike - чи є якісь наслідки від продуктивності від регулярного від'єднання та приєднання баз даних? Я думаю, що кеш-пам'ять буфера недійсна для будь-якої окремої бази даних (чітко), але чи знаєте ви будь-які інші наслідки?
Макс Вернон

У мене є БД, на якому, коли я зупиняю екземпляр SQL Server і копіюю 3 файли, а потім я приєдную їх до іншого екземпляра, БД переходить у відновлення (траплялося зі мною двічі в одній БД). З вашого опису, цього не повинно статися, тож що я можу підозрювати про свою БД? Чи якимось чином він зіпсований? Резервні копії потребують еонів для створення та відновлення, і ця функція - це збереження життя! Принаймні для цілей спільного доступу до розробників ...
NoOne
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.