Advertisements
This script will check the recovery model of databases based on production and non-production policy and notify an alert.
SP:
SP1
USE [DBAdata]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
USE [DBAdata]
GO
drop table tbl_recovery_model_non_Prod
CREATE TABLE [dbo].[tbl_recovery_model_non_Prod](
[SERVER_NAME] [sysname] NOT NULL,
[DB_NAME] [sysname] NOT NULL,
[Recovery] [varchar](10) NULL
)
USE [DBAdata_archive]
GO
CREATE TABLE [dbo].[tbl_recovery_model_non_Prod](
[SERVER_NAME] [sysname] NOT NULL,
[DB_NAME] [sysname] NOT NULL,
[Recovery] [varchar](10) NULL,
[CREATE_DATE] [datetime] NULL
)
select * from tbl_Error_handling order by Upload_Date desc
select * from tbl_recovery_model_non_Prod
and name not in (''''''''ReportServer'''''''',''''''''ReportServerTempDB'''''''')
*/
alter proc [dbo].[USP_recovery_model_Non_prod]
/*
Summary: Check the recovery mode for non prod
Contact: Muthukkumaran Kaliyamoorthy SQL DBA
Description: Check the recovery mode for non prod
ChangeLog:
Date Coder Description
2013-jan-21 Muthukkumaran Kaliyamoorhty Updated the 2012 functionality
*/
--with Encryption
as
begin
DECLARE @server_name SYSNAME
DECLARE @DESC SYSNAME
DECLARE @sql varchar(max)
DECLARE @minrow int
DECLARE @maxrow int
TRUNCATE TABLE tbl_recovery_model_non_Prod
declare @Recovery table (id int primary key identity,
servername varchar(100),Description varchar(100))
insert into @Recovery
select Servername , Description from dbadata.dbo.dba_all_servers
--WHERE Description not LIKE '%ip%' and Description not LIKE '%KIL%'
WHERE Category not in ('LIVE','PROD') and SVR_status ='running' and version <>'SQL2000'
-- select Category from dbadata.dbo.dba_all_servers group by Category
-- select * from dbadata.dbo.dba_all_servers where Category not in ('PROD','live')
--select * from dbadata.dbo.dba_all_servers
SELECT @minrow = MIN(id)FROM @Recovery
SELECT @maxrow = MAX(id) FROM @Recovery
while (@minrow <=@maxrow)
begin
BEGIN TRY
select @Server_name=Servername ,
@Desc=Description from @Recovery where ID = @minrow
set @sql=
'EXEC(''SELECT * from OPENQUERY(['+@server_name+'],
''''select '''''''''+@DESC+''''''''',name,recovery_model_desc from sys.databases
where recovery_model_desc <>''''''''simple'''''''' and database_id not in (1,2,3,4)
'''')'')
'
insert into dbadata.dbo.tbl_recovery_model_non_Prod
exec(@sql)
--SELECT @sql
end try
BEGIN CATCH
SELECT @SERVER_NAME,ERROR_NUMBER() AS ErrorNumber,ERROR_MESSAGE() AS ErrorMessage;
insert into tbl_Error_handling
SELECT @SERVER_NAME,'Recovery',[Error_Line] = ERROR_LINE(),[Error_Number] = ERROR_NUMBER(),
[Error_Severity] = ERROR_SEVERITY(),[Error_State] = ERROR_STATE(),
[Error_Message] = ERROR_MESSAGE(),GETDATE()
END CATCH
set @minrow =@minrow +1
end
insert into DBAdata_Archive.dbo.tbl_recovery_model_non_Prod
select *,getdate() from tbl_recovery_model_non_Prod
END
SP2
USE [DBAdata]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
USE [DBAdata]
GO
drop table tbl_recovery_model
CREATE TABLE [dbo].[tbl_recovery_model](
[SERVER_NAME] [sysname] NOT NULL,
[DB_NAME] [sysname] NOT NULL,
[Recovery] [varchar](10) NULL
)
USE [DBAdata_archive]
GO
CREATE TABLE [dbo].[tbl_recovery_model](
[SERVER_NAME] [sysname] NOT NULL,
[DB_NAME] [sysname] NOT NULL,
[Recovery] [varchar](10) NULL,
[CREATE_DATE] [datetime] NULL
)
select * from tbl_Error_handling order by Upload_Date desc
select * from tbl_recovery_model
and name not in (''''''''ReportServer'''''''',''''''''ReportServerTempDB'''''''')
*/
--drop proc [USP_recovery_model]
alter proc [dbo].[USP_recovery_model_pord]
/*
Summary: Check the recovery mode for prod
Contact: Muthukkumaran Kaliyamoorthy SQL DBA
Description: Check the recovery mode for prod
ChangeLog:
Date Coder Description
2013-jan-21 Muthukkumaran Kaliyamoorhty Updated the 2012 functionality
--*/
with Encryption
as
begin
DECLARE @server_name SYSNAME
DECLARE @DESC SYSNAME
DECLARE @sql varchar(max)
DECLARE @minrow int
DECLARE @maxrow int
TRUNCATE TABLE tbl_recovery_model
declare @Recovery table (id int primary key identity,
servername varchar(100),Description varchar(100))
insert into @Recovery
select Servername , Description from dbadata.dbo.dba_all_servers
WHERE Category in ('LIVE','PROD') and SVR_status ='running' and version <>'SQL2000'
-- select Category from dbadata.dbo.dba_all_servers group by Category
-- select * from dbadata.dbo.dba_all_servers where Category in ('PROD','live')
SELECT @minrow = MIN(id)FROM @Recovery
SELECT @maxrow = MAX(id) FROM @Recovery
while (@minrow <=@maxrow)
begin
BEGIN TRY
select @Server_name=Servername ,
@Desc=Description from @Recovery where ID = @minrow
/*
set @sql=
'EXEC(''SELECT * from OPENQUERY(['+@server_name+'],
''''select '''''''''+@DESC+''''''''',name,DATABASEPROPERTYEX(Name,''''''''RECOVERY'''''''') as Recovery,
GETDATE() as [CREATE_DATE] from master.dbo.sysdatabases
where DATABASEPROPERTYEX(Name,''''''''RECOVERY'''''''') =''''''''simple'''''''' and dbid not in (1,2,3,4)
'''')'')
'
*/
set @sql=
'EXEC(''SELECT * from OPENQUERY(['+@server_name+'],
''''select '''''''''+@DESC+''''''''',name,recovery_model_desc from sys.databases
where database_id not in (1,2,3,4) -- and recovery_model_desc =''''''''simple''''''''
'''')'')
'
insert into dbadata.dbo.tbl_recovery_model
exec(@sql)
--SELECT (@sql)
end try
BEGIN CATCH
SELECT @SERVER_NAME,ERROR_NUMBER() AS ErrorNumber,ERROR_MESSAGE() AS ErrorMessage;
insert into tbl_Error_handling
SELECT @SERVER_NAME,'Recovery',[Error_Line] = ERROR_LINE(),[Error_Number] = ERROR_NUMBER(),
[Error_Severity] = ERROR_SEVERITY(),[Error_State] = ERROR_STATE(),
[Error_Message] = ERROR_MESSAGE(),GETDATE()
END CATCH
set @minrow =@minrow +1
end
insert into DBAdata_Archive.dbo.tbl_recovery_model
select *,getdate() from tbl_recovery_model
END