【问题标题】:Get local copy of SQL Server hosted on Amazon RDS获取托管在 Amazon RDS 上的 SQL Server 的本地副本
【发布时间】:2016-03-20 17:39:40
【问题描述】:

我有一个小型(几百 MB)SQL Server 数据库在 RDS 上运行。我花了几个小时试图将它的副本复制到我的本地 SQL Server 2014 实例上。以下所有失败。有什么想法可行吗?

  1. Task -> Backup 失败,因为它没有授予我的管理员帐户备份到本地驱动器的权限。

  2. Copy Database 在使用While trying to find a folder on SQL an OLE DB error was encountered with error code 0x80040E4D 创建包期间失败

  3. 从 SSMS,连接到 RDS 服务器时,运行 BACKUP DATABASE。这将失败并显示消息 BACKUP DATABASE permission denied in database 'MyDB'。即使在为连接的用户运行EXEC sp_addrolemember 'db_backupoperator' 之后。

  4. General scripts 生成一个 700MB 的.sql 文件。使用sqlcmd -i 运行它会在生成无法在本地服务器上挂载的合理.mdf.ldf 文件(可能是因为sqlcmd 未能完成和解锁它们)之后的某个时候失败。

    李>

【问题讨论】:

  • 首先在本地手动创建数据库并使其正常工作。然后使用 Tasks / Generate Scripts。在 Advanced 中,选择 _Types of data to script = Schema and Data 并运行生成的脚本。如果您最初发布错误消息会有所帮助。如果这不起作用,请发布错误
  • @Nick.McDermaid - 在这种情况下,我最终能够让 (#4) 工作(在一系列重新启动机器和服务以连接 MDF 之后),但事实并非如此可扩展。
  • 你真的是说“不能自动化”吗?如果您要发布错误,也许我们可以提供帮助。
  • @Nick.McDermaid - 操作系统认为它们被 MS SQL 进程锁定,而 MS SQL Server 认为它没有或无法获得锁定。我可以花时间确定安装它们的最小顺序,但对于任何大量数据,这似乎是最笨拙的方法。
  • 如果您发布带有问题和错误的代码,也许我们可以提供帮助。通常你只需发出一个 CREATE DATABASE 然后使用它,但你仍然必须指定一个路径,所以在我看来,需要一定程度的配置

标签: sql-server amazon-rds


【解决方案1】:

Redgate 的 SQL 比较和 SQL 数据比较对于这些类型的事情非常宝贵。它们并不便宜(但物有所值)。但如果这是一次性的,您可以使用 14 天试用期,看看它对您的影响。

http://www.red-gate.com/products/

【讨论】:

    【解决方案2】:

    SSIS 导入导出向导可以生成一个包来复制整组表。 (它不是那种依赖文件的复制数据库功能——它为每个表创建了一个包含数据流组件的包。)

    它有点脆,但可以工作:-)

    SSMS 生成脚本功能通常会因任何大型数据集而失败,因为所有数据的脚本都非常庞大/冗长。此方法从不脚本化数据。

    【讨论】:

    • 我一直无法让 SSIS 对抗 RDS。但是,我确实设法让生成脚本工作:在Advanced 设置中将Types of data to scriptSchema only 更改为Schema and data。是的,这确实为我的 200MB 数据库创建了一个(现在)1.2GB 的纯文本文件。但是我能够在 15 分钟内使用sqlcmd -i scripted.sql -d MyDatabase -x 将其加载到本地服务器而没有太多警告。
    【解决方案3】:

    看看这个:https://github.com/andrebonna/RDSDump

    它是一个 C#.NET 控制台应用程序,用于搜索最新的原始数据库快照,在临时 RDS 实例上恢复它,生成 BACPAC 文件,将其上传到 S3 并删除临时 RDS 实例。

    您可以将您的 RDS 快照转换为 BACPAC 文件,该文件可以使用此处回答的功能 (Azure SQL Database Bacpac Local Restore) 下载并导入您的本地 SQL Server 2014 实例

    【讨论】:

      【解决方案4】:

      AWS has finally provided a reasonably easy means of doing this:它需要一个 S3 存储桶。

      创建名为rds-bak 的存储桶后,我在RDS 实例中运行了以下存储过程:

      exec msdb.dbo.rds_backup_database
         @source_db_name='MyDatabase',
         @s3_arn_to_backup_to='arn:aws:s3:::rds-bak/MyDatabase.bak',
         @overwrite_S3_backup_file=1;
      

      以下存储过程返回备份请求的状态:

      exec msdb.dbo.rds_task_status @db_name='MyDatabase'
      

      完成后,我从 S3 下载了 .bak 文件,并使用 SSMS Restore Database... 向导将其导入本地 SQL Server 实例!

      【讨论】:

        猜你喜欢
        • 2012-07-20
        • 2020-06-06
        • 1970-01-01
        • 2021-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-09
        • 2021-04-20
        相关资源
        最近更新 更多