Що таке від'єднання чи прикріплення та як вони працюють?
Почнемо з відриву. Коли ви від'єднуєте базу даних у 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-сервера - наприклад, ви можете переміщати базу даних зі стандарту до підприємства без зайвих робіт. Якщо ви використовуєте корпоративні функції (Скажімо, стиснення або розділення), вам потрібно буде вимкнути ці функції, перш ніж зробити рух. Ви можете отримати уявлення про функції, які ви '