关闭

如何还原某一个目录下的所有数据库备份文件

发表于:2011-9-14 10:02

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:OK_008 OK_008    来源:51Testing软件测试网采编

  引述

  在工作中,经常为测试或开发部门搭建数据库环境,每一次搭建环境,需要还原某一个目录下的所有数据库备份文件,也就是,一次需要还原一百多个数据库。

  每碰到类似的情况,需要编写一个SQL脚本来实现还原数据库的功能。这里就简单介绍如何编写存储过程来实现,还原某一个目录下的所有数据库备份文件。

  要实现还原某一个目录下的所有数据库备份文件,首先要实现还原某一个目录下的某一个备份文件。真实世界中,只提供数据库备份路径,和备份数据库文件名,及还原到的本地路径。接下来,将讲述以下内容:

  根据备份文件找出数据库名

  根据备份文件找出数据、日志目录列表

  构造还原数据库SQL语句

  还原单个数据库的存储过程代码

  还原多个数据库的存储过程代码(一个目录下)

  ● 根据备份文件找出数据库名

  在还原数据库的开始,我们先要知道把备份数据库文件还原到哪一个数据库上。在真实世界中,我们无法保证备份数据库文件都为"数据库名+.bak"格式 (如:myDB.bak,其中myDB就是数据库名)。通常情况,只知道备份文件,需要知道数据库名,我们可以通过SQL Server提供的T-SQL语句“Restore HeaderOnly”来找出原来的数据库名,简单语法这样:Restore HeaderOnly From

  返回的结果集中,有一列"DatabaseName"描述备份的数据名。通过"DatabaseName"列,就可以找出我们需要的原来数据库名了。

  e.g.

Restore HeaderOnly From Disk = 'E:\DBBackup\dbA2011-09-05.bak'

  【注:】在结果集中, SQL Server 2008/R2 比 SQL Server 2005 多一个列”CompressedBackupSize”。

  ● 根据备份文件找出数据、日志列表

  接下来,我们需要知道备份文件中包含哪些数据、日志文件,及要知道原来的文件路径是什么。要是原来的数据库文件存储路径与新路径不一致,我们需要在”Restore Database …” 里面使用” Move”选项。这里我们可以通过使用SQL Server 提供的T-SQL语句”Restore FileListOnly”,返回数据库和日志文件列表组成的结果集,简单语法这样:Restore FileListOnly From <backup_device>

  e.g.

Restore FileListOnly From Disk = 'E:\DBBackup\dbA2011-09-05.bak'

  【注:】在结果集中, SQL Server 2008/R2 比 SQL Server 2005 多一个列”TDEThumbprint”,应用于显示数据库加密密钥的指纹。

  ● 构造还原数据库SQL语句

  上面两点内容,我们根据备份文件,知道了要还原的数据库名和数据库文件列表,那么,我们基本可以构造出还原数据库的SQL语句了。

  e.g.

  • Restore DataBase dbA  
  •     From Disk='E:\DBBackup\dbA2011-09-05.bak'  
  •     With File=1, 
  •         Move 'dbA' To 'E:\DATA\SQL2008DE01\dbA.mdf'
  •         Move 'dbA_log' To 'E:\DATA\SQL2008DE01\dbA_Log.LDF',Replace,Recovery
  • 31/3123>
    《2023软件测试行业现状调查报告》独家发布~

    关注51Testing

    联系我们

    快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

    法律顾问:上海兰迪律师事务所 项棋律师
    版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
    投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

    沪ICP备05003035号

    沪公网安备 31010102002173号