问候。
我们在一台具有单一许可证的计算机上运行Microsoft SQL Server 2008。我们需要在此服务器上创建一个相同的数据库开发实例,包括表,触发器,默认值,数据,视图,键,约束和索引。
作为临时解决方案,我在单独的计算机上下载并安装了SQL Server 2008 Express R2和SQL Server 2008 Toolkit。然后我使用DTSWizard.exe并将其指向远程主机作为数据源,将本地计算机指向目标。
最初的数据传输似乎很好,因为创建了表格,索引等,但经过一点点的挖掘后,我意识到它并没有传输/设置任何字段的默认值!许多字段都有“NOT NULL”约束,我们正在与COM API(Response RCK)连接,它不允许我们手动编辑查询,因此我们不知道他们如何与数据库/插入条目进行交互(包括使用绕过NOT NULL约束的默认值。)
作为第二个选项,我们使用“生成脚本”选项并将所有表,约束,索引,默认值,数据等导出为.SQL文件,但现在我不确定如何将此SQL文件加载到SQL中服务器,因为它是4.9GB - 所有这些都是必需的,不会绕过这个怪物的大小。
所以我的问题是: - 有没有办法可以将SQL数据库的完整副本复制到另一台服务器,包括默认值? - 或者有没有办法导入.SQL文件而不将其复制并粘贴为新查询?
P.S:道歉,如果我的“微软”术语不完美,我是熟悉PostgreSQL和mySQL的Linux人员。答案 0 :(得分:2)
为什么不直接对数据库进行完整备份并将其还原到新服务器?这将包括一切,包括默认值?
以下是一些应该实现的SQL(编辑路径和逻辑文件名以满足您的需求):
-- On the source server run:
BACKUP DATABASE [TestDb]
TO DISK = N'C:\TEMP\TestDb.bak'
WITH
NOFORMAT,
NOINIT,
NAME = N'SourceDb-Full Database Backup',
SKIP,
NOREWIND,
NOUNLOAD,
STATS = 10
GO
-- On the other server run
RESTORE DATABASE [DestDb]
FROM DISK = N'C:\Temp\TestDb.bak'
WITH
FILE = 1,
MOVE N'TestDb' TO N'C:\TEMP\DestDb_data.mdf',
MOVE N'TestDb_log' TO N'C:\TEMP\DestDb_log.ldf',
NOUNLOAD, STATS = 10
GO
如果无法通过网络访问,则需要在服务器之间移动备份文件...
答案 1 :(得分:1)
终于遇到了一个有效的解决方案。
在SQL Server 2008中,导出未使用表结构携带DEFAULT值的数据库时似乎存在错误。
这是我解决这个问题的解决方案:
现在我们已经备份了整个数据库,包括表,视图,存储过程,索引,数据等,是时候将这些数据导入新数据库了。
在要将此信息恢复到的计算机上,执行以下步骤:
希望这可以帮助遇到问题嫌疑人的其他人!
答案 2 :(得分:0)
可以从单个服务器运行两个查询
- 在源服务器上运行:
BACKUP DATABASE [TestDb]
TO DISK = N'C:\TEMP\TestDb.bak'
WITH
NOFORMAT,
NOINIT,
NAME = N'SourceDb-Full Database Backup',
SKIP,
NOREWIND,
NOUNLOAD,
STATS = 10 GO
- 在另一台服务器上运行
RESTORE DATABASE [DestDb]
FROM DISK = N'C:\Temp\TestDb.bak'
WITH
FILE = 1,
MOVE N'TestDb' TO N'C:\TEMP\DestDb_data.mdf',
MOVE N'TestDb_log' TO N'C:\TEMP\DestDb_log.ldf',
NOUNLOAD, STATS = 10
GO