2017-06-30 8 views
0

多くの人がアクセスできるテーブルがテーブルにあります。私のテーブルにはいくつかのデータがありません。どのテーブルからその行を削除したのかを知るにはSQL Serverのテーブルからデータを削除した人を見つける方法

+0

あなたはデータベースのバックアップを取っていますか?そうでない場合は、それ以外の方法であなたを助けることができるサードパーティのツールがあります。試してみてくださいhttp://www.apexsql.com/sql_tools_log.aspx –

+0

@Simranあなたは[SysTools SQL Log Analyzer](https://www.systoolsgroup.com/sql-log-analyzer.html)を分析することができます挿入、更新、削除などのすべてのユーザートランザクションアクティビティを含むSQL Serverデータベース内のユーザーアクティビティ –

+0

@Sushil Mate私たちはデータベースのバックアップを持っていません。私は他のテスト環境でデータを持っています。ナット私の了承なしにそれを削除した犯人を見つけたい – Simran

答えて

0

あなたは少しスニペットに従うことで、データのユーザ名を削除見つけることができます:

DECLARE @TableName sysname 
SET @TableName = 'dbo.t1_new' --INPUT TABLE NAME 

SELECT 
    u.[name] AS UserName 
    , l.[Begin Time] AS TransactionStartTime 
FROM 
    fn_dblog(NULL, NULL) l 
INNER JOIN 
    (
    SELECT 
     [Transaction ID] 
    FROM 
     fn_dblog(NULL, NULL) 
    WHERE 
     AllocUnitName LIKE @TableName + '%' 
    AND 
     Operation = 'LOP_DELETE_ROWS' 
    ) deletes 
ON deletes.[Transaction ID] = l.[Transaction ID] 
INNER JOIN 
    sysusers u 
ON u.[sid] = l.[Transaction SID] 

ソース:dba.stackexchange (私はそれを掲示誰覚えていません)

0

残念ながら、削除したレコードは自分のどこかに置かないと表示されません。

このタイプの介入を追跡する場合は、実際にレコードを削除しないでください。 代わりに、テーブルにいくつかのフィールドを作成する必要があります。ここ はexempleです:

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[Person](
[Pers_ID] [int] IDENTITY(1,1) NOT NULL, 
[Pers_CompanyID] [int] NULL, 
[Pers_FirstName] [nvarchar](50) NULL, 
[Pers_LastName] [nvarchar](50) NULL, 
[Pers_CreatedBy] [int] NULL, 
[Pers_CreatedDate] [datetime] NULL, 
[Pers_UpdatedBy] [int] NULL, 
[Pers_UpdatedDate] [datetime] NULL, 
[Pers_Deleted] [bit] NULL, 
CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED 
(
[Pers_ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =  OFF,  ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

SET ANSI_PADDING OFF 
GO 

ユーザーがレコードを作成するとき、あなたはCREATEDBY =ユーザーIDを設定することができ、CreatedDateに= CURRENTDATE、

記録、UpdatedBy =ユーザーIDを更新しながら、UpdatedDate = CURRENTDATE

削除し、削除済み= True、UpdatedBy =ユーザーID、UpdatedDate = CurrentDate。

あなたのコードでは、すべてのクエリで、条件を削除する必要があります= null。

したがって、レコードの作成、更新、削除を追跡できます。

+0

すでに削除されているデータについて知りたい。 – Simran

2

あなたが完全に調査するApexSQLログを使用することができますあなたのテーブルに対して実行された操作。データベースは完全リカバリモデルにする必要があります。そのため、過去の操作に関する情報は、ApexSQL Logがトランザクションログファイル内で使用できるようになっています。ツールがあなたのt-logを分析すると、操作の開始と終了の時間、操作の種類、影響を受けるオブジェクトのスキーマとオブジェクト名、操作を実行したユーザーの名前などを見ることができます。 UPDATEの場合は、更新されたフィールドの古い値と新しい値を見ることさえできます。

この上のいくつかのガイドがさらにhttps://solutioncenter.apexsql.com/apexsql-log-solutions-table-of-contents/

ここにあります必要であれば、あなたも、それらのトランザクションをロールバックするApexSQLログを使用することができます。単に元に戻すと、元の状態に戻すことができます。

関連する問題