ApexSQL Log 是一款用于处理数据库操作失误导致的数据丢失、数据改变等问题的工具,它可以根据数据库日志文件来找回丢失、改变的数据(但如果日志文件中不存在记录,可能就无法使用该工具找回)。
以下是使用 ApexSQL Log 查看 SQL Server 某张表更新记录的一般步骤:
- 下载并安装 ApexSQL Log 工具。
- 打开 ApexSQL Log 工具,点击【新增】开始恢复(这里的“恢复”属于个人称呼,非专业名词)。
- 在出现的界面中设置要连接的数据库:
- Server(服务器):可选择 local,表示本地;也可以选择 recentservers(最近的服务器)或 localservers(本地服务器)。
- Authentication(验证):选择连接方式,如 windows authentication(使用本机识别登录) 或 sql server authentication(使用 SQL Server 用户登录)。如果选择后者,则需要在下方填写账号密码(建议不要使用 sa 用户)。
- User 和 Password:在选择 sql server authentication 登录方式时输入用户名和密码。
- Database(数据库):选择需要进行恢复的数据库。
- Recent Sessions:这里会记录近期的连接,以供查看。
- 选择好数据库后,设置查询数据的条件:
- Time Range(时间范围):选择出现失误的时间范围,以获取该时间段的日志信息用于恢复。可以选择 last(数据源中的最后几个小时的数据)、first(数据源中几个小时前的数据)、whole transaction log(所有的日志信息)或 custom(自定义的时间区间)。
- Operations(操作):这里选择出现问题的操作类型。例如,如果是误更新了某些数据,就勾选 data operations 里面的 update row。
- Table(表):选择要恢复的表,即操作失误导致出现问题的表。
- Advanced Options(高级选项):这里有较多设置项,如处理方式、用户、字段值、标识符、类别等。其中,在 transactions(处理)下可选择特定的事务;在 users(用户)下可选择出现问题时使用的用户账号,默认是勾选所有。还可以通过 field value 筛选数据的字段值等。
- 条件选择好之后,就可以开始分析数据。一般选择“在窗格中打开结果”,根据需要也可以选择“输出结果到文件”或“创建路径文件”。
- 分析完毕后,右边会显示执行的错误操作,点中其中一行就可以在下边的 operation detail 中看到各个字段的值。此时需要检查要修改的数据和目前所查出来的数据是否大致一致。
- 确认数据后,可以生成恢复用的语句。需注意以下几点:
- 恢复语句生成后可直接执行,无需修改,这里生成的语句是一条数据对应一条语句。
- 如果需要恢复的数据过大,产生的 SQL 文件也会较大,超过 3MB 可能无法预览,会直接生成文件。
- 生成 SQL 文件时,要考虑电脑内存是否足够支持运行,不足的话会有错误提示。
- 记住如果要输出所有的记录,需要勾选所有,这可不是按照搜索出来的所有进行输出。
- 选择 SQL 文件保存的位置。
- 找到保存的文件,用 SQL 管理工具打开并执行语句即可。
请注意,在实际操作中,根据具体情况可能需要调整某些步骤或设置。另外,确保对数据库的操作具有适当的权限,并在操作前仔细确认所选的条件和设置,以避免意外的数据更改或丢失。同时,由于该工具可能存在版本更新或变化,上述步骤可能需要根据你使用的具体版本进行适当调整。
如果你使用的是试用版,可能会有一些限制,例如只能恢复部分数据。在这种情况下,你可以考虑寻找该工具的正式版或破解补丁,但使用破解补丁可能涉及版权问题,并且存在一定的安全风险,请谨慎操作。或者,也可以参考其他合法的方式来查看 SQL Server 中表的更新记录,例如通过 SQL Server 提供的内置函数 fn_dblog 来查询事务日志,示例代码如下:
sql
use adventureworks;
go
select
(current_lsn),
(transaction_id),
operation,
context,
alloc_unit_name,
(page_id),
(slot_id),
(begin_time),
(end_time)
from
fn_dblog(null, null)
where
operation = 'lop_modify_row'
and alloc_unit_name = 'dbo.yourtablename';
在上述代码中,将adventureworks
替换为你的数据库名,将yourtablename
替换为要查看的表名。该查询会返回指定表的更新操作记录,包括日志序列号(current_lsn)、事务 ID(transaction_id)、操作类型(operation)、上下文(context)等信息。通过分析这些信息,可以了解表的更新情况。但请注意,这种方式需要对数据库的事务日志有一定的了解和权限。此外,开启事务日志记录可能会对数据库性能产生一定影响,并且事务日志的大小也会随着时间增长,需要定期进行管理和备份。