30

I am trying to restore the backup taken from a SQL Server 2012 to SQL Server 2008 R2, and it giving an error

Specified cast is not valid. (SqlManagerUI)

If you have any solution to this please give comment

thanks.

4

10 回答 10

42

注意,上面的一些答案已经过时了!这可以在 SQL SERVER MANAGEMENT STUDIO (SQL MS) 内完成


您可以采用多种方法来“降级”数据库,但我最近发现并且我相信在 SQL MS 2012 的早期版本中没有找到的方法是复制数据库向导。以下是如何将数据库从 2012 服务器实例复制到 2008 R2 实例:

  1. 在 2012 实例中,右键单击要复制/“降级”的数据库,然后选择“任务”>“复制数据库...”。

  2. “欢迎使用复制数据库向导”单击[下一步]。

  3. “选择源服务器”:将“源服务器”设置为2012实例(或更高版本的服务器实例),并设置相应的认证。点击下一步]。[笔记。服务器代理服务必须正在运行]

  4. “选择目标服务器:”将“目标服务器”设置为2008 R2(或更低版本的实例),并设置相应的身份验证。点击下一步]。[笔记。服务器代理服务必须正在运行]

  5. “选择传输方法” 对于本示例,选择“使用 SQL 管理对象方法”,单击 [下一步]。

  6. 选择移动或复制所需的数据库,单击[下一步]。

  7. 配置目标数据库路径和逻辑名称等。选择数据库是否存在所需的选项。点击下一步]。

  8. 配置集成服务包,点击【下一步】。

  9. 对于此示例,为“计划包”选项选择“立即运行”选项,单击[下一步]。

  10. “完成向导”,点击【完成】执行打包并创建“降级”数据库。

你完成了,快乐的日子。:]


我发现的另一种方法是由 Microsoft 创建的 SQL 数据库迁移向导,我认为(我不知道)上面的向导是从中创建的。在这里获取它http://sqlazuremw.codeplex.com/。要使用此包将数据库从 SQL Server 20012 迁移到 2008 R2,您可以执行以下操作:

笔记。微软现在已经从 Codeplex 中删除了 SQLAzureMW。我已亲自在此处提供

  1. 运行 SQLAzureMW.exe。

  2. 从主窗口的右侧选择分析/迁移单选按钮。

  3. 选择目标服务器为“SQL 数据库最新服务版本(V12)”。点击下一步]。

  4. 连接到 SQL Server 2012 实例。我的机器的服务器名称是“VAIOE\SQLSERVER2012”,使用Windows身份验证,从数据库选项中选择“Master DB(列出所有数据库)”和“保存登录信息”。单击[连接]。

  5. 选择需要迁移的数据库 [暂时使用 GVH 报告数据库]。点击下一步]。

  6. 选择“脚本所有数据库对象”。

  7. 单击 [Advance] 并更改以下选项:

一个。在常规下,将“目标服务器”设置为“SQL Server”。

湾。在“表/视图选项”下,将“脚本表/数据”设置为“带数据的表架构”。将“数据库引擎存储过程”设置为“真”。将“安全功能”、“安全存储过程”和“系统功能”设置为“真”。

单击[确定]。点击下一步]。

  1. 查看您的选择。点击下一步]。

  2. 系统会提示您“准备好生成脚本了吗?”,单击[是]。这将开始脚本生成。完成后,单击[下一步]。

  3. 现在您将获得另一个连接对话框。这次选择目标服务器上的数据库(SQL Server 2008 R2 实例)。选择主数据库,以便您选择目标数据库。单击[连接]。

  4. 现在,您很可能要迁移到一个新的数据库,所以单击[创建数据库]。

  5. 输入数据库目标名称并将“Collat​​ion”保留为“”,这与我们无关。单击[创建数据库]。点击下一步]。

  6. 现在将提示您“对目标服务器执行脚本?”,单击[是]。

  7. 现在这将开始并执行大量工作,使用生成的脚本设置架构,但与我们发现的先前方法不同,数据是使用 BCP 批量加载的,速度非常快。所有这些也是在内部完成的,因此不会生成大量的 .sql 脚本文件等。

  8. 单击[退出]。

