Tuesday, 17 June 2025

SQL_DBA- Ip Address Ping

Start-Transcript -path C:/Script/PingLog.txt -Append 




Ping.exe -t spiceworks.com | ForEach {"{0} - {1}" -f (Get-Date),$_}

Lets break this down real quick.

  1. Ping.exe - That’s ping! powershell can use your CMD stuff just fine.

  2. -t is as we all know, a continuous ping. can go before or after our hostname/IP address.

  3. spiceworks.com is what we’re pinging.

  4. Next up is a pipe (|) - We’re sending our information over to our next command.

  5. Foreach is the next thing in our command here.

  6. [“{0} - {1}” -f] - This is the text formatting, check the references below if you’d like to learn more

  7. (Get-Date) - This is the date! it’s also what’s going into {0} in the text formatting above.

  8. $_ - This is you taking your previous input from ping and putting into {1} 


SQLDBA- Poweshell, get the alerts if the service is stopped

 



# Define the service name and email parameters

$serviceName = "Service name" -- Keep service name  here 

$smtpServer = "smtp.gmai.com"

$smtpFrom = "ksubbareddy.sap@gmail.com"

$smtpTo = "ksubbareddy.sap@gmail.com"

#$smtpSubject = "$serviceName service status on SQL1 Server"

$smtpBody = ""


# Get the hostname of the current server

$hostname = $env:COMPUTERNAME


# Function to send HTML email

function Send-Email {

    param (

        [string]$smtpServer,

        [string]$smtpFrom,

        [string]$smtpTo,

        [string]$smtpSubject,

        [string]$smtpBody

    )

    Send-MailMessage -SmtpServer $smtpServer -From $smtpFrom -To $smtpTo -Subject $smtpSubject -Body $smtpBody -BodyAsHtml

}


# Check the service status

try {

    $service = Get-Service -Name $serviceName -ErrorAction Stop


    if ($service.Status -eq 'Stopped') {

        $smtpSubject = " X!! [ALERT] $serviceName is STOPPED on $hostname"

        $smtpBody = @"

        <html>

        <body>

            <h2 style='color:red;'>ALERT: $serviceName is STOPPED!</h2>

            <p>The service <strong>$serviceName</strong> is currently <span style='color:red;'>stopped</span> on the server <strong>$hostname</strong>.</p>

        </body>

        </html>

"@

        Write-Host "ALERT: $serviceName is STOPPED on $hostname!" -ForegroundColor Red

    }

    else {

        $smtpSubject = "[OK] $serviceName is RUNNING on $hostname"

        $smtpBody = @"

        <html>

        <body>

            <h2 style='color:green;'>$serviceName is Running</h2>

            <p>The service <strong>$serviceName</strong> is currently <span style='color:green;'>running</span> on the server <strong>$hostname</strong>.</p>

        </body>

        </html>

"@

        Write-Host "$serviceName is running on $hostname." -ForegroundColor Green

    }


    # Send the email notification

    Send-Email -smtpServer $smtpServer -smtpFrom $smtpFrom -smtpTo $smtpTo -smtpSubject $smtpSubject -smtpBody $smtpBody

    Write-Host "Email notification sent." -ForegroundColor Cyan

}

catch {

    Write-Host "ERROR: Could not find or check the service '$serviceName' on $hostname." -ForegroundColor Yellow

    Write-Host $_.Exception.Message -ForegroundColor DarkYellow

}


 


 

SQLDBA - To send an email when service is stopped

-- To send an email when service is stopped 


USE [msdb]

GO


BEGIN TRANSACTION

DECLARE @ReturnCode INT

SELECT @ReturnCode = 0


IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Batch - L]' AND category_class=1)

BEGIN

EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Batch - L]'

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback


END


DECLARE @jobId BINARY(16)

EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=N'Job - XXXX Status Notification', 

@enabled=1, 

@notify_level_eventlog=0, 

@notify_level_email=0, 

@notify_level_netsend=0, 

@notify_level_page=0, 

@delete_level=0, 

@description=N'This job runs for every 12 hours and checks the XXXXX service and triggers emails', 

@category_name=N'[Batch - L]', 

@owner_login_name=N'sa', @job_id = @jobId OUTPUT

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback


EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'XXXX Service Status Verification', 

@step_id=1, 

@cmdexec_success_code=0, 

@on_success_action=1, 

@on_success_step_id=0, 

@on_fail_action=2, 

@on_fail_step_id=0, 

@retry_attempts=0, 

@retry_interval=0, 

