欢迎投稿

今日深度:

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

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


引述

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

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

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

  • 根据备份文件找出数据库名
  • 根据备份文件找出数据、日志目录列表
  • 构造还原数据库SQL语句
  • 还原单个数据库的存储过程代码
  • 还原多个数据库的存储过程代码(一个目录下)

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

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

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

e.g.

  1. 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.

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

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

●构造还原数据库SQL语句

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

e.g.

  1. Restore DataBase dbA  
  2.     From Disk='E:\DBBackup\dbA2011-09-05.bak'  
  3.     With File=1, 
  4.         Move 'dbA' To 'E:\DATA\SQL2008DE01\dbA.mdf'
  5.         Move 'dbA_log' To 'E:\DATA\SQL2008DE01\dbA_Log.LDF',Replace,Recovery 


www.htsjk.Com true http://www.htsjk.com/shujukugl/17753.html NewsArticle 如何还原某一个目录下的所有数据库备份文件(1) 引述 在工作中,经常为测试或开发部门搭建数据库环境,每一次搭建环境,需要还原某一个目录下的所有数据库备份文件,也就是,一...
评论暂时关闭