Friday, February 28, 2014

How to find out Dropped DataBase Objects Details in Given Time?




CREATE PROCEDURE uspRecover_dropped_DBobjects @Date_From DATETIME=
'1900/01/01',
@Date_To DATETIME =
'9999/12/31'
AS
; WITH cte
AS (SELECT
B.name
AS [Schema Name]
,
Replace(
Substring(A.[rowlog contents 0], 14, Len(A.[rowlog contents 0])), 0x00, 0x)
AS
[Object Name],
[transaction id],
A.[rowlog contents 0]
FROM Fn_dblog(NULL, NULL) A
LEFT JOIN sys.schemas B
ON CONVERT(INT, Substring([rowlog contents 0], 2, 2)) =
B.schema_id
WHERE A.[allocunitname] = 'sys.sysschobjs.nc1'
AND A.[transaction id] IN (SELECT DISTINCT [transaction id]
FROM sys.Fn_dblog(NULL, NULL)
WHERE context IN ( 'LCX_NULL' )
AND operation IN ( 'LOP_BEGIN_XACT'
)
AND [transaction name] LIKE
'%DROP%'
AND CONVERT(NVARCHAR(11),
[begin time]
)
BETWEEN
@Date_From AND @Date_To))
SELECT[schema name],
[object name],
B.[begin time] AS [Dropped Date & Time],
C.[name] AS [Dropped By User Name]
FROM cte A
INNER JOIN Fn_dblog(NULL, NULL) B
ON A.[transaction id] = B.[transaction id]
AND context IN ( 'LCX_NULL' )
AND operation IN ( 'LOP_BEGIN_XACT' )
AND [transaction name]LIKE '%DROP%'
LEFT JOIN sys.sysusers C
ON B.[transaction sid] = C.[sid]

GO



-- ************ Start Create Procedure and View on User defined Table **************
--*********CREATE table temp_Employee without column Location **************
IF OBJECT_ID('temp_Employee') IS NULL
BEGIN
CREATE TABLE temp_Employee
(EmpId INT,
Name VARCHAR(100),
Department VARCHAR(100))
END

--*********Insert data into table temp_Employee **************
INSERT INTO temp_Employee (EmpId ,Name,Department )
VALUES (1, 'Allen','IT')
GO

--*********CREATE VIEW on Table temp_Employee **************
CREATE VIEW vw_temp_Employee
AS
SELECT * FROM temp_Employee
GO

--*********CREATE Proc on Table temp_Employee **************
CREATE Proc usp_Temp_Employee
AS
SELECT * FROM temp_Employee
GO


-- ************ End Create Procedure and View on User defined Table **************




--- DROP PROC WITH USER SUPPOSE BABU --------
DROP PROC usp_Temp_Employee
GO


--- DROP VIEW WITH USER SUPPOSE BABU1 --------

DROP VIEW vw_Temp_Employee
GO




----- ***** Execute the sp to find out list of dropped objects in given time frame ************

EXEC uspRecover_dropped_DBobjects '2014/02/20 04:45:06:450','2014/03/20 04:45:06:450'


-- OUTPUT
schema name object name Dropped Date & Time Dropped By User Name
dbo uspTemp_Employee 2014/02/28 05:24:28:903 NULL
dbo vw_temp_Employee 2014/02/28 05:32:51:437 Babu
dbo vw_temp_Employee 2014/02/28 05:42:46:610 Babu1
dbo usp_Temp_Employee 2014/02/28 05:42:50:587 Babu
dbo vw_temp_Employee 2014/02/28 05:54:29:100 Babu1
dbo Recover_dropped_objects_detail_proc 2014/02/28 06:03:32:850 Babu1



No comments :

Post a Comment