你完成了。现在,如果您打开 Management Studio 并连接到我们刚刚使用的 SQL Server 2012 和 2008 R2 实例,您可以看到 2012 源数据库的架构与刚刚创建的目标数据库匹配。


上面的两个过程几乎相同,并提供相同的功能。我不会执行后者,除非您特别需要迁移到 Azure 或方法 1 对您来说失败。

我希望这可以帮助某人。

于 2015-04-24T17:36:35.063 回答
12

右键单击您的数据库并选择任务 -> 生成脚本

选择要恢复的内容,或者默认选择整个数据库。

现在单击下一步-> 单击高级并选择“服务器版本脚本”到您要恢复的“ssms 版本”,如 2008 或 2008 R2 或其他。

另外,将“要编写脚本的数据类型”选择为“架构和数据”

最后在目标 ssms 上执行这个 .sql 文件并在第一行使用数据库中更改数据库名称

如果数据库不存在,则创建一个,如果执行脚本时出错,请从 alter 关键字执行脚本以完成底部。

于 2014-11-06T18:49:04.920 回答
9

你不能,你永远不能从更高版本的 SQL Server 恢复到更低版本的 SQL Server。您唯一的选择是编写数据库脚本,然后通过 SSIS、BCP、链接服务器或编写数据脚本传输数据

于 2013-11-07T14:04:34.613 回答
9

致:Killercam 感谢您的解决方案。我尝试了第一个解决方案一个小时,但对我没有用。

我使用脚本生成方法将数据从 SQL Server 2012 移动到 SQL Server 2008 R2,步骤如下:

在 2012 SQL 管理工作室中

  1. 任务 -> 生成脚本(在第一个向导屏幕中,单击下一步 - 可能不显示)
  2. 选择脚本整个数据库和所有数据库对象 - >下一步
  3. 单击 [高级] 按钮 3.1 将 [Types of data to script] 从“Schema only”更改为“Schema and data” 3.2 将 [Script for Server Version] “2012”更改为“2008”
  4. 完成创建脚本文件的下一个向导步骤
  5. 使用 sqlcmd 将导出的脚本文件导入您的 SQL Server 2008 R2 5.1 打开 windows 命令行 5.2 键入 [sqlcmd -S -i Path to your file](例如:[sqlcmd -S localhost -i C:\mydatabase.sql])

这个对我有用。

于 2016-08-17T03:56:06.373 回答
2

您将无法从 to2012恢复2008。您将能够使用red-gate SQL compare复制架构等工具(前提是没有使用 2012 特定的内容)。如果你也有数据要复制,你可以使用他们的Data Compare工具,我认为你可以获得 14 天的免费试用期。

于 2013-11-07T14:06:28.593 回答
2

这是另一个对我有用的选项: https ://dba.stackexchange.com/a/44340

在那里我使用了选项 B。这不是我的想法,所以所有的功劳都归于原作者。我也只是把它放在这里,因为我知道有时链接不起作用,建议将完整的故事放在手边。

只是我的一个提示:首先解决架构不兼容问题(如果有)。然后倾注数据应该是轻而易举的事。


选项 A:使用生成脚本选项以兼容模式编写数据库脚本:

注意:如果您使用模式和数据编写数据库脚本,根据您的数据大小,脚本将非常庞大,并且不会由 SSMS、sqlcmd 或 osql 处理(也可能以 GB 为单位)。

在此处输入图像描述

选项 B

首先使用所有索引、FK 等首先编写表脚本,然后在目标数据库中创建空白表 - 仅使用 SCHEMA 选项(无数据)。

使用 BCP 插入数据

I. 使用以下脚本 BCP 输出数据。将 SSMS 设置为文本模式,并将以下脚本生成的输出复制到 bat 文件中。

