我有一个Sql Server 2005 Standard生产数据库,其中包含一些&lt; 120表和<150个存储过程。 较新的版本更新除了应用程序层升级之外还需要升级到db。根据提供的资源,我打算按如下方式执行升级:
我有一个DDL触发器,它将每个DDL事件存储在一个表中 - 例如我可以轻松跟踪特定时间点内所有内容的变化。
除了SSMS之外还有任何脚本工具我可以简单地传递对象的名称,这些对象将为我生成所有ddl语句+我可以依赖的权限吗?
整个过程有点慢,但已经工作了好几次,但是如果有任何改进的话我会徘徊(除了SSMS之外没有其他软件可以在我们的PROD服务器上安装)
答案 0 :(得分:0)
您可以创建将使用SMO的PowerShell脚本并为您完成工作。一旦SSMS实际上基于SMO,您就可以依赖它。
答案 1 :(得分:0)
Here is the cmd for running the sql files
使用ScriptDb.exe结束,或者您可以使用SSMS。在Windows 7和SQL Server 2008上一开始没有正确构建。不得不首先找到合适的dll来构建它......
ScriptDb.exe -con:server =(local); trusted_connection = yes -outDir:。 -ScriptAllDatabases -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