2、从企业管理器,建一个同名的数据库
3、停止sql
server
4、用原mdf文件覆盖新建库的数据库文件
5、重启sql
server(这时数据库应该是置疑)
6、修改服务器设置:允许对系统目录进行直接修改
sp_configure
'allow
updates',1
reconfigure
with
override
7、将数据库置为紧急状态:
update
master.dbo.sysdatabases
set
status
=
32768
where
name
=
'数据库名'
8、删除新的ldf文件,重建日志:
dbcc
rebuild_log('数据库名',
'f:\数据库名_log_new.ldf')--假设把新日志在f盘
9、update
master.dbo.sysdatabases
set
status
=
16
where
name
=
'数据库名'
10、修改服务器设置:取消
允许对系统目录进行直接修改
sp_configure
'allow
updates',
0
reconfigure
with
override
11、再使用检查工具修复错误
use
[数据库名]
alter
database
[数据库名]
set
single_user
with
rollback
immediate
dbcc
checkdb
('数据库名',REPAIR_ALLOW_DATA_LOSS)
alter
database
[数据库名]
set
multi_user
执行完毕之后,如果还有错误,重复执行11,直到没有错误为止。
如果是 Oracle , 那么还有可能, 使用 Flashback Query 恢复得回来。其他数据库, 就不大清楚了。
下面是一个 Oracle 恢复的例子:
SQL>CREATE TABLE test_fb_table (
2ID int,
3VAL VARCHAR2(10)
4 )
Table created.
SQL>INSERT INTO test_fb_table VALUES (1, 'TEST')
1 row created.
SQL>commit
Commit complete.
假如 数据被错误的删除/更新
需要检索某个时间点上,表原有的数据。
SQL>SELECT TO_CHAR(sysdate, 'yyyy-mm-dd hh24:mi:ss') FROM dual
TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS'
--------------------------------------
2010-11-07 13:01:37
这里删除掉数据。
SQL>delete from test_fb_table
1 row deleted.
SQL>commit
Commit complete.
确认数据已经被删除。
SQL>select * from test_fb_table
no rows selected
方法一:
这里检索出,指定时间点上,指定表的数据情况。
SQL>select * from test_fb_table
2AS OF TIMESTAMP TO_TIMESTAMP('2010-11-07 13:01:37',
3 'yyyy-mm-dd hh24:mi:ss')
ID VAL
---------- --------------------
1 TEST
方法二:
使用 dbms_flashback下面的方法来切换。
SQL>conn system
Enter password:
Connected.
SQL>select * from hr.test_fb_table
no rows selected
SQL>execute dbms_flashback.enable_at_time(-
>TO_TIMESTAMP('2010-11-07 13:01:37','yyyy-mm-dd hh24:mi:ss'))
PL/SQL procedure successfully completed.
SQL>select * from hr.test_fb_table
ID VAL
---------- --------------------
1 TEST
SQL>execute dbms_flashback.disable
PL/SQL procedure successfully completed.
SQL>select * from hr.test_fb_table
no rows selected
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)