在SQL200中误删除了一个表如何恢复

来源:互联网 发布:北京网络维护工资 编辑:程序博客网 时间:2024/05/03 14:51
在SQL200中误删除了一个表如何恢复

http://www.delphibbs.com/delphibbs/dispq.asp?lid=2323925

500分救命阿!在SQL200中误删除了一个表如何恢复。 ( 积分:300, 回复:59, 阅读:731 )
分类:数据库-C/S型 ( 版主:qince, luyear )

来自:次时代, 时间:2003-11-29 16:31:00, ID:2323925[显示:小字体 | 大字体]

我在修改SQL2000中的一个表时误删除了它,请问如何恢复啊!
/*
   2003年11月29日 09:02:25
   用户:
   服务器: WWWSERVER
   数据库: jc_lib
   应用程序: MS SQLEM - Data Tools

*/
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
ALTER TABLE dbo.ck
 DROP CONSTRAINT DF_ck_Ck_date
GO
ALTER TABLE dbo.ck
 DROP CONSTRAINT DF_ck_Sum_y_jija
GO
ALTER TABLE dbo.ck
 DROP CONSTRAINT DF_ck_Sum_y_base
GO
ALTER TABLE dbo.ck
 DROP CONSTRAINT DF_ck_Sum_y_jije
GO
ALTER TABLE dbo.ck
 DROP CONSTRAINT DF_ck_Fk_type
GO
ALTER TABLE dbo.ck
 DROP CONSTRAINT DF_ck_Fk_id
GO
ALTER TABLE dbo.ck
 DROP CONSTRAINT DF_ck_Overs
GO
ALTER TABLE dbo.ck
 DROP CONSTRAINT DF_ck_CwId
GO
CREATE TABLE dbo.Tmp_ck
 (
 Ckdh varchar(12) NOT NULL,
 Bmbh varchar(6) NOT NULL,
 Ghs varchar(8) NOT NULL,
 Fph varchar(20) NOT NULL,
 Bmmc varchar(20) NULL,
 Ghsmc varchar(20) NULL,
 Ck_date datetime NULL,
 Ck_type varchar(1) NULL,
 Sum_shl numeric(18, 3) NULL,
 Sum_base numeric(18, 6) NULL,
 Sum_jija numeric(18, 6) NULL,
 Sum_jije numeric(18, 6) NULL,
 Sum_y_jija numeric(18, 6) NULL,
 Sum_y_base numeric(18, 6) NULL,
 Sum_y_jije numeric(18, 6) NULL,
 Fk_type varchar(8) NULL,
 Fk_id bit NULL,
 Xsy varchar(8) NULL,
 Zdy varchar(8) NULL,
 Ck_info varchar(8) NULL,
 Info varchar(100) NULL,
 Overs bit NULL,
 Shid varchar(8) NULL,
 CwId bit NULL
 )  ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_ck ADD CONSTRAINT
 DF_ck_Ck_date DEFAULT (getdate()) FOR Ck_date
GO
ALTER TABLE dbo.Tmp_ck ADD CONSTRAINT
 DF_ck_Sum_y_jija DEFAULT (0) FOR Sum_y_jija
GO
ALTER TABLE dbo.Tmp_ck ADD CONSTRAINT
 DF_ck_Sum_y_base DEFAULT (0) FOR Sum_y_base
GO
ALTER TABLE dbo.Tmp_ck ADD CONSTRAINT
 DF_ck_Sum_y_jije DEFAULT (0) FOR Sum_y_jije
GO
ALTER TABLE dbo.Tmp_ck ADD CONSTRAINT
 DF_ck_Fk_type DEFAULT ('未付款') FOR Fk_type
GO
ALTER TABLE dbo.Tmp_ck ADD CONSTRAINT
 DF_ck_Fk_id DEFAULT (0) FOR Fk_id
GO
ALTER TABLE dbo.Tmp_ck ADD CONSTRAINT
 DF_ck_Overs DEFAULT (0) FOR Overs
