Published on

May 25, 2004

Реализация изменений SQL в нескольких базах данных на нескольких серверах

В предыдущей статье мы обсудили, как реализовать изменения 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 к нескольким базам данных на нескольких серверах.

Спасибо за чтение!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.