两个问题:恢复删除记录和系统日志
1、我不小心在SQL里删除了一些记录,然后又添加了几条记录,请问有没有办法在任何数据库及事务日志的备份的情况下,将已经删除的记录恢复过来?就象在Foxpro里有一条recall语句一样简单?
2、在SQL Server中的系统日志很简单,只记录了一些关键信息。但我想要记录下对SQL中任何数据库的任何表、任何字段的任何操作,如Insert, Modify, Update, Select等,同时还要记录执行这些操作的登录用户名、机器名或IP,请问该如何设置?
问题点数:30、回复次数:9Top
1 楼yelook(香槟酒)回复于 2004-12-03 12:11:43 得分 3
学习Top
2 楼skyboy0720(曲终人散)回复于 2004-12-03 12:16:52 得分 0
1:使用第三方软件LOG EXPLORER!
2:写个触发器!Top
3 楼skyboy0720(曲终人散)回复于 2004-12-03 12:17:28 得分 25
Log Explorer
http://www.ttdown.com/SoftDown.asp?ID=14562
http://www.yiii.net/app/servlet/net.yiii.club.DownloadServlet?Information_Id=I00023471
解压缩密码 www.heibai.net
http://www.ttdown.com/softview_8647.htm
注册机产生的是注册码,是两个
用解压缩密码解开后,压缩包里也有一个注册机的
打开log explorer file=>attach log file->选择服务器和登陆方式->connect->
选择数据库->attach->左面对话框中browse->view log->就可以看到log记录了
想恢复的话: 右键log记录 undo transation->选择保存文件名和路径->然后打开该文件到查询分析器里执行
T-sql代码就可以了
例如 如果log是delete table where ...的话,生成的文件代码就是insert table ....
------------------------------------------------------------------------
log explorer使用的一个问题
1)对数据库做了完全 差异 和日志备份
备份时选用了删除事务日志中不活动的条目
再用Log explorer打试图看日志时
提示No log recorders found that match the filter,would you like to view unfiltered data
选择yes 就看不到刚才的记录了
如果不选用了删除事务日志中不活动的条目
再用Log explorer打试图看日志时,就能看到原来的日志
2)修改了其中一个表中的部分数据,此时用Log explorer看日志,可以作日志恢复
3)然后恢复备份,(注意:恢复是断开log explorer与数据库的连接,或连接到其他数据上,
否则会出现数据库正在使用无法恢复)
恢复完后,再打开log explorer 提示No log recorders found that match the filter,would you like to view unfiltered data
选择yes 就看不到刚才在2中修改的日志记录,所以无法做恢复.Top
4 楼skyboy0720(曲终人散)回复于 2004-12-03 12:18:17 得分 0
//////////////////////////参考,记录操作的示例////////////////
--创建记录的日志表
create table t_log(
id int identity(1,1) primary key,
工作站名 nchar(30) not null default host_name(),
操作员 sysname DEFAULT SUSER_SNAME(),
操作时间 datetime default getdate(),
事件类型 nvarchar(30),
参数 int,
执行的语句 nvarchar(255))
go
--演示用的数据表
create table test(id int)
go
--记录操作的触发器
create trigger t_update on test
for insert,update,delete
as
insert t_log(事件类型,参数,执行的语句) exec('dbcc inputbuffer(@@spid)')
go
--初始化表
insert into test values(1)
go
update test set id=100
go
--显示记录情况
select * from t_log
go
--删除演示环境
drop table t_log,testTop
5 楼leayh(云卷云舒)回复于 2004-12-03 13:00:19 得分 0
To: skyboy0720(人是人他妈生的,妖是妖他妈生的!)
1、这个软件我也知道,但是我已经删除了,现在才用这个软件,有用吗?
2、我也想到用这个方法,但是我的数据量是很大的,一天在万条左右,如果对某一个操作都用Trigger记录下来的话,会严重影响系统的速度的,所以我才想能不能直接在SQL管理器里实现。
谢谢!
Top
6 楼huazf(huazf)回复于 2004-12-03 13:12:57 得分 0
兄弟,我不需要日志文件,也可以恢复过来Top
7 楼comszsoft(星星点灯)回复于 2004-12-03 13:21:24 得分 2
学习Top
8 楼leayh(云卷云舒)回复于 2004-12-03 13:47:11 得分 0
To: huazf
那就拜托指教指教吧,谢谢了!Top
9 楼leayh(云卷云舒)回复于 2004-12-03 17:18:27 得分 0
To: skyboy0720
Trigger里exec('dbcc inputbuffer(@@spid)')这一句在SQL7里执行不成功,提示:Parameter 1 is incorrect for this DBCC statement,但在2000里一切正常,请问怎么解决在SQL7里的问题呢?Top