@os_run_priority=0, @subsystem=N'PowerShell', 

@command=N'# Define the service name and email parameters

$serviceName = "XXXXX"   -- Keep the service name 

$smtpServer = "smtp.gmail.com"

$smtpFrom = "ksubbareddy.sap@gmail.com"

$smtpTo = "ksubbareddy.sap@gmail.com"

$smtpSubject = "$serviceName service status on SQL1 Server"

$smtpBody = ""


# Function to send email

function Send-Email {

    param (

        [string]$smtpServer,

        [string]$smtpFrom,

        [string]$smtpTo,

        [string]$smtpSubject,

        [string]$smtpBody

    )

    Send-MailMessage -SmtpServer $smtpServer -From $smtpFrom -To $smtpTo -Subject $smtpSubject -Body $smtpBody

}


# Check the service status

$service = Get-Service -Name $serviceName

if ($service.Status -eq ''Stopped'') {

    $smtpBody = "The $serviceName service is currently stopped on the server."

} else {

    $smtpBody = "The $serviceName service is currently running on the server."

}


# Send the email notification

Send-Email -smtpServer $smtpServer -smtpFrom $smtpFrom -smtpTo $smtpTo -smtpSubject $smtpSubject -smtpBody $smtpBody

Write-Host "Email notification sent with the current status of $serviceName service."


', 

@database_name=N'master', 

@flags=0

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'Recurring', 

@enabled=1, 

@freq_type=4, 

@freq_interval=1, 

@freq_subday_type=8, 

@freq_subday_interval=12, 

@freq_relative_interval=0, 

@freq_recurrence_factor=0, 

@active_start_date=20250616, 

@active_end_date=99991231, 

@active_start_time=0, 

@active_end_time=235959, 

@schedule_uid=NULL;

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

COMMIT TRANSACTION

GOTO EndSave

QuitWithRollback:

    IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION

EndSave:

GO



SQLDBA-Script out all logins in sql server

 

Script out  all logins in sql server


/****************************************************************

This Script Generates A script to Create all Logins, Server Roles

, DB Users and DB roles on a SQL Server


Greg Ryan


10/31/2013

****************************************************************/SET NOCOUNT ON


DECLARE

        @sql nvarchar(max)

,       @Line int = 1

,       @max int = 0

,       @@CurDB nvarchar(100) = ''


CREATE TABLE #SQL

       (

        Idx int IDENTITY

       ,xSQL nvarchar(max)

       )


