三步10分钟搞定数据库版本的降迁 (将后台数据库SQL2008R2降为SQL2005版本)
2014-12-19 22:55
197 查看
前思后想仍觉得实战数据库版本的降迁 一文中的方式不仅老土而且低效,故有了下文三步搞定数据库从MSSQL2008R2
高版本降迁至SQL2005低版本。 整个过程如果思路清晰,数据量小,不过就是10分钟的事,效率提高很多。
我们这里仍然用上一篇的案例,即Discuz!NT 3.6.519 RC的后台数据库,这里需要利用一个免费的数据库对象同步工具,实际上整个操作过程中,这一步是最耗时低效,检查发现用OpenDBDiff和SQL-DBDiff可以高效解决这个问题。
首先,MSSQL2008R2有源数据库dnt2_db ,需要转到MSSQL2005目标数据库dnt2_dbNew中。
第一步 在低版本数据库中新建目标库。
案例中SQL2005新建数据库T-SQL:
[python] view
plaincopy
----/****** Object: Database [dnt2_dbNew] ******/
CREATE DATABASE [dnt2_dbNew] ON PRIMARY
( NAME = N'dnt2_db', FILENAME = N'D:/Program Files/bbs/bbs3.6/dnt2_db .mdf' , SIZE = 15552KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'dnt2_db _log', FILENAME = N'D:/Program Files/bbs/bbs3.6/dnt2_db _log.ldf' , SIZE = 530112KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
EXEC dbo.sp_dbcmptlevel @dbname=N'dnt2_dbNew', @new_cmptlevel=90
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [dnt2_dbNew].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [dnt2_dbNew] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [dnt2_dbNew] SET ANSI_NULLS OFF
GO
ALTER DATABASE [dnt2_dbNew] SET ANSI_PADDING OFF
GO
ALTER DATABASE [dnt2_dbNew] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [dnt2_dbNew] SET ARITHABORT OFF
GO
ALTER DATABASE [dnt2_dbNew] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [dnt2_dbNew] SET AUTO_CREATE_STATISTICS ON
GO
ALTER DATABASE [dnt2_dbNew] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [dnt2_dbNew] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [dnt2_dbNew] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [dnt2_dbNew] SET CURSOR_DEFAULT GLOBAL
GO
ALTER DATABASE [dnt2_dbNew] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [dnt2_dbNew] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [dnt2_dbNew] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [dnt2_dbNew] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [dnt2_dbNew] SET DISABLE_BROKER
GO
ALTER DATABASE [dnt2_dbNew] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [dnt2_dbNew] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [dnt2_dbNew] SET TRUSTWORTHY OFF
GO
ALTER DATABASE [dnt2_dbNew] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO
ALTER DATABASE [dnt2_dbNew] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [dnt2_dbNew] SET READ_COMMITTED_SNAPSHOT OFF
GO
ALTER DATABASE [dnt2_dbNew] SET READ_WRITE
GO
ALTER DATABASE [dnt2_dbNew] SET RECOVERY FULL
GO
ALTER DATABASE [dnt2_dbNew] SET MULTI_USER
GO
ALTER DATABASE [dnt2_dbNew] SET PAGE_VERIFY CHECKSUM
GO
ALTER DATABASE [dnt2_dbNew] SET DB_CHAINING OFF
GO
第二步 将高版本的表数据全部导入低版本数据库中。
案例中SQL2008R2的表数据,这里重新说明操作步骤,如下图所示:
图1
连接SQL2005目标数据库,并操作导入数据选项
图2
选择数据源
图3
选择目标服务器
图4
复制选项设定
图5
选择源表。这里全选,而不做对目标表的设定。原因在上一篇文章的{注1}部分已说明。
图6
数据导入完毕
第三步 将高版本的数据库对象同步到低版本数据库中。
打开OpenDBDiff或SQL-DBDiff,这里使用OpendbDiff,如下图
图7 打开OpenDBDiff,并选择源和目标库
图8 比较不同数据库的对象,并生成Alter的T-SQL语句。相比上一篇文章里需要手动修改Create为Alter语句,效率明显提高。
{注:有时当数据库中已存在部分对象时,我们需要注意Open DBDiff在给出Alter针对约束或者Create针对存储过程语句时,会有点问题,可能会需要手动的微调}
此时,我们点击右侧的剪贴板来copy语句,不建议用另存为的方式,否则可能会出现图9中的因字符集问题,当然目前我还不确定是OpenDBDiff本身造成的还是我OS的问题。
将贴出的T-SQL语句在SQL2005的目标库dnt2_dbNew中执行。
图9 中文另存为时发生字符集乱码的问题
到此,三大步搞定数据库降迁!呵呵,说我骗人,这怎么可能就三步呢。-_-!
执行完毕后,再用OpenDBDiff检查两库的对象差异,最后如图10所示,都OK。
图10 最后检查OK
转载原文,并注明出处!虽无多少技术含量,毕竟是作者心血原创,希望理解。
——>总结:优秀的DBA一定要有第三方工具,这句话不是我说的。不过OpenDBDiff只能同步对象是个缺憾!
Posted by: select left('claro',2) @12:56:33
lable: SQL
高版本降迁至SQL2005低版本。 整个过程如果思路清晰,数据量小,不过就是10分钟的事,效率提高很多。
我们这里仍然用上一篇的案例,即Discuz!NT 3.6.519 RC的后台数据库,这里需要利用一个免费的数据库对象同步工具,实际上整个操作过程中,这一步是最耗时低效,检查发现用OpenDBDiff和SQL-DBDiff可以高效解决这个问题。
首先,MSSQL2008R2有源数据库dnt2_db ,需要转到MSSQL2005目标数据库dnt2_dbNew中。
第一步 在低版本数据库中新建目标库。
案例中SQL2005新建数据库T-SQL:
[python] view
plaincopy
----/****** Object: Database [dnt2_dbNew] ******/
CREATE DATABASE [dnt2_dbNew] ON PRIMARY
( NAME = N'dnt2_db', FILENAME = N'D:/Program Files/bbs/bbs3.6/dnt2_db .mdf' , SIZE = 15552KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'dnt2_db _log', FILENAME = N'D:/Program Files/bbs/bbs3.6/dnt2_db _log.ldf' , SIZE = 530112KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
EXEC dbo.sp_dbcmptlevel @dbname=N'dnt2_dbNew', @new_cmptlevel=90
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [dnt2_dbNew].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [dnt2_dbNew] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [dnt2_dbNew] SET ANSI_NULLS OFF
GO
ALTER DATABASE [dnt2_dbNew] SET ANSI_PADDING OFF
GO
ALTER DATABASE [dnt2_dbNew] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [dnt2_dbNew] SET ARITHABORT OFF
GO
ALTER DATABASE [dnt2_dbNew] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [dnt2_dbNew] SET AUTO_CREATE_STATISTICS ON
GO
ALTER DATABASE [dnt2_dbNew] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [dnt2_dbNew] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [dnt2_dbNew] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [dnt2_dbNew] SET CURSOR_DEFAULT GLOBAL
GO
ALTER DATABASE [dnt2_dbNew] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [dnt2_dbNew] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [dnt2_dbNew] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [dnt2_dbNew] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [dnt2_dbNew] SET DISABLE_BROKER
GO
ALTER DATABASE [dnt2_dbNew] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [dnt2_dbNew] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [dnt2_dbNew] SET TRUSTWORTHY OFF
GO
ALTER DATABASE [dnt2_dbNew] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO
ALTER DATABASE [dnt2_dbNew] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [dnt2_dbNew] SET READ_COMMITTED_SNAPSHOT OFF
GO
ALTER DATABASE [dnt2_dbNew] SET READ_WRITE
GO
ALTER DATABASE [dnt2_dbNew] SET RECOVERY FULL
GO
ALTER DATABASE [dnt2_dbNew] SET MULTI_USER
GO
ALTER DATABASE [dnt2_dbNew] SET PAGE_VERIFY CHECKSUM
GO
ALTER DATABASE [dnt2_dbNew] SET DB_CHAINING OFF
GO
第二步 将高版本的表数据全部导入低版本数据库中。
案例中SQL2008R2的表数据,这里重新说明操作步骤,如下图所示:
图1
连接SQL2005目标数据库,并操作导入数据选项
图2
选择数据源
图3
选择目标服务器
图4
复制选项设定
图5
选择源表。这里全选,而不做对目标表的设定。原因在上一篇文章的{注1}部分已说明。
图6
数据导入完毕
第三步 将高版本的数据库对象同步到低版本数据库中。
打开OpenDBDiff或SQL-DBDiff,这里使用OpendbDiff,如下图
图7 打开OpenDBDiff,并选择源和目标库
图8 比较不同数据库的对象,并生成Alter的T-SQL语句。相比上一篇文章里需要手动修改Create为Alter语句,效率明显提高。
{注:有时当数据库中已存在部分对象时,我们需要注意Open DBDiff在给出Alter针对约束或者Create针对存储过程语句时,会有点问题,可能会需要手动的微调}
此时,我们点击右侧的剪贴板来copy语句,不建议用另存为的方式,否则可能会出现图9中的因字符集问题,当然目前我还不确定是OpenDBDiff本身造成的还是我OS的问题。
将贴出的T-SQL语句在SQL2005的目标库dnt2_dbNew中执行。
图9 中文另存为时发生字符集乱码的问题
到此,三大步搞定数据库降迁!呵呵,说我骗人,这怎么可能就三步呢。-_-!
执行完毕后,再用OpenDBDiff检查两库的对象差异,最后如图10所示,都OK。
图10 最后检查OK
转载原文,并注明出处!虽无多少技术含量,毕竟是作者心血原创,希望理解。
——>总结:优秀的DBA一定要有第三方工具,这句话不是我说的。不过OpenDBDiff只能同步对象是个缺憾!
Posted by: select left('claro',2) @12:56:33
lable: SQL
相关文章推荐
- 三步10分钟搞定数据库版本的降迁 (将后台数据库SQL2008R2降为SQL2005版本)
- 三步10分钟搞定数据库版本的降迁 (将后台数据库SQL2008R2降为SQL2005版本)
- 三步10分钟搞定数据库版本的降迁 (将后台数据库SQL2008R2降为SQL2005版本)
- 三步10分钟搞定数据库版本的降迁 (将后台数据库SQL2008R2降为SQL2005版本)
- 实战数据库版本的降迁(Discuz!NT 3.6.519 RC 后台数据库SQL2008降为SQL2005版本)
- SQL2005附加数据库,提示 数据库 版本为655,无法打开,此服务器支持611版...
- SQL2005附加数据库出错 数据库版本为 655,无法打开。此服务器支持 611 版及更低版本。不支持降级路径。
- SQL2005附加数据库,提示 数据库 版本为655,无法打开,此服务器支持611版本或更低版本。错误为948
- SQL2008R2 不支持用该后端版本设计数据库关系图或表
- SQL2005附加数据库,提示 数据库 版本为655,无法打开,此服务器支持611版本或更低版本。错误为948
- 在sql2008的实例 中 编写存储过程 读取 版本为sql2005 的实例 中的某个数据库里的数据
- layui 四级联动(省、市、区、小区) 链接数据库版本带后台、图片上传
- SQL2005附加数据库,提示 数据库 版本为655,无法打开,此服务器支持611版...
- sql2005及以上版本数据库分页
- SQL2005附加数据库,提示 数据库 版本为655,无法打开,此服务器支持611版本或更低版本。错误为948.
- SQL2005 打开列权限 将数据库隔离级别改成行版本控制隔离级别。
- [完整代码]创建不受数据库限制的报表 VB.Net 版本 -1
- 数据库脚本版本控制 和 数据库比较工具。