В предыдущей статье мы обсудили, как реализовать изменения SQL в нескольких базах данных на одном сервере. В этой статье мы пойдем дальше и обсудим, как реализовать изменения SQL в нескольких базах данных на нескольких серверах.
Предварительные требования
Прежде чем мы начнем, убедитесь, что у вас есть следующее:
- Установлен клиент SQL Server 2000 на компьютере, с которого вы хотите применить изменения SQL к нескольким базам данных.
- Используемый идентификатор пользователя для входа на этот компьютер имеет необходимые разрешения на серверы и базы данных, перечисленные в списке.
Шаг 1: Создание папки и файла
Создайте папку с именем “Changes” на диске C. Внутри папки “Changes” создайте файл с именем “Serverdblist.txt”. В этом файле должен содержаться список серверов и баз данных на сервере, разделенных запятыми. Например:
SQL,Northwind SQL,PUBS YUKON,AdventureWorks YUKON,Pubs YUKON,NorthWind
Шаг 2: Создание файла скрипта
Создайте файл скрипта с именем “Changes.sql” внутри папки “Changes”. В этом скрипте будут содержаться все изменения, которые должны быть внесены во все базы данных. Вот пример того, что может содержаться в файле скрипта:
-- Создание резервной копии базы данных перед внесением изменений set quoted_identifier off declare @backupquery varchar(1000) set @backupquery = 'backup database '+ db_name() + ' to disk = "d:\'+ db_name() + +'_' +convert(varchar(10),getdate(),112)+'.bak" with init' print @backupquery exec (@backupquery) GO if exists (select * from dbo.sysobjects where id = object_id(N'[client]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [client] GO if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[client]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) BEGIN CREATE TABLE [client] ( [client_id] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [firstname] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [lastname] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ) END GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[usp_QueryClient]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[usp_QueryClient] GO Create procedure usp_QueryClient as Select Client_id, FirstName, LastName from Client GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO
Шаг 3: Создание пакетного файла
Создайте пакетный файл с именем “ApplyChanges2.bat” внутри папки “Changes”. Этот пакетный файл применит все изменения к базам данных, перечисленным в файле “Serverdblist.txt”. Вот пример того, что может содержаться в пакетном файле:
REM Тип: Пакетный файл REM Создано: MAK REM Контакт: mak_999@yahoo.com REM Дата: 2 апреля 2004 года REM Применить изменения ко всем базам данных REM Выполнить osql для БАЗЫ ДАННЫХ, перечисленных в ServerDBlist.txt for /f "tokens=1,2,3 delims=," %%i in (C:\Changes\ServerDBlist.txt) do "C:\Program Files\Microsoft SQL Server\80\Tools\Binn\OSQL.exe" -S%%i -t0 -E -d%%j -ic:\Changes\Changes.sql
Шаг 4: Выполнение пакетного файла
Выполните файл “ApplyChanges2.bat”, чтобы применить все изменения к базам данных, перечисленным в файле “Serverdblist.txt”. Вы можете перенаправить вывод в текстовый файл для целей ведения журнала. Вот пример того, как выполнить пакетный файл:
Applychanges2.bat >c:\changes\Changelog.txt
Это создаст резервные копии всех баз данных, перечисленных в файле “Serverdblist.txt”, и применит изменения ко всем базам данных на указанных серверах. Информация о журнале будет сохранена в “c:\changes\changelog.txt”.
Заключение
Реализация изменений в производственной среде в нескольких базах данных на нескольких серверах может быть сложной задачей. Следуя описанным в этой статье шагам, администраторы баз данных могут эффективно применять изменения SQL к нескольким базам данных на нескольких серверах.
Спасибо за чтение!