INSERT INTO #SQL

        ( xSQL

        )

        SELECT

                'IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE name = N'''

                + QUOTENAME(name) + ''')

' + 'CREATE LOGIN ' + QUOTENAME(name) + ' WITH PASSWORD='

                + sys.fn_varbintohexstr(password_hash) + ' HASHED, SID='

                + sys.fn_varbintohexstr(sid) + ', ' + 'DEFAULT_DATABASE='

                + QUOTENAME(COALESCE(default_database_name , 'master'))

                + ', DEFAULT_LANGUAGE='

                + QUOTENAME(COALESCE(default_language_name , 'us_english'))

                + ', CHECK_EXPIRATION=' + CASE is_expiration_checked

                                            WHEN 1 THEN 'ON'

                                            ELSE 'OFF'

                                          END + ', CHECK_POLICY='

                + CASE is_policy_checked

                    WHEN 1 THEN 'ON'

                    ELSE 'OFF'

                  END + '

Go


'

            FROM

                sys.sql_logins

            WHERE

                name <> 'sa'


INSERT INTO #SQL

        ( xSQL

        )

        SELECT

                'IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE name = N'''

                + QUOTENAME(name) + ''')

' + 'CREATE LOGIN ' + QUOTENAME(name) + ' FROM WINDOWS WITH '

                + 'DEFAULT_DATABASE='

                + QUOTENAME(COALESCE(default_database_name , 'master'))

                + ', DEFAULT_LANGUAGE='

                + QUOTENAME(COALESCE(default_language_name , 'us_english'))

                + ';

Go


'

            FROM

                sys.server_principals

            WHERE

                type IN ( 'U' , 'G' )

                AND name NOT IN ( 'BUILTIN\Administrators' ,

                                  'NT AUTHORITY\SYSTEM' );

                                  

PRINT '/*****************************************************************************************/'

PRINT '/*************************************** Create Logins ***********************************/'

PRINT '/*****************************************************************************************/'

SELECT

        @Max = MAX(idx)

    FROM

        #SQL 

WHILE @Line <= @max

      BEGIN




            SELECT

                    @sql = xSql

                FROM

                    #SQL AS s

                WHERE

                    idx = @Line

            PRINT @sql


            SET @line = @line + 1

        

      END

DROP TABLE #SQL


CREATE TABLE #SQL2

       (

        Idx int IDENTITY

       ,xSQL nvarchar(max)

       )


INSERT INTO #SQL2

        ( xSQL

        )

        SELECT

                'EXEC sp_addsrvrolemember ' + QUOTENAME(L.name) + ', '

                + QUOTENAME(R.name) + ';

GO


'

            FROM

                sys.server_principals L

            JOIN sys.server_role_members RM

            ON  L.principal_id = RM.member_principal_id

            JOIN sys.server_principals R

            ON  RM.role_principal_id = R.principal_id

            WHERE

                L.type IN ( 'U' , 'G' , 'S' )

                AND L.name NOT IN ( 'BUILTIN\Administrators' ,

                                    'NT AUTHORITY\SYSTEM' , 'sa' );



PRINT '/*****************************************************************************************/'

PRINT '/******************************Add Server Role Members     *******************************/'

PRINT '/*****************************************************************************************/'

SELECT

        @Max = MAX(idx)

    FROM

        #SQL2 

SET @line = 1

WHILE @Line <= @max

      BEGIN




            SELECT

                    @sql = xSql

                FROM

                    #SQL2 AS s

                WHERE

                    idx = @Line

            PRINT @sql


            SET @line = @line + 1

        

      END

DROP TABLE #SQL2


PRINT '/*****************************************************************************************/'

PRINT '/*****************Add User and Roles membership to Indivdual Databases********************/'

PRINT '/*****************************************************************************************/'



--Drop Table #Db

CREATE TABLE #Db

       (

        idx int IDENTITY

       ,DBName nvarchar(100)

       );




INSERT INTO #Db

        SELECT

                name

            FROM

                master.dbo.sysdatabases

            WHERE

                name NOT IN ( 'Master' , 'Model' , 'msdb' , 'tempdb' )

            ORDER BY

                name;



SELECT

        @Max = MAX(idx)

    FROM

        #Db

SET @line = 1

--Select * from #Db



--Exec sp_executesql @SQL


WHILE @line <= @Max

      BEGIN

            SELECT

                    @@CurDB = DBName

                FROM

                    #Db

                WHERE

                    idx = @line


            SET @SQL = 'Use ' + @@CurDB + '


Declare  @@Script NVarChar(4000) = ''''

DECLARE cur CURSOR FOR


Select  ''Use ' + @@CurDB + ';

Go

IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'''''' +

                mp.[name] + '''''')

CREATE USER ['' + mp.[name] + ''] FOR LOGIN ['' +mp.[name] + ''] WITH DEFAULT_SCHEMA=[dbo]; ''+ CHAR(13)+CHAR(10) +

''GO'' + CHAR(13)+CHAR(10) +


''EXEC sp_addrolemember N'''''' + rp.name + '''''', N''''['' + mp.[name] + '']''''; 

Go''  

FROM sys.database_role_members a

INNER JOIN sys.database_principals rp ON rp.principal_id = a.role_principal_id

INNER JOIN sys.database_principals AS mp ON mp.principal_id = a.member_principal_id



OPEN cur


FETCH NEXT FROM cur INTO @@Script;

WHILE @@FETCH_STATUS = 0

BEGIN   

PRINT @@Script

FETCH NEXT FROM cur INTO @@Script;

END


CLOSE cur;

DEALLOCATE cur;';

--Print @SQL

Exec sp_executesql @SQL;

--Set @@Script = ''

            SET @Line = @Line + 1


      END


DROP TABLE #Db

SQLDBA- SQL Database Moving from One Instance to Another

 SQL Database Moving from One Instance to Another: In this case we are moving sql database “Moving_DB_SQL1_To_SQL2” from SQL1 instance to SQL2 Instance. 

Step1: Create required SQL logins of the source database on target instance. For “Moving_DB_SQL1_To_SQL2” database on SQL1 is having a sql login “SWA_SQL_LOGIN” .  

Created “SWA_SQL_LOGIN” SQL login on SQL2 instance getting pwd from DF/kee pass/ from where we stored tool 

Step2: Offline the database source instance. Made “Moving_DB_SQL1_To_SQL2” database offline on SQL1 instance and detached the database. 

Step3: Move/copy the MDF and LDF files from SQL1 instance to SQL2 instance. 

