Added new scripts and changes

This commit is contained in:
2024-12-24 15:33:41 +01:00
parent a0c7d14a63
commit 9052475370
18 changed files with 11313 additions and 7 deletions

2
.gitignore vendored
View File

@@ -5,3 +5,5 @@
/OCTPDBA-688 - snapshot replication init
_delphix poc credentials
/TPDT-268 - ACP in task sequence/*.bak
*.xlsx
*.csv

View File

@@ -19,7 +19,7 @@ SELECT t.name AS TableName,
LEFT OUTER JOIN sys.schemas s
ON t.schema_id = s.schema_id
WHERE i.object_id > 255
AND i.index_id IN ( 0, 1 )
-- AND i.index_id IN ( 0, 1 ) --0=heap, 1= clustered
AND t.name NOT LIKE 'dt%'
AND [t].[is_ms_shipped] = 0
AND i.object_id > 255

View File

@@ -0,0 +1,16 @@
/*
adapt the db name and execute each of those steps manually
if data corruption have occured, restoring a backup might need necessary
*/
return
ALTER DATABASE sandbox SET EMERGENCY;
dbcc checkdb('sandbox') WITH ALL_ERRORMSGS, NO_INFOMSGS
ALTER DATABASE sandbox SET single_user with rollback immediate;
dbcc checkdb ('sandbox',repair_allow_data_loss)
ALTER DATABASE sandbox SET multi_user with rollback immediate;

View File

@@ -0,0 +1,42 @@
WITH cteDates AS (
SELECT [RunDate]
, ROW_NUMBER()OVER(ORDER BY [RunDate] DESC) AS rnk
FROM [ODB_JobManager].[dbo].[ActiveQuery_ResourceUse]
WHERE [RunDate] > DATEADD(DAY, -1, CURRENT_TIMESTAMP)
GROUP BY [RunDate]
)
SELECT TOP (1000)
[d].[rnk]
,[a].[RunId]
,[a].[RunDate]
,[a].[percent_complete]
,[a].[status]
,[a].[database_name]
,[a].[RunDuration]
,[a].[session_id]
,[a].[blocking_session_id]
,[a].[blocked_session_count]
,[a].[sql_text]
,[a].[sql_command]
,[a].[login_name]
,[a].[wait_info]
,[a].[host_name]
,[a].[CPU]
,[a].[tempdb_allocations]
,[a].[tempdb_current]
,[a].[reads]
,[a].[writes]
,[a].[physical_reads]
,[a].[used_memory]
,[a].[open_tran_count]
,[a].[program_name]
,[a].[start_time]
,[a].[login_time]
,[a].[request_id]
,[a].[collection_time]
FROM [ODB_JobManager].[dbo].[ActiveQuery_ResourceUse] a
JOIN [cteDates] d ON d.[RunDate] = a.[RunDate]
--WHERE d.[rnk] = 5,
WHERE [a].[RunDate]='2024-10-08 16:33:01.607'
ORDER BY [a].[RunId] DESC

View File

@@ -0,0 +1,18 @@
/*
10.10.2024, TSC
*/
USE master;
DECLARE @dbg BIT = 0;
SELECT
@@SERVERNAME AS [db_server]
,s.[name] AS [snapshot]
,s.[database_id] AS [sn_id]
,d.[name] AS [source_database]
,d.[database_id] AS [db_id]
,s.[create_date]
,REPLACE(REPLACE(REPLACE('EXEC [master].[dbo].[p_DbTool__Recreate_Snapshot] @debugMode = @dbg@, @databaseName = ''@db_name@'', @snapshotName = ''@snapshot_name@'';', '@dbg@', @dbg), '@db_name@', d.[name]), '@snapshot_name@', s.[name]) AS [recreate_script]
,REPLACE(REPLACE(REPLACE('EXEC [master].[dbo].[p_DbTool__Drop_Snapshot] @debugMode = @dbg@, @databaseName = ''@db_name@'', @snapshotName = ''@snapshot_name@'';', '@dbg@', @dbg), '@db_name@', d.[name]), '@snapshot_name@', s.[name]) AS [drop_script]
FROM [sys].[databases] s
JOIN [sys].[databases] d ON d.[database_id] = s.[source_database_id]
ORDER BY REPLACE(REPLACE(d.[name],'__00',''), '__01', ''), s.[name];

View File

@@ -0,0 +1,20 @@
/*
Check table compression on all tables (indexes / partitions really) of the current db
24.12.2024, TSC
*/
--heap tables
SELECT [t].[name] AS [Table], [p].[partition_number] AS [Partition],
[p].[data_compression_desc] AS [Compression]
FROM [sys].[partitions] AS [p]
INNER JOIN sys.tables AS [t] ON [t].[object_id] = [p].[object_id]
WHERE [p].[index_id] in (0,1)
--non heap tables
SELECT [t].[name] AS [Table], [i].[name] AS [Index],
[p].[partition_number] AS [Partition],
[p].[data_compression_desc] AS [Compression]
FROM [sys].[partitions] AS [p]
INNER JOIN sys.tables AS [t] ON [t].[object_id] = [p].[object_id]
INNER JOIN sys.indexes AS [i] ON [i].[object_id] = [p].[object_id] AND [i].[index_id] = [p].[index_id]
WHERE [p].[index_id] > 1

View File