GO
ALTER TABLE dbo.Tmp_ck ADD CONSTRAINT
 DF_ck_CwId DEFAULT (0) FOR CwId
GO
IF EXISTS(SELECT * FROM dbo.ck)
  EXEC('INSERT INTO dbo.Tmp_ck (Ckdh, Bmbh, Ghs, Fph, Bmmc, Ghsmc, Ck_date, Ck_type, Sum_shl, Sum_base, Sum_jija, Sum_jije, Sum_y_jija, Sum_y_base, Sum_y_jije, Fk_type, Fk_id, Xsy, Zdy, Ck_info, Info, Overs, Shid, CwId)
   SELECT Ckdh, Bmbh, Ghs, Fph, Bmmc, Ghsmc, Ck_date, Ck_type, Sum_shl, Sum_base, Sum_jija, Sum_jije, Sum_y_jija, Sum_y_base, Sum_y_jije, Fk_type, Fk_id, Xsy, Zdy, Ck_info, Info, Overs, Shid, CwId FROM dbo.ck TABLOCKX')
GO
DROP TABLE dbo.ck
GO
EXECUTE sp_rename N'dbo.Tmp_ck', N'ck', 'OBJECT'
GO
ALTER TABLE dbo.ck ADD CONSTRAINT
 ck_idx PRIMARY KEY CLUSTERED
 (
 Ckdh
 ) ON [PRIMARY]

GO
CREATE NONCLUSTERED INDEX IX_ck ON dbo.ck
 (
 Bmbh,
 Ghs,
 Ck_type,
 Ck_date
 ) ON [PRIMARY]
GO
COMMIT
能解决者愿付500分。
帮助顶者也有分。  

来自:xiaofeng007, 时间:2003-11-29 16:35:00, ID:2323936
用数据库的日志文件应该可以恢复一部分数据。具体什么方法我没有用过,关注  

来自:bjaman, 时间:2003-11-29 16:37:00, ID:2323939
要是有备份就restore呀。没备份就没辙了。
建议:养成修改数据库(表)结构前备份数据的好习惯。这是有血的教训的。。。。  

来自:次时代, 时间:2003-11-29 16:38:00, ID:2323942
我的备份是11.4日的,已过了20多天了,叫我如何用啊!
555555555555555555555  

来自:xiaofeng007, 时间:2003-11-29 16:41:00, ID:2323946
那还是可以恢复到11。4号的啊。建议在另外一台机子上帮11。4号前的数据取出来  

来自:次时代, 时间:2003-11-29 16:44:00, ID:2323950
我从联机帮助中找到的,不知道怎么用,请大家帮忙啊!!!
如何还原到某个即时点 (Transact-SQL)
还原到某个即时点

执行使用 NORECOVERY 子句的 RESTORE DATABASE 语句。


执行 RESTORE LOG 语句以应用每个事务日志备份,同时指定:
事务日志将应用到的数据库的名称。


要从其中还原事务日志备份的备份设备。


RECOVERY 和 STOPAT 子句。如果事务日志备份不包含要求的时间(例如,如果指定的时间超出了事务日志所包含的时间范围),则会生成警告,并且数据库将保持未恢复的状态。
示例
下例将数据库还原到它在 1998 年 7 月 1 日上午 10:00 点的状态,并且举例说明涉及多个日志以及多个备份设备的还原操作。

-- Restore the database backup.
RESTORE DATABASE MyNwind
   FROM MyNwind_1, MyNwind_2
   WITH NORECOVERY
GO
RESTORE LOG MyNwind
   FROM MyNwind_log1
   WITH RECOVERY, STOPAT = 'Jul 1, 1998 10:00 AM'
GO
RESTORE LOG MyNwind
   FROM MyNwind_log2
   WITH RECOVERY, STOPAT = 'Jul 1, 1998 10:00 AM'
GO

  

来自:xiaofeng007, 时间:2003-11-29 16:47:00, ID:2323954
恢复前不要忘记帮当前的数据库备份一下。祝你好运  

来自:次时代, 时间:2003-11-29 16:50:00, ID:2323958
我已备份了,
我找到的这段应该可以恢复到我误操作以前的状态,可怎么用啊!  

来自:yeskert1, 时间:2003-11-29 16:51:00, ID:2323960
同情你,兄弟!
据我所知,drop的表不可恢复………
别失望!也许有世外高人。……但理论上我觉得不太可能。  

来自:bjaman, 时间:2003-11-29 16:57:00, ID:2323967
另找一台电脑,把你的数据库完全恢复上去,在上面实验一下吧。。。
你找的那段程序的时间就指定为小于你出错时的时间值。
  

来自:次时代, 时间:2003-11-29 17:00:00, ID:2323975
我用
RESTORE LOG jc_lib
   FROM jc_lib
   WITH RECOVERY, STOPAT = 'Jul 1, 1998 10:00 AM'
得出的结果为:
服务器: 消息 3206,级别 16,状态 1,行 1
在 sysdevices 中没有备份设备 'jc_lib' 的条目。请更新 sysdevices 后重新运行语句。
服务器: 消息 3013,级别 16,状态 1,行 1
RESTORE LOG 操作异常终止。
  

来自:joshua_jia, 时间:2003-11-29 17:23:00, ID:2324005
不知道,但幫你提前,若不行也不要太難過............  

来自:次时代, 时间:2003-11-29 17:30:00, ID:2324024
谢谢大家,
  

来自:bjaman, 时间:2003-11-29 17:32:00, ID:2324027
FROM后应为事务日志备份设备名,你打开系统master数据库后在系统表sysdevices里可以看到字段phyname下面有事务日志的物理路径及文件名,与其name字段对应的应该是???dev。试这个了.  

来自:次时代, 时间:2003-11-29 17:42:00, ID:2324038
在系统master数据库后在系统表sysdevices里只有
master  512  0  2047  2  0  D:/Program Files/Microsoft SQL Server/MSSQL/data/master.mdf
mastlog  128  0  511  66  0  D:/Program Files/Microsoft SQL Server/MSSQL/data/mastlog.ldf
modeldev  80  0  319  2  0  D:/Program Files/Microsoft SQL Server/MSSQL/data/model.mdf
modellog  96  0  383  66  0  D:/Program Files/Microsoft SQL Server/MSSQL/data/modellog.ldf
tempdev  256  0  1023  2  0  D:/Program Files/Microsoft SQL Server/MSSQL/data/tempdb.mdf
templog  64  0  255  66  0  D:/Program Files/Microsoft SQL Server/MSSQL/data/templog.ldf
  

来自:dbb2tkw, 时间:2003-11-29 17:42:00, ID:2324039
呵呵!这好象很难!
如果没备份的话,我觉得好象没法恢复  

来自:次时代, 时间:2003-11-29 17:44:00, ID:2324044
我有备份的,是11.4日的,在发生错误后我又备份了一个。  

来自:bjaman, 时间:2003-11-29 17:55:00, ID:2324059
查资料知:
    事务日志备份在数据库还原时无法单独动作,它必须结合一个完整的数据库备份才可以。而且日志备分在还原时有一定的前后次序,不能搞错。比如您在周日对数据库做过一个完整备份,在其他日子只备份其事务日志的话,当您要还原数据库时您必须先将周日该完整的备份还原,再依周一、周二、周三的次序还原事务日志。
    如果在您的备份周期中曾经删除或增加数据库的数据文件的话,您必须对数据库做一次完整的备份。
   

来自:bjaman, 时间:2003-11-29 17:57:00, ID:2324060
你有没有做事务日志备份呀?这才是问题  

来自:indexhome, 时间:2003-11-29 18:01:00, ID:2324064
听说可以用日志文件恢复,但是我没有用过,如果没有开日志文件的话,那就不知道怎么用了!每天备份啊!  

来自:次时代, 时间:2003-11-29 18:04:00, ID:2324066
事务日志备份的后缀名为.TRN吗?
我做了。  

来自:次时代, 时间:2003-11-29 18:07:00, ID:2324068
它也只有11.4日的。
其实我做了个数据库维护计划,在每天的晚上8:00运行。
可是11月份改点下班后由于服务器关闭所有再也没有备份了。  

来自:jxc163, 时间:2003-12-1 8:43:00, ID:2325532
提个前  

来自:Jelly0228, 时间:2003-12-1 14:44:00, ID:2326542
樓主你使用的是哪種復原模型??
  

来自:Jelly0228, 时间:2003-12-1 14:51:00, ID:2326556
樓主﹐依據我的經驗﹐如果數據庫使用的復還模型為完整﹐那么你完全可以還復數據庫指令將之還原到指定時間點。前提是還原之前做一次交易日志檔備份。
然后再用這個備份交易日志檔進行恢復﹗  

来自:lgxyy, 时间:2003-12-1 14:54:00, ID:2326563
MS SQL好象不能做到  

来自:次时代, 时间:2003-12-2 11:04:00, ID:2328196
谢谢大家的帮助,我对通过SQL进行恢复的方式已不抱希望了。
我使用了最笨的方法进行了恢复。
Jelly0228:
  如果我做的是完整备份,你能告诉我该如何恢复吗?
  

来自:freestron, 时间:2003-12-2 11:29:00, ID:2328277
好象不能恢复了,不知道是否有世外高人!关注  

来自:Jelly0228, 时间:2003-12-4 10:43:00, ID:2332923
樓主﹐完整備份并不代表一定能回復到那個時間(基于時間點的復原是根據日志檔進行的)﹔只有你的資料庫復原模式為完整時才可以保証恢復到指定的時間。
你可以這樣查看你的資料庫復還原模式﹕右擊數據庫--內容--選項﹐就可以看到了。
在完整復還模式下,SQL Server的檢查點不會截斷日志中已完成的交易(除非你執行日志檔備份).你的所有操作都記錄在里面﹐就可以恢復到指定時間點。
如果樓主需要了解在完整復原模式下如何還原到指定時間點﹐那就提出來吧。
不過值得嚴重注意的一點是﹕成功恢復到指定時間點以后﹐你的資料庫所有發生在該時間點以后的所有操作都會回滾。所以最好的辦法是將資料庫的所有文件Copy到另外一台機器上進行。
  

来自:wangzhinong, 时间:2003-12-4 11:28:00, ID:2333074
在网上找一下有关日志的操作,我想会有一定的作用!!!  

来自:胡萝卜, 时间:2003-12-4 12:40:00, ID:2333243
我没做过,只好祝楼主好运  

来自:DelPhiFreshman, 时间:2003-12-4 12:54:00, ID:2333285
  没有日志备份是不可能恢复的,这个从理论上讲就是这样。对事务日志来说,它仅仅记录用户作了什么操作,而不去记录你删除的表究竟是什么结构。这个同删除表内容不一样。如果你删除表内容,你还可以即刻从Deleted表中找到,但是表结构就不行了。删除一个表的结构,数据库系统表的内容都要发生变化,它们也是把与该表有关的所有信息全部删除,所以,恢复是不可能的。
   你还是做好不能恢复的准备工作吧。希望你日后养成备份的好习惯,不仅要作全库备份,也要作事务日志备份,对差异备份,也要在合适的时候做。
  

来自:dearwolf, 时间:2003-12-4 13:09:00, ID:2333328
非常同情你
兄弟!!!
我也曾经遇到过这样的事情,不过不同的事情是我把数据库文件给删除了.
我用了两天一夜的时间又重做了一遍数据库(主要是其中的数据是从别的地方导过来的)
还挨了领导一顿批
兄弟比你我你好多了!!
帮你顶一下.  

来自:Jelly0228, 时间:2003-12-4 13:30:00, ID:2333389
DelPhiFreshman兄﹐
  請教一個問題﹐你說如果刪除表內容﹐還可以立即從Deleted表中找到。但據我所知﹐Deleted表只是用于觸發器中吧??在平時執行了Delete語句﹐請問如何從Deleted表中找到呢??
   謝了~~  

来自:coolzew, 时间:2003-12-4 13:35:00, ID:2333411
給大家講一個我剛畢業那年在一家公司干的事﹕
    系統上線第二天﹐我們晚上檢查數據﹐有位同事打開建軍表的腳本來看各個字段的
說明﹐這時leader發現有個表少建了一個索引﹐讓他建一下﹐他也沒想CTRL + E執行
鍵盤一按他才意識到這下惹禍了﹐表里數據沒了﹐所有病人的信息都沒了。我那同事的
臉慘白啊。當時他嚇壞了﹐幸運的是leader有做備份。
    再講講我的事﹐有一次把一存儲過程修改了一下﹐應要求需立即更新﹐測試庫我已測試過了﹐沒有問題的。我把腳本一執行﹐傻了﹐出錯了﹐可原來的過程已刪除﹐電話很快響個不停﹐我都不敢接。肯定所有工作站都不行了。看著那上千行的腳本﹐真是無從下手﹐SQL6.5的分析器是沒有高亮度顯示的。10分鐘后找到原因﹐原來不小心手砬了一個回車鍵﹐
代碼強行換行了。  

来自:chshanghai, 时间:2003-12-4 13:35:00, ID:2333413
找凳子 去  

来自:次时代, 时间:2003-12-4 15:31:00, ID:2333833
谢谢大家的帮助。虽然没有实质性的解决办法,可我还是衷心的感谢大家的参与。
现在我想跟大家说的是:
    我已恢复了所有的被删的记录,到少是99.9%的记录恢复了。现在我正在让各工作站验证所恢复的单据是否有错误。虽然我自己验证的几十条单据信息都没错但由于恢复的方法十分不科学,所以错误是一定存在的,只是多少的问题了。
希望大家继续讨论,我们在进行数据维护过程中谁能不出问题呢?如果能找出一个解决的办法来,对大家都是一个提高。
[b][red]对于能提出解决问题办法或有高明见解的朋友我会另开贴再给那200分[/red]。[/b]
我提个思路:
    1、如何进行备份(数据库、日志备份,完全、增量、差异备份,备份时机,备份间隔等)
    2、出了错误后如何进行恢复(误删表、记录、过程,误删数据库文件等)
希望各位大富翁高谈阔论我将洗耳恭听!
  

来自:次时代, 时间:2003-12-4 15:44:00, ID:2333874
大家都在说备份是恢复的必要前提,但如果数据库从来没有备份过,那是不是在删除表后就不能恢复了。
那硬盘中高达nG的日志文件还有什么用呢?  

来自:bjaman, 时间:2003-12-4 18:10:00, ID:2334324
   1。定时备份数据库:建议把数据库备份做在SQL Server代理的作业中,在作业调度里设定系统每天做一次完整备份,这次备份时间选定在凌晨0:00~6:00用户操作机会比较少的时段内。这样在出现问题的情况下,可以把数据损失减少到一天之内。
   2。每逢结构修改之前,手工做一次完整备份。以防万一。结构变动时也应与相关程序应用部门协调好,最好安排在业务操作相对空闲的时间来作,这样即使出现差错后恢复数据备份, 用户损失的资料也较少,可以很快弥补。
   我们就是这样做的。  

来自:Jelly0228, 时间:2003-12-5 9:41:00, ID:2335115
大伙兒說的沒錯﹐備份是恢復的前提﹔
沒有備份你從哪里恢復???
但你可以出錯后馬上備份事務日志﹐
然后馬上從這個備份檔中恢復到指定時間點啊~~  

来自:QSmile, 时间:2003-12-5 10:42:00, ID:2335355
学习教训来了。  

来自:^笨笨猫^, 时间:2003-12-5 11:20:00, ID:2335508
11。4 日的县恢复,然后用备份的日至恢复到11。28 23:59:59,你的损失会最小!!!!!
其他的可能找不到了!!!!!
你的数据从其他地方,运算不出来吗???? 晕!!!!! 数据库怎么设计的!!!!  

来自:cheylin, 时间:2003-12-5 11:22:00, ID:2335520
非常同情你,帮你顶  

来自:飞一号1, 时间:2003-12-5 13:02:00, ID:2335767
非常同情你,帮你顶非常同情你,帮你顶非常同情你,帮你顶非常同情你,帮你顶非常同情你,帮你顶!!
顺便问一下假如数据库中某个表坏了,能修复吗?就是查询这个表的数据少了很多!·!  

来自:次时代, 时间:2003-12-6 10:17:00, ID:2337393
Jelly0228:
  出错后我立马进行了备份,可备份的是出错后的数据库,怎么恢复到出错前的状态?
^笨笨猫^:
  有些数据是原始的,是不能通过计算行到的。例如:库存信息可以通过进销单据计算得到,但进进销单据靠什么计算呢?
  

来自:次时代, 时间:2003-12-6 10:51:00, ID:2337466
Jelly0228:
  我做如下测试:
1、完整备份数据库A
2、删除数据库A中的表b
3、备份数据库日志。
4、恢复数据库
有如下问题:A。恢复到指定时间不能改为删除表前的时间。
            B。恢复后的数据库在数据库名后有“(正在装载)”字样,不能使用数据库了。重启SQL也没用。
是不是我测试的步骤有问题?  

来自:次时代, 时间:2003-12-6 10:54:00, ID:2337474
重做测试,但不恢复上帖中步骤3的日志备份。数据库可用。  

来自:bluesaga, 时间:2003-12-6 13:10:00, ID:2337780
呵呵~~兄弟我也删过数据库。。。  

来自:Jelly0228, 时间:2003-12-6 13:59:00, ID:2337845
樓主﹐
  我剛才試了一下﹐成功了﹐你看看吧﹗
(數據庫名為JELLY)
------創建名為JELLY的用戶表并插入資料
create table JELLY (MyName varchar(10))
insert into JELLY values('JELLY')
select * from Jelly

------完整備份JELLY數據庫
backup database JELLY to disk='H:/JELLYDB.BAK'

------在刪除資料表之前先查詢出時間點﹐將來就恢復到這個時間點
select getdate()
----------
2003-12-06 13:37:53.740

------刪除表(最好等過上那么十几秒再刪﹐因為數據更新后寫入硬碟的時間可能有一定延遲)
drop table Jelly

------用SELECT語句檢查﹐表已不存在
SELECT * FROM JELLY

------備份事務日志
backup log JELLY to Disk='H:/JELLYDB.TRN'

------開始還原
USE master
RESTORE DATABASE JELLY
FROM DISK='H:/JELLYDB.BAK'
WITH NORECOVERY  ----此時數據庫處于載入中狀態﹐等待下個備份檔復原﹑

RESTORE LOG JELLY -----還原日志檔
FROM DISK='H:/JELLYDB.TRN'
WITH RECOVERY,STOPAT='2003-12-06 13:37:53'

---------OK!成功﹗
SELECT * FROM JELLY

  

来自:ljlljl-79, 时间:2003-12-6 14:15:00, ID:2337889
还原备份  

来自:次时代, 时间:2003-12-6 15:52:00, ID:2338073
Jelly0228:
  太谢谢你了。我终于知道该怎么恢复数据了。唉!如果早知道几天就好了。
你的测试我也通过了。但我以前的测试是在“企业管理器”中进行的,不能恢复。从SQL查询分析器是恢复却成功了,你能告诉我这是为什么吗?  

来自:hiyaolee, 时间:2003-12-6 16:08:00, ID:2338097
To Jelly0228
我搞懂,刪除了,又沒有備份,怎麼恢復數據,即使有日志文件,你又怎麼把原始數據恢復回去??????  

来自:xie0930, 时间:2003-12-6 16:12:00, ID:2338113
修该表的时候一定要做好备份, 现在sql7以上版本恢复数据很方便.
 sp_attach_db和sp_attach_single_file_db都很方便.  

来自:canoebee, 时间:2003-12-6 16:25:00, ID:2338144
我是个新手,不能说什么,但是我也学到了很多,谢谢大家的知识共享!!  

来自:hiyaolee, 时间:2003-12-6 16:40:00, ID:2338179
TO Jelly0228:
執行:------備份事務日志
backup log JELLY to Disk='H:/JELLYDB.TRN'
提示:
Server: Msg 4208, Level 16, State 1, Line 1
The statement BACKUP LOG is not allowed while the recovery model is SIMPLE. Use BACKUP DATABASE or change the recovery model using ALTER DATABASE.
Server: Msg 3013, Level 16, State 1, Line 1
BACKUP LOG is terminating abnormally.  

来自:Jelly0228, 时间:2003-12-8 9:04:00, ID:2340186
hiyaolee,
   出錯信息是告訴你﹐你的數據庫是處于簡易復原模式﹐所以不允許備份事務日志。將復還模式改為完整或者大量登入就行了﹕
   ALTER DATABASE JELLY
   SET RECOVERY Full  --修改復原模式為完整
   Go
or
   ALTER DATABASE JELLY
   SET RECOVERY Bulk_Logged  --修改復原模式為大量登入
   Go
  對于你的第一個問題﹐為什么沒有備份還可以恢復數據﹐那是因為事務日志中記錄了對數據庫的所有更新操作﹐所以根據日務日志備份就可以恢復數據。

樓主﹐
   對于你在EM中還原時遇到的情況﹐我先測試一下再說~~*^_^*

    

来自:次时代, 时间:2003-12-8 9:21:00, ID:2340254
我现在告诉大家我的恢复过程,希望大家能对些发表各自的意见。
首先声明:
    我的办法是最不好用、最不保险的,但也是在所有恢复办法都不行后的最后一个了。
知识要点:
    数据记录的删除与覆盖:当在数据库中删除记录时被删除的记录不会马上在数据库中消失,而是在记录上打一个删除标志,该记录的所有信息都将存在。如果对数据库进行添加数据操作时会优先使用有删除标志的记录所在的空间。当对数据库时行收缩操作时,这些被删除的记录空间才会被释放出来。你可以作下验证,将一个正在使用的数据库中所有的记录导到另一个有相同结构的数据库中,你会发现导入的数据库比原数据库小很多。
恢复步骤:
    数据文件为 aa.mdf
    1、我用很早以前编写的一个程序把数据库文件aa.mdf中所有的中文和英文过滤出来生成文件aa.txt
    2、文件aa.txt中会出现如“C2003090020501100118632607商储大库利群超市C现金王立顺宋淑霞批发0L”的内容。其中“C20030900205”是单据号,“011”为部门编号,“0011863”为客户编号,“2607”为发票号或单据标志号,“商储大库”为部门名称,“利群超市”为客户名称,“C”为出库方式,“现金”为结算方式,“王立顺宋淑霞”为销售员和制单员,“批发”为出库方式说明。
    3、通过程序对文件aa.txt进行处理,找出如2所示的记录并添加到数据库中,再对其它如“金额”、“成本”字段通过汇总明细库中的信息更新即可。
    这样我恢复了被删除的记录,不过对这种方法我还是不放心,现在正让各工作站进行数据验证,相信再有几天结果就会出来的。
  

来自:Jelly0228, 时间:2003-12-8 15:03:00, ID:2341286
沒有弄出來﹐總是報”指定的STOPAT參數無數”﹐言下之意是時間值不正確﹐懶得研究了.  

来自:次时代, 时间:2003-12-12 9:38:00, ID:2349263
谢谢大粗的帮助。  

来自:次时代, 时间:2003-12-12 9:40:00, ID:2349275
上面有个字打错了。
谢谢大家的帮助。  


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=574149