Shrink All databases
SET NOCOUNT ON
DECLARE @tbl TABLE
(
ID INT IDENTITY(1,1),
DBNAME NVARCHAR(1000),
[FileName] NVARCHAR(1000)
)
INSERT INTO @tbl
SELECT DB_NAME(DbID),st.NAme from sys.sysaltfiles
ST INNER JOIN
Sys.databases SB on ST.dbid = sb.database_id
where
st.dbid>6 --sb.NAme not in
('master','tempdb','model','msdb','ReportServer','ReportServerTempDB')
--Size >
100000 AND
And FileName LIKE '%ldf' and sb.state = 0 And state_desc = 'ONLINE'
DECLARE @MinID INT , @MaxID INT,@DBName NVARCHAR(1000),@FileName NVARCHAR(1000),@RecoveryModel
NVARCHAR(1000),@SQL NVARCHAR(MAX)
SELECT @MinID = MIN(ID),@MaxID = MAX(ID) FROM @tbl
WHILE(@MinID <=@MaxID)
BEGIN
SELECT @DBName = DBNAME,@FileName=[FileName] FROM @tbl
where ID =
@MinID
SELECT @RecoveryModel =
recovery_model_desc FROM sys.databases where name
= @DBName
SELECT @SQL= N'USE
['+ @DBName+']'+CHAR(10)
+CASE
WHEN @RecoveryModel <>
N'SIMPLE' THEN N'ALTER DATABASE ['+@DBName+'] SET RECOVERY SIMPLE WITH
NO_WAIT' ELSE N''END+CHAR(10)
+N'DBCC
SHRINKFILE(N'+Quotename(@FileName,'''')+',1)'+CHAR(10)
+CASE
WHEN @RecoveryModel <>
N'SIMPLE' THEN N'ALTER DATABASE ['+@DBName+'] SET RECOVERY '+@RecoveryModel+N' WITH NO_WAIT'+CHAR(10) ELSE N'' END
--Print(@SQL)
EXEC SP_EXECUTESQL @SQL
SELECT @MinID = @MinID +1
END
SET NOCOUNT OFF
Index Rebuild All databases
Create Proc IndexRebuild_All_DB
As
SET NOCOUNT ON
DECLARE @Database VARCHAR(255)
DECLARE @Table VARCHAR(255),@Table_Short
VARCHAR(255)
DECLARE @cmd NVARCHAR(4000)
DECLARE
@fillfactor INT ,@bit
Bit
--DECLARE
@Avg_Frag Float
SET
@fillfactor = 90
DECLARE
DatabaseCursor CURSOR FOR
SELECT [name] FROM sys.databases
Where
user_access = 0
And [state] =
0
And
database_id >= 5
And [Name] Not In('ReportServer$SQL','ReportServer$SQLTempDB','distribution')
--And [Name]
in('test_sonora')
ORDER BY 1
--=============================
-- Temp table
for logging
--=============================
IF OBJECT_ID('tempdb.dbo.#ObjDetails')
IS NOT NULL
DROP TABLE
#ObjDetails
CREATE TABLE #ObjDetails (
Rowid Int Identity(1,1),
DBName Varchar(200),
Table_Name Varchar(200),
Avg_Frag Float,
[Action] Varchar(30),
Dt_Stamp Datetime Default(Getdate())
)
OPEN
DatabaseCursor
FETCH NEXT FROM
DatabaseCursor INTO @Database
WHILE @@FETCH_STATUS =
0
BEGIN
Print 'DB
Name ==>'+DB_Name(DB_ID(@Database))
SET @cmd = 'Insert Into
Table_Fragment_Before(database_id,object_id,avg_fragmentation_in_percent) '+CHAR(10)
SET @cmd = @cmd + ' Select database_id,NULL,NULL FROM
SYS.DM_DB_INDEX_PHYSICAL_STATS (DB_ID(' +Quotename(@Database,'''') + ' ),NULL,NULL,NULL,NULL) F Where Object_Name(object_id)= '
+Quotename(@Table_Short,'''')+CHAR(10)
--Print(@cmd)
Exec (@cmd)
SET
@cmd = ' Insert Into
#ObjDetails(DBName,Table_Name,Avg_Frag,[Action])' +CHAR(10)
SET @cmd = @cmd + ' Values( ''' +@Database + ''', '+Quotename('Start Processing','''')+',0,'''+'DB'+''')'+Char(10)
--Print(@cmd)
Exec (@cmd)
SET @cmd = 'DECLARE TableCursor CURSOR
FOR SELECT ''['' + table_catalog + ''].['' + table_schema + ''].['' +
table_name + '']'' as tableName FROM [' + @Database + '].INFORMATION_SCHEMA.TABLES
WHERE table_type = ''BASE TABLE'' '
-- And table_name = ''SONORAREPOSITORY'' '
-- create table
cursor
EXEC (@cmd)
OPEN
TableCursor
FETCH NEXT FROM TableCursor
INTO @Table
WHILE @@FETCH_STATUS =
0
BEGIN
Select @Table_Short = Reverse(Substring(Reverse(@Table),2,CHARINDEX('[',Reverse(@Table),0 )-2))
--Print ('Table Name
==> '+@Table_Short)
SET @cmd = 'Insert Into
Table_Fragment_Before(database_id,object_id,avg_fragmentation_in_percent) '+CHAR(10)
SET @cmd = @cmd + ' Select database_id,object_id,avg_fragmentation_in_percent
FROM SYS.DM_DB_INDEX_PHYSICAL_STATS (DB_ID(' +Quotename(@Database,'''') + ' ),NULL,NULL,NULL,NULL) F Where Object_Name(object_id)= '
+Quotename(@Table_Short,'''')+CHAR(10)
--Print(@cmd)
Exec (@cmd)
-- SQL
2005 or higher command
SET
@cmd = 'Declare @a
bit,@Avg_Frag Float = 0'+CHAR(10)
SET
@cmd = @cmd + 'Select @Avg_Frag = ISNULL(avg_fragmentation_in_percent,0)
FROM SYS.DM_DB_INDEX_PHYSICAL_STATS (DB_ID(' +Quotename(@Database,'''') + ' ),NULL,NULL,NULL,NULL) F Where Object_Name(object_id)= '
+Quotename(@Table_Short,'''')+' And
avg_fragmentation_in_percent > 0'+CHAR(10)
SET
@cmd = @cmd + ' If (@Avg_Frag > 30)'+CHAR(10)
SET
@cmd = @cmd + ' Begin '+CHAR(10)
SET
@cmd = @cmd + ' Print '+'''RB'''+CHAR(10)
SET @cmd = @cmd +' ALTER INDEX ALL ON ' +
@Table + ' REBUILD WITH
(FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ')' +CHAR(10)
SET
@cmd = @cmd + ' Insert Into
#ObjDetails(DBName,Table_Name,Avg_Frag,[Action])' +CHAR(10)
SET @cmd = @cmd + ' SELECT ''' +@Database + ''', Table_Name,@Avg_Frag,'''+'RB'+''' From
INFORMATION_SCHEMA.TABLES Where TABLE_NAME = ' +Quotename(@Table_Short,'''')+CHAR(10)
SET
@cmd = @cmd + ' End '+CHAR(10)
SET
@cmd = @cmd + ' Else If (@Avg_Frag Between 1 And 30)'+CHAR(10)
SET
@cmd = @cmd + ' Begin '+CHAR(10)
SET
@cmd = @cmd + ' Print '+'''RO'''+CHAR(10)
SET
@cmd = @cmd +' ALTER INDEX ALL ON ' +
@Table + ' REORGANIZE '
+CHAR(10)
SET
@cmd = @cmd + ' Insert Into
#ObjDetails(DBName,Table_Name,Avg_Frag,[Action])' +CHAR(10)
SET @cmd = @cmd + ' SELECT ''' +@Database + ''', Table_Name,@Avg_Frag,'''+'RO'+''' From INFORMATION_SCHEMA.TABLES
Where TABLE_NAME = ' +Quotename(@Table_Short,'''')+Char(10)
SET
@cmd = @cmd + ' End '+CHAR(10)
SET
@cmd = @cmd + ' Else '+CHAR(10)
SET
@cmd = @cmd + ' Begin '+CHAR(10)
SET
@cmd = @cmd + ' Set @a = 100'+CHAR(10)
-- SET @cmd
= @cmd + ' Print '+'''N/A'''+CHAR(10)
SET
@cmd = @cmd + ' End '+CHAR(10)
-- Print(@cmd)
Exec (@cmd)
FETCH NEXT FROM TableCursor
INTO @Table
END
CLOSE
TableCursor
DEALLOCATE
TableCursor
FETCH NEXT FROM
DatabaseCursor INTO @Database
END
CLOSE
DatabaseCursor
DEALLOCATE
DatabaseCursor
Select * from #ObjDetails
Drop table #ObjDetails
/*
Create Table
Table_Fragment_Before
(
database_id Int,
object_id
Bigint,
avg_fragmentation_in_percent
Float,
DateTimeStamp
Datetime Default(Getdate())
)
Create Table
Table_Fragment_After
(
database_id Int,
object_id
Bigint,
avg_fragmentation_in_percent
Float,
DateTimeStamp
Datetime Default(Getdate())
)
*/
CPU Utilization
/*
Create Table
CPU_Utilization
(
row_num int
,
DatabaseName Varchar(255),
CPU_Time_Ms Bigint,
CPUPercent DECIMAL(5,2),
[Timestamp] Datetime
)
*/
/*******************
#2 **********************/
WITH DB_CPU_Stats
AS (
SELECT
DatabaseID
,
DB_NAME(DatabaseID) AS [DatabaseName]
,
SUM(total_worker_time) AS [CPU_Time_Ms]
FROM
sys.dm_exec_query_stats
AS qs
CROSS
APPLY (
SELECT
CONVERT(INT , value) AS [DatabaseID]
FROM
sys.dm_exec_plan_attributes(qs.plan_handle)
WHERE
attribute = N'dbid'
) AS F_DB
GROUP
BY
DatabaseID
)
SELECT
ROW_NUMBER() OVER ( ORDER BY [CPU_Time_Ms] DESC
) AS [row_num]
,
DatabaseName
,
[CPU_Time_Ms]
, CAST([CPU_Time_Ms]
* 1.0 / SUM([CPU_Time_Ms]) OVER ( ) * 100.0 AS DECIMAL(5 , 2)) AS [CPUPercent]
Into
#CPU_Ut
FROM
DB_CPU_Stats
WHERE
DatabaseID >
4 -- system databases
AND
DatabaseID <> 32767 -- ResourceDB
ORDER BY row_num
Declare @Timestamp
Datetime
Select @Timestamp
= GETDATE()
Insert Into dbo.CPU_Utilization(row_num,DatabaseName,CPU_Time_Ms,CPUPercent,Timestamp)
Select row_num,DatabaseName,CPU_Time_Ms,CPUPercent,@Timestamp from
#CPU_Ut
Drop Table #CPU_Ut
Select * from Test.dbo.CPU_Utilization
Table comparison
Select ISNULL(B.COLUMN_NAME,'') As Std_Columns , ISNULL(A.COLUMN_NAME,'') As MAIN_Col ,
Case when B.COLUMN_NAME = A.COLUMN_NAME Then 'MATCHED'
when B.COLUMN_NAME IS NULL AND A.COLUMN_NAME
IS NOT NULL Then 'NEW COLUMN ADDED IN MAIN'
when B.COLUMN_NAME IS NOT NULL AND A.COLUMN_NAME IS NULL Then 'COLUMN EXISTS IN STANDARD COLUMNS BUT NOT IN MAIN TABLE'
ELSE '' END AS REMARKS
INTO #TEMP
from
(
Select
COLUMN_NAME from DB1.INFORMATION_SCHEMA.COLUMNS Where
TABLE_NAME = 'Main_2012_2013'
)A
Full Join
(
Select
COLUMN_NAME from DB2.INFORMATION_SCHEMA.COLUMNS Where
TABLE_NAME = 'Main'
)B
On A.COLUMN_NAME = B.COLUMN_NAME
Select Remarks,COUNT(1) As ColumnCount from
#TEMP
Group By Remarks
List of files with directory name and creation date
Create Proc [dbo].[FileList_SP_Size]
(
@DirPath NVarchar(255)
)
As
--Declare
@DirPath NVarchar(255)
--Set
@DirPath =
'D:\Data_Consolidation\Source_Files\FederalMougal\VOU_40\Proceed\'
Declare @SQL Nvarchar(255)
Create table #tmp
(
Txt nvarchar(500),
Dir nvarchar(500),
[FileSize] nvarchar(100)
)
Set @SQL = 'Dir/aa/s/p '+CONVERT(NVarchar(255),@DirPath)+'*.*'
Insert Into #tmp(Txt)
Exec Xp_cmdshell @SQL --'Dir/aa/s/p
'+CONVERT(NVarchar(255),@DirPath)+'*.*'
Print(@SQL)
Alter Table #tmp Add
[Date1] nvarchar(50)
Delete from #tmp
Where txt is null
--OR txt Like '
Directory%'
OR txt Like '%file%bytes%'
OR txt Like '%Volume%ser%'
OR txt Like 'Volume%in%'
OR txt = '%bytes%free%'
OR Ltrim(txt) = ''
Update #tmp
Set txt = Ltrim(Rtrim(SUBSTRING(txt,40,200))),
[FileSize]= Replace(Ltrim(Rtrim(SUBSTRING(txt,25,15))),',',''),
[Date1] = Left(txt,20)
Where txt not Like ' Directory%'
Delete from #tmp
Where txt is null
OR txt = '%bytes%free%'
OR Ltrim(txt) = ''
Alter Table #tmp Add Rowid int IDENTITY(1,1)
Update #Tmp Set Dir = Txt
Where txt Like ' Directory%'
Declare @Rowid int ,@Txt Nvarchar(255),@Dir Nvarchar(255)
Declare
File_CURSOR Cursor for
Select Rowid,Txt,Dir from #tmp Where txt Like ' Directory%' Order By Rowid Desc
open
File_CURSOR
Fetch next from File_CURSOR
INTO @Rowid ,@Txt
,@Dir
while @@Fetch_Status=0
BEGIN
Update #Tmp Set Dir = @Dir
Where Rowid >= @Rowid
And Dir is null
Fetch next
from File_CURSOR INTO
@Rowid ,@Txt ,@Dir
END
CLOSE
File_CURSOR
DEALLOCATE
File_CURSOR
Update #Tmp Set Dir = Replace(Dir,' Directory of','')
Select Rowid, Txt As [File name],Dir As [Directory
Name] , [FileSize],[Date1] from #Tmp
Where Txt Not Like 'bytes%free%'
And Date1 is not null
SPLIT Function
--Select * from
dbo.Split('aa,bb,cc,dd,ee,ff,ggg',',')
Create FUNCTION [dbo].[Split]
(
@List Nvarchar(4000),
@SplitOn nvarchar(5)
)
RETURNS @RtnValue table
(
Id int identity(1,1),
Value nvarchar(4000)
)
AS
BEGIN
While (Charindex(@SplitOn,@List)>0)
Begin
Insert Into @RtnValue (value)
Select Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))
Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
End
Insert Into
@RtnValue (Value)
Select Value = ltrim(rtrim(@List))
Return
END
Remove Multiple Space into single space
--
=============================================
-- Author: <Shagaf Khot>
-- Description:
Remove space from string
--
=============================================
--Select
[dbo].[Remove_spaces]('abc def
gh ij')
CREATE FUNCTION [dbo].[Remove_spaces](@str Nvarchar(4000))
RETURNS Nvarchar(4000)
AS
BEGIN
WHILE CHARINDEX(Space(2), @str) > 0
SET @str = REPLACE(@str, Space(2), Space(1))
RETURN Ltrim(Rtrim(@str))
END
GO
Remove New line char Multiple Space from String
IF EXISTS(Select 1 from sysobjects where [type] = 'FN' And name = 'Remove_CR_TAB_Space')
Drop FUNCTION
Remove_CR_TAB_Space
Go
--
=============================================
-- Author: <Shagaf Khot>
-- Description:
Remove New Line Char and multiple spaces from string
--
=============================================
CREATE FUNCTION Remove_CR_TAB_Space(@str
Nvarchar(4000))
RETURNS Nvarchar(4000)
AS
BEGIN
Declare @CR NVarchar(10),@TAB NVarchar(10)
Set @CR = Char(13)+Char(10)
Set @TAB = Char(9)
WHILE CHARINDEX(@CR, @str) > 0
SET @str = REPLACE(@str, @CR, ' ')
WHILE CHARINDEX(@TAB, @str) > 0
SET @str = REPLACE(@str, @TAB, ' ')
WHILE CHARINDEX(Space(2), @str) > 0
SET @str = REPLACE(@str, Space(2), Space(1))
RETURN Ltrim(Rtrim(@str))
END
Go
Remove special characters from String
---- SP Detail :
Remove special characters from String
----
======================================================================
-- select
dbo.RemoveSpecialChars('abc-123+ABC
& nbu %^%(^$%$#(*)(')
Create function [dbo].[RemoveSpecialChars] (@s varchar(256)) returns varchar(256)
with schemabinding
begin
if @s is null
return null
declare @s2 varchar(256)
set @s2 = ''
declare @l int
set @l = len(@s)
declare @p int
set @p = 1
while @p <= @l begin
declare
@c int
set @c = ascii(substring(@s, @p, 1))
if @c = 38 or @c between 48 and 57 or @c between 65 and 90 or @c between 97 and 122
set
@s2 = @s2 + char(@c)
set @p = @p + 1
end
if len(@s2) = 0
return null
return @s2
end
Fetch String Data Only
-- Function
Detail : Function to fetch the string data only
--
======================================================================
-- SELECT
dbo.UFNG_ONLY_STRING('8asdf7%87^A8876-*S')
CREATE FUNCTION [dbo].[UFNG_ONLY_STRING] (@StrVal AS VARCHAR(max))
RETURNS VARCHAR(max)
AS
BEGIN
WHILE PATINDEX('%[^A-z]%', @StrVal) > 0
SET
@StrVal = REPLACE(@StrVal,
SUBSTRING(@StrVal,PATINDEX('%[^A-z]%', @StrVal),1),'')
RETURN
@StrVal
END
Fetch Digits Only
-- SELECT
dbo.UFNG_ONLY_DIGITS('8asdf7%87^A8876-*S')
CREATE FUNCTION [dbo].[UFNG_ONLY_DIGITS] (@StrVal AS VARCHAR(max))
RETURNS VARCHAR(max)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%', @StrVal) > 0
SET
@StrVal = REPLACE(@StrVal,
SUBSTRING(@StrVal,PATINDEX('%[^0-9]%', @StrVal),1),'')
RETURN
@StrVal
END
GO
Word Count Function
CREATE FUNCTION [dbo].[WordCount] ( @InputString VARCHAR(4000) )
RETURNS INT
AS
BEGIN
DECLARE
@Index INT
DECLARE @Char CHAR(1)
DECLARE
@PrevChar CHAR(1)
DECLARE
@WordCount INT
SET @Index = 1
SET @WordCount
= 0
WHILE @Index <= LEN(@InputString)
BEGIN
SET
@Char =
SUBSTRING(@InputString, @Index, 1)
SET
@PrevChar = CASE
WHEN @Index = 1
THEN ' '
ELSE SUBSTRING(@InputString, @Index
- 1, 1)
END
IF
@PrevChar = ' ' AND @Char != ' '
SET
@WordCount = @WordCount + 1
SET @Index = @Index + 1
END
RETURN @WordCount
END
GO
SP_ExecuteSQL Example
DECLARE
@ParmDefinition nvarchar(500),@Filename nvarchar(500)
Declare @SQLString
NVarchar(MAX)
SET
@ParmDefinition = N'@Filename_2
NVARCHAR(500) OUTPUT'
Set @SQLString
= N'
Set @Filename_2 =
''D:\HQ\HQ_Q4_File_Sample.xlsx''
';
Print(@SQLString)
EXECUTE sp_executesql @SQLString,@ParmDefinition,@Filename_2
= @Filename OUTPUT
Select @Filename
SP_ MSforeachtable Example
SELECT *
FROM information_schema.routines ISR
WHERE CHARINDEX('dbo.First', ISR.ROUTINE_DEFINITION) > 0
GO
-- Method 3:
Using DMV sys.dm_sql_referencing_entities
SELECT
referencing_schema_name,
referencing_entity_name,
referencing_id, referencing_class_desc,
is_caller_dependent
FROM sys.dm_sql_referencing_entities
('dbo.TEST_TBL', 'OBJECT');
GO
Select * FROM sys.dm_sql_referencing_entities('dbo.TEST_TBL', 'OBJECT');
INSERT INTO #TableSpaceUsed
EXEC sys.sp_MSforeachtable 'sp_spaceused ''?''';
Create Table #DependentObj
(
TableName NVarchar(255),
referencing_entity_name NVarchar(255)
)
Insert Into #DependentObj(TableName,referencing_entity_name)
EXEC sys.sp_MSforeachtable 'Select ''?'' As TableName,referencing_entity_name FROM
sys.dm_sql_referencing_entities(''?'', ''OBJECT'')'
Select * from #DependentObj
Where TableName not Like '%Error%'
And
referencing_entity_name Not In('Exception_List')
Shrink all DBs
-- Description:
Maintanace Activity : SP to generate script to shrink the huge databases
--
=============================================
--Exec
Shrink_All_DB
CREATE Proc [dbo].[Shrink_All_DB]
As
SET NOCOUNT ON
Select dbid,DB_NAME(dbid) As DBName,recovery_model_desc
INTO
#Orig_DB_State
From sys.sysaltfiles A Inner Join sys.databases B
On A.[dbid] = B.[database_id]
Where Right([filename],3)='ldf'
And [Size] >
1000
Order By Dbid
Print 'XP_Fixeddrives'
Print ('Go')
Declare @DBName Varchar(100),@Rec_Mod Varchar(100),@SQL Varchar(300), @DB_FileName Varchar(100)
Declare
CHANGE_Recovery_CURSOR Cursor for
Select DBName,recovery_model_desc
from #Orig_DB_State
open
CHANGE_Recovery_CURSOR
Fetch next from
CHANGE_Recovery_CURSOR INTO @DBName,@Rec_Mod
while @@Fetch_Status=0
BEGIN
Exec ('Use ['+@DBName+']')
Print ('Use '+Quotename(@DBName,'[]'))
Print ('Go')
--Exec (@SQL)
Select @DB_FileName = name From sys.sysaltfiles Where Right([filename],3)='ldf' And DB_NAME(dbid) = @DBName
IF(@Rec_Mod
= 'FULL')
Begin
-- Truncate the log by changing
the database recovery model to SIMPLE.
SET @SQL = 'ALTER DATABASE '+Quotename(Convert(VARCHAR(100),@DBName),'[]')+' SET RECOVERY SIMPLE WITH
NO_WAIT '
Print (@SQL)
--Exec (@SQL)
Print ('Go')
End
SET @SQL = 'Insert Into
dbo.DB_Shrinking_Log(DatabaseName,Used_SizeMB,FreeSpace_SizeMB)
Select '+Quotename(@DBName,'''')+' ,(Convert(Bigint,size)*8)/1024
,((Convert(Bigint,max_size)*8)/1024)-((Convert(Bigint,size)*8)/1024)
FROM '+Quotename(@DBName,'[]')+'.sys.database_files
Where type_desc = ''LOG'''
--Print (@SQL)
-- Shrink the truncated log
file to 0 MB.
SET @SQL = 'DBCC SHRINKFILE ('+Quotename(Convert(VARCHAR(100),@DB_FileName),'[]')+', 0)'
Print (@SQL)
--Exec (@SQL)
Print ('Go')
IF(@Rec_Mod
= 'FULL')
Begin
-- Reset the database recovery
model.
SET @SQL = 'ALTER DATABASE '+Quotename(Convert(VARCHAR(100),@DBName),'[]')+' SET RECOVERY FULL WITH
NO_WAIT '
Print (@SQL)
--Exec (@SQL)
Print ('Go')
End
Fetch next
from CHANGE_Recovery_CURSOR INTO @DBName,@Rec_Mod
END
CLOSE
CHANGE_Recovery_CURSOR
DEALLOCATE
CHANGE_Recovery_CURSOR
Print 'XP_Fixeddrives'
Print ('Go')
No comments:
Post a Comment