zoukankan      html  css  js  c++  java
  • 具体问题解决:分离脚本

      有时候需要从一个服务器转移数据库到另一个。如果打算一下子分离所有数据库,那么下面的脚本就是有用了。
     
    生成分离脚本:
     
    SELECT DISTINCT 'use master;' + Char(10) + 'GO' + Char(10)                 
    + 'ALTER DATABASE [' + CONVERT(VARCHAR(500), Db_name(database_id)) + '] '
    + 'SET SINGLE_USER WITH ROLLBACK IMMEDIATE'
    + Char(10) + 'use master;' + Char(10) + 'GO'
    + Char(10)
    + 'EXEC master.dbo.sp_detach_db @dbname = N'
    + '''' + CONVERT(VARCHAR(500), Db_name(database_id)) + ''''
    + ';' + Char(10)
    + 'GO' + Char(10)
    FROM master.sys.master_files WHERE Db_name(database_id) NOT IN ( 'master', 'model', 'msdb', 'tempdb' )

    这个脚本生成了需要分离数据库的脚本。在where子句中排除了四个系统数据库。

     
     
    附加数据库操作脚本:
     
      下面将生成一个脚本来分离数据库。确保运行在原服务器上。因为一旦你分离数据库,数据库将在原来的服务器上消失。
      脚本基于一个重要假设,假定每个数据库只包含一个数据文件和一个日志文件。如果有数据库实例带有多个数据或者日志文件,还要手动分离。另外,脚本假定源和目标服务器有相同的文件路径。如果日志或者数据文件路径不同,也需要重新替换生成的脚本。
     
    SELECT DISTINCT 'use master;' + Char(10) + 'GO' + Char(10)                 
    + 'CREATE DATABASE [' + CONVERT(VARCHAR(500), Db_name(x.database_id)) + ']'
    + ' ON ' + Char(10) + '( physical_name = N' + ''''
    + x.physical_name + '''' + '),' + Char(10)
    + '( physical_name = N' + '''' + y.physical_name + '''' + ')'
    + Char(10) + ' FOR ATTACH' + Char(10)
    + 'GO' FROM master.sys.master_files x, master.sys.master_files y
    WHERE Db_name(x.database_id) NOT IN ( 'master', 'model', 'msdb', 'tempdb' )
    AND x.database_id = y.database_id AND x.physical_name LIKE '%mdf'
    AND
    y.physical_name LIKE '%ldf'
     
  • 相关阅读:
    solidworks 学习 (二)洗手液瓶
    solidworks 学习 (一)螺丝刀
    tensorflow 2.0 学习(三)MNIST训练
    tensorflow 2.0 学习(二)线性回归问题
    tensorflow 2.0 学习(一)准备
    sscanf linux-c从一个字符串中读进与指定格式相符的数据
    Linux-c glib库hash表GHashTable介绍
    Linux-c给线程取名字
    linux-c getopt()参数处理函数
    golang Linux下编译环境搭建
  • 原文地址:https://www.cnblogs.com/wenBlog/p/5556471.html
Copyright © 2011-2022 走看看