AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 120574
Accepted
pigeon
pigeon
Asked: 2010-03-09 17:51:45 +0800 CST2010-03-09 17:51:45 +0800 CST 2010-03-09 17:51:45 +0800 CST

SQL Server 2000 需要在为并行迁移执行备份时防止登录

  • 772

我正在寻找一种防止登录发生的方法,以便对数据库进行完整备份以从其当前的 SQL Server 2000 实例迁移到新的 SQL 2005 实例。我的一个朋友建议运行一个脚本,将数据库置于回滚状态。不是 DBA,我的 DDL 很差,运行我不理解的脚本可能不是最好的主意。

一种可能更容易的选择是简单地分离并复制到新服务器。

任何建议将不胜感激。

sql-server sql-server-2005 database-administration
  • 3 3 个回答
  • 1334 Views

3 个回答

  • Voted
  1. joeqwerty
    2010-03-09T18:43:31+08:002010-03-09T18:43:31+08:00

    有很多方法可以做到这一点,其中一些比其他的更优雅:

    1. 分离、复制到新服务器、附加到新服务器、重新附加到当前服务器

    2. 将数据库置于单用户模式并备份

    3. 断开服务器上的网线

    4. 阻止到端口 1433 的传入连接

    • 2
  2. Nick Kavadias
    2010-03-09T19:42:29+08:002010-03-09T19:42:29+08:00

    将数据库置于单用户模式将是一种享受。您需要立即在当前连接中进行备份,以防止在您关闭连接并尝试使用企业管理器进行备份时其他连接重新进入。完成后,您还希望使数据库脱机。这是使用北风的示例。

    use northwind
    alter database northwind set single_user with rollback immediate 
    backup database northwind to disk='c:\northwind.bak' with init
    use master
    alter database northwind set offline
    
    • 1
  3. Best Answer
    Darin Strait
    2010-03-10T06:59:26+08:002010-03-10T06:59:26+08:00

    分离/复制/附加将起作用。(不要留下 LDF 文件。它们很重要,尽管有些人不这么认为,尤其是当您快速强制关闭数据库时。如果日志未正确附加到新服务器。)。

    我还有另一种选择,它使用了 SQL Server 中被忽视的“暂停”功能。

    我发现当您有很多用户跳入该数据库时,将数据库设置为单个用户可能会成为问题。在我连接之前,他们将成为“单一用户”。

    如果您使用查询窗口而不是使用 SSMS GUI,那么我的方法效果最好。如果您使用的是集群,此方法可能效果不佳(我已经尝试了多年,我不记得结果。您不想意外触发故障转移。)

    此外,如果在同一 SQL Server 上生产的其他应用程序还有其他数据库,则此方法可能无法正常工作。

    1. 以管理员身份登录查询窗口。您将使用此连接来杀死 spid(稍后),然后最后一次备份数据库。

    2. 暂停 SQL Server 服务。(在 SSMS 中,右键单击服务器图标或使用控制面板小程序或任何类似的服务控制程序。)

    这将阻止对此实例的任何新登录,包括管理员连接、db_owner 连接和 SQL 代理连接,但不会删除现有连接。当服务器暂停时,连接尝试将失败并收到错误消息。您可能想要警告您的用户或支持团队。

    1. 使用 KILL 优雅地关闭用户应用程序和/或踢出普通用户的现有连接。这将为您编写 kill 命令,只需先更改/使用要迁移的数据库,然后运行: select 'kill ' + convert(varchar, spid) from master.dbo.sysprocesses where spid != @@SPID and dbid = DB_ID()

    然后将输出复制到您的查询窗口并运行它。它会杀死当前数据库中的每个连接,但你的。

    1. 最后,运行您的备份命令,就像您将要执行的那样。

    如果需要,您可以在与“暂停”相同的菜单上使用“恢复”来允许在完成后登录。在让人们重新进入之前将旧数据库设置为只读或离线(最好)。(离线比只读更好,因为您希望人们在将连接字符串指向新数据库时忽略某些内容时收到错误消息服务器。删除数据库也会收到错误消息,但脱机不是永久的。如果您必须回到旧服务器,只需在线更改数据库很容易,但如果出现这种情况,您必须进行恢复您删除了数据库。在您确定迁移成功后,您明天可以随时删除脱机数据库。)

    当然,您需要将备份恢复到要迁移到的服务器,修复任何 SQL 登录,然后修复应用程序的连接字符串或更改服务器的 DNS 条目,具体取决于您的处理方式,打开数据库校验和功能,对所有表运行完整的重新索引,更新数据库兼容性级别(如果合适的话)等等,等等。

    如果您是新手,或者如果这特别重要或有苛刻的用户,我建议您先尝试至少一次试运行。您无需将所有人都踢出去进行空运行,只需备份并在新服务器上恢复即可。进行还原会迫使您确定文件的去向(驱动器号和路径在不同的服务器上可能不同),并让您了解还原需要多长时间。(如果是真的,如果您已经在新服务器上拥有数据库的副本,那么“使用替换”恢复通常比从头开始要快一点。这给您提供了一些回旋余地向用户估计系统将在迁移中关闭多长时间。)

    除非您只使用 Windows 登录,否则您想在“真实”执行之前测试 SQL 登录是否有效。最好有一个模拟生产的测试系统,在那里你可以计算出你的“WTF”?首先是片刻,但不是每个人都有这种奢侈。

    • 1

相关问题

  • sql server 连接字符串上的网络数据包大小以提高吞吐量

  • 基于 Microsoft 的服务器(IIS、MSSQL 等)上的病毒扫描应排除哪些内容?

  • SQL 洗衣清单

  • OPENROWSET、二进制文件、varchars 和 varbinaries

  • 聚集索引与非聚集索引?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve