我正在尝试使用复制数据库向导从我的实时服务器(共享主机)复制到我的本地计算机。实时服务器和本地服务器都是 SQL 2008 R2。
在从实时 SQL 2000 服务器复制到本地 2008 R2 时,我已经使用 CDW 多年并取得了完美的成功。但是现在我已经将我的实时数据库迁移到 SQL 2008 R2,CDW 给了我这个错误:
无法读取元数据,可能是由于访问权限不足。
我了解到,甚至在您完成 CDW 设置之前就可以预测到此错误:在 CDW 要求您提供所需目标数据库名称的页面上,应该使用它们的名称填充 .mdf 和 .ldf 文件-be 和大小(例如 MB、GB)。
但在我的情况下,这些文件名和大小没有显示(向导中的区域只是空白),当然,当我尝试执行包时,它会给我错误。
经过大量研究,我认为此错误的原因是由于 CDW 要求“您必须是源服务器和目标服务器上 sysadmin 固定服务器角色的成员”。
在我的本地服务器上,我的 Windows 身份验证登录被列为 sysadmin 服务器角色的角色成员。但是,在我的实时服务器上(请记住,它是一个具有 250 多个数据库的共享 SQL 服务器)列出的唯一角色成员是 [sa]。
我是否认为满足此要求的唯一方法是将我的特定 SQL 用户添加到 live/source Server > Security > Server Roles > sysadmin 角色?我猜这永远不会在共享服务器上完成,对吧?还是有其他方法可以通过弄乱特定的数据库属性/用户/角色来使其工作?
我无法解释为什么 CDW 在实时 SQL 2000 服务器而不是 2008 R2 上工作。我希望这只是在实时数据库上没有正确设置某些东西,但可能是由于多年来对 SQL 安全性所做的更改。
万一这很重要,我必须使用 SMO 方法而不是分离/附加,因为它是一个我不想删除的实时数据库。从历史上看,SQL 2000 的 CDW 使用 SMO 方法只需 3 分钟,因此速度无论如何都不是问题。
这是我对解决方案的偏好:
- 找到一种让 CDW 工作的方法,很可能是通过更改实时服务器上的某些内容。这可能吗?那会是什么?
如果失败了,那么...
使用 CDW 创建包的想法如何,然后进入 BIDS 并操作包中的某些内容以规避系统管理员角色要求。(它真的需要元数据吗?除了实际的数据表之外我不需要任何东西。)这可能吗?
2016 年 6 月 14 日更新:在 BIDS 中编辑 CDW 包不起作用,因为它似乎只是使用 .mdf 和 .ldf 文件,当然我无法在共享服务器上访问这些文件。我认为另一种方法是使用导入/导出向导创建一个包,然后在 BIDS 中进行编辑。烦人的部分是,如果无法访问元数据,导入/导出向导似乎不知道外键,因此不知道处理表的顺序。
如果失败了,那么...
- 有没有其他方法可以轻松地将每日副本从我的实时服务器自动复制到本地机器?我喜欢 CDW 的原因是因为它使用起来超级简单(当它工作时),它可以安排为每天作为 SQL 代理作业运行,并且我不需要手动工作。如果不能使 CDW 工作,是否有“下一个最好的事情”?
你会认为所有网站的一个非常常见的场景是“我如何每天自动将我的实时数据库副本放到我的本地 SQL 服务器上”?但也许我是那个奇怪的人!