Temptable

MSSQL Set All Databases to FULL Recovery

This script sets all databases to FULL recovery (except for master, model and tempdb). We can avoid using a cursor by making use of a temporary table. First a temptable gets filled with execution commands, and then the script executes each row until the record id equals the total number of records.

-- Declarations and temptables...
DECLARE @iNumRecs int, @iRecNum int = 1, @vCommand nvarchar(max)
CREATE TABLE #tCommands (ID int IDENTITY(1,1), Command nvarchar(max))

-- Insert Commands into temptable...
INSERT INTO #tCommands (Command)
SELECT N'ALTER DATABASE [' + name + '] SET RECOVERY FULL WITH NO_WAIT' 
FROM [master].[sys].[databases]
WHERE recovery_model_desc = 'SIMPLE' AND name NOT in ('master', 'msdb', 'tempdb')

-- Execute commands from temptable...
SELECT @iNumRecs = COUNT(*) FROM #tCommands
WHILE @iRecNum <= @iNumRecs
BEGIN
 SELECT @vCommand = Command FROM #tCommands
 WHERE ID = @iRecNum
 -- Execute command and increase record number...
 -- EXECUTE(@vCommand) --Alternative, Not preferred...
 EXECUTE sys.sp_executesql @stmt = @vCommand
 SET @iRecNum += 1
END

-- Cleanup...
DROP TABLE #tCommands

MSSQL Read output SP in temptable

De onderstaande gegevens plaatst de gegevens uit een stored procedure in een tijdelijke tabel. Deze specifieke uitwerking plaatst de output van sp_who2 in een tijdelijke tabel met de naam #tWho2. Nu kun je de gegevens filteren d.m.v. queries op de tijdelijke tabel.

-- Oude tijdelijke tabel verwijderen...
DROP TABLE #tWho2
GO

-- Nieuwe tijdelijke tabel aanmaken met alle velden...
CREATE TABLE #tWho2 (
SPID char(5),
[Status] nvarchar(max),
[Login] nvarchar(max),
HostName nvarchar(max),
BlkBy char(5),
DBName nvarchar(max),
Command nvarchar(max),
CPUTime nvarchar(max),
DiskIO nvarchar(max),
LastBatch nvarchar(max),
ProgramName nvarchar(max),
SPID2 char(5),
REQUESTID char(5)
)
GO

-- Gegevens uit stored procedure inlezen in tijdelijk tabel...
INSERT INTO #tWho2 EXEC sp_who2
GO

MSSQL Log space used percentage

Met onderstaande T-SQL kun je de vulling in procent van het transaction log bestand van een specifieke database opvragen en monitoren. Dit is alleen handig in specifieke situaties. Bij een correct database onderhoudsplan zal dit niet nodig zijn.

CREATE TABLE #tTLSpace 
( 
DBName sysname, 
TLSize decimal(18,5), 
TLUsed decimal(18,5), 
status INT 
)
GO

INSERT INTO #tTLSpace 
       exec ('DBCC SQLPERF(logspace)') 
GO

DECLARE @dTLUsed decimal
SELECT @dTLUsed = TLUsed from #tTLSpace WHERE DBName = 'DATABASE'
IF ( @dTLUsed > 90)
BEGIN
  PRINT @dTLUsed
  PRINT 'TransactionLog bestand 90 procent vol...'
END
GO

DROP TABLE #tTLSpace 
GO