Step4: Attached the MDF & LDF files of “Moving_DB_SQL1_To_SQL2” database on SQL2 instance. 

Step5: Activities on SQL2 instance 

Changed DB Owner to SA 

Changed the Database to Simple Mode as it is TEST environment. If it is Prod need to check the current mode in Prod on Source instance and make the same. 

Run Fix Orphan user stored proc on the new database 

Verify the newly attached database once. 

Step6: Moving Client Access point and port# (KSRDBTEST,1433) from SQL1 to SQL2 instance. 

Remove Dependency from SQL1 instnace. Go to Dependency Tab and remove the client access point IP address and click ok. 

Remove the port# under TCP/IP related to KSRDBTEST client access in SQL1 instance. 

Make the Client Access name KSRDBTEST offline. 

Stop and Start the SQL1 instance in fail over cluster manager. 

With the above steps Client access dependency is removed from Source Now add the client access point to SQL2 Instance. 

Go to Failover cluster manger, under SQL1 instance assign the Client Access Name KSRDBTEST to SQL2 Instance. 


Configure the Port# under TCP/IP on SQL2 instance. 

Stop and Start the SQL2 instance in the failover cluster manager. 

Connect in SSMS with Client access name and verify. 


 


 


 


 


 

Monday, 16 June 2025

SQLDBA- TO know the backup & restore status

To know the back up or database restore status while doing with T-SQL command. 


SELECT 

   r.session_id

 , r.command

 , CONVERT(NUMERIC(6,2), r.percent_complete) AS [Percent Complete]

 , CONVERT(VARCHAR(20), DATEADD(ms,r.estimated_completion_time,GetDate()),20) AS [ETA Completion Time]

 , CONVERT(NUMERIC(10,2), r.total_elapsed_time/1000.0/60.0) AS [Elapsed Min]

 , CONVERT(NUMERIC(10,2), r.estimated_completion_time/1000.0/60.0) AS [ETA Min]

 , CONVERT(NUMERIC(10,2), r.estimated_completion_time/1000.0/60.0/60.0) AS [ETA Hours]

 , CONVERT(VARCHAR(1000), 

      (SELECT SUBSTRING(text,r.statement_start_offset/2, CASE WHEN r.statement_end_offset = -1 

                                                             THEN 1000 

                                                             ELSE (r.statement_end_offset-r.statement_start_offset)/2 

                                                        END)

        FROM sys.dm_exec_sql_text(sql_handle)

       )

   ) AS [SQL]

  FROM sys.dm_exec_requests r 

 WHERE command IN ('RESTORE DATABASE', 'BACKUP DATABASE') 

SQLDBA-Identity Utilization or identity crisis or identity_column_value_tracking

 

This article about  Identity column utilization in sql server. We  insert the current identity value in to a table and then we will send alert to specified mail or DL which id value utilization greater than 50percent. 

--Table 


USE [master]

GO


/****** Object:  Table [dbo].[identity_column_value_tracking]    Script Date: 6/16/2025 3:51:36 AM ******/

SET ANSI_NULLS ON

GO


SET QUOTED_IDENTIFIER ON

GO


