DB.sql 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  1. USE [master];
  2. GO
  3. IF (DB_ID(N'PowerConsumption') IS NOT NULL)
  4. BEGIN
  5. ALTER DATABASE [PowerConsumption]
  6. SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
  7. DROP DATABASE [PowerConsumption];
  8. END
  9. GO
  10. PRINT N'Creating PowerConsumption...'
  11. GO
  12. CREATE DATABASE [PowerConsumption]
  13. CONTAINMENT = NONE
  14. ON PRIMARY
  15. ( NAME = N'PowerConsumption', FILENAME = N'/var/opt/mssql/data/PowerConsumption.mdf' , SIZE = 204800KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB )
  16. LOG ON
  17. ( NAME = N'PowerConsumption_log', FILENAME = N'/var/opt/mssql/data/PowerConsumption_log.ldf' , SIZE = 80MB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB )
  18. GO
  19. IF EXISTS (SELECT 1
  20. FROM [master].[dbo].[sysdatabases]
  21. WHERE [name] = N'PowerConsumption')
  22. BEGIN
  23. ALTER DATABASE [PowerConsumption]
  24. SET ANSI_NULLS OFF,
  25. ANSI_PADDING OFF,
  26. ANSI_WARNINGS OFF,
  27. ARITHABORT OFF,
  28. CONCAT_NULL_YIELDS_NULL OFF,
  29. NUMERIC_ROUNDABORT OFF,
  30. QUOTED_IDENTIFIER OFF,
  31. ANSI_NULL_DEFAULT OFF,
  32. CURSOR_DEFAULT GLOBAL,
  33. RECOVERY FULL,
  34. CURSOR_CLOSE_ON_COMMIT OFF,
  35. AUTO_CREATE_STATISTICS ON,
  36. AUTO_SHRINK OFF,
  37. AUTO_UPDATE_STATISTICS ON,
  38. RECURSIVE_TRIGGERS OFF
  39. WITH ROLLBACK IMMEDIATE;
  40. ALTER DATABASE [PowerConsumption]
  41. SET AUTO_CLOSE OFF
  42. WITH ROLLBACK IMMEDIATE;
  43. END
  44. GO
  45. IF EXISTS (SELECT 1
  46. FROM [master].[dbo].[sysdatabases]
  47. WHERE [name] = N'PowerConsumption')
  48. BEGIN
  49. ALTER DATABASE [PowerConsumption]
  50. SET ALLOW_SNAPSHOT_ISOLATION ON;
  51. END
  52. GO
  53. IF EXISTS (SELECT 1
  54. FROM [master].[dbo].[sysdatabases]
  55. WHERE [name] = N'PowerConsumption')
  56. BEGIN
  57. ALTER DATABASE [PowerConsumption]
  58. SET READ_COMMITTED_SNAPSHOT OFF
  59. WITH ROLLBACK IMMEDIATE;
  60. END
  61. GO
  62. IF EXISTS (SELECT 1
  63. FROM [master].[dbo].[sysdatabases]
  64. WHERE [name] = N'PowerConsumption')
  65. BEGIN
  66. ALTER DATABASE [PowerConsumption]
  67. SET AUTO_UPDATE_STATISTICS_ASYNC OFF,
  68. PAGE_VERIFY CHECKSUM,
  69. DATE_CORRELATION_OPTIMIZATION OFF,
  70. DISABLE_BROKER,
  71. PARAMETERIZATION SIMPLE,
  72. SUPPLEMENTAL_LOGGING OFF
  73. WITH ROLLBACK IMMEDIATE;
  74. END
  75. GO
  76. IF IS_SRVROLEMEMBER(N'sysadmin') = 1
  77. BEGIN
  78. IF EXISTS (SELECT 1
  79. FROM [master].[dbo].[sysdatabases]
  80. WHERE [name] = N'PowerConsumption')
  81. BEGIN
  82. EXECUTE sp_executesql N'ALTER DATABASE [PowerConsumption]
  83. SET TRUSTWORTHY OFF,
  84. DB_CHAINING OFF
  85. WITH ROLLBACK IMMEDIATE';
  86. END
  87. END
  88. ELSE
  89. BEGIN
  90. PRINT N'The database settings cannot be modified. You must be a SysAdmin to apply these settings.';
  91. END
  92. GO
  93. IF IS_SRVROLEMEMBER(N'sysadmin') = 1
  94. BEGIN
  95. IF EXISTS (SELECT 1
  96. FROM [master].[dbo].[sysdatabases]
  97. WHERE [name] = N'PowerConsumption')
  98. BEGIN
  99. EXECUTE sp_executesql N'ALTER DATABASE [PowerConsumption]
  100. SET HONOR_BROKER_PRIORITY OFF
  101. WITH ROLLBACK IMMEDIATE';
  102. END
  103. END
  104. ELSE
  105. BEGIN
  106. PRINT N'The database settings cannot be modified. You must be a SysAdmin to apply these settings.';
  107. END
  108. GO
  109. ALTER DATABASE [PowerConsumption]
  110. SET TARGET_RECOVERY_TIME = 60 SECONDS
  111. WITH ROLLBACK IMMEDIATE;
  112. GO
  113. IF EXISTS (SELECT 1
  114. FROM [master].[dbo].[sysdatabases]
  115. WHERE [name] = N'PowerConsumption')
  116. BEGIN
  117. ALTER DATABASE [PowerConsumption]
  118. SET AUTO_CREATE_STATISTICS ON(INCREMENTAL = OFF),
  119. MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = OFF,
  120. DELAYED_DURABILITY = DISABLED
  121. WITH ROLLBACK IMMEDIATE;
  122. END
  123. GO
  124. IF EXISTS (SELECT 1
  125. FROM [master].[dbo].[sysdatabases]
  126. WHERE [name] = N'PowerConsumption')
  127. BEGIN
  128. ALTER DATABASE [PowerConsumption]
  129. SET QUERY_STORE (QUERY_CAPTURE_MODE = ALL, FLUSH_INTERVAL_SECONDS = 900, INTERVAL_LENGTH_MINUTES = 60, MAX_PLANS_PER_QUERY = 200, CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 367), MAX_STORAGE_SIZE_MB = 100)
  130. WITH ROLLBACK IMMEDIATE;
  131. END
  132. GO
  133. IF EXISTS (SELECT 1
  134. FROM [master].[dbo].[sysdatabases]
  135. WHERE [name] = N'PowerConsumption')
  136. BEGIN
  137. ALTER DATABASE [PowerConsumption]
  138. SET QUERY_STORE = OFF
  139. WITH ROLLBACK IMMEDIATE;
  140. END
  141. GO
  142. IF EXISTS (SELECT 1
  143. FROM [master].[dbo].[sysdatabases]
  144. WHERE [name] = N'PowerConsumption')
  145. BEGIN
  146. ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0;
  147. ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET MAXDOP = PRIMARY;
  148. ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = OFF;
  149. ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET LEGACY_CARDINALITY_ESTIMATION = PRIMARY;
  150. ALTER DATABASE SCOPED CONFIGURATION SET PARAMETER_SNIFFING = ON;
  151. ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET PARAMETER_SNIFFING = PRIMARY;
  152. ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = OFF;
  153. ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET QUERY_OPTIMIZER_HOTFIXES = PRIMARY;
  154. END
  155. GO
  156. USE [PowerConsumption];
  157. GO
  158. IF fulltextserviceproperty(N'IsFulltextInstalled') = 1
  159. EXECUTE sp_fulltext_database 'enable';
  160. GO
  161. PRINT N'Creating [dbo].[udtMeterMeasurement]...';
  162. GO
  163. CREATE TYPE [dbo].[udtMeterMeasurement] AS TABLE (
  164. [RowID] INT NOT NULL,
  165. [MeterID] INT NOT NULL,
  166. [MeasurementInkWh] DECIMAL (9, 4) NOT NULL,
  167. [PostalCode] NVARCHAR (10) NOT NULL,
  168. [MeasurementDate] DATETIME2 (7) NOT NULL,
  169. INDEX [IX_RowID] NONCLUSTERED ([RowID])
  170. )
  171. GO
  172. PRINT N'Creating [dbo].[MeterMeasurementHistory]...';
  173. GO
  174. CREATE TABLE [dbo].[MeterMeasurementHistory] (
  175. [MeterID] INT NOT NULL,
  176. [MeasurementInkWh] DECIMAL (9, 4) NOT NULL,
  177. [PostalCode] NVARCHAR (10) NOT NULL,
  178. [MeasurementDate] DATETIME2 (7) NOT NULL,
  179. [SysStartTime] DATETIME2 (7) NOT NULL,
  180. [SysEndTime] DATETIME2 (7) NOT NULL
  181. );
  182. GO
  183. PRINT N'Creating [dbo].[MeterMeasurementHistory].[ix_MeterMeasurementHistory]...';
  184. GO
  185. CREATE CLUSTERED INDEX [ix_MeterMeasurementHistory]
  186. ON [dbo].[MeterMeasurementHistory]([MeterID]);
  187. CREATE CLUSTERED COLUMNSTORE INDEX [ix_MeterMeasurementHistory]
  188. ON [dbo].[MeterMeasurementHistory] WITH (DROP_EXISTING = ON);
  189. GO
  190. PRINT N'Creating [dbo].[MeterMeasurement]...';
  191. GO
  192. CREATE TABLE [dbo].[MeterMeasurement] (
  193. [MeterID] INT NOT NULL,
  194. [MeasurementInkWh] DECIMAL (9, 4) NOT NULL,
  195. [PostalCode] NVARCHAR (10) NOT NULL,
  196. [MeasurementDate] DATETIME2 (7) NOT NULL,
  197. [SysStartTime] DATETIME2 (7) GENERATED ALWAYS AS ROW START NOT NULL,
  198. [SysEndTime] DATETIME2 (7) GENERATED ALWAYS AS ROW END NOT NULL,
  199. PRIMARY KEY NONCLUSTERED ([MeterID] ASC),
  200. PERIOD FOR SYSTEM_TIME ([SysStartTime], [SysEndTime])
  201. )
  202. WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE=[dbo].[MeterMeasurementHistory], DATA_CONSISTENCY_CHECK=ON));
  203. GO
  204. PRINT N'Creating [dbo].[vwMeterMeasurement]...';
  205. GO
  206. CREATE VIEW vwMeterMeasurement
  207. AS
  208. SELECT PostalCode,
  209. DATETIMEFROMPARTS(
  210. YEAR(MeasurementDate),
  211. MONTH(MeasurementDate),
  212. DAY(MeasurementDate),
  213. DATEPART(HOUR,MeasurementDate),
  214. DATEPART(MINUTE,MeasurementDate),
  215. DATEPART(ss,MeasurementDate)/1,
  216. 0
  217. ) AS MeasurementDate,
  218. count(*) AS MeterCount,
  219. AVG(MeasurementInkWh) AS AvgMeasurementInkWh
  220. FROM [dbo].[MeterMeasurement] FOR SYSTEM_TIME ALL WITH (NOLOCK)
  221. GROUP BY
  222. PostalCode,
  223. DATETIMEFROMPARTS(
  224. YEAR(MeasurementDate),
  225. MONTH(MeasurementDate),
  226. DAY(MeasurementDate),
  227. DATEPART(HOUR,MeasurementDate),
  228. DATEPART(MINUTE,MeasurementDate),
  229. DATEPART(ss,MeasurementDate)/1,0)
  230. GO
  231. PRINT N'Creating [dbo].[InsertMeterMeasurement]...';
  232. GO
  233. CREATE PROCEDURE [dbo].[InsertMeterMeasurement]
  234. @Batch AS dbo.udtMeterMeasurement READONLY,
  235. @BatchSize INT
  236. AS
  237. BEGIN
  238. SET TRANSACTION ISOLATION LEVEL SNAPSHOT
  239. DECLARE @i INT = 1
  240. DECLARE @MeterID INT
  241. DECLARE @MeasurementInkWh DECIMAL(9, 4)
  242. DECLARE @PostalCode NVARCHAR(10)
  243. DECLARE @MeasurementDate DATETIME2(7)
  244. WHILE (@i <= @BatchSize)
  245. BEGIN
  246. SELECT @MeterID = MeterID,
  247. @MeasurementInkWh = MeasurementInkWh,
  248. @MeasurementDate = MeasurementDate,
  249. @PostalCode = PostalCode
  250. FROM @Batch
  251. WHERE RowID = @i
  252. UPDATE dbo.MeterMeasurement
  253. SET MeasurementInkWh += @MeasurementInkWh,
  254. MeasurementDate = @MeasurementDate,
  255. PostalCode = @PostalCode
  256. WHERE MeterID = @MeterID
  257. IF(@@ROWCOUNT = 0)
  258. BEGIN
  259. INSERT INTO dbo.MeterMeasurement (MeterID, MeasurementInkWh, PostalCode, MeasurementDate)
  260. VALUES (@MeterID, @MeasurementInkWh, @PostalCode, @MeasurementDate);
  261. END
  262. SET @i += 1
  263. END
  264. END
  265. GO
  266. DECLARE @VarDecimalSupported AS BIT;
  267. SELECT @VarDecimalSupported = 0;
  268. IF ((ServerProperty(N'EngineEdition') = 3)
  269. AND (((@@microsoftversion / power(2, 24) = 9)
  270. AND (@@microsoftversion & 0xffff >= 3024))
  271. OR ((@@microsoftversion / power(2, 24) = 10)
  272. AND (@@microsoftversion & 0xffff >= 1600))))
  273. SELECT @VarDecimalSupported = 1;
  274. IF (@VarDecimalSupported > 0)
  275. BEGIN
  276. EXECUTE sp_db_vardecimal_storage_format N'PowerConsumption', 'ON';
  277. END
  278. GO
  279. PRINT N'Update complete.';
  280. SET ANSI_NULLS ON
  281. GO
  282. SET QUOTED_IDENTIFIER ON
  283. GO
  284. CREATE TABLE [dbo].[dm_db_log_stats_history](
  285. [Date] [datetime] NOT NULL,
  286. [Database] [nvarchar](128) NULL,
  287. [database_id] [int] NULL,
  288. [recovery_model] [nvarchar](60) NULL,
  289. [log_min_lsn] [nvarchar](24) NULL,
  290. [log_end_lsn] [nvarchar](24) NULL,
  291. [current_vlf_sequence_number] [bigint] NULL,
  292. [current_vlf_size_mb] [float] NULL,
  293. [total_vlf_count] [bigint] NULL,
  294. [total_log_size_mb] [float] NULL,
  295. [active_vlf_count] [bigint] NULL,
  296. [active_log_size_mb] [float] NULL,
  297. [log_truncation_holdup_reason] [nvarchar](60) NULL,
  298. [log_backup_time] [datetime] NULL,
  299. [log_backup_lsn] [nvarchar](24) NULL,
  300. [log_since_last_log_backup_mb] [float] NULL,
  301. [log_checkpoint_lsn] [nvarchar](24) NULL,
  302. [log_since_last_checkpoint_mb] [float] NULL,
  303. [log_recovery_lsn] [nvarchar](24) NULL,
  304. [log_recovery_size_mb] [float] NULL,
  305. [recovery_vlf_count] [bigint] NULL
  306. ) ON [PRIMARY]
  307. GO
  308. PRINT 'Table dm_db_log_stats_history created for monitoring'
  309. GO
  310. ALTER DATABASE PowerConsumption SET RECOVERY FULL
  311. GO
  312. PRINT N'Set Database Recovery model to full';
  313. BACKUP DATABASE PowerConsumption TO disk = '/var/opt/mssql/data/powerconsumption.bak' WITH FORMAT,COMPRESSION
  314. BACKUP LOG PowerConsumption TO disk = '/var/opt/mssql/data/powerconsumption.bak' WITH COMPRESSION
  315. PRINT N'Full database completed';
  316. GO
  317. --deletes backupfile info
  318. truncate table msdb.dbo.backupfile
  319. --deletes backupfilegroup info
  320. truncate table msdb.dbo.backupfilegroup
  321. --deletes restorefile info
  322. truncate table msdb.dbo.restorefile
  323. --deletes restorefilegroup info
  324. truncate table msdb.dbo.restorefilegroup
  325. --deletes restorehistory info
  326. delete from msdb.dbo.restorehistory
  327. --delete backupset info
  328. delete from msdb.dbo.backupset
  329. --deletes backupmedia info
  330. delete from msdb.dbo.backupmediafamily
  331. --deletes backupmediaset info
  332. delete from msdb.dbo.backupmediaset
  333. Print 'Backup Information deleted'