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 / 问题 / 605501
Accepted
Black Dynamite
Black Dynamite
Asked: 2014-06-17 07:23:42 +0800 CST2014-06-17 07:23:42 +0800 CST 2014-06-17 07:23:42 +0800 CST

复制 SQL Server 数据库

  • 772

我希望将数据库“移动”到不同的服务器,同时尽量减少对数据和服务的干扰。这些数据库的大小从 5GB 到 140GB 不等。

我已经看到甚至使用过 SQL Server 的各种数据传输工具,但我不确定最佳实践是什么(分离/重新连接、从备份还原、发送事务日志、镜像...)。

我最大的担心是这些数据库有很多存储过程、用户权限和各种索引,我不想丢失它们并最终中断服务。

我最近的脑残想法是设置一个镜像,然后启动手动故障转移。但是,我宁愿在进行我以前从未做过的事情之前先问清楚。

TL;DR 移动 SQL Server 数据库的最佳实践方法有哪些,可以最大限度地减少服务中断的威胁。

sql-server-2008
  • 1 1 个回答
  • 128 Views

1 个回答

  • Voted
  1. Best Answer
    Katherine Villyard
    2014-06-18T14:12:54+08:002014-06-18T14:12:54+08:00

    根据我的经验,分离/附加是最快的方法。瓶颈可能是您通过网络复制文件的速度。

    假设这两个数据库具有相同的 Windows 帐户(如果您使用的是 SQL 帐户,则可能需要更新 SID),您可能会使用我在开始在 PowerShell 中重写所有内容之前放置的这个脚本之类的东西。:) 它旨在在源服务器上运行,并使用带有要移动的数据库列表的文件。

    @ECHO ON
    
    set newipmdf=\\newserver\g$
    set newipldf=\\newserver\e$
    set controlfile=control.txt
    set oldserver=oldserver\instance
    set oldmdfpath=d:\instance
    set newmdfpath=g:\instance
    set copymdfpath="m:\instance"
    set newserver=newserver\instance
    set oldlogpath=e:\instance
    set newlogpath=e:\instance
    set copylogpath="l:\instance"
    set movedmdfpath=%oldmdfpath%\moved
    set movedldfpath=%oldlogpath%\moved
    
    mkdir %movedmdfpath%
    mkdir %movedldfpath%
    
    net use m: %newipmdf%
    net use l: %newipldf%
    
    SETLOCAL DISABLEDELAYEDEXPANSION
    FOR /F %%L IN (%controlfile%%) DO (
      SET "line=%%L"
      SETLOCAL ENABLEDELAYEDEXPANSION
      ECHO !line!
      sqlcmd -E -S!oldserver! -Q"EXEC master.dbo.sp_detach_db @dbname = N'!line!'"
      copy "!oldmdfpath!\!line!.mdf" !copymdfpath!
      copy "!oldlogpath!\!line!_log.ldf" !copylogpath!
      sqlcmd -E -S!newserver! -Q"CREATE DATABASE [!line!] ON ( FILENAME = '!newmdfpath!\!line!.mdf' ),( FILENAME = N'!newlogpath!\!line!_log.ldf' ) FOR ATTACH"
      move "!oldmdfpath!\!line!.mdf" !movedmdfpath!
      move "!oldlogpath!\!line!_log.ldf" !movedldfpath!
      ENDLOCAL
    )
    ENDLOCAL
    
    net use m: /z
    net use l: /z
    

    如果您无法在网络上复制您的 140GB 文件,那么我已经使用复制数据库向导获得了好运。不过,如果可能的话,我仍然会使用分离/附加。

    祝你好运!

    • 3

相关问题

  • 在 SQL Server 2008 上为 ASP.NET 应用程序设置登录名

  • SQL Server 2008 跟踪标志 4135

  • 远程连接到 LAN 内的 SQL 服务器

  • 远程连接 sql server 不工作,但如果防火墙禁用它呢?

  • 无法从 SQL Server 2008 备份数据库

Sidebar

Stats

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

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

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

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

    • 9 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

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

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +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