CREATE TABLE [dbo].[identity_column_value_tracking](

[identity_column_value_tracking_id] [int] IDENTITY(1,1) NOT NULL,

[database_name] [sysname] NOT NULL,

[schema_name] [sysname] NOT NULL,

[table_name] [sysname] NOT NULL,

[column_name] [sysname] NOT NULL,

[type_name] [sysname] NOT NULL,

[maximum_identity_value] [bigint] NOT NULL,

[current_identity_value] [bigint] NULL,

[percent_consumed] [decimal](25, 4) NULL,

[actv_indcr] [int] NOT NULL,

[creatn_dt] [datetime] NOT NULL,

[creatn_usrnam] [varchar](100) NOT NULL,

[mdfctn_dt] [datetime] NOT NULL,

[mdfctn_usrnam] [varchar](100) NOT NULL,

[row_version] [timestamp] NOT NULL,

PRIMARY KEY CLUSTERED 

(

[identity_column_value_tracking_id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]

) ON [PRIMARY]

GO



  


-- Procedure to insert the data into above table

CREATE PROCEDURE [dbo].[win_identity_column_value_tracking]  

AS  

/************************************************************************************  

CREATED BY : Subbareddy Kovvuru  

CREATED ON : 

PURPOSE : To pull the detail about identity column consumed about 50 Percent  

  

Test Code:  

EXEC [dbo].[win_identity_column_value_tracking]   

*************************************************************************************/  

BEGIN   

SET NOCOUNT ON;  

  

DECLARE @Table_Name NVARCHAR(MAX);  

DECLARE @Schema_Name NVARCHAR(MAX)  

DECLARE @Sql_Command NVARCHAR(MAX) = ''  

  

DROP TABLE IF EXISTS #identity_columns  

  

CREATE TABLE #identity_columns  

( [database_name] SYSNAME NOT NULL,  

 [schema_name] SYSNAME NOT NULL,  

 table_name SYSNAME NOT NULL,  

 column_name SYSNAME NOT NULL,  

 [type_name] SYSNAME NOT NULL,  

 maximum_identity_value BIGINT NOT NULL,  

 current_identity_value BIGINT NULL,  

 percent_consumed DECIMAL(25,4) NULL   

);  

   

  

EXEC sp_foreachdb   

'  

USE [?]  

  

if ''?'' NOT in (''master'',''model'',''msdb'',''tempdb'')  

  

INSERT INTO #identity_columns  

 ([database_name], [schema_name], table_name, column_name, [type_name], maximum_identity_value, current_identity_value)  

SELECT  

 DB_NAME() AS database_name,  

  schemas.name  AS schema_name,  

  tables.name  AS table_name,  

  columns.name  AS column_name,  

  types.name AS type_name,  

 CASE  

  WHEN  types.name  = ''TINYINT'' THEN CAST(255 AS BIGINT)  

  WHEN  types.name  = ''SMALLINT'' THEN CAST(32767 AS BIGINT)  

  WHEN  types.name  = ''INT''THEN CAST(2147483647 AS BIGINT)  

  WHEN  types.name  = ''BIGINT'' THEN CAST(9223372036854775807 AS BIGINT)  

  --WHEN  types.name  IN (''DECIMAL'', ''NUMERIC'') THEN CAST(REPLICATE(9, ( CAST(columns.precision AS VARCHAR(MAX)) + '' - '' + CAST(columns.scale AS VARCHAR(MAX)) ) ) AS BIGINT)  

  WHEN  types.name  IN (''DECIMAL'', ''NUMERIC'') THEN CAST(REPLICATE(9, ( columns.precision  - columns.scale )) AS BIGINT)  

  ELSE -1  

 END AS maximum_identity_value,  

 IDENT_CURRENT(''['' + schemas.name + ''].['' + tables.name + '']'') AS current_identity_value  

  

FROM sys.tables  

INNER JOIN sys.columns  

ON tables.object_id = columns.object_id  

INNER JOIN sys.types  

ON types.user_type_id = columns.user_type_id  

INNER JOIN sys.schemas  

ON schemas.schema_id = tables.schema_id  

WHERE columns.is_identity = 1;  

'  

  

  

  

UPDATE #identity_columns  

 SET percent_consumed = CAST(CAST(current_identity_value AS DECIMAL(25,4)) / CAST(maximum_identity_value AS DECIMAL(25,4)) AS DECIMAL(25,2)) * 100;  

   

  INSERT INTO DBA.dbo.identity_column_value_tracking  

 ([database_name], [schema_name], table_name, column_name, [type_name], maximum_identity_value, current_identity_value,percent_consumed  

 ,actv_indcr,creatn_dt,creatn_usrnam,mdfctn_dt,mdfctn_usrnam)  

SELECT  

 [database_name],  

 [schema_name],  

 table_name,  

 column_name,  

 [type_name],  

 maximum_identity_value,  

 current_identity_value,  

 percent_consumed,  

 1,  

 GETDATE(),  

 'DBA',  

 GETDATE(),  

 'DBA'  

FROM #identity_columns  

WHERE percent_consumed>50   

  

  

END  

GO



--Job to send alerts every  week day once

USE [msdb]

GO


/****** Object:  Job [ADM - Identity Column Value Tracking]    Script Date: 6/16/2025 3:50:36 AM ******/

BEGIN TRANSACTION

DECLARE @ReturnCode INT

SELECT @ReturnCode = 0

/****** Object:  JobCategory [[Batch - L]]    Script Date: 6/16/2025 3:50:36 AM ******/

IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Batch - L]' AND category_class=1)

BEGIN

EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Batch - L]'

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback


END


DECLARE @jobId BINARY(16)

EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=N'ADM - Identity Column Value Tracking', 

@enabled=1, 

@notify_level_eventlog=0, 

@notify_level_email=0, 

@notify_level_netsend=0, 

@notify_level_page=0, 

