mysql查询删除的数据历史记录_查询数据库各种历史记录

本文介绍了如何在SQL Server中查询数据库启动记录、登录记录以及创建、修改、删除(DDL)记录的历史。通过错误日志、登录触发器、默认跟踪等方法,可以追踪数据库的多种操作,包括查看启动时间、登录信息、DDL操作的时间和类型。
摘要由CSDN通过智能技术生成

在SQL Server数据库中,从登陆开始,然后做了什么操作,以及数据库里发生了什么,大多都是有记录可循的,但是也有一些确实无从查起。

一.数据库启动记录

1.最近一次启动SQL Server的时间

48304ba5e6f9fe08f3fa1abda7d326ab.png

select sqlserver_start_time from sys.dm_os_sys_info;

--也可参考系统进程创建的时间,比服务启动时间略晚(秒级)

select login_time from sysprocesses where spid = 1

select login_time from sys.dm_exec_sessions where session_id = 1

--也可参考tempdb数据库创建的时间,比服务启动时间略晚(秒级)

select create_date from sys.databases

where database_id=2

48304ba5e6f9fe08f3fa1abda7d326ab.png

2.最近几次启动SQL Server的时间

48304ba5e6f9fe08f3fa1abda7d326ab.png

--参考error log,系统默认保留6个归档,共7个文件

exec xp_readerrorlog 0,1, N'SQL Server is starting'

exec xp_readerrorlog 1,1, N'SQL Server is starting'

exec xp_readerrorlog 2,1, N'SQL Server is starting'

exec xp_readerrorlog 3,1, N'SQL Server is starting'

exec xp_readerrorlog 4,1, N'SQL Server is starting'

exec xp_readerrorlog 5,1, N'SQL Server is starting'

exec xp_readerrorlog 6,1, N'SQL Server is starting'

--之前关键字用N'Server process ID is'并不严谨,改为N'SQL Server is starting'

48304ba5e6f9fe08f3fa1abda7d326ab.png

3.历史上更多次启动SQL Server的时间

查看windows event log,SQL语句无法直接读取event log,如果想用命令行,可以试试VBS,Powershell。

Event Viewer/Windows logs下Application 或者 System 事件里都有服务启动的记录。

二. 登录数据库记录

1.查看error log

默认情况下,只有失败的登录会被记录在error log里,如果想登录失败/成功都被记录到error log,需要开启如图选项:

5aa702899354fcd1a0f6c07c905f1392.png

用SQL语句修改注册表,也同样可以开启,键值对应关系如下:

0, None

1, Failed

2, Successful

3, Both failed and successful

USE [master]

GO

EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'AuditLevel', REG_DWORD, 3

GO

在error log里查看登录记录:

exec xp_readerrorlog 0,1, N'Login', N'for user', null, null, N'DESC'

2.利用LOGON触发器进行记录

从SQL Server 2005 SP2开始引入了LOGON Trigger,可以用它在登录时做个记录,实现如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

--创建LOGON触发器

CREATE database DBA

GO

USE DBA

GO

IF OBJECT_ID('login_history','U') is not null

DROP TABLE login_history

GO

CREATE TABLE login_history

(

FACT_ID bigint IDENTITY(1,1) primary key,

LOGIN_NAME nvarchar(1024),

LOGIN_TIME datetime

)

GO

IF EXISTS(select 1 from sys.server_triggers where name = 'login_history_trigger')

DROP TRIGGER login_history_trigger ON ALL SERVER

GO

CREATE TRIGGER login_history_trigger

ON ALL SERVER

FOR LOGON

AS

BEGIN

--IF SUSER_NAME() NOT LIKE 'NT AUTHORITY\%' AND

-- SUSER_NAME() NOT LIKE 'NT SERVICE\%'

IF ORIGINAL_LOGIN() NOT LIKE 'NT AUTHORITY\%' AND

ORIGINAL_LOGIN() NOT LIKE 'NT SERVICE\%'

BEGIN

INSERT INTO DBA..login_his

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值