как управлять производственным развертыванием для обновления базы данных sql server 2005 с <10 ​​таблицами и <20 хранимыми процедурами - PullRequest
1 голос
/ 10 февраля 2010

У меня есть производственная база данных Sql Server 2005 Standard с <120 таблицами и <150 хранимыми процедурами. Обновление более новой версии требует помимо обновления уровня приложения также обновления до БД. В соответствии с предоставленными ресурсами я намереваюсь выполнить обновление следующим образом: </p>

  • создать для каждой новой таблицы скрипт создания с данными вставки (если есть). Пожалуйста, скрипт в отдельном файле с именем: n.Create_Table_Name.sql
  • создать для каждой новой хранимой процедуры сценарий создания с разрешениями. Пожалуйста, скрипт для каждого процесса в n.Create_StoredProcName.sql
  • создать для каждого файла alter proc новый файл с именем n.Alter_StoredProcName.sql
  • Запустите каждый скрипт один за другим в БД TEST. Если тест не удался (что-то нужно изменить и т. Д., Восстановите обратно full_backup поверх тестовой базы данных и начните все сначала.

У меня есть триггер DDL, который сохраняет каждое событие DDL в таблице - например, Я мог легко отследить, что все изменилось с определенного момента времени.

Есть ли какие-либо инструменты сценариев, кроме SSMS? Я мог бы просто передать имена объектов, которые сгенерируют для меня все операторы ddl + разрешения, на которые я мог бы положиться?

Весь процесс довольно медленный, но сработал несколько раз, но я хотел бы узнать, есть ли какие-либо улучшения (на наших серверах PROD не может быть установлено никакого другого программного обеспечения, кроме SSMS)

Ответы [ 2 ]

0 голосов
/ 11 февраля 2010

Вот cmd для запуска файлов sql

Завершено с помощью ScriptDb.exe или вы можете использовать SSMS.На Windows 7 и SQL Server 2008 не собирался правильно в начале.Пришлось сначала найти соответствующие dll для его сборки ...

ScriptDb.exe -con: server = (локальный); trust_connection = yes -outDir :.-ScriptAllDatabase -Permissions -Purge

, а затем копировать только файлы необходимых объектов: ВЫБЕРИТЬ Отличное

  'COPY D:\Temp\Temp\DBNAME\Programmability\StoredProcedures\' + 
  ObjectName + '.sql D:\temp\temp\DBNAME\1.2.8\StoredProcedures\'
  + ObjectName + '.sql'

FROM tbDataMeta_ChangeLog
where ObjectType = 'PROCEDURE' 
AND EventDate>'2010-02-10'






USE [MY_DB]
GO

IF  EXISTS (SELECT * FROM dbo.sysobjects 
WHERE id = OBJECT_ID(N'[DF_EventsLog_EventDate]') AND type = 'D')
BEGIN
ALTER TABLE [dbo].[DbObjectsChangeStore] DROP CONSTRAINT [DF_EventsLog_EventDate]
END

GO

USE [MY_DB]
GO

/****** Object:  Table [dbo].[DbObjectsChangeStore]    
Script Date: 02/11/2010 17:58:00 ******/
IF  EXISTS (SELECT * FROM sys.objects 
WHERE object_id = OBJECT_ID(N'[dbo].[DbObjectsChangeStore]') AND type in (N'U'))
DROP TABLE [dbo].[DbObjectsChangeStore]
GO

USE [MY_DB]
GO

/****** Object:  Table [dbo].[DbObjectsChangeStore]    
Script Date: 02/11/2010 17:58:00 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[DbObjectsChangeStore](
    [LogId] [int] IDENTITY(1,1) NOT NULL,
    [DatabaseName] [varchar](256) NOT NULL,
    [EventType] [varchar](50) NOT NULL,
    [ObjectName] [varchar](256) NOT NULL,
    [ObjectType] [varchar](25) NOT NULL,
    [SqlCommand] [varchar](max) NOT NULL,
    [EventDate] [datetime] NOT NULL,
    [LoginName] [varchar](256) NOT NULL
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[DbObjectsChangeStore] 
ADD  CONSTRAINT [DF_EventsLog_EventDate]  
DEFAULT (getdate()) FOR [EventDate]
GO


IF  EXISTS (SELECT * FROM sys.triggers
 WHERE parent_class_desc = 'DATABASE' AND name = N'trig_BackUpDbObjects')
DISABLE TRIGGER [trig_BackUpDbObjects] ON DATABASE

GO

USE [MY_DB]
GO

/****** Object:  DdlTrigger [trig_BackUpDbObjects]   
 Script Date: 02/11/2010 17:58:49 ******/
IF  EXISTS (SELECT * FROM sys.triggers 
WHERE parent_class_desc = 'DATABASE' 
AND name = N'trig_BackUpDbObjects')
DROP TRIGGER [trig_BackUpDbObjects] ON DATABASE
GO

USE [MY_DB]
GO

/****** Object:  DdlTrigger [trig_BackUpDbObjects]    Script Date: 02/11/2010 17:58:49 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO



create trigger [trig_BackUpDbObjects]
on database
for create_procedure, alter_procedure, drop_procedure,
create_table, alter_table, drop_table,
create_function, alter_function, drop_function
as

set nocount on

declare @data xml
set @data = EVENTDATA()

insert into [dbo].[DbObjectsChangeStore](databasename, eventtype, 
objectname, objecttype, sqlcommand, loginname)
values(
@data.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'varchar(256)'),
@data.value('(/EVENT_INSTANCE/EventType)[1]', 'varchar(50)'), 
@data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(256)'), 
@data.value('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(25)'), 
@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'varchar(max)'), 
@data.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(256)')
)




GO

SET ANSI_NULLS OFF
GO

SET QUOTED_IDENTIFIER OFF
GO

DISABLE TRIGGER [trig_BackUpDbObjects] ON DATABASE
GO
0 голосов
/ 10 февраля 2010

Вы можете создать сценарий PowerShell, который будет использовать SMO и выполнять эту работу за вас. Вы можете положиться на него, как только SSMS фактически будет основана на SMO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...