10

我在一家不到 50 人的相对较小的公司工作,我可能是我们拥有的最接近 DBA 的人……我实际上是一名程序员,但这无关紧要。我们有SQL Server 2000大约100 个不同的数据库。几乎所有这些都具有关联的 SQL 登录名,并且该登录名与DB_OWNER特定数据库的数据库角色相关联。我们还有一些设置为DB_DATAREADER数据库角色的登录名。

我们购买了一台全新的机器(目前是一台 12 岁的机器,担心硬件故障可能会导致我们的业务在不可接受的时间内倒闭)。我们不会升级 SQL Server 版本。我们将坚持2000。

我的问题是最简单的方法是什么。我的想法是分离所有数据库,将它们复制到新机器上,然后重新附加每个数据库。我将保持机器名称和 IP 相同,并在完成后删除旧服务器,因此无需修改任何连接字符串。这似乎并没有那么糟糕,并且可以在周末轻松完成。我对这种方法的问题是,在我这样做之后,我需要从数据库中删除用户,然后重新创建login使用用户名/密码,然后为每个用户分配适当的角色。我只在这里 5 年,我没有每个特定数据库和程序正在使用的所有可能的用户名/密码。我不想破坏任何现有的程序,也不想去每一台机器上更新它……或者甚至可能不得不找到旧的源代码并重新编译……是的,我们的一些遗留的东西有用户名/密码硬编码在源代码:(。

所以我想主要问题是script我可以在现有服务器上运行的一个,它将生成一个脚本以在新机器上运行以设置现有的logins, usersroles使用与以前相同的用户名/密码?

如果有更简单的方法将 sql server 实例从一台机器转移到另一台机器;我全是耳朵。

仅供参考,我们已尝试从现有服务器创建 VHD 以在虚拟机中使用,但已经耗尽了该路由。我们永远无法让机器启动进入 Windows。认为这是驱动程序问题。

4

4 回答 4

4

除非您在目标计算机上运行 64 位版本的 SQL Server,否则第一条评论中提供的链接应该允许您成功传输登录名。

该链接中标题为“在不同版本的 SQL Server 之间传输登录名和密码的完整解决方案”的部分为您提供了实现目标的分步过程。

尽管这样做的风险很大,但您始终可以使用诸如Norton Ghost之类的工具创建现有服务器驱动器的映像,然后在新硬件上恢复该映像。

我在从传统驱动器迁移到固态驱动器时完成了此操作,尽管花费了很长时间(几个小时),但它工作得很好。当然,如果您要更改操作系统,这种方法将不起作用,并且由于硬件和驱动程序的差异可能无法正常工作。

它肯定会做更多的工作,但是这些类型的升级让您有机会纠正一些使您难以将数据库服务器迁移到新安装的问题(例如:硬编码凭据等) . 如果您有能力、时间和愿望来纠正这些问题,那么这样做可能是值得的。

于 2012-08-28T23:35:39.580 回答
3

我认为您可以关闭服务器,然后将所有与数据库相关的文件复制到新服务器并在那里重新启动新的 sqlserver,让它使用这些复制的文件。尽管http://www.sqlservercentral.com/Forums/FindPost959329.aspx在此之外找不到更多

此链接为您提供有关如何操作的支持意见http://support.microsoft.com/kb/314546

考虑到VHD路线,你是否也尝试过竞品?你可以试试 VMWare,我听说过它的好消息,它可能会在其他人失败的地方成功。http://www.vmware.com/nl/products/datacenter-virtualization/vsphere-hypervisor/overview.html

于 2012-08-23T15:44:10.677 回答
2

自从我破解 SQL 2000 以来已经很久很久了……但它是可破解的,但不适用于 2005 年及更高版本。以下是基于“如果我们这样做……会发生什么”的旧记忆的想法和建议;我不能给你具体的命令或例子,因为我现在没有访问任何 SQL 2000 实例的权限。

  • 创建“新”主数据库的备份。
  • 两个不同的盒子上的两个 SQL 2000 实例。称它们为“旧”和“新”。
  • 关闭旧
  • 将主数据库文件(master.mdf、master.log 或任何名称)复制到新服务器
  • 确保您有“新”主数据库的备份。
  • 将它们作为用户数据库附加到新实例。重命名文件,可能是“OldMaster”。
  • 在两个主数据库中找到适当的系统数据库。系统登录?系统登录X?Books Online 将在这里提供帮助(这些系统表自 2000 年以来已完全修订)。
  • INSERT... SELECT... 从一个数据库到另一个。我很确定我曾经这样做过。(就在我们放弃 SA 帐户之前,只是想看看我们是否可以。)(哦,不要放弃 SA 帐户。)
  • 我认为您必须翻转一些 sp_options 开关,以允许手动更新系统数据库。
  • 您确实对“新”主数据库进行了备份,不是吗?(实际上,关闭实例,复制主数据库文件,然后再次启动它们也可以正常工作 - 只需关闭,将副本复制回您的混乱文件,然后重新启动,您就在是——只要你没有弄乱任何其他数据库。)

sp_change_users_login(使用“report”然后“autofix”)在这里应该证明是无价的——它可以用于将登录(主数据库中的定义)与用户(存储在数据库中的定义)同步。再一次,不适用于我现在所在的位置,但是每次我们将数据库从一个盒子移动到另一个盒子时,我都必须使用这个过程。嗯。有一些方法可以使用加密密码编写登录脚本,并在另一个盒子上运行“创建登录”,但我不记得它是什么。查看 sp_CreateLogin 的文档,或用于在 2000 上创建 SQL 登录的任何内容。

我所知道的大多数东西都来自于阅读在线图书,然后乱七八糟。我不知道你是否有时间,但如果你有要求,它最终可以工作。

于 2012-08-29T00:30:57.983 回答
2

我认为最简单的方法应该是在您安装新服务器之后(我会说重新考虑升级到 sql2008 或更高版本,原因有很多)。

然后使用复制数据库向导。按照描述的步骤

http://msdn.microsoft.com/en-us/library/ms188664.aspx

问候,哈科

于 2012-08-29T15:07:11.583 回答