@@ -0,0 +1,25 @@
DECLARE @dbName NVARCHAR(255);
DECLARE @sql NVARCHAR(MAX);
-- Cursor to iterate through all user databases
DECLARE db_cursor CURSOR FOR
SELECT d.name
FROM sys.databases d
WHERE [is_query_store_on] = 1 -- Filters databases where Query Store is enabled
AND d.[source_database_id] IS NULL
;
OPEN db_cursor;
FETCH NEXT FROM db_cursor INTO @dbName;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'ALTER DATABASE [' + @dbName + '] SET QUERY_STORE = OFF;';
PRINT @sql; -- Optional: to view the SQL commands being executed
EXEC sp_executesql @sql;
FETCH NEXT FROM db_cursor INTO @dbName;
END;
CLOSE db_cursor;
DEALLOCATE db_cursor;

View File

@@ -0,0 +1,23 @@
DECLARE @dbName NVARCHAR(255);
DECLARE db_cursor CURSOR FOR
SELECT name
FROM sys.databases
WHERE state_desc = 'ONLINE'
AND is_read_only = 0
AND source_database_id IS NULL
AND [database_id]>4 --ignore system dbs
;
OPEN db_cursor;
FETCH NEXT FROM db_cursor INTO @dbName;
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC('ALTER DATABASE [' + @dbName + '] SET QUERY_STORE = ON (OPERATION_MODE = READ_WRITE);');
PRINT 'ALTER DATABASE [' + @dbName + '] SET QUERY_STORE = ON (OPERATION_MODE = READ_WRITE);'
FETCH NEXT FROM db_cursor INTO @dbName;
END
CLOSE db_cursor;
DEALLOCATE db_cursor;

View File