-- save below output in a bat file by executing below in SSMS in TEXT mode

-- clean up: create a bat file with this command --> del D:\BCP\*.dat 

select '"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp.exe" ' /* path to BCP.exe */
    +  QUOTENAME(DB_NAME())+ '.' /* Current Database */
    +  QUOTENAME(SCHEMA_NAME(SCHEMA_ID))+'.'            
    +  QUOTENAME(name)  
    +  ' out D:\BCP\'  /* Path where BCP out files will be stored */
    +  REPLACE(SCHEMA_NAME(schema_id),' ','') + '_' 
    +  REPLACE(name,' ','') 
    + '.dat -T -E -SServerName\Instance -n' /* ServerName, -E will take care of Identity, -n is for Native Format */
from sys.tables
where is_ms_shipped = 0 and name <> 'sysdiagrams'                       /* sysdiagrams is classified my MS as UserTable and we dont want it */
/*and schema_name(schema_id) <> 'unwantedschema'    */                             /* Optional to exclude any schema  */
order by schema_name(schema_id)

二、运行将在您指定的文件夹中生成 .dat 文件的 bat 文件。

三、再次在文本模式下使用 SSMS 在目标服务器上运行以下脚本。

--- Execute this on the destination server.database from SSMS.

--- Make sure the change the @Destdbname and the bcp out path as per your environment.

declare @Destdbname sysname
set @Destdbname = 'destinationDB' /* Destination Database Name where you want to Bulk Insert in */
select 'BULK INSERT '
/*Remember Tables must be present on destination database */ 
+ QUOTENAME(@Destdbname) + '.' 
+ QUOTENAME(SCHEMA_NAME(SCHEMA_ID)) 
+ '.' + QUOTENAME(name) 
+ ' from ''D:\BCP\' /* Change here for bcp out path */ 
+ REPLACE(SCHEMA_NAME(schema_id), ' ', '') + '_' + REPLACE(name, ' ', '') 
+ '.dat'' with ( KEEPIDENTITY, DATAFILETYPE = ''native'', TABLOCK )' 
+ char(10) 
+ 'print ''Bulk insert for ' + REPLACE(SCHEMA_NAME(schema_id), ' ', '') + '_' + REPLACE(name, ' ', '') + ' is done... ''' 
+ char(10) + 'go'
from sys.tables
where is_ms_shipped = 0
and name <> 'sysdiagrams' /* sysdiagrams is classified my MS as UserTable and we dont want it */
--and schema_name(schema_id) <> 'unwantedschema' /* Optional to exclude any schema */
    order by schema_name(schema_id)

四。使用 SSMS 运行输出以将数据重新插入表中。

这是非常快速的 BCP 方法,因为它使用本机模式。

于 2017-11-17T12:56:30.643 回答
1

将数据库从一个 SQL Server 版本“降级”到较低版本的唯一内置方法是硬方法:编写整个数据库、模式数据的脚本,然后在目标服务器上执行脚本。

这是可行的,但往往是残酷的。

于 2013-11-07T14:08:41.367 回答
0

如前所述,您不能使用“备份”和“恢复”功能从 SQL Server 2012 数据库转到 SQL Server 2008 数据库。然而,我编写的一个程序SQL Server Scripter将连接到 SQL Server 数据库并编写数据库、其架构和数据的脚本。它可以从BitBucket git 克隆,并用Visual Studio 2010 或更高版本编译(如果是更高版本,只需打开.csproj)。

于 2014-11-27T15:10:46.923 回答
0

合并复制。您可以从分发服务器 (2008) 创建订阅服务器 (2008)。数据库完全同步后,删除订阅和发布。

于 2015-11-06T21:56:32.187 回答
-1

如果您在同一网络中,则使用连接选项将目标服务器添加到MS Server 管理工作室,然后尝试从源导出到目标。最简单的方法:)

于 2016-07-12T08:12:39.123 回答