从MDF文件恢复SqlServer数据库数据库
“XPY616”通过精心收集,向本站投稿了7篇从MDF文件恢复SqlServer数据库数据库,下面给大家分享从MDF文件恢复SqlServer数据库数据库,欢迎阅读!
篇1:从MDF文件恢复SqlServer数据库数据库
今天重装机器,竟然忘记备份刚刚在Sql Server下刚刚建好的 robot 数据库 (有一些数据已经加进去了),把C盘格式化了,幸好数据文件MDF因为此前机器C盘空间不足放在别处,于是就开始考虑如何用这个MDF文件来恢复数据库。 找了好些资料,这种情况的还没有,在
今天重装机器,竟然忘记备份刚刚在Sql Server下刚刚建好的robot数据库(有一些数据已经加进去了),把C盘格式化了。幸好数据文件MDF因为此前机器C盘空间不足放在别处,于是就开始考虑如何用这个MDF文件来恢复数据库。
找了好些资料,这种情况的还没有,在delphibbs看到介绍sp_detach_db,sp_attach_single_file_db存储过程的资料,正是我需要的东西,
于是经过实践通过如下步骤终于恢复了robot数据库:
1.新建同名数据库。
2.删除其日志文件robot_Data.LDF,不删除后边的过程执行通不过。
3.把robot数据设置为脱机。
4.在在查询分析器中以超级用户登入,执行以下存储过程,必须以超级用户登入,这是系统级存存处过程。
EXEC sp_detach_db @dbname = 'robot'
EXEC sp_attach_single_file_db @dbname = 'robot', @physname = 'E:WebDemo obot_Data.MDF'
5.把robot数据设置为联机。
6.刷新数据库,表出来了,数据完好
原文转自:www.ltesting.net
篇2:设置密码保护的SqlServer数据库备份文件与恢复文件的方法
最近更 新
sqlserver 锁表语句分享
使用FORFILES命令来删除SQLServer备份的批
N字符在Sql Server字段类型中的重要性概述
SQL Server 查询处理中的各个阶段(SQL执行
Sql中将datetime转换成字符串的方法(CONV
按日期选择最晚日期与最早日期对应的数的
sql函数实现去除字符串中的相同的字符串
SQL学习笔记一SQL基础知识
MSSQL / 日志压缩清理方法小结
SQL server高级应用 收藏版
热 点 排 行
SQL Server 2008图文安装教程
SQL Server 安装图解教程(附
sqlserver中distinct的用法(不重
SQL Server导入、导出、备份数据
SQL语句去掉重复记录,获取重复记
SQL Server数据库入门学习总结
SQL Server错误代码大全及解释(
sql convert函数使用小结
sql 时间函数 整理的比较全了
用SQL语句添加删除修改字段、一些
篇3:系统从oracle版本转化为sqlserver版本数据库教程
oracle|server|sqlserver
Waterxp 从oracle版本转化为sqlserver版本1,系统安排
为了oracle版本和sqlserver版本能很方便的转化,也为了两个版本能同步修改,特别是业务逻辑层,现决定如下:
A,两个版本的业务逻辑层都放在source目录下。在该目录下有两个目录:
sql 和ora。这两个目录有三个文件:
common.pbl ,water_modi.pbl,dw_version.pbl。
这三个 文件里面绝大部分是数据窗口,主要是因为sql server 和oracle的语法有差别。如果只是因为数据窗口有双引号在sql server里不能用,那么把数据窗口的select语法的字段引号去掉即可,因为没有引号的select语句在sql server和oracle下面都是可用的。修改的过程中注意update属性。
B,不同的数据库将使用不同的目录。
2,系统环境的建立
每台机器上建立下面的磁盘映射:
P 指向 \\oraservr\p237
V 指向 \\oraservr ql237 或者是 \\oraserver\ora237
源代码在 \\oraserver\code\water237 ource 里面。
P盘是肯定要有的, V盘由使用什么版本决定。
3,源代码的修改
业务层的修改尽可能的在源代码处,因为这样修改能让两个版本同时修改。
P盘是类库可以不需要修改。
V盘里的数据窗口都需要改。
改sql237里面的数据窗口,要修改和要注意的地方:
替换的方法
oracle里面使用 sql server 里面使用
to_char(readingdate,’yyyymm’) convert(char(6),readingdate,111)
to_char(readingdate,’yyyy/mm’) convert(char(7),readingdate,112)
decode( , , , ,) case when then end 或者 isnull(x,0)
左右连接 (+) left outer join
修改过程中要注意数据窗口的update属性,
4,工作计划
4,1先修改sql237目录下的三个pbl里面的数据窗口的语法。为了照顾数据窗口的update属性,建议使用edit source的方法,而且select语法字段的引号在sql server版本建议去掉。使用pb的replace功能即可。
4,2 修改某些数据窗口的内嵌式sql 的语法。因为有一些内嵌式sql 也使用了decode ,或者是to_char(),这些语法在sqlserver也是必须代替的。
修改方法:
if gs_database = ‘ORACLE’ then
………………decode()……………;
else
…………………case when then end ………..;
end if
4,3 最后的工作是测试。这是最繁琐的最重要的。在测试的过程会发现有一些数据窗口在sql server不能用:修改方法是将字段的引号去掉或者是移到sql 和ora目录里面的dw_version.pbl文件里面,在那里进行修改。
4,4主要的数据表都已经迁移过来了,名字一样,可能在sql server有一些表的字段不够那么请重新导入一次。主要的存储过程都已经翻译过来,名字不一样。在测试的过程会发现有一些视图没有存在,那么请从oracle把语法拷贝出来,在sql server查询分析器里生成之。
篇4:从日志中恢复SQL Server数据库数据库教程
server|恢复|数据|数据库
上周有同事对数据库进行了误操作,问我可不可以回到前一天的状态,恢复数据库的问题以前学DB2的时候遇到过,那时我想SQL Server中应该也会有方法把数据库恢复到前一天的。我的机器上ERP的数据库日志从800M增张到了2G,Log增长得这么快,想必是把所有的操作都记录上了。网上找了几天的资料,SQL Server Books Online也看了一个星期,没有找到答案,CSDN上找到一篇从日志恢复数据库的文章同SQL Server Online上面的说明一样写的不清不楚。问了几个公司里资历深一点的同事,都没有找到答案,昨天早晨6点半的时候醒来,想起DB2中的恢复模型,恢复的数据库应该是在恢复点之前的数据库,于是早早就起来,来到办公室,实验了一次,以为会成功,没想到还是没有成功恢复,很沮丧。
研究这个问题都一个星期了,仍然没有解决,整个星期五一天都不好受,想起了Boy,一个新人训时跟我们开交流会的RD leader,
结果还是没有答案,不过Boy很热情,把这个问题转发给了我们的DBA Running,Running好象是搞oracle的,sql server中的这种恢复也不熟悉,不过他说:多从原理方面考虑。
没辄,只好到Microsoft的 上面去找一下,溜达了一圈,有一篇文章提到,最好不要使用Auto close,auto shrink选项,我想可能是这两个选项的问题吧。于是周五下午的时候,又试了一次,SQL Query Analyzer里面运行restore database等了半天都没反应,我只好祈祷能够恢复成功,结果并不如人愿,出来了红色的错误信息,说是数据库存取冲突,原来是SQL Server Enterprise Manager也在使用数据库,于是关了Enterprise Manager,果然顺利恢复了数据库,高兴地快要跳起来。
工作几个月,常常都感觉到理论方面的基础知识不够丰富,一些帮助文档看不懂,或者运行不了的时候,常常都是因为理论基础。一些问题想要去解决常常要花很长的时间,所以以后还是从基础理论入手学习数据库。
篇5:恢复整个SQL server数据库还是只恢复错误文件组
这有一个具体例子:如果你有一个单个的出现问题的文件,这个文件有50MB大小,而你的整个数据库 运行着大约有几十亿的字节,这样的话如果能恢复单个失败文件的话就显的非常有意义。这样的事情发生 的一个情景是当文件或者文件组在单独的驱动器上,而驱动器出现了问题。通常,仅仅恢复单个文件或者 文件组会使总的停止时间缩短,因为它明显减少了需要恢复的总的数据量。
现在,为什么你不选择这么做呢?这有一些原因:
你需要有事务日志备份。如果你想从备份中恢复一个文件或者文件组,你同时也需要恢复与它们一起 创建的事务记录备份,从而使整个数据库能够处于一个一致的状态。在SQL Server 和 中,你 需要使用Full Recovery或者Bulk-Logged Recovery模式(也就是说不是Simple Recovery)来使它成为可能 。我应该指出SQL Server的实现者们并没有尽他们的努力来完成判断从上一次备份一个文件或者文件组是 否已经被修改了的功能。如果没有被改变,那么事务记录是没有什么必要的。但是,总的来说,还是需要 事务记录备份的,如果你现在还没有一个备份事务记录的恢复或者备份计划,那么现在就创建一个吧。
在要恢复的文件或者文件组中的表格与数据库中其他的表格之间的数据不一致性成为需要考虑的一个 问题。如果你有相互之间依赖的表格,并且这些表格没有被存储在相同的物理文件或者文件组中(这有时 是不可避免的),仅仅恢复一个文件或者文件组可能会导致它与数据库其他部分不同步。例如,你有一个 表格被另一个表格用JOIN关联,并且这个JOIN使用了一个视图和存储过程,这时仅仅恢复一个而不恢复另 一个可能会有问题。
当你在数据库中只有一个文件组。如果你的所有的数据仅仅存储在一个文件或者文件组中,并且它又 不是一个特别大的数据库时,会发生什么事情呢?那时恢复一个文件或者文件组的努力就变的没有什么意 义了,
选择性的恢复文件或者文件组的主要原因是当恢复数据库很大,以至于恢复整个数据库的代价很大的 时候,使得对数据库的局部损坏的恢复成为可能。在一个非常小的轻量级的数据库里,和nonproduction 系统中,或者数据库中只有一个文件组的时候,实现选择性的恢复功能就显的没有太大的意义,因为这时 恢复整个数据库和恢复单个的文件或者文件组没有什么太大的区别。
我发现大多数时候当人们想使用文件或者文件组恢复时,他们实际上是想把一个特定的表格恢复到先 前的一个点的时刻的状态。这在SQL Server中不是一个显式支特的特性,但是存在这么做的方法,倘若你 不介意由于采用这种方法而需要手工的来管理可能产生的不一致(就想上面#2所说的)。如果你手边就有一 个数据库备份的话,你可以简单的恢复那个备份,仅仅把它看作是相同数据库的不同名字的实例。接着, 通过事务记录把数据库向前滚动到指定的点(如果需要这样做的话),然后手工的把当前的数据库拷贝到目 标数据库中。
我自己已经实验过这种方法几次,但是仅仅只有一个表格没有与相同数据库中的其他的表格有很大的 关联。我的例子涉及了一个包含了留言版系统的聊天网站。我不得不经常恢复一些在留言版上被意外删除 的消息,这些是自包含的:从留言版表格的数据产生的唯一的JOINs是外部的而不是内部的。因此,我可 以随意的更新表格因为我知道我不会让那个表格与其他表格不同步的。
在SQL Server 2000和它更高的版本中,当你做一个RESTORE操作的时候你可以使用PARTIAL子句,从而 使仅仅需要的文件组数据被恢复。这作为一个时间和空间上的节约开销的措施是非常有用的:你不需要进 行繁重的恢复所有数据的工作,而仅仅只需要对一个表格进行操作。而且很可能也没有足够的空间来进行 完全的恢复操作。
篇6:rman恢复案例――丢失全部控制文件的恢复数据库教程
恢复|控制
1.1. 丢失全部控制文件的恢复1.1.1. 模拟控制文件丢失RMAN>shutdown abort;
Oracle 例程已关闭
RMAN>host;
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985- Microsoft Corp.
C:\>del D:\oracle92\test1\CONTROL*.CTL
C:\>dir D:\oracle92\test1\CONTROL*.CTL
驱动器 D 中的卷没有标签,
卷的序列号是 644D-03D9
D:\oracle92\test1 的目录
找不到文件
C:\>exit
主机命令完成
RMAN>
1.1.2. 设置ORACLE_SID
RMAN>exit;
恢复管理器完成。
C:\>
C:\>set ORACLE_SID=TEST1
C:\>ECHO ORACLE_SID
ORACLE_SID
C:\>
1.1.3. 登陆RMAN
C:\>rman
恢复管理器: 版本9.2.0.1.0 - Production
Copyright (c) 1995, , Oracle Corporation. All rights reserved.
RMAN>connect target lunar/lunar@test1
已连接到目标数据库 (未启动)
RMAN>connect catalog rman/rman@rman
连接到恢复目录数据库
RMAN>
1.1.4. 在RMAN中设置DBID
使RMAN知道需要查找哪一个数据库的spfile
(必须在数据关闭的情况下设置DBID)
RMAN>set DBID=910599446
正在执行命令: SET DBID
RMAN>
1.1.5. 将数据库启动到nomount状态
RMAN>startup nomount;
已连接到目标数据库 (未启动)
Oracle 例程已启动
系统全局区域总计 101784276 字节
Fixed Size 453332 字节
Variable Size 75497472 字节
Database Buffers 25165824 字节
Redo Buffers 667648 字节
RMAN>
1.1.6. 恢复控制文件1.1.6.1. 使用恢复目录恢复
如果使用了恢复目录,可以简单的执行restore controlfile;
RMAN>restore controlfile;
启动 restore 于 07-10月-04
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=13 devtype=DISK
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在恢复控制文件
输出文件名=D:\ORACLE92\TEST1\CONTROL01.CTL
通道 ORA_DISK_1: 已恢复备份段 1
段 handle=D:\RMANTEST\C-910599446-1007-00 tag=null params=NULL
通道 ORA_DISK_1: 恢复完成
正在复制控制文件
输出文件名=D:\ORACLE92\TEST1\CONTROL01.CTL
输出文件名=D:\ORACLE92\TEST1\CONTROL02.CTL
输出文件名=D:\ORACLE92\TEST1\CONTROL03.CTL
完成 restore 于 07-10月-04
RMAN>
1.1.6.2. 不使用恢复目录恢复(使用自动备份的控制文件恢复)
如果没有使用恢复目录,可以从指定的控制文件自动备份的路径恢复控制文件
RMAN>run{
2> set controlfile autobackup format for device type disk to
3>'D:\RMANTEST\%F';
4>restore controlfile from autobackup;
5>}
正在执行命令: SET CONTROLFILE AUTOBACKUP FORMAT
启动 restore 于 07-10月-04
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=13 devtype=DISK
通道 ORA_DISK_1: 寻找以下日期的自动备份: 20041007
通道 ORA_DISK_1: 已找到的自动备份: D:\RMANTEST\c-910599446-20041007-00
通道 ORA_DISK_1: 从自动备份复原控制文件已完成
正在复制控制文件
输出文件名=D:\ORACLE92\TEST1\CONTROL01.CTL
输出文件名=D:\ORACLE92\TEST1\CONTROL02.CTL
输出文件名=D:\ORACLE92\TEST1\CONTROL03.CTL
完成 restore 于 07-10月-04
RMAN>host;
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:\>dir D:\oracle92\test1\CONTROL*.CTL
驱动器 D 中的卷没有标签,
卷的序列号是 644D-03D9
D:\oracle92\test1 的目录
2004-10-07 15:18 1,630,208 CONTROL01.CTL
2004-10-07 15:18 1,630,208 CONTROL02.CTL
2004-10-07 15:18 1,630,208 CONTROL03.CTL
3 个文件 4,890,624 字节
0 个目录 10,527,322,112 可用字节
C:\>exit
主机命令完成
RMAN>
1.1.6.3. 析取控制文件1.1.6.3.1. 从恢复目录中析取控制文件
在数据库打开的时候,可以析取控制文件,如下面的例子是从恢复目录中析取控制文件,并保存到d:\test_ctl.ora 。
RMAN>restore controlfile to 'd:\test_ctl.ora';
启动 restore 于 07-10月-04
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在恢复控制文件
输出文件名=D:\TEST_CTL.ORA
通道 ORA_DISK_1: 已恢复备份段 1
段 handle=D:\RMANTEST\C-910599446-20041007-00 tag=null params=NULL
通道 ORA_DISK_1: 恢复完成
完成 restore 于 07-10月-04
RMAN>
1.1.6.3.2. 从自动备份的控制文件中析取控制文件
下面的例子是从自动备份的控制文件中,析取控制文件到的的d:\
RMAN>run{
2>set controlfile autobackup format for device type disk to
3>'D:\RMANTEST\%F';
4>restore controlfile to 'd:\test_ctl.bak' from autobackup;
5>}
正在执行命令: SET CONTROLFILE AUTOBACKUP FORMAT
启动 restore 于 07-10月-04
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 寻找以下日期的自动备份: 20041007
通道 ORA_DISK_1: 已找到的自动备份: D:\RMANTEST\c-910599446-20041007-00
通道 ORA_DISK_1: 从自动备份复原控制文件已完成
完成 restore 于 07-10月-04
RMAN>
1.1.7. Mount数据库
RMAN>alter database mount;
数据库已加载
RMAN>
1.1.8. 恢复数据库
RMAN>recover database;
启动 recover 于 07-10月-04
使用通道 ORA_DISK_1
正在开始介质的恢复
存档日志线程 1 序列 16 已作为文件 D:\ORACLE92\TEST1\REDO03.LOG 存在于磁盘上
存档日志文件名 =D:\ORACLE92\TEST1\REDO03.LOG 线程 =1 序列 =16
完成介质的恢复
完成 recover 于 07-10月-04
RMAN>
1.1.9. Open resetlogs数据库
RMAN>alter database open resetlogs;
数据库已打开
在恢复目录中注册的数据库的新实体化
正在启动全部恢复目录的 resync
完成全部 resync
RMAN>
篇7:如何恢复MYSQL实体文件MYI,MYD到数据库中数据库教程
从MYSQL备份下来的MYI,MYD等文件,怎么样才能导入数据库中呢?
有mysql的*.MYD,*.myi,*.frm文件如何恢复到另一个数据库(windows系统)
其实很简单,只要把 这些文件复制到 MYSQL的安装目录 /DATA/数据库名/下面,然后重启一下MYSQL就可以.
如果你的MYSQL在windows下安装为服务的话,通过下面的命令就可以实现重启.
net stop mysql
net start mysql
【从MDF文件恢复SqlServer数据库数据库】相关文章:
1.系统从oracle版本转化为sqlserver版本数据库教程
2.如何修复SQLSERVER 数据库置疑之(二)数据库教程
3.数据库应用简历
8.数据库综合练习






文档为doc格式