@delete_level=0, 

@description=N'Identity Column Value Tracking', 

@category_name=N'[Batch - L]', 

@owner_login_name=N'sa', @job_id = @jobId OUTPUT

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

/****** Object:  Step [Insert data into DBA.dbo.identity_column_value_tracking]    Script Date: 6/16/2025 3:50:36 AM ******/

EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Insert data into master.dbo.identity_column_value_tracking', 

@step_id=1, 

@cmdexec_success_code=0, 

@on_success_action=3, 

@on_success_step_id=0, 

@on_fail_action=2, 

@on_fail_step_id=0, 

@retry_attempts=0, 

@retry_interval=0, 

@os_run_priority=0, @subsystem=N'TSQL', 

@command=N'EXEC master.[dbo].[win_identity_column_value_tracking]', 

@database_name=N'master', 

@flags=0

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

/****** Object:  Step [Send mail to DBA group]    Script Date: 6/16/2025 3:50:36 AM ******/

EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Send mail to DBA group', 

@step_id=2, 

@cmdexec_success_code=0, 

@on_success_action=1, 

@on_success_step_id=0, 

@on_fail_action=2, 

@on_fail_step_id=0, 

@retry_attempts=0, 

@retry_interval=0, 

@os_run_priority=0, @subsystem=N'TSQL', 

@command=N'USE master

GO


DECLARE @sub VARCHAR(100);

DECLARE @qry VARCHAR(MAX);

DECLARE @msg VARCHAR(250);

DECLARE @body NVARCHAR(MAX)

DECLARE @query NVARCHAR(MAX);

DECLARE @tab char(1) = CHAR(9)

DECLARE @query_attachment_filename NVARCHAR(520);

DECLARE @xml NVARCHAR(MAX)

SELECT @sub = ''Details of Tables with Identity Column >50% Utilization on SQL2-R21\SQL21 - WIN / Focalpoint Server'';

DECLARE @record_count INTEGER 

--SELECT @msg = ''Please refer to the attached spread sheet for the report.'';


SET @xml = CAST(( SELECT [database_name] AS ''td''

,'''',[schema_name] AS ''td''

,'''',[table_name] AS ''td''

,'''', [column_name] AS ''td''

,'''', [type_name] AS ''td''

,'''', [maximum_identity_value] AS ''td''

,'''',[current_identity_value] AS ''td''

,'''', CONVERT(decimal(10,2),[percent_consumed]) AS ''td''

FROM DBA.dbo.identity_column_value_tracking

WHERE creatn_dt >= DATEADD(DAY,-6, GETDATE())

ORDER BY  percent_consumed DESC

FOR XML PATH(''tr''), ELEMENTS ) AS NVARCHAR(MAX))


SET @record_count =  (SELECT COUNT(1)  FROM DBA.dbo.identity_column_value_tracking

WHERE creatn_dt >= DATEADD(DAY,-6, GETDATE()))


SET @body =''<html><body><H3>Identity Column Tracking Informatiom</H3>

<table border = 1> 

<tr>

<th> Data Base Name </th> <th> Schema Name </th> <th> Table Name </th> <th> Column Name </th>

<th> Type Name </th> <th> Maximum Identity Value </th> <th> Current Identity Value </th> 

<th> Percent Consumed(%) </th> 


</tr>''    


SET @body = @body + @xml +''</table></body></html>''



SELECT @query_attachment_filename = ''IdentityColumnTracking.csv'';


IF @record_count>0 

BEGIN 

EXEC msdb.dbo.sp_send_dbmail

     @recipients = ''ksubbareddy.sap@gmail.com'',  

     @body = @body,

@body_format =''HTML'',

     @subject = @sub

END

GO', 

@database_name=N'master', 

@flags=0

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'Every Monday morning 3 AM', 

@enabled=1, 

@freq_type=8, 

@freq_interval=2, 

@freq_subday_type=1, 

@freq_subday_interval=0, 

@freq_relative_interval=0, 

@freq_recurrence_factor=1, 

@active_start_date=20241204, 

@active_end_date=99991231, 

@active_start_time=30000, 

@active_end_time=235959, 

@schedule_uid=NULL;

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

COMMIT TRANSACTION

GOTO EndSave

QuitWithRollback:

    IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION

EndSave:

GO



SQL_DBA- Ip Address Ping

Start-Transcript - path C:/Script/PingLog.txt -Append   Ping.exe -t spiceworks.com | ForEach { "{0} - {1}" -f (Get-Date), $_ } ...