Копіювання бази даних MS SQL Server, MS SQL Server, Бази даних, статті

sql.ru

За матеріалами статті Rahul Sharma на sqlservercentral.com: “
Copying a Database from Server to Server"

У цій статті автор розглядає кілька можливих варіантів копіювання баз даних MS SQL Server з одного сервера на інший.

Метод 1: найшвидший спосіб копіювання – від’єднання бази даних від вихідного сервера і потім прикріплення разом з журналом на потрібний сервер.

Від’єднайте базу даних на вихідному сервері (Змініть, відповідно, ім’я бази даних):


  Use Master
  GO
  Exec sp_detach_db 'database_name', 'true'
  GO

sp_detach_db від'єднує базу даних від вихідного сервера (у неї два параметри: @ dbname, який є ім'ям бази даних і @ skipchecks, який є вказівкою для поновлення статистики) і вказавши значення 'true' для другого параметра (@ skipchecks) цієї процедури, що б упевниться в тому, що якщо модифікація статистики не була виконана перед від'єднанням бази даних від сервера, вона оновиться після приєднання, що потребують деякого часу. Скопіюйте дані і журнали з каталогу Data вихідного сервера в каталог даних на новому сервері. Перевірки, що Ви не маєте точно таких же баз даних на сервері адресата .... Якщо це так, вимкніть їх.
Прикріпіть дані і журнали на новий сервер. Виконайте на цьому сервері:


   Use Master
   GO
   PRINT 'Attaching Database'
   EXEC sp_attach_db @dbname = 'database_name', 
   @filename1 = 'c:\mssql7\data\database_name.mdf',  - Це шлях до файлу даних
   @filename2 = 'd:\mssql7\data\database_name_log.ldf'  - Це шлях до журналу

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

/ * Встановіть пов'язаний сервер (використовуючи sp_addlinkedserver і sp_addlinkedsrvlogin), назвавши його: sourceserver, і з якого стандартні логіни входу в систему повинні бути перенесені. Ви можете називати його, як Вам зручно і змінити також ім'я пов'язаного сервера. Щоб забезпечити доступу до даних пов'язаного сервера, Ви повинні використовувати sp_serveroption * /


declare @login sysname , @password sysname 
declare sourcelogins cursor for 
select name , password 
from sourceserver.master.dbo.syslogins 
where isntname = 0 and charindex( 'repl_' , name ) = 0 and 
charindex( 'distributor' , name ) = 0 and name != 'sa' 
open sourcelogins 
while ( @@fetch_status = 0) 
begin 
fetch sourcelogins into @login , @password 
exec sp_addlogin @login , @password , @encryptopt = 'skip_encryption'
end 
close sourcelogins
deallocate sourcelogins 
go

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

Метод 2: Використання DTS.

DTS дуже часто використовується для переміщення баз даних з сервера на сервер. Ви можете використовувати майстер експорту / імпорту DTS (SQL 7.0 і 2000). Майстер може використовуватися для копіювання схем, об'єктів (збережені процедури, подання та тригери і т.д.), даних і також логінів. Або Ви можете використовувати DTS Designer і створити завдання переміщення бази даних і завдання переміщення логінів (доступно тільки для SQL 2К). Також, Ви можете використовувати майстер копіювання баз даних (Copy Database Wizard), щоб вирішити завдання переміщення бази (доступно тільки для SQL 2К). DTS - досить потужний інструмент і якщо Ви його поки не використали, Ви позбавляєте себе багатьох функціональних можливостей і легкості, з якою Ви могли б вирішувати складні завдання.
У випадку якщо Ви шукаєте хорошу посилання на DTS, я запропонував би Вам почитати:

msdn.microsoft.com/library/default.asp?URL=/library/techart/dts_overview.htm

Метод 3: Створіть схему і механізм перенесення даних, що використовує bcp / bulk insert.

Створіть схему на сервері приймачі даних, якщо ви вже маєте скрипт для створення схеми і потім використовуєте bcp або bulk insert, щоб завантажити дані. Обидва операції - незареєстровані, так що вони відпрацюють дуже швидко. Головна відмінність між bcp і bulk insert - це те, що bulk insert не може експортувати дані, а bcp може.
Ви можете використовувати bcp, щоб експортувати дані в плоский файл і потім імпортувати дані в нову базу з плоского файлу, використовуючи bcp або bulk insert. Навіть при тому, що bulk insert є швидким способом закачування даних, він має велику кількість обмежень.

Метод 4: Традиційний шлях: Backup і Restore.

Зробіть повну копію бази даних, і потім відновите її на новому сервері.

Метод 5: Використання розподілених запитів.

Ви спочатку повинні створити схему на сервері приймачі даних, використовуючи ваші скрипти створення схем. Після цього Ви можете організувати пов'язаний сервер і написати інструкції вставки, які будуть вставляти дані з джерела на новий сервер, використовуючи функції openrowset і openquery для запитів до пов'язаних серверів. Ви повинні впевнитися, що foreign key і check constraints відключені до того, як Ви почнете закачувати дані і потім підключити їх, коли все буде зроблено. Цей метод найповільніший з усіх згаданих у цій статті. Зате, за допомогою нього можна переносити дані на SQL Server з гетерогенних джерел, наприклад: Oracle, Sybase, DB2 і т.д.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*