zoukankan      html  css  js  c++  java
  • 批量还原数据库 SQL Server 2008

    1.如果你够懒,不想一步一步点路径,一步一步选择

    2.如果你连单个备份数据库的存储过程都不想多执行,一般每还原一个需要修改数据库名

    下面的脚本适合你:

     1 /**********************************************
     2     Description:This script help you restore database batch.
     3     Pay attention:You'd better name the database like databaseName+number.
     4     The database name is nessasery.
     5     
     6     This script not perfect,and please make it progress if you want.
     7     
     8     Author:jiangxiaoqaing
     9     Script Date:2013-09-29
    10     Modify history:
    11     
    12 
    13 **********************************************/
    14 
    15 ALTER procedure [dbo].[sp_restoreDBBatch]
    16     --The path your .bak file store
    17     @database_bak_path varchar(200),
    18     --The distination you want your database file store
    19     @database_path varchar(200)
    20 as
    21     begin 
    22         declare @bak_databaseName varchar(200),
    23                 @DynamicSql varchar(500)=null            
    24         
    25         /*Judge the '#tmpTable' object if exists,the #tmpTable store backup
    26          database name and path*/
    27         if (OBJECT_ID('#tmpTable') is not null)
    28         drop table #tmpTable
    29         create table #tmpTable
    30         (
    31             DBName varchar(200)
    32         )
    33         
    34         /*using extended procedure xp_cmdshell to get the path and name*/
    35         set @DynamicSql='cd /d "'+@database_bak_path+'"&&dir /a /b /s *.bak'
    36         insert into #tmpTable exec xp_cmdshell @DynamicSql
    37         
    38         /*If the backup path not exists,make the directory*/
    39         set @DynamicSql='if not exist '+@database_path+' mkdir '+@database_path+''
    40         exec xp_cmdshell @DynamicSql        
    41         
    42         declare bak_DBPathandName cursor
    43         for
    44         select DBName from #tmpTable
    45         open bak_DBPathandName
    46         while @@FETCH_STATUS=0
    47         begin
    48             fetch next from bak_DBPathandName into @bak_databaseName        
    49             declare @s varchar(200)
    50             /*Get the database backup file name,store your specify path*/
    51             set @s= reverse(substring(reverse(@bak_databaseName),0,CHARINDEX('',reverse(@bak_databaseName))))            
    52             /*To get the database name,and tick the number*/
    53             BEGIN
    54                 WHILE PATINDEX('%[0-9]%',@S) > 0
    55                 BEGIN
    56                     set @s=stuff(@s,patindex('%[0-9]%',@s),1,'')
    57                 end
    58                 /*Tick the '.bak' affix*/
    59                 set @s=replace(@s,'.bak','')
    60             end    
    61             /*Backup single database*/    
    62             exec restore_database_proc @bak_databaseName,@s,@database_path        
    63         end
    64         close reachDBName
    65         deallocate reachDBName
    66     end


    Resore single DB:

     1 /*******************************************
     2     Descript:SQL server 2008 backup database.
     3     Author:jiangxiaoqiang
     4     Date:2013-09-26
     5     Modify history:
     6                 
     7 *******************************************/
     8 
     9 ALTER PROCEDURE [dbo].[restore_database_proc] 
    10     @database_bak_path varchar(100),--bak file store path
    11     @database_name varchar(100),--The new database name(Not a LogicalName and PhysicalName)
    12     @database_path varchar(200)--restore new database file store path,the path you want to store data file
    13 AS
    14     --exec( 'RESTORE FILELISTONLY FROM DISK = N''' + @database_bak_path + '''')
    15     --select * from tempdb..sysobjects where name ='#tmp_file'
    16     if OBJECT_ID('tempdb..#tmp_file') is not null
    17     DROP TABLE  #tmp_file
    18 
    19     create table #tmp_file
    20     (     
    21         LogicalName    nvarchar(128),
    22         PhysicalName nvarchar(260),
    23         Type char(1),
    24         FileGroupName nvarchar(128),
    25         Size numeric(20,0),
    26         MaxSize numeric(20,0),
    27         FileId bigint,
    28         CreateLSN numeric(25,0),
    29         DropLSN    numeric(25,0) NULL,
    30         UniqueID uniqueidentifier,
    31         ReadOnlyLSN    numeric(25,0) NULL,
    32         ReadWriteLSN numeric(25,0) NULL,
    33         BackupSizeInBytes bigint,
    34         SourceBlockSize    int,
    35         FileGroupID    int,
    36         LogGroupGUID uniqueidentifier NULL,
    37         DifferentialBaseLSN    numeric(25,0) NULL,    
    38         DifferentialBaseGUID uniqueidentifier,    
    39         IsReadOnly bit,
    40         IsPresent bit,
    41         TDEThumbprint varbinary(32)
    42     )
    43     --Database datafile full path
    44     declare @database_mdf_path varchar(1000)
    45     --Database log file full path
    46     declare @database_log_path varchar(1000)
    47 
    48     --The old database name
    49     declare @database_mdf_oldname varchar(1000)
    50     --The old database old log name
    51     declare @database_log_oldname varchar(1000)
    52 
    53     set @database_mdf_path =  @database_path + '/' + @database_name + '.mdf'
    54     set @database_log_path =  @database_path + '/' + @database_name + '_Log.ldf'     
    55 
    56     --INSERT INTO #tmp_file EXEC ('restore_database_proc N''' + @database_bak_path + '''')
    57     INSERT INTO #tmp_file EXEC ('RESTORE FILELISTONLY FROM DISK = N''' + @database_bak_path + '''')    
    58     set @database_mdf_oldname = (select LogicalName from #tmp_file where Type = 'D')
    59     set @database_log_oldname = (select LogicalName from #tmp_file where Type = 'L')
    60     --select @database_mdf_oldname=LogicalName from #tmp_file where Type = 'D'
    61     
    62     --select @database_log_oldname =LogicalName from #tmp_file where Type = 'L'
    63     exec(
    64     '
    65     RESTORE DATABASE ' + @database_name  +
    66     '
    67     FROM DISK = ''' + @database_bak_path + '''' + 
    68     '
    69     WITH 
    70     MOVE ''' + @database_mdf_oldname + ''' TO ''' + @database_mdf_path + ''',' +
    71     '
    72     MOVE ''' + @database_log_oldname + ''' TO ''' + @database_log_path + ''''
    73     )      
  • 相关阅读:
    会话状态服务器解决方法
    让笔记本在插上外置鼠标时触摸板自动关闭
    “检测到有潜在危险的 Request.Form(QueryString) 值”的解决方法
    SQL Server2008不能登录解决方法
    SqlHelper
    修改IE查看源代码编辑器
    由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例解决办法
    性能测试用户模型(二):用户模型图
    索引帖:性能测试新手误区系列
    性能测试用户模型(三):基础数据分析、场景数据
  • 原文地址:https://www.cnblogs.com/jiangxiaoqiang/p/3346308.html
Copyright © 2011-2022 走看看