@@ -0,0 +1,38 @@
/*
09.10.2024, TSC
*/
IF OBJECT_ID('tempdb..#fstream')IS NOT NULL BEGIN;
DROP TABLE #fstream;
END;
CREATE TABLE #fstream (
[db_name] VARCHAR(255) NOT NULL
,table_schema VARCHAR(99) NOT NULL
,table_name VARCHAR(99) NOT NULL
,column_name VARCHAR(255) NOT NULL
)
DECLARE @tpl VARCHAR(MAX) ='
USE ?
INSERT INTO [#fstream] (
[db_name],
[table_schema],
[table_name],
[column_name]
)
SELECT
DB_NAME() AS [db_name]
,SCHEMA_NAME(t.[schema_id] ) AS table_schema
, t.[name] as table_name
, c.[name] AS column_name
FROM sys.[columns] c
JOIN sys.[tables] t ON t.[object_id] = c.[object_id]
WHERE [c].[is_filestream] = 1
'
EXEC [sys].[sp_MSforeachdb] @command1 = @tpl
SELECT *
FROM [#fstream]
ORDER BY [db_name]

View File

@@ -15,13 +15,44 @@ FROM sys.master_files F WITH(NOWAIT)
GROUP BY F.database_id
ORDER BY [total_size_mb] DESC
IF OBJECT_ID('tempdb..#FileSize')IS NOT NULL BEGIN;
DROP TABLE #FileSize;
END;
CREATE TABLE #FileSize(
dbName NVARCHAR(128) NOT NULL,
FileName NVARCHAR(128) NOT NULL,
type_desc NVARCHAR(128) NOT NULL,
CurrentSizeMB DECIMAL(10,2) NOT NULL,
FreeSpaceMB DECIMAL(10,2) NULL
)
INSERT INTO #FileSize(dbName, FileName, type_desc, CurrentSizeMB, FreeSpaceMB)
exec sp_msforeachdb
'use [?];
SELECT DB_NAME() AS DbName,
name AS FileName,
type_desc,
size/128.0 AS CurrentSizeMB,
size/128.0 - CAST(FILEPROPERTY(name, ''SpaceUsed'') AS INT)/128.0 AS FreeSpaceMB
FROM sys.database_files
WHERE type IN (0,1);';
/*
SELECT *
FROM #FileSize
*/
SELECT
d.[name] AS dbName
,f.[physical_name] AS physicalFileName
,f.[name] AS logicalFileName
--,d2.[log_size_mb]
--,d2.[row_size_mb]
,'-----' AS separator
,CAST(f.size * 8. / 1024 AS DECIMAL(18,2)) AS fileSizeMB
,fs.[FreeSpaceMB] AS FreeSpaceInFileMB
,fs.[CurrentSizeMB] - fs.[FreeSpaceMB] AS SpaceUsedMB
,CAST((fs.[CurrentSizeMB] - fs.[FreeSpaceMB]) * 100 / (CAST(f.size * 8. / 1024 AS DECIMAL(18,2))) AS NUMERIC(6,2)) AS fileSpaceUsedPercent
,'-----' AS separator
,d2.[total_size_mb] AS totalDbSizeMB
,'USE '+d.name+';
DBCC SHRINKFILE (N'''+f.[name]+''' , 0, TRUNCATEONLY);
@@ -36,6 +67,7 @@ GO
FROM sys.master_files F
JOIN sys.databases d ON d.[database_id] = f.[database_id]
JOIN [#dbs] [d2] ON d2.[database_name] = d.[name]
LEFT JOIN [#FileSize] fs ON fs.[FileName] = f.name AND fs.[dbName] = d.[name]
WHERE f.type_desc IN (
'ROWS' --mdf
--,'LOG'
@@ -43,6 +75,7 @@ WHERE f.type_desc IN (
--AND f.[physical_name] LIKE 'f%'
--AND d.[is_read_only] = 0
--AND d.[is_auto_shrink_on] = 0
--AND d.name='sl2007'
--AND d.name NOT IN (
-- 'master'
-- ,'tempdb'

10527
EXPLOIT - quicky store.sql Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,124 @@
/*
21.10.2024, TSC
Report about wait states, fetched from https://www.sqlskills.com/blogs/paul/wait-statistics-or-please-tell-me-where-it-hurts/
*/
WITH [Waits] AS
(SELECT
[wait_type],
[wait_time_ms] / 1000.0 AS [WaitS],
([wait_time_ms] - [signal_wait_time_ms]) / 1000.0 AS [ResourceS],
[signal_wait_time_ms] / 1000.0 AS [SignalS],
[waiting_tasks_count] AS [WaitCount],
100.0 * [wait_time_ms] / SUM ([wait_time_ms]) OVER() AS [Percentage],
ROW_NUMBER() OVER(ORDER BY [wait_time_ms] DESC) AS [RowNum]
FROM sys.dm_os_wait_stats
WHERE [wait_type] NOT IN (
-- These wait types are almost 100% never a problem and so they are
-- filtered out to avoid them skewing the results. Click on the URL
-- for more information.
N'BROKER_EVENTHANDLER', -- https://www.sqlskills.com/help/waits/BROKER_EVENTHANDLER
N'BROKER_RECEIVE_WAITFOR', -- https://www.sqlskills.com/help/waits/BROKER_RECEIVE_WAITFOR
N'BROKER_TASK_STOP', -- https://www.sqlskills.com/help/waits/BROKER_TASK_STOP
N'BROKER_TO_FLUSH', -- https://www.sqlskills.com/help/waits/BROKER_TO_FLUSH
N'BROKER_TRANSMITTER', -- https://www.sqlskills.com/help/waits/BROKER_TRANSMITTER
N'CHECKPOINT_QUEUE', -- https://www.sqlskills.com/help/waits/CHECKPOINT_QUEUE
N'CHKPT', -- https://www.sqlskills.com/help/waits/CHKPT
N'CLR_AUTO_EVENT', -- https://www.sqlskills.com/help/waits/CLR_AUTO_EVENT
N'CLR_MANUAL_EVENT', -- https://www.sqlskills.com/help/waits/CLR_MANUAL_EVENT
N'CLR_SEMAPHORE', -- https://www.sqlskills.com/help/waits/CLR_SEMAPHORE
-- Maybe comment this out if you have parallelism issues
N'CXCONSUMER', -- https://www.sqlskills.com/help/waits/CXCONSUMER
-- Maybe comment these four out if you have mirroring issues
N'DBMIRROR_DBM_EVENT', -- https://www.sqlskills.com/help/waits/DBMIRROR_DBM_EVENT
N'DBMIRROR_EVENTS_QUEUE', -- https://www.sqlskills.com/help/waits/DBMIRROR_EVENTS_QUEUE
N'DBMIRROR_WORKER_QUEUE', -- https://www.sqlskills.com/help/waits/DBMIRROR_WORKER_QUEUE
N'DBMIRRORING_CMD', -- https://www.sqlskills.com/help/waits/DBMIRRORING_CMD
N'DIRTY_PAGE_POLL', -- https://www.sqlskills.com/help/waits/DIRTY_PAGE_POLL
N'DISPATCHER_QUEUE_SEMAPHORE', -- https://www.sqlskills.com/help/waits/DISPATCHER_QUEUE_SEMAPHORE
N'EXECSYNC', -- https://www.sqlskills.com/help/waits/EXECSYNC
N'FSAGENT', -- https://www.sqlskills.com/help/waits/FSAGENT
N'FT_IFTS_SCHEDULER_IDLE_WAIT', -- https://www.sqlskills.com/help/waits/FT_IFTS_SCHEDULER_IDLE_WAIT
N'FT_IFTSHC_MUTEX', -- https://www.sqlskills.com/help/waits/FT_IFTSHC_MUTEX
-- Maybe comment these six out if you have AG issues
N'HADR_CLUSAPI_CALL', -- https://www.sqlskills.com/help/waits/HADR_CLUSAPI_CALL
N'HADR_FILESTREAM_IOMGR_IOCOMPLETION', -- https://www.sqlskills.com/help/waits/HADR_FILESTREAM_IOMGR_IOCOMPLETION
N'HADR_LOGCAPTURE_WAIT', -- https://www.sqlskills.com/help/waits/HADR_LOGCAPTURE_WAIT
N'HADR_NOTIFICATION_DEQUEUE', -- https://www.sqlskills.com/help/waits/HADR_NOTIFICATION_DEQUEUE
N'HADR_TIMER_TASK', -- https://www.sqlskills.com/help/waits/HADR_TIMER_TASK
N'HADR_WORK_QUEUE', -- https://www.sqlskills.com/help/waits/HADR_WORK_QUEUE
N'KSOURCE_WAKEUP', -- https://www.sqlskills.com/help/waits/KSOURCE_WAKEUP
N'LAZYWRITER_SLEEP', -- https://www.sqlskills.com/help/waits/LAZYWRITER_SLEEP
N'LOGMGR_QUEUE', -- https://www.sqlskills.com/help/waits/LOGMGR_QUEUE
N'MEMORY_ALLOCATION_EXT', -- https://www.sqlskills.com/help/waits/MEMORY_ALLOCATION_EXT
N'ONDEMAND_TASK_QUEUE', -- https://www.sqlskills.com/help/waits/ONDEMAND_TASK_QUEUE
N'PARALLEL_REDO_DRAIN_WORKER', -- https://www.sqlskills.com/help/waits/PARALLEL_REDO_DRAIN_WORKER
N'PARALLEL_REDO_LOG_CACHE', -- https://www.sqlskills.com/help/waits/PARALLEL_REDO_LOG_CACHE
N'PARALLEL_REDO_TRAN_LIST', -- https://www.sqlskills.com/help/waits/PARALLEL_REDO_TRAN_LIST
N'PARALLEL_REDO_WORKER_SYNC', -- https://www.sqlskills.com/help/waits/PARALLEL_REDO_WORKER_SYNC
N'PARALLEL_REDO_WORKER_WAIT_WORK', -- https://www.sqlskills.com/help/waits/PARALLEL_REDO_WORKER_WAIT_WORK
N'PREEMPTIVE_OS_FLUSHFILEBUFFERS', -- https://www.sqlskills.com/help/waits/PREEMPTIVE_OS_FLUSHFILEBUFFERS
N'PREEMPTIVE_XE_GETTARGETSTATE', -- https://www.sqlskills.com/help/waits/PREEMPTIVE_XE_GETTARGETSTATE
N'PVS_PREALLOCATE', -- https://www.sqlskills.com/help/waits/PVS_PREALLOCATE
N'PWAIT_ALL_COMPONENTS_INITIALIZED', -- https://www.sqlskills.com/help/waits/PWAIT_ALL_COMPONENTS_INITIALIZED
N'PWAIT_DIRECTLOGCONSUMER_GETNEXT', -- https://www.sqlskills.com/help/waits/PWAIT_DIRECTLOGCONSUMER_GETNEXT
N'PWAIT_EXTENSIBILITY_CLEANUP_TASK', -- https://www.sqlskills.com/help/waits/PWAIT_EXTENSIBILITY_CLEANUP_TASK
N'QDS_PERSIST_TASK_MAIN_LOOP_SLEEP', -- https://www.sqlskills.com/help/waits/QDS_PERSIST_TASK_MAIN_LOOP_SLEEP
N'QDS_ASYNC_QUEUE', -- https://www.sqlskills.com/help/waits/QDS_ASYNC_QUEUE
N'QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP',
-- https://www.sqlskills.com/help/waits/QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP
N'QDS_SHUTDOWN_QUEUE', -- https://www.sqlskills.com/help/waits/QDS_SHUTDOWN_QUEUE
N'REDO_THREAD_PENDING_WORK', -- https://www.sqlskills.com/help/waits/REDO_THREAD_PENDING_WORK
N'REQUEST_FOR_DEADLOCK_SEARCH', -- https://www.sqlskills.com/help/waits/REQUEST_FOR_DEADLOCK_SEARCH
N'RESOURCE_QUEUE', -- https://www.sqlskills.com/help/waits/RESOURCE_QUEUE
N'SERVER_IDLE_CHECK', -- https://www.sqlskills.com/help/waits/SERVER_IDLE_CHECK
N'SLEEP_BPOOL_FLUSH', -- https://www.sqlskills.com/help/waits/SLEEP_BPOOL_FLUSH
N'SLEEP_DBSTARTUP', -- https://www.sqlskills.com/help/waits/SLEEP_DBSTARTUP
N'SLEEP_DCOMSTARTUP', -- https://www.sqlskills.com/help/waits/SLEEP_DCOMSTARTUP
N'SLEEP_MASTERDBREADY', -- https://www.sqlskills.com/help/waits/SLEEP_MASTERDBREADY
N'SLEEP_MASTERMDREADY', -- https://www.sqlskills.com/help/waits/SLEEP_MASTERMDREADY
N'SLEEP_MASTERUPGRADED', -- https://www.sqlskills.com/help/waits/SLEEP_MASTERUPGRADED
N'SLEEP_MSDBSTARTUP', -- https://www.sqlskills.com/help/waits/SLEEP_MSDBSTARTUP
N'SLEEP_SYSTEMTASK', -- https://www.sqlskills.com/help/waits/SLEEP_SYSTEMTASK
N'SLEEP_TASK', -- https://www.sqlskills.com/help/waits/SLEEP_TASK
N'SLEEP_TEMPDBSTARTUP', -- https://www.sqlskills.com/help/waits/SLEEP_TEMPDBSTARTUP
N'SNI_HTTP_ACCEPT', -- https://www.sqlskills.com/help/waits/SNI_HTTP_ACCEPT
N'SOS_WORK_DISPATCHER', -- https://www.sqlskills.com/help/waits/SOS_WORK_DISPATCHER
N'SP_SERVER_DIAGNOSTICS_SLEEP', -- https://www.sqlskills.com/help/waits/SP_SERVER_DIAGNOSTICS_SLEEP
N'SQLTRACE_BUFFER_FLUSH', -- https://www.sqlskills.com/help/waits/SQLTRACE_BUFFER_FLUSH
N'SQLTRACE_INCREMENTAL_FLUSH_SLEEP', -- https://www.sqlskills.com/help/waits/SQLTRACE_INCREMENTAL_FLUSH_SLEEP
N'SQLTRACE_WAIT_ENTRIES', -- https://www.sqlskills.com/help/waits/SQLTRACE_WAIT_ENTRIES
N'VDI_CLIENT_OTHER', -- https://www.sqlskills.com/help/waits/VDI_CLIENT_OTHER
N'WAIT_FOR_RESULTS', -- https://www.sqlskills.com/help/waits/WAIT_FOR_RESULTS
N'WAITFOR', -- https://www.sqlskills.com/help/waits/WAITFOR
N'WAITFOR_TASKSHUTDOWN', -- https://www.sqlskills.com/help/waits/WAITFOR_TASKSHUTDOWN
N'WAIT_XTP_RECOVERY', -- https://www.sqlskills.com/help/waits/WAIT_XTP_RECOVERY
N'WAIT_XTP_HOST_WAIT', -- https://www.sqlskills.com/help/waits/WAIT_XTP_HOST_WAIT
N'WAIT_XTP_OFFLINE_CKPT_NEW_LOG', -- https://www.sqlskills.com/help/waits/WAIT_XTP_OFFLINE_CKPT_NEW_LOG
N'WAIT_XTP_CKPT_CLOSE', -- https://www.sqlskills.com/help/waits/WAIT_XTP_CKPT_CLOSE
N'XE_DISPATCHER_JOIN', -- https://www.sqlskills.com/help/waits/XE_DISPATCHER_JOIN
N'XE_DISPATCHER_WAIT', -- https://www.sqlskills.com/help/waits/XE_DISPATCHER_WAIT
N'XE_TIMER_EVENT' -- https://www.sqlskills.com/help/waits/XE_TIMER_EVENT
)
AND [waiting_tasks_count] > 0
)
SELECT
MAX ([W1].[wait_type]) AS [WaitType],
CAST (MAX ([W1].[WaitS]) AS DECIMAL (16,2)) AS [Wait_S],
CAST (MAX ([W1].[ResourceS]) AS DECIMAL (16,2)) AS [Resource_S],
CAST (MAX ([W1].[SignalS]) AS DECIMAL (16,2)) AS [Signal_S],
MAX ([W1].[WaitCount]) AS [WaitCount],
CAST (MAX ([W1].[Percentage]) AS DECIMAL (5,2)) AS [Percentage],
CAST ((MAX ([W1].[WaitS]) / MAX ([W1].[WaitCount])) AS DECIMAL (16,4)) AS [AvgWait_S],
CAST ((MAX ([W1].[ResourceS]) / MAX ([W1].[WaitCount])) AS DECIMAL (16,4)) AS [AvgRes_S],
CAST ((MAX ([W1].[SignalS]) / MAX ([W1].[WaitCount])) AS DECIMAL (16,4)) AS [AvgSig_S],
CAST ('https://www.sqlskills.com/help/waits/' + MAX ([W1].[wait_type]) as XML) AS [Help/Info URL]
FROM [Waits] AS [W1]
INNER JOIN [Waits] AS [W2] ON [W2].[RowNum] <= [W1].[RowNum]
GROUP BY [W1].[RowNum]
HAVING SUM ([W2].[Percentage]) - MAX( [W1].[Percentage] ) < 95; -- percentage threshold
GO

View File

@@ -0,0 +1,53 @@
/*
Fetch the cpu usage over time from [ActiveQuery_ResourceUse]
resolution is on a minute, but can be moved to an hour by playing with the group by clause.
The output of this query is used to populate an excel chart to graph the values
28.10.2024, TSC
*/
USE [ODB_JobManager];
GO
WITH cteSrc
AS (SELECT DISTINCT
[cpu_db_percent],
[cpu_other_percent],
[cpu_idle_percent],
[RunDate],
CONVERT(VARCHAR(20), [RunDate], 120) AS tstamp
FROM [dbo].[ActiveQuery_ResourceUse]
WHERE [cpu_db_percent] IS NOT NULL
)
SELECT *
FROM (
SELECT
MIN([cteSrc].[tstamp]) AS tstamp,
DATEPART(DAY, [cteSrc].[RunDate]) AS [day],
DATEPART(HOUR, [cteSrc].[RunDate]) AS [hour],
DATEPART(MINUTE, [cteSrc].[RunDate]) AS [minute],
AVG([cteSrc].[cpu_db_percent]) AS [avg_cpu_db_percent],
AVG([cteSrc].[cpu_other_percent]) AS [avg_cpu_other_percent],
AVG([cteSrc].[cpu_idle_percent]) AS [avg_cpu_idle_percent],
AVG([cteSrc].[cpu_db_percent]) + AVG([cteSrc].[cpu_other_percent]) AS [avg_cpu_total_percent]
,CASE
WHEN AVG([cteSrc].[cpu_db_percent]) + AVG([cteSrc].[cpu_other_percent]) >= 80 THEN 1 --cpu usage is over 80 %
ELSE 0
END AS [high_cpu_usage_alert]
FROM [cteSrc]
WHERE DATEPART(HOUR, [cteSrc].[RunDate]) BETWEEN 7 AND 19
GROUP BY DATEPART(DAY, [cteSrc].[RunDate]), DATEPART(HOUR, [cteSrc].[RunDate]), DATEPART(MINUTE, [cteSrc].[RunDate])
--ORDER BY DATEPART(DAY, [cteSrc].[RunDate]), DATEPART(HOUR, [cteSrc].[RunDate]), DATEPART(MINUTE, [cteSrc].[RunDate])
)x
WHERE x.[day] = 28
ORDER BY [x].[day], [x].[hour], [x].[minute]
RETURN
SELECT MIN([cpu_idle_percent]), [RunDate]
FROM [dbo].[ActiveQuery_ResourceUse]
WHERE [cpu_idle_percent] IS NOT NULL
GROUP BY [RunDate]
HAVING MIN([cpu_idle_percent]) < 20

View File

@@ -0,0 +1,120 @@
USE [master]
GO
SET NOCOUNT ON;
DECLARE @db_name VARCHAR(100);
IF OBJECT_ID('tempdb..#objects')IS NOT NULL BEGIN;
DROP TABLE #objects;
END;
DECLARE @filter_db NVARCHAR(100);
--SET @filter_db='ProductCompendium_Test'
SET @filter_db='Reporting_Work'
CREATE TABLE #objects ([object_name] varchar(100), [schema_name] varchar(50), [object_type] varchar(50));
DECLARE @objects_error TABLE ([db_name] VARCHAR(100), [schema_name] VARCHAR(100), [object_name] varchar(100), [object_type] VARCHAR(100), [error_msg] VARCHAR(MAX), [cmd] NVARCHAR(MAX));
DECLARE @object_name varchar(100);
DECLARE @schema_name varchar(100);
DECLARE @object_type varchar(100);
DECLARE @sql NVARCHAR(MAX);
DECLARE @output_only BIT = 0;
DECLARE csr_dbs CURSOR FAST_FORWARD READ_ONLY FOR
SELECT d.name
FROM sys.databases d
WHERE d.name not in ('master','model','msdb','tempdb')
AND [d].[source_database_id] IS NULL
AND [d].[is_read_only] = 0
AND [d].[is_in_standby] = 0
AND COALESCE(@filter_db, d.[name]) = [d].[name]
OPEN csr_dbs
FETCH NEXT FROM csr_dbs INTO @db_name
WHILE @@FETCH_STATUS = 0
BEGIN
--fetch objects
SET @sql = '
USE '+@db_name+'
DELETE FROM #objects;
INSERT INTO #objects([object_name], [schema_name], [object_type])
SELECT
name as [object_name]
, SCHEMA_NAME([schema_id]) AS [schema_name]
, [type_desc] as [object_type]
FROM sys.[objects] o
WHERE [type_desc] IN (
''VIEW''
,''SQL_TABLE_VALUED_FUNCTION''
,''SQL_INLINE_TABLE_VALUED_FUNCTION''
,''SQL_SCALAR_FUNCTION''
--,''CLR_TABLE_VALUED_FUNCTION''
--,''CLR_SCALAR_FUNCTION''
,''SQL_STORED_PROCEDURE''
,''SQL_TRIGGER''
)
AND NOT EXISTS (
SELECT 1
FROM [sys].[sql_expression_dependencies] d
WHERE d.[referencing_id] = o.[object_id]
AND [d].[is_schema_bound_reference] = 1
);
'
EXEC sp_executesql @sql, N'';
DECLARE csr_object CURSOR FAST_FORWARD READ_ONLY FOR
SELECT [object_name], [schema_name], [object_type]
FROM #objects
OPEN csr_object
FETCH NEXT FROM csr_object INTO @object_name, @schema_name, @object_type
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN TRY
SELECT @sql='USE '+@db_name+'; EXEC sp_refreshsqlmodule ''['+@schema_name+'].['+@object_name+']''; ';
IF @output_only = 0
BEGIN
--PRINT @db_name+'.'+@schema_name+'.'+@object_name
EXEC sp_executesql @sql, N'';
END
ELSE
BEGIN
PRINT @sql;
END
END TRY
BEGIN CATCH
DECLARE @errorMsg VARCHAR(MAX);
SELECT @errorMsg = error_message();
IF NOT @errorMsg LIKE '%is being referenced%'
BEGIN
INSERT INTO @objects_error([db_name], [schema_name], [object_name], [error_msg], [object_type], [cmd])
SELECT @db_name, @schema_name, @object_name, @errorMsg, @object_type, @sql;
PRINT 'issues in db "'+@db_name+'" object (type '+@object_type+')"'+@schema_name+'.'+@object_name+'": '+ERROR_MESSAGE()
PRINT @sql
END
END CATCH
FETCH NEXT FROM csr_object INTO @object_name, @schema_name, @object_type
END
CLOSE csr_object
DEALLOCATE csr_object
FETCH NEXT FROM csr_dbs INTO @db_name
END
CLOSE csr_dbs
DEALLOCATE csr_dbs
SELECT *
FROM @objects_error
ORDER BY [db_name], [schema_name], [object_name];

View File

@@ -0,0 +1,24 @@
with cteFilteredSize as (
SELECT d.[Server Name]
,sum(d.[UsedSpaceMB]) as filteredInstanceMBUsed
FROM [dbo].[octpdba-931-detail] [d]
WHERE d.[toIgnore]=0
GROUP BY d.[server Name]
)
,cteUnfilteredSize as (
SELECT d.[Server Name]
,sum(d.[UsedSpaceMB]) as unfilteredInstanceMBUsed
FROM [dbo].[octpdba-931-detail] [d]
GROUP BY d.[server Name]
)
,cteCurrentSize as (
select g.[Server Name], sum(g.[SpaceUsedMB]) currentMbUsed
from dbo.[octpdba-931-global] g
GROUP BY g.[Server Name]
)
SELECT f.[Server Name], f.[filteredInstanceMBUsed], uf.[unfilteredInstanceMBUsed], c.[currentMbUsed]
FROM [cteFilteredSize] f
INNER JOIN [cteUnfilteredSize] uf on uf.[Server Name] = f.[Server Name]
INNER JOIN [cteCurrentSize] c on [c].[Server Name] = f.[Server Name]
ORDER BY f.[Server Name]

View File

@@ -0,0 +1,81 @@
IF OBJECT_ID('tempdb..#toUpdate') IS NOT NULL
BEGIN
DROP TABLE [#toUpdate];
END
/*Reset flag toIgnore*/
UPDATE [dbo].[octpdba-931-detail]
SET [octpdba-931-detail].[toIgnore]=0;
/*Search for the group that has the smallest number of pharmacies*/
DECLARE @cntLimit INT;
WITH [cteInstances] AS (
SELECT [g].[Server Name],
CASE
WHEN [g].[Server Name] LIKE 'ama%' THEN 'ama'
WHEN [g].[Server Name] LIKE 'swama%' THEN 'ama'
WHEN [g].[Server Name] LIKE 'cvi%' THEN 'cvi'
WHEN [g].[Server Name] LIKE 'swcvi%' THEN 'cvi'
WHEN [g].[Server Name] LIKE 'sun%' THEN 'sun'
WHEN [g].[Server Name] LIKE 'swsun%' THEN 'sun'
WHEN [g].[Server Name] LIKE 'swprd%' THEN 'central'
ELSE 'unknown' END AS [customer]
FROM [dbo].[octpdba-931-global] [g]
GROUP BY [g].[Server Name]
),
[cteCnt] AS (
SELECT [cteInstances].[customer], COUNT(1) AS [cnt]
FROM [cteInstances]
GROUP BY [cteInstances].[customer]
)
SELECT @cntLimit = MIN([cnt])
FROM [cteCnt]
WHERE [cteCnt].[customer] IN ('sun', 'cvi', 'ama')
/*Every table that is present in less than 90 pharmacies is deemed as to be ignored (phcy count: ama=215, sun=91, cvi=92)*/
SELECT [d].[schemaName],
[d].[TableName],
[d].[dbName],
COUNT(1) AS [cnt]
INTO [#toUpdate]
FROM [dbo].[octpdba-931-detail] [d]
WHERE [d].[serverName] != 'swprddb01.centralinfra.net\APSSQL'
AND [d].[TableName] NOT LIKE 'TT%'
AND [d].[TableName] NOT LIKE 'LD[_]%'
GROUP BY [d].[schemaName],
[d].[TableName],
[d].[dbName]
HAVING COUNT(1) < @cntLimit
ORDER BY [cnt] DESC
/*All tables in the activePos* databases are considered to be taken in account*/
UPDATE [d]
SET [d].[toIgnore] = 0
FROM [dbo].[octpdba-931-detail] [d]
INNER JOIN [#toUpdate] [t] ON [t].[TableName] = [d].[TableName] AND [t].[schemaName] = [d].[schemaName] AND [t].[dbName] = [d].[dbName]
WHERE [d].[dbName] NOT LIKE 'activepos%'
AND [d].[toIgnore] = 1;
/*All tables in the DEL schema are ignored*/
UPDATE [d]
SET [d].[toIgnore] = 1
FROM [dbo].[octpdba-931-detail] [d]
WHERE [d].[schemaName] = 'del'
AND [d].[toIgnore] = 0;
SELECT [d].[schemaName],
[d].[TableName],
[d].[dbName],
COUNT(1) AS [cnt]
FROM [dbo].[octpdba-931-detail] [d]
WHERE [d].[toIgnore] = 01
GROUP BY [d].[schemaName],
[d].[TableName],
[d].[dbName]
--HAVING COUNT(1) < 300
ORDER BY [cnt],
[d].[dbName],
[d].[schemaName],
[d].[TableName] DESC

View File

@@ -0,0 +1,149 @@
/*=============================================================================
Fetch total db size and list every tables size in a selected list of dbs
Parameters
----------------------
Context
----------------------
in all pharmacies and central
Creation : 24.12.2024 / TSC
Modifications:
=============================================================================*/
--#region db list
DECLARE @q NVARCHAR(MAX);
DECLARE @dbFilter TABLE(dbName VARCHAR(255)NOT null);
INSERT INTO @dbFilter
(
[dbName]
)
SELECT d.[name]
FROM sys.databases d
WHERE d.[name] LIKE 'activePos%'
OR
d.[name] IN (
'arizona'
,'arizonaCust'
,'arizonaLd'
)
IF OBJECT_ID('tempdb..#tblSize')IS NOT NULL BEGIN;
DROP TABLE #tblSize;
END;
IF OBJECT_ID('tempdb..#dbs')IS NOT NULL BEGIN
DROP TABLE #dbs;
END
CREATE TABLE #tblSize ( [serverName] nvarchar(128), [dbName] nvarchar(128), [schemaName] nvarchar(128), [TableName] nvarchar(128), [RowCounts] bigint, [TotalSpaceMB] decimal(26,6), [UsedSpaceMB] decimal(26,6), [DataSpaceMB] decimal(26,6) )
CREATE TABLE #dbs ( [database_name] NVARCHAR(128) NOT NULL, [log_size_mb] DECIMAL(18,2) NOT NULL, [row_size_mb] DECIMAL(18,2) NOT NULL, [total_size_mb] DECIMAL(18,2) NOT NULL );
INSERT INTO [#dbs] ([database_name], [log_size_mb], [row_size_mb], [total_size_mb])
SELECT
[database_name] = DB_NAME(f.[database_id])
, log_size_mb = CAST(SUM(CASE WHEN f.[type_desc] = 'LOG' THEN [F].[size] ELSE 0 END) * 8. / 1024 AS DECIMAL(18,2))
, row_size_mb = CAST(SUM(CASE WHEN f.[type_desc] = 'ROWS' THEN [F].[size] ELSE 0 END) * 8. / 1024 AS DECIMAL(18,2))
, total_size_mb = CAST(SUM([F].[size]) * 8. / 1024 AS DECIMAL(18,2))
FROM [sys].[master_files] F
JOIN @dbFilter df ON df.[dbName] = DB_NAME(f.[database_id])
GROUP BY F.[database_id]
ORDER BY [total_size_mb] DESC;
--#endregion db list
--#region db size
IF OBJECT_ID('tempdb..#FileSize')IS NOT NULL BEGIN;
DROP TABLE #FileSize;
END;
CREATE TABLE #FileSize(
[dbname] NVARCHAR(128) NOT NULL,
[filename] NVARCHAR(128) NOT NULL,
[type_desc] NVARCHAR(128) NOT NULL,
CurrentSizeMB DECIMAL(10,2) NOT NULL,
FreeSpaceMB DECIMAL(10,2) NULL
);
INSERT INTO #FileSize([dbname], [filename], [type_desc], CurrentSizeMB, FreeSpaceMB)
EXECUTE sp_msforeachdb
'use [?];
SELECT DB_NAME() AS DbName,
name AS FileName,
type_desc,
size/128.0 AS CurrentSizeMB,
size/128.0 - CAST(FILEPROPERTY(name, ''SpaceUsed'') AS INT)/128.0 AS FreeSpaceMB
FROM sys.database_files
WHERE type IN (0,1);';
--#endregion db size
--#region db size
SELECT
d.[name] AS [dbname]
,f.[physical_name] AS physicalFileName
,f.[name] AS logicalFileName
,CAST(f.SIZE * 8. / 1024 AS DECIMAL(18,2)) AS fileSizeMB
,fs.[FreeSpaceMB] AS FreeSpaceInFileMB
,fs.[CurrentSizeMB] - fs.[FreeSpaceMB] AS SpaceUsedMB
,CAST((fs.[CurrentSizeMB] - fs.[FreeSpaceMB]) * 100 / (CAST(f.SIZE * 8. / 1024 AS DECIMAL(18,2))) AS NUMERIC(6,2)) AS fileSpaceUsedPercent
,d2.[total_size_mb] AS totalDbSizeMB
FROM [sys].[master_files] F
JOIN [sys].[databases] d ON d.[database_id] = f.[database_id]
JOIN [#dbs] [d2] ON d2.[database_name] = d.[name]
LEFT JOIN [#FileSize] fs ON fs.[FileName] = f.[name] AND fs.[dbName] = d.[name]
WHERE f.[type_desc] IN (
'ROWS' --mdf
)
ORDER BY [d].[name] DESC, f.[name] ASC ;
--#endregion db size
--#region tables list
SET @q ='';
DECLARE @tplTbl NVARCHAR(MAX)='
USE @db@
INSERT INTO #tblSize(
[serverName],
[dbName],
[schemaName] ,
[TableName] ,
[RowCounts] ,
[TotalSpaceMB] ,
[UsedSpaceMB] ,
[DataSpaceMB]
)
SELECT @@SERVERNAME as serverName,
DB_NAME() as dbName,
SCHEMA_NAME(t.schema_id) as schemaName,
t.name AS TableName,
MAX([p].[rows]) AS RowCounts,
(SUM([a].[total_pages]) * 8) / 1024.0 AS TotalSpaceMB,
(SUM([a].[used_pages]) * 8) / 1024.0 AS UsedSpaceMB,
(SUM([a].[data_pages]) * 8) / 1024.0 AS DataSpaceMB
FROM sys.tables t
INNER JOIN sys.indexes i
ON t.object_id = i.object_id
INNER JOIN sys.partitions p
ON i.object_id = p.object_id
AND i.index_id = p.index_id
INNER JOIN sys.allocation_units a
ON [p].[partition_id] = [a].[container_id]
WHERE i.object_id > 255
--AND i.index_id IN ( 0, 1 )
GROUP BY t.name, t.schema_id
ORDER BY TotalSpaceMB DESC;
';
SELECT @q = @q + REPLACE(@tplTbl, '@db@', [dbName])
FROM @dbFilter;
--PRINT @q
EXEC [sys].[sp_executesql]
@q
,N''
;
SELECT *
FROM [#tblSize]
--#endregion tables list

View File

@@ -1,10 +1,15 @@
[CmdletBinding()]
param (
[Parameter(Position=1, Mandatory=$true)]
[string]
$machineName
)
$query=@"
USE [ControlCenter]
DECLARE @res VARCHAR(MAX)=''
SELECT @res = @res + ',"'+[s].[SE_DNS]+'"'
SELECT [s].[SE_DNS]
FROM [dbo].[Server] s
JOIN [dbo].[Entity] e ON [e].[EN_id] = [s].[SE_entity]
WHERE e.[EN_id] IN (
@@ -19,10 +24,16 @@ AND (
)
ORDER BY s.[SE_entity], [s].[SE_OU_code];
SELECT STUFF(@res,1,1,'') as OU_list
"@
$machines = Invoke-Sqlcmd -ServerInstance HCIMON -Database ControlCenter -Query $query
$machines = Invoke-Sqlcmd -ServerInstance HCIMON -Database ControlCenter -Query $query -TrustServerCertificate
$machines | Format-Table
$machines | Select-Object -First 3 | ForEach-Object {
$trg = $_
$files = Get-ChildItem -Path "\\$_\c$" -Filter "*vesta*"
$files += Get-ChildItem -Path "\\$_\d$" -Filter "*vesta*"
$files += Get-ChildItem -Path "\\$_\f$" -Filter "*vesta*"
$files += Get-ChildItem -Path "\\$_\u$" -Filter "*vesta*"
}