Chinaunix首页 | 论坛 | 博客
  • 博客访问: 534618
  • 博文数量: 184
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 2490
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-09 11:34
文章分类

全部博文(184)

文章存档

2011年(1)

2010年(2)

2009年(12)

2008年(169)

我的朋友

分类: 数据库开发技术

2008-06-09 12:38:18

SQLServer数据库的备份和还原详解- -
1. 基本概念:
mdf文件:SqlServer数据库的主数据文件
ldf文件:SqlServer数据库的日志文件
SQL Server管理的每个数据库都对应一个mdf文件和一个ldf文件。当SQL Server服务处于开启时,这些文件是无法删除的。
用SQL Server 企业管理器,单击某个数据库,选择右键菜单中的“属性",从弹出对话框的“数据文件”和“事务日志”标签页中可以查看这个数据库对应的mdf文件路径和ldf文件路径。

2. 用SQL Server 企业管理器备份和还原数据库:
例如,备份数据库到可移动存储介质,然后还原到另一台机器上,步骤如下:
备份
单击要备份的数据库,从右键菜单选择“所有任务->备份数据库”。
选择“完全备份”,删除“备份到”列表框中的现有内容,然后“添加”;弹出“选择备份目的”对话框,“文件名”就是你要得到的备份文件的存放路径。选好后确定,这时“备份到”列表框中出现你选择的目的文件路径。
因为没有重名文件,“追加”或“重写”选项的效果是一样的,不用管。选中它,确定,等待备份完成。完成后在你指定的路径下将看到你备份的文件,注意该文件默认没有后缀名。
备份文件还有很大的压缩空间,一般一个40多M的备份文件用winRAR压缩后只有4M左右,作为邮箱附件也没有问题。
还原
将备份文件放到一个便于管理的文件夹下,例如你的数据库叫“test”,可以建立一个叫“e:\db_bak\test\”的文件夹。
从SQL Server 企业管理器单击“数据库”,选择“新建数据库...”,起名“test”,确定。看到该数据库出现在数据库列表中,里面只有一些系统tables。注意新建数据库默认的mdf文件和ldf文件都会被放在SQL Server安装目录下的子目录“MSSQL\data\”中,文件名与数据库名称相同。
单击该数据库,从右键列表中选择“所有任务->还原数据库”。弹出“还原数据库”对话框。
选择还原方式:“从设备”,单击“选择设备”弹出“选择还原设备”对话框。选择“还原自磁盘”。“添加...”,“文件名”中填入你的备份文件路径,例如“e:\db_bak\test\test”,确定。
回到“还原数据库”对话框后,在“选项”中勾选“在现有数据库上强制还原”(因为要改变“新建数据库”时默认创建的mdf文件和ldf文件)。然后在下面“移至物理文件名”栏中填写你想将该数据库的mdf文件和ldf文件的保存路径。注意如果路径不存在或者与已有文件名冲突,后面的备份过程中将报错。为了便于管理,建议将mdf和ldf文件的路径设置为和备份文件一致,例如“e:\db_bak\test\test_data.mdf”和“e:\db_bak\test\test_log.ldf”。
确认,开始还原。还原结束后刷新该数据库的tables列表,将看到和备份数据库一样的结构和数据,说明还原成功!
这时查看数据库属性,可以看到mdf文件和ldf文件都换成了你设置的文件路径。原来的mdf和ldf文件同时被物理删除。

3. 用mdf文件和ldf文件还原数据库
如果你有原数据库的mdf和ldf文件,可采用如下办法还原:
在SQL Server 企业管理器中单击数据库,从右键菜单选择“所有任务->附加数据库”。
在弹出的对话框中指定mdf文件路径,显示验证通过,确定,一切OK!
注意用这种方法要求两个文件缺一不可,文件名不曾改变,并且要在同一目录下,否则验证通不过。

4. 用mdf文件还原数据库
步骤如下:
1、新建一个同名数据库。随便取个名字也行,例如new。
2、修改服务器设置:在“SQL Server 属性(配置)”对话框的“服务器设置”tab中,允许多系统目录进行直接修改(否则第6步不能执行)
3、停止SQL Server(否则无法替换mdf文件)
4、用原mdf文件覆盖新建库的数据库文件,同时删除ldf文件。
例如原mdf文件叫做“old_data.mdf”,那么先删除new_data.mdf和new_log.ldf;然后将old_data.mdf文件拷贝到该目录下;再将old_data.mdf 改名为 new_data.mdf 。
5、重启SQL Server(这时数据库应该是“置疑”
6、将数据库置为紧急状态:update master.dbo.sysdatabases set status = 32768 where name = dbname
7、重建日志:dbcc rebulid_log('dbname', 'logfile') (可能不需要这一步。)
8、数据库重新启动(这是数据库应该是“紧急状态”),然后再还原数据库状态用以下语句
update master.dbo.sysdatabases set status = 16 where name = dbname

如果数据库对应的mdf和ldf文件丢失,在企业管理器中整个服务器会显示“无项目”
将mdf文件拷贝到原目录下,但没有ldf文件,在企业管理器中该数据库会显示“置疑“
阅读(3081) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~