Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将具有用户、架构和角色的所有数据库从一台服务器移动/复制到另一台服务器_Sql_Sql Server_Database_Sql Server 2008 - Fatal编程技术网

Sql 如何将具有用户、架构和角色的所有数据库从一台服务器移动/复制到另一台服务器

Sql 如何将具有用户、架构和角色的所有数据库从一台服务器移动/复制到另一台服务器,sql,sql-server,database,sql-server-2008,Sql,Sql Server,Database,Sql Server 2008,我需要将所有数据库(仅5个)从一台服务器移动/复制到另一台服务器。我知道如何进行备份和恢复,但我还需要移动数据库的所有信息,包括用户、架构等。一般来说,复制数据库有两种可能: 1备份恢复 在这种情况下,您会遇到一些问题,主要是将数据库移动到新服务器后,用户可能无法登录到新服务器。此处提供了此问题的解决方案: 2它只是将数据库文件复制(或移动)到另一台服务器 关于每种方法的优缺点,您可以在此处阅读一般来说,复制数据库有两种可能性: 1备份恢复 在这种情况下,您会遇到一些问题,主要是将数据库移动到

我需要将所有数据库(仅5个)从一台服务器移动/复制到另一台服务器。我知道如何进行备份和恢复,但我还需要移动数据库的所有信息,包括用户、架构等。

一般来说,复制数据库有两种可能:

1备份恢复 在这种情况下,您会遇到一些问题,主要是
将数据库移动到新服务器后,用户可能无法登录到新服务器。
此处提供了此问题的解决方案:

2它只是将数据库文件复制(或移动)到另一台服务器


关于每种方法的优缺点,您可以在此处阅读

一般来说,复制数据库有两种可能性:

1备份恢复 在这种情况下,您会遇到一些问题,主要是
将数据库移动到新服务器后,用户可能无法登录到新服务器。
此处提供了此问题的解决方案:

2它只是将数据库文件复制(或移动)到另一台服务器

关于每种方法的优缺点,您可以在这里阅读

  • 右键单击数据库
  • 点击任务
  • 单击生成脚本
  • 完成向导并选择您的表
  • 在“选项”页面上,单击“高级”按钮(它就在那里,只是不太显眼)
  • 更改“将数据类型转换为脚本”选项
  • 可以选择编写数据和登录的脚本(大量其他内容)。它很方便

    下面的脚本将生成一个脚本,用于在所有数据库上添加所有角色

    declare @selectStatement varchar(1000)
    
    set @selectStatement = 'Use ?;SELECT ''USE ?''; SELECT ' + '''EXECUTE sp_AddRoleMember ''''' + ''' + roles.name + '''''''+','''''+''' +  Replace(users.name,''DOMAINA'',''DOMAINB'') + ''' + '''''''
         from sys.database_principals users
        inner join sys.database_role_members link
        on link.member_principal_id = users.principal_id
       inner join sys.database_principals roles
         on roles.principal_id = link.role_principal_id'
    
                                --where users.name like ''%%'''
    
                    EXEC sp_MSForEachDB @selectStatement;
    
  • 右键单击数据库
  • 点击任务
  • 单击生成脚本
  • 完成向导并选择您的表
  • 在“选项”页面上,单击“高级”按钮(它就在那里,只是不太显眼)
  • 更改“将数据类型转换为脚本”选项
  • 可以选择编写数据和登录的脚本(大量其他内容)。它很方便

    下面的脚本将生成一个脚本,用于在所有数据库上添加所有角色

    declare @selectStatement varchar(1000)
    
    set @selectStatement = 'Use ?;SELECT ''USE ?''; SELECT ' + '''EXECUTE sp_AddRoleMember ''''' + ''' + roles.name + '''''''+','''''+''' +  Replace(users.name,''DOMAINA'',''DOMAINB'') + ''' + '''''''
         from sys.database_principals users
        inner join sys.database_role_members link
        on link.member_principal_id = users.principal_id
       inner join sys.database_principals roles
         on roles.principal_id = link.role_principal_id'
    
                                --where users.name like ''%%'''
    
                    EXEC sp_MSForEachDB @selectStatement;
    

    我建议使用红门的来完成这项任务。我花了一点钱,但每一分钱都值。请注意,SQL Compare不会迁移物理数据库,而只迁移数据库的内容。

    我建议使用Red Gate进行此任务。我花了一点钱,但每一分钱都值。请注意,SQL Compare不会迁移物理数据库,仅显示数据库的内容。

    您运行的是哪个版本的SQL Server?您运行的是哪个版本的SQL Server?移动登录似乎很复杂此选项移动登录似乎很复杂,但此选项不会添加新创建的不可知数据库的登录。您是否选择了为登录编写脚本的选项。你说的是安全级别的登录吗?我也有一个脚本来生成它。是的,我说的是安全级别登录,在上面的脚本中,每个
    都用括号括起来(即
    [?]
    )支持包含点等内容的数据库名称。但此选项不会添加新创建的登录名,而这些登录名与数据库无关。是否选择此选项为登录名编写脚本。你说的是安全级别的登录吗?我也有一个脚本来生成它。是的,我说的是安全级别登录。在上面的脚本中,每个
    周围都用括号(即
    [?]
    )来支持包含点等内容的数据库名。还有。。。针对具有相同条件(移动数据库、角色、模式、USRE等)(全部!)的postgres的解决方案可能
    pg_dumpall
    ?但是如果没有文件,就直接从serverA到serverB。有可能吗?还有。。。针对具有相同条件(移动数据库、角色、模式、USRE等)(全部!)的postgres的解决方案可能
    pg_dumpall
    ?但是如果没有文件,就直接从serverA到serverB。有可能吗?