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.
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.
注意,上面的一些答案已经过时了!这可以在 SQL SERVER MANAGEMENT STUDIO (SQL MS) 内完成
您可以采用多种方法来“降级”数据库,但我最近发现并且我相信在 SQL MS 2012 的早期版本中没有找到的方法是复制数据库向导。以下是如何将数据库从 2012 服务器实例复制到 2008 R2 实例:
在 2012 实例中,右键单击要复制/“降级”的数据库,然后选择“任务”>“复制数据库...”。
“欢迎使用复制数据库向导”单击[下一步]。
“选择源服务器”:将“源服务器”设置为2012实例(或更高版本的服务器实例),并设置相应的认证。点击下一步]。[笔记。服务器代理服务必须正在运行]
“选择目标服务器:”将“目标服务器”设置为2008 R2(或更低版本的实例),并设置相应的身份验证。点击下一步]。[笔记。服务器代理服务必须正在运行]
“选择传输方法” 对于本示例,选择“使用 SQL 管理对象方法”,单击 [下一步]。
选择移动或复制所需的数据库,单击[下一步]。
配置目标数据库路径和逻辑名称等。选择数据库是否存在所需的选项。点击下一步]。
配置集成服务包,点击【下一步】。
对于此示例,为“计划包”选项选择“立即运行”选项,单击[下一步]。
“完成向导”,点击【完成】执行打包并创建“降级”数据库。
你完成了,快乐的日子。:]
我发现的另一种方法是由 Microsoft 创建的 SQL 数据库迁移向导,我认为(我不知道)上面的向导是从中创建的。在这里获取它http://sqlazuremw.codeplex.com/。要使用此包将数据库从 SQL Server 20012 迁移到 2008 R2,您可以执行以下操作:
笔记。微软现在已经从 Codeplex 中删除了 SQLAzureMW。我已亲自在此处提供
运行 SQLAzureMW.exe。
从主窗口的右侧选择分析/迁移单选按钮。
选择目标服务器为“SQL 数据库最新服务版本(V12)”。点击下一步]。
连接到 SQL Server 2012 实例。我的机器的服务器名称是“VAIOE\SQLSERVER2012”,使用Windows身份验证,从数据库选项中选择“Master DB(列出所有数据库)”和“保存登录信息”。单击[连接]。
选择需要迁移的数据库 [暂时使用 GVH 报告数据库]。点击下一步]。
选择“脚本所有数据库对象”。
单击 [Advance] 并更改以下选项:
一个。在常规下,将“目标服务器”设置为“SQL Server”。
湾。在“表/视图选项”下,将“脚本表/数据”设置为“带数据的表架构”。将“数据库引擎存储过程”设置为“真”。将“安全功能”、“安全存储过程”和“系统功能”设置为“真”。
单击[确定]。点击下一步]。
查看您的选择。点击下一步]。
系统会提示您“准备好生成脚本了吗?”,单击[是]。这将开始脚本生成。完成后,单击[下一步]。
现在您将获得另一个连接对话框。这次选择目标服务器上的数据库(SQL Server 2008 R2 实例)。选择主数据库,以便您选择目标数据库。单击[连接]。
现在,您很可能要迁移到一个新的数据库,所以单击[创建数据库]。
输入数据库目标名称并将“Collation”保留为“”,这与我们无关。单击[创建数据库]。点击下一步]。
现在将提示您“对目标服务器执行脚本?”,单击[是]。
现在这将开始并执行大量工作,使用生成的脚本设置架构,但与我们发现的先前方法不同,数据是使用 BCP 批量加载的,速度非常快。所有这些也是在内部完成的,因此不会生成大量的 .sql 脚本文件等。
单击[退出]。
你完成了。现在,如果您打开 Management Studio 并连接到我们刚刚使用的 SQL Server 2012 和 2008 R2 实例,您可以看到 2012 源数据库的架构与刚刚创建的目标数据库匹配。
上面的两个过程几乎相同,并提供相同的功能。我不会执行后者,除非您特别需要迁移到 Azure 或方法 1 对您来说失败。
我希望这可以帮助某人。
右键单击您的数据库并选择任务 -> 生成脚本
选择要恢复的内容,或者默认选择整个数据库。
现在单击下一步-> 单击高级并选择“服务器版本脚本”到您要恢复的“ssms 版本”,如 2008 或 2008 R2 或其他。
另外,将“要编写脚本的数据类型”选择为“架构和数据”
最后在目标 ssms 上执行这个 .sql 文件并在第一行使用数据库中更改数据库名称
如果数据库不存在,则创建一个,如果执行脚本时出错,请从 alter 关键字执行脚本以完成底部。
你不能,你永远不能从更高版本的 SQL Server 恢复到更低版本的 SQL Server。您唯一的选择是编写数据库脚本,然后通过 SSIS、BCP、链接服务器或编写数据脚本传输数据
致:Killercam 感谢您的解决方案。我尝试了第一个解决方案一个小时,但对我没有用。
我使用脚本生成方法将数据从 SQL Server 2012 移动到 SQL Server 2008 R2,步骤如下:
在 2012 SQL 管理工作室中
这个对我有用。
您将无法从 to2012
恢复2008
。您将能够使用red-gate SQL compare
复制架构等工具(前提是没有使用 2012 特定的内容)。如果你也有数据要复制,你可以使用他们的Data Compare
工具,我认为你可以获得 14 天的免费试用期。
这是另一个对我有用的选项: 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 方法,因为它使用本机模式。
将数据库从一个 SQL Server 版本“降级”到较低版本的唯一内置方法是硬方法:编写整个数据库、模式和数据的脚本,然后在目标服务器上执行脚本。
这是可行的,但往往是残酷的。
如前所述,您不能使用“备份”和“恢复”功能从 SQL Server 2012 数据库转到 SQL Server 2008 数据库。然而,我编写的一个程序SQL Server Scripter将连接到 SQL Server 数据库并编写数据库、其架构和数据的脚本。它可以从BitBucket git 克隆,并用Visual Studio 2010 或更高版本编译(如果是更高版本,只需打开.csproj
)。
合并复制。您可以从分发服务器 (2008) 创建订阅服务器 (2008)。数据库完全同步后,删除订阅和发布。
如果您在同一网络中,则使用连接选项将目标服务器添加到MS Server 管理工作室,然后尝试从源导出到目标。最简单的方法:)