zoukankan      html  css  js  c++  java
  • 批量分离附加迁移数据库

    set nocount on

    USE master

    IF exists(SELECT 1 from tempdb.sys.objects where object_id=object_id('tempdb..#temp'))

    drop TABLE tempdb..#temp

     

    SELECT db_name(database_id) as dbname,physical_name physical_name

    INTO #temp

    from sys.master_files

    where db_name(database_id) in(

    SELECT name FROM sys.databases

    where database_id>4

    AND name NOT IN(

        select name from sys.databases where name not in ('master','tempdb','model','msdb','TravelMoneyDB') and state not in (2,1) 

        --SELECT dbname from ConfigDB..AutoBackupRestoreSetting where IsRestore='T'

    )

    )

     

     

    --detach

    SELECT distinct 'EXEC master.dbo.sp_detach_db @dbname = N'''+dbname+''''

    from #temp

     

    --attach

    while exists(SELECT 1 from #temp)

    begin

        DECLARE @dbname varchar(100),@physical_name varchar(1000)

        DECLARE @sql varchar(max)

        DECLARE @sql1 varchar(max)=''

            begin

                SELECT  top 1 @dbname=dbname from #temp

                SELECT @sql='CREATE DATABASE '+@dbname+' ON '

                SELECT @sql1=@sql1+char(10)+'( FILENAME = N'''+physical_name+''' ),' from  #temp

                where dbname=@dbname

                select @sql=@sql+@sql1

                select @sql=left(@sql,len(@sql)-1)+char(10)+'FOR ATTACH'+char(10)+'GO'

                print '----------'

                print @sql

                delete FROM #temp where dbname=@dbname

            end    

    end

     

    --将数据库还原成原来状态 offline 或 readonly

    select 'alter database '+cast (name as nvarchar(32))+' set '+case when (is_read_only = 1 and state=0 )then 'read_only' else state_desc end ,b.state
    from
    (
    select distinct db_name(b.database_id) as name,a.state,a.is_read_only,a.state_desc from sys.databases a join sys.master_files b on a.name=db_name(b.database_id)
    ) b
    where b.name not in ('master','tempdb','model','msdb','TravelMoneyDB') and state not in (2,1)
    and b.name not in
    (
    select name from sys.databases where state=0 and is_read_only =0
    )
    order by state desc

    --standy模式  ,可以读取,也可以继续restore log

    restore database  CarOrderIDDB  with standby='e:dail_log.bk' 

    restore database CarOrderIDDB  with norecovery

  • 相关阅读:
    mysql重置id
    mysql数据类型
    手把手教你新建一个Vue项目
    用markdown开始优雅的写作
    源码阅读心得
    断点调试-程序员的必修课
    代码还是短点好!
    GoJS v1.8.27 去水印方法
    VS code不用集成终端如何修改并推送分支?
    LeetCode日拱一卒
  • 原文地址:https://www.cnblogs.com/justdba/p/5584323.html
Copyright © 2011-2022 走看看