Added new scripts and changes
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -5,3 +5,5 @@
|
|||||||
/OCTPDBA-688 - snapshot replication init
|
/OCTPDBA-688 - snapshot replication init
|
||||||
_delphix poc credentials
|
_delphix poc credentials
|
||||||
/TPDT-268 - ACP in task sequence/*.bak
|
/TPDT-268 - ACP in task sequence/*.bak
|
||||||
|
*.xlsx
|
||||||
|
*.csv
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ SELECT t.name AS TableName,
|
|||||||
LEFT OUTER JOIN sys.schemas s
|
LEFT OUTER JOIN sys.schemas s
|
||||||
ON t.schema_id = s.schema_id
|
ON t.schema_id = s.schema_id
|
||||||
WHERE i.object_id > 255
|
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.name NOT LIKE 'dt%'
|
||||||
AND [t].[is_ms_shipped] = 0
|
AND [t].[is_ms_shipped] = 0
|
||||||
AND i.object_id > 255
|
AND i.object_id > 255
|
||||||
|
|||||||
16
DBG - recovery pending db.sql
Normal file
16
DBG - recovery pending db.sql
Normal 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;
|
||||||
42
EXPLOIT - check HCI query log.sql
Normal file
42
EXPLOIT - check HCI query log.sql
Normal 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
|
||||||
18
EXPLOIT - check HCI snapshots.sql
Normal file
18
EXPLOIT - check HCI snapshots.sql
Normal 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];
|
||||||
20
EXPLOIT - check compression on tables in db.sql
Normal file
20
EXPLOIT - check compression on tables in db.sql
Normal 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
|
||||||
25
EXPLOIT - disable query store.sql
Normal file
25
EXPLOIT - disable query store.sql
Normal 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;
|
||||||
23
EXPLOIT - enable query store on all dbs.sql
Normal file
23
EXPLOIT - enable query store on all dbs.sql
Normal 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;
|
||||||
38
EXPLOIT - get all tables with filestream.sql
Normal file
38
EXPLOIT - get all tables with filestream.sql
Normal 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]
|
||||||
@@ -15,13 +15,44 @@ FROM sys.master_files F WITH(NOWAIT)
|
|||||||
GROUP BY F.database_id
|
GROUP BY F.database_id
|
||||||
ORDER BY [total_size_mb] DESC
|
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
|
SELECT
|
||||||
d.[name] AS dbName
|
d.[name] AS dbName
|
||||||
,f.[physical_name] AS physicalFileName
|
,f.[physical_name] AS physicalFileName
|
||||||
,f.[name] AS logicalFileName
|
,f.[name] AS logicalFileName
|
||||||
--,d2.[log_size_mb]
|
--,d2.[log_size_mb]
|
||||||
--,d2.[row_size_mb]
|
--,d2.[row_size_mb]
|
||||||
|
,'-----' AS separator
|
||||||
,CAST(f.size * 8. / 1024 AS DECIMAL(18,2)) AS fileSizeMB
|
,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
|
,d2.[total_size_mb] AS totalDbSizeMB
|
||||||
,'USE '+d.name+';
|
,'USE '+d.name+';
|
||||||
DBCC SHRINKFILE (N'''+f.[name]+''' , 0, TRUNCATEONLY);
|
DBCC SHRINKFILE (N'''+f.[name]+''' , 0, TRUNCATEONLY);
|
||||||
@@ -36,6 +67,7 @@ GO
|
|||||||
FROM sys.master_files F
|
FROM sys.master_files F
|
||||||
JOIN sys.databases d ON d.[database_id] = f.[database_id]
|
JOIN sys.databases d ON d.[database_id] = f.[database_id]
|
||||||
JOIN [#dbs] [d2] ON d2.[database_name] = d.[name]
|
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 (
|
WHERE f.type_desc IN (
|
||||||
'ROWS' --mdf
|
'ROWS' --mdf
|
||||||
--,'LOG'
|
--,'LOG'
|
||||||
@@ -43,6 +75,7 @@ WHERE f.type_desc IN (
|
|||||||
--AND f.[physical_name] LIKE 'f%'
|
--AND f.[physical_name] LIKE 'f%'
|
||||||
--AND d.[is_read_only] = 0
|
--AND d.[is_read_only] = 0
|
||||||
--AND d.[is_auto_shrink_on] = 0
|
--AND d.[is_auto_shrink_on] = 0
|
||||||
|
--AND d.name='sl2007'
|
||||||
--AND d.name NOT IN (
|
--AND d.name NOT IN (
|
||||||
-- 'master'
|
-- 'master'
|
||||||
-- ,'tempdb'
|
-- ,'tempdb'
|
||||||
|
|||||||
10527
EXPLOIT - quicky store.sql
Normal file
10527
EXPLOIT - quicky store.sql
Normal file
File diff suppressed because it is too large
Load Diff
124
EXPLOIT - wait state statistics.sql
Normal file
124
EXPLOIT - wait state statistics.sql
Normal 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
|
||||||
53
HCI - average cpu usage prodDb.sql
Normal file
53
HCI - average cpu usage prodDb.sql
Normal 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
|
||||||
120
HCI - detect invalid objects in all db's.sql
Normal file
120
HCI - detect invalid objects in all db's.sql
Normal 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];
|
||||||
@@ -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]
|
||||||
@@ -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
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|
||||||
@@ -1,10 +1,15 @@
|
|||||||
|
[CmdletBinding()]
|
||||||
|
param (
|
||||||
|
[Parameter(Position=1, Mandatory=$true)]
|
||||||
|
[string]
|
||||||
|
$machineName
|
||||||
|
)
|
||||||
$query=@"
|
$query=@"
|
||||||
|
|
||||||
USE [ControlCenter]
|
USE [ControlCenter]
|
||||||
DECLARE @res VARCHAR(MAX)=''
|
DECLARE @res VARCHAR(MAX)=''
|
||||||
|
|
||||||
SELECT @res = @res + ',"'+[s].[SE_DNS]+'"'
|
SELECT [s].[SE_DNS]
|
||||||
FROM [dbo].[Server] s
|
FROM [dbo].[Server] s
|
||||||
JOIN [dbo].[Entity] e ON [e].[EN_id] = [s].[SE_entity]
|
JOIN [dbo].[Entity] e ON [e].[EN_id] = [s].[SE_entity]
|
||||||
WHERE e.[EN_id] IN (
|
WHERE e.[EN_id] IN (
|
||||||
@@ -19,10 +24,16 @@ AND (
|
|||||||
)
|
)
|
||||||
ORDER BY s.[SE_entity], [s].[SE_OU_code];
|
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*"
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user