Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/SQL Scripts/Prepare Hive Database.sql @ 6688

Last change on this file since 6688 was 6688, checked in by ascheibe, 13 years ago

#1233 some renaming to be more consistent with OKB

File size: 10.8 KB
Line 
1USE [HeuristicLab.Hive-3.4]
2/* this script is supposed to be executed after the plain DB is generated by the linq-to-sql schema */
3/* adds default values */
4/* creates delete and update cascades */
5/* creates indices */
6/* creates views */
7/* creates triggers */
8
9
10ALTER TABLE dbo.AssignedResources ALTER COLUMN AssignedRessourcesId ADD ROWGUIDCOL;
11ALTER TABLE dbo.AssignedResources WITH NOCHECK ADD CONSTRAINT [DF_AssignedResources_AssignedRessourcesId] DEFAULT (NEWSEQUENTIALID()) FOR AssignedRessourcesId;
12ALTER TABLE [dbo].[AssignedResources]  DROP  CONSTRAINT [Job_AssignedResource]
13ALTER TABLE [dbo].[AssignedResources]  WITH CHECK ADD  CONSTRAINT [Job_AssignedResource] FOREIGN KEY([JobId])
14REFERENCES [dbo].[Job] ([JobId])
15ON UPDATE CASCADE
16ON DELETE CASCADE
17GO
18ALTER TABLE [dbo].[AssignedResources]  DROP  CONSTRAINT [Resource_AssignedResource]
19ALTER TABLE [dbo].[AssignedResources]  WITH CHECK ADD  CONSTRAINT [Resource_AssignedResource] FOREIGN KEY([ResourceId])
20REFERENCES [dbo].[Resource] ([ResourceId])
21ON UPDATE CASCADE
22ON DELETE CASCADE
23GO
24
25ALTER TABLE dbo.Job ALTER COLUMN JobId ADD ROWGUIDCOL;
26ALTER TABLE dbo.Job WITH NOCHECK ADD CONSTRAINT [DF_Job_JobId] DEFAULT (NEWSEQUENTIALID()) FOR JobId;
27GO
28
29ALTER TABLE [dbo].[StateLog]  DROP  CONSTRAINT [Job_StateLog]
30ALTER TABLE [dbo].[StateLog]  WITH CHECK ADD CONSTRAINT [Job_StateLog] FOREIGN KEY([JobId])
31REFERENCES [dbo].[Job] ([JobId])
32ON UPDATE CASCADE
33ON DELETE CASCADE
34GO
35ALTER TABLE [dbo].[StateLog]  DROP  CONSTRAINT [Resource_StateLog]
36ALTER TABLE [dbo].[StateLog]  WITH CHECK ADD CONSTRAINT [Resource_StateLog] FOREIGN KEY([SlaveId])
37REFERENCES [dbo].[Resource] ([ResourceId])
38ON UPDATE CASCADE
39ON DELETE SET NULL
40GO
41
42ALTER TABLE dbo.Plugin ALTER COLUMN PluginId ADD ROWGUIDCOL;
43ALTER TABLE dbo.Plugin WITH NOCHECK ADD CONSTRAINT [DF_Plugin_PluginId] DEFAULT (NEWSEQUENTIALID()) FOR PluginId;
44
45ALTER TABLE dbo.PluginData ALTER COLUMN PluginDataId ADD ROWGUIDCOL;
46ALTER TABLE dbo.PluginData WITH NOCHECK ADD CONSTRAINT [DF_PluginData_PluginDataId] DEFAULT (NEWSEQUENTIALID()) FOR PluginDataId;
47
48ALTER TABLE [dbo].[PluginData]  DROP  CONSTRAINT [Plugin_PluginData]
49ALTER TABLE [dbo].[PluginData]  WITH CHECK ADD  CONSTRAINT [Plugin_PluginData] FOREIGN KEY([PluginId])
50REFERENCES [dbo].[Plugin] ([PluginId])
51ON UPDATE CASCADE
52ON DELETE CASCADE
53GO
54
55ALTER TABLE dbo.RequiredPlugins ALTER COLUMN RequiredPluginId ADD ROWGUIDCOL;
56ALTER TABLE dbo.RequiredPlugins WITH NOCHECK ADD CONSTRAINT [DF_RequiredPlugins_RequiredPluginId] DEFAULT (NEWSEQUENTIALID()) FOR RequiredPluginId;
57
58ALTER TABLE [dbo].[RequiredPlugins]  DROP  CONSTRAINT [Job_RequiredPlugin]
59ALTER TABLE [dbo].[RequiredPlugins]  WITH CHECK ADD  CONSTRAINT [Job_RequiredPlugin] FOREIGN KEY([JobId])
60REFERENCES [dbo].[Job] ([JobId])
61ON UPDATE CASCADE
62ON DELETE CASCADE
63GO
64
65ALTER TABLE [dbo].[RequiredPlugins]  DROP  CONSTRAINT [Plugin_RequiredPlugin]
66ALTER TABLE [dbo].[RequiredPlugins]  WITH CHECK ADD  CONSTRAINT [Plugin_RequiredPlugin] FOREIGN KEY([PluginId])
67REFERENCES [dbo].[Plugin] ([PluginId])
68ON UPDATE CASCADE
69ON DELETE CASCADE
70GO
71
72ALTER TABLE dbo.Resource ALTER COLUMN ResourceId ADD ROWGUIDCOL;
73ALTER TABLE dbo.Resource WITH NOCHECK ADD CONSTRAINT [DF_Resource_ResourceId] DEFAULT (NEWSEQUENTIALID()) FOR ResourceId;
74
75ALTER TABLE dbo.Downtime ALTER COLUMN DowntimeId ADD ROWGUIDCOL;
76ALTER TABLE dbo.Downtime WITH NOCHECK ADD CONSTRAINT [DF_Downtime_DowntimeId] DEFAULT (NEWSEQUENTIALID()) FOR DowntimeId;
77
78ALTER TABLE dbo.HiveExperiment ALTER COLUMN HiveExperimentId ADD ROWGUIDCOL;
79ALTER TABLE dbo.HiveExperiment WITH NOCHECK ADD CONSTRAINT [DF_HiveExperiment_HiveExperimentId] DEFAULT (NEWSEQUENTIALID()) FOR HiveExperimentId;
80
81ALTER TABLE dbo.StateLog ALTER COLUMN StateLogId ADD ROWGUIDCOL;
82ALTER TABLE dbo.StateLog WITH NOCHECK ADD CONSTRAINT [DF_StateLog_StateLogId] DEFAULT (NEWSEQUENTIALID()) FOR StateLogId;
83
84ALTER TABLE [dbo].[HiveExperimentPermission]  DROP  CONSTRAINT [HiveExperiment_HiveExperimentPermission]
85ALTER TABLE [dbo].[HiveExperimentPermission]  WITH CHECK ADD CONSTRAINT [HiveExperiment_HiveExperimentPermission] FOREIGN KEY([HiveExperimentId])
86REFERENCES [dbo].[HiveExperiment] ([HiveExperimentId])
87ON UPDATE CASCADE
88ON DELETE CASCADE
89GO
90
91ALTER TABLE [dbo].[Statistics] ALTER COLUMN StatisticsId ADD ROWGUIDCOL;
92ALTER TABLE [dbo].[Statistics] WITH NOCHECK ADD CONSTRAINT [DF_Statistics_StatisticsId] DEFAULT (NEWSEQUENTIALID()) FOR StatisticsId;
93GO
94
95ALTER TABLE [dbo].[DeletedJobStatistics] ALTER COLUMN DeletedJobStatisticsId ADD ROWGUIDCOL;
96ALTER TABLE [dbo].[DeletedJobStatistics] WITH NOCHECK ADD CONSTRAINT [DF_DeletedJobStatistics_DeletedJobStatisticsId] DEFAULT (NEWSEQUENTIALID()) FOR DeletedJobStatisticsId;
97GO
98
99ALTER TABLE [dbo].[SlaveStatistics]  DROP  CONSTRAINT [Statistics_SlaveStatistics]
100ALTER TABLE [dbo].[SlaveStatistics]  WITH CHECK ADD  CONSTRAINT [Statistics_SlaveStatistics] FOREIGN KEY([StatisticsId])
101REFERENCES [dbo].[Statistics] ([StatisticsId])
102ON UPDATE CASCADE
103ON DELETE CASCADE
104GO
105
106ALTER TABLE [dbo].[UserStatistics]  DROP  CONSTRAINT [Statistics_UserStatistics]
107ALTER TABLE [dbo].[UserStatistics]  WITH CHECK ADD  CONSTRAINT [Statistics_UserStatistics] FOREIGN KEY([StatisticsId])
108REFERENCES [dbo].[Statistics] ([StatisticsId])
109ON UPDATE CASCADE
110ON DELETE CASCADE
111GO
112
113/* create indices */
114CREATE INDEX Index_RequiredPlugins_JobId ON RequiredPlugins(JobId);
115GO
116
117/* views */
118-- =============================================
119-- Author:    cneumuel
120-- Description: Returns the first StateLog entry for each job
121-- =============================================
122CREATE VIEW [dbo].[view_FirstState]
123AS
124SELECT     sl.JobId, sl.DateTime, sl.State
125FROM         dbo.StateLog AS sl INNER JOIN
126                          (SELECT     JobId, MIN(DateTime) AS DateTime
127                            FROM          dbo.StateLog
128                            GROUP BY JobId) AS minDate ON sl.DateTime = minDate.DateTime AND sl.JobId = minDate.JobId
129
130GO
131
132-- =============================================
133-- Author:    cneumuel
134-- Description: Returns the last StateLog entry for each job
135-- =============================================
136CREATE VIEW [dbo].[view_LastState]
137AS
138SELECT     sl.JobId, sl.DateTime, sl.State
139FROM         dbo.StateLog AS sl INNER JOIN
140                          (SELECT     JobId, MAX(DateTime) AS DateTime
141                            FROM          dbo.StateLog
142                            GROUP BY JobId) AS minDate ON sl.DateTime = minDate.DateTime AND sl.JobId = minDate.JobId
143GO
144
145-- =============================================
146-- Author:    cneumuel
147-- Description: returns aggregates statistic information for every minute
148-- =============================================
149CREATE VIEW [dbo].[view_Statistics]
150AS
151SELECT  CONVERT(VARCHAR(19), MIN(s.Timestamp), 120) AS DateTime, SUM(ss.Cores) AS Cores, SUM(ss.FreeCores) AS FreeCores,
152        AVG(ss.CpuUtilization) AS CpuUtilization, SUM(ss.Memory) AS Memory, SUM(ss.FreeMemory) AS FreeMemory, x.exSum AS ExecutionTimeHours,
153        x.exFinishedSum AS ExecutionTimeFinished, x.exStartToEndSum AS StartToEndTimeFinished
154FROM         dbo.SlaveStatistics AS ss INNER JOIN
155                      dbo.[Statistics] AS s ON ss.StatisticsId = s.StatisticsId INNER JOIN
156                      dbo.Resource AS r ON ss.SlaveId = r.ResourceId INNER JOIN
157                          (SELECT     StatisticsId, SUM(ExecutionTimeMs) / 1000 / 60 / 60 AS exSum, SUM(ExecutionTimeMsFinishedJobs) / 1000 / 60 / 60 AS exFinishedSum,
158                                                   SUM(StartToEndTimeMs) / 1000 / 60 / 60 AS exStartToEndSum
159                            FROM          dbo.UserStatistics AS us
160                            GROUP BY StatisticsId) AS x ON s.StatisticsId = x.StatisticsId
161GROUP BY s.StatisticsId, x.exSum, x.exFinishedSum, x.exStartToEndSum
162
163/* triggers */
164GO
165/****** Object:  Trigger [dbo].[tr_HiveExperimentDeleteCascade]    Script Date: 04/19/2011 16:31:53 ******/
166SET ANSI_NULLS ON
167GO
168SET QUOTED_IDENTIFIER ON
169GO
170-- =============================================
171-- Author:    cneumuel
172-- Create date: 19.04.2011
173-- Description: (1) Writes the execution times of deleted jobs into DeletedJobStats to ensure correct statistics
174--        (2) Deletes all associated jobs. This cannot be done with cascading delete,
175--              because the job table defines a INSTEAD OF DELETE trigger itself, which
176--              is not compatible with cascading deletes.
177-- =============================================
178CREATE TRIGGER [dbo].[tr_HiveExperimentDeleteCascade] ON [dbo].[HiveExperiment] INSTEAD OF DELETE AS
179BEGIN
180  DELETE Job FROM deleted, Job WHERE deleted.HiveExperimentId = Job.HiveExperimentId
181  DELETE HiveExperiment FROM deleted, HiveExperiment WHERE deleted.HiveExperimentId = HiveExperiment.HiveExperimentId
182END
183GO
184
185-- =============================================
186-- Author:    cneumuel
187-- Create date: 11.11.2010
188-- Description: Recursively deletes all child-jobs of a job when it is deleted. (Source: http://devio.wordpress.com/2008/05/23/recursive-delete-in-sql-server/)
189-- =============================================
190CREATE TRIGGER [dbo].[tr_JobDeleteCascade] ON [dbo].[Job] INSTEAD OF DELETE AS
191BEGIN
192  -- add statistics
193  INSERT INTO dbo.DeletedJobStatistics (UserId, ExecutionTimeMs, ExecutionTimeMsFinishedJobs, StartToEndTimeMs)
194  SELECT
195    he.OwnerUserId AS UserId,
196    SUM(j.ExecutionTimeMs) AS ExecutionTimeMs,
197    ISNULL(SUM(CASE ls.State WHEN 'Finished' THEN j.ExecutionTimeMs END), 0) AS ExecutionTimeMsFinishedJobs,
198    ISNULL(SUM(CASE ls.State WHEN 'Finished' THEN DATEDIFF(MS,fs.DateTime,ls.DateTime) ELSE 0 END), 0) AS StartToEndMs
199  FROM
200    deleted j,
201    HiveExperiment he,
202    view_FirstState fs,
203    view_LastState ls
204  WHERE
205    he.HiveExperimentId = j.HiveExperimentId AND
206    fs.JobId = j.JobId AND
207    ls.JobId = j.JobId
208  GROUP BY he.OwnerUserId
209
210  -- recursively delete jobs
211  CREATE TABLE #Table(
212    JobId uniqueidentifier
213  )
214  INSERT INTO #Table (JobId)
215  SELECT JobId FROM deleted
216 
217  DECLARE @c INT
218  SET @c = 0
219 
220  WHILE @c <> (SELECT COUNT(JobId) FROM #Table) BEGIN
221    SELECT @c = COUNT(JobId) FROM #Table
222   
223    INSERT INTO #Table (JobId)
224      SELECT Job.JobId
225      FROM Job
226      LEFT OUTER JOIN #Table ON Job.JobId = #Table.JobId
227      WHERE Job.ParentJobId IN (SELECT JobId FROM #Table)
228        AND #Table.JobId IS NULL
229  END
230 
231  DELETE JobData FROM JobData INNER JOIN #Table ON JobData.JobId = #Table.JobId
232  DELETE Job FROM Job INNER JOIN #Table ON Job.JobId = #Table.JobId
233END
234GO
235
236-- =============================================
237-- Author:    cneumuel
238-- Create date: 17.05.2011
239-- Description: Writes the execution times of deleted jobs into DeletedJobStats to ensure correct statistics
240-- =============================================
241--CREATE TRIGGER [dbo].[tr_DeletedJobStats] ON [dbo].[Job] AFTER DELETE AS
242--BEGIN
243
244
245--END
246--GO
Note: See TracBrowser for help on using the repository browser.