SQL-pätkiä kaikenlaiseen operointiin

Välillä sitä ihminen tarvitsee jos jonkinlaista pikku skriptintynkää SQL:n kanssa operoimiseen. Alle on keräiltynä ikään kuin muistilapun oloisesti tarpeelliseksi havaittuja rytäyksiä.

Single User to Multi User (last resort -tyyppinen)

USE master
GO
DECLARE @kill varchar(max) = '';
SELECT @kill = @kill + 'KILL ' + CONVERT(varchar(10), spid) + '; '
FROM master..sysprocesses 
WHERE spid > 50 AND dbid = DB_ID('KANTA')
EXEC(@kill);

GO
SET DEADLOCK_PRIORITY HIGH
ALTER DATABASE [KANTA] SET MULTI_USER WITH NO_WAIT
ALTER DATABASE [KANTA] SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO
			

Trace Flag 3042 (ei tilan esivarausta kompressoidussa backupissa)

DBCC TRACEON (3042, -1)
DBCC TRACESTATUS (3042)

Muista myös laittaa -T3042 -parametri SQL:n startuppiin Configuration Managerin avulla.

Error-logien kierrätys joka kuun viides päivä

USE [msdb]
GO
DECLARE @jobId BINARY(16)
EXEC  msdb.dbo.sp_add_job @job_name=N'CycleErrorLogs', 
		@enabled=1, 
		@notify_level_eventlog=0, 
		@notify_level_email=2, 
		@notify_level_netsend=2, 
		@notify_level_page=2, 
		@delete_level=0, 
		@category_name=N'[Uncategorized (Local)]', 
		@description=N'Cycles error logs on the 5th day of every month.', 
		@owner_login_name=N'DOMAIN\Käyttäjä', @job_id = @jobId OUTPUT /* Käyttäjä voi olla myös sa-tunnus. */
select @jobId
GO
EXEC msdb.dbo.sp_add_jobserver @job_name=N'CycleErrorLogs', @server_name = N'SAMPO'
GO

EXEC msdb.dbo.sp_add_jobstep @job_name=N'CycleErrorLogs', @step_name=N'Cycle', 
		@step_id=1, 
		@cmdexec_success_code=0, 
		@on_success_action=1, 
		@on_fail_action=2, 
		@retry_attempts=0, 
		@retry_interval=0, 
		@os_run_priority=0, @subsystem=N'TSQL', 
		@command=N'EXEC sp_cycle_errorlog', 
		@database_name=N'master', 
		@flags=0
GO
DECLARE @schedule_id int
EXEC msdb.dbo.sp_add_jobschedule @job_name=N'CycleErrorLogs', @name=N'EveryMonthFifth', 
		@enabled=1, 
		@freq_type=16, 
		@freq_interval=5, 
		@freq_subday_type=1, 
		@freq_subday_interval=0, 
		@freq_relative_interval=0, 
		@freq_recurrence_factor=1, 
		@active_start_date=20180406, 
		@active_end_date=99991231, 
		@active_start_time=0, 
		@active_end_time=235959, @schedule_id = @schedule_id OUTPUT
select @schedule_id
GO

Aseta rinnakkaistumisen Cost Threshold ylemmäs kuin default (tässä 25)

EXEC sys.sp_configure N'show advanced options', N'1'
RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N'cost threshold for parallelism', N'25'
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N'show advanced options', N'0'  
RECONFIGURE WITH OVERRIDE
GO

Aseta backup-kompressio oletusasetukseksi koko instanssissa

EXEC sys.sp_configure N'backup compression default', N'1'
GO
RECONFIGURE WITH OVERRIDE
GO

Looppaa läpi kannat jotka alkavat merkkijonolla "ALKU_" ja luo niihin dbo-käyttäjä.

exec sp_MSForEachDB '
IF ''?'' LIKE ''ALKU_%%''
BEGIN;
Use [?];
CREATE USER käyttäjä FOR LOGIN käyttäjä
ALTER ROLE [db_owner] ADD MEMBER käyttäjä
END;'

Erilaiset päivämäärät

SELECT dateadd(mm, 0, 0) as BeginningOfTime
      ,dateadd(dd, datediff(dd, 0, getdate()), 0) as Today
      ,dateadd(wk, datediff(wk, 0, getdate()), 0) as ThisWeekStart
      ,dateadd(mm, datediff(mm, 0, getdate()), 0) as ThisMonthStart
      ,dateadd(qq, datediff(qq, 0, getdate()), 0) as ThisQuarterStart
      ,dateadd(yy, datediff(yy, 0, getdate()), 0) as ThisYearStart
      ,dateadd(dd, datediff(dd, 0, getdate()) + 1, 0) as Tomorrow
      ,dateadd(wk, datediff(wk, 0, getdate()) + 1, 0) as NextWeekStart
      ,dateadd(mm, datediff(mm, 0, getdate()) + 1, 0) as NextMonthStart
      ,dateadd(qq, datediff(qq, 0, getdate()) + 1, 0) as NextQuarterStart
      ,dateadd(yy, datediff(yy, 0, getdate()) + 1, 0) as NextYearStart
      ,dateadd(ms, -3, dateadd(dd, datediff(dd, 0, getdate()) + 1, 0)) as TodayEnd
      ,dateadd(ms, -3, dateadd(wk, datediff(wk, 0, getdate()) + 1, 0)) as ThisWeekEnd
      ,dateadd(ms, -3, dateadd(mm, datediff(mm, 0, getdate()) + 1, 0)) as ThisMonthEnd
      ,dateadd(ms, -3, dateadd(qq, datediff(qq, 0, getdate()) + 1, 0)) as ThisQuarterEnd
      ,dateadd(ms, -3, dateadd(yy, datediff(yy, 0, getdate()) + 1, 0)) as ThisYearEnd

Viime kuun ensimmäinen ja viimeinen päivä:

	SELECT dateadd(mm, datediff(mm, 0, dateadd(MM, -1, getdate())), 0)
	SELECT dateadd(ms, -3, dateadd(mm, datediff(mm, 0, dateadd(MM, -1, getdate())) + 1, 0))
	
Tämän päivän aamu:

	SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
	
Eilisen päivän aamu:

	SELECT DATEADD(dd, -1, DATEDIFF(dd, 0, GETDATE()))