打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
MSSQL2008R2 高版本降迁至SQL2005低版本
前思后想仍觉得实战数据库版本的降迁 一文中的方式不仅老土而且低效,故有了下文三步搞定数据库从MSSQL2008R2 高版本降迁至SQL2005低版本。 整个过程如果思路清晰,数据量小,不过就是10分钟的事,效率提高很多。

我们这里仍然用上一篇的案例,即Discuz!NT 3.6.519 RC的后台数据库,这里需要利用一个免费的数据库对象同步工具,实际上整个操作过程中,这一步是最耗时低效,检查发现用OpenDBDiffSQL-DBDiff可以高效解决这个问题。

首先,MSSQL2008R2有源数据库dnt2_db ,需要转到MSSQL2005目标数据库dnt2_dbNew中。

第一步 在低版本数据库中新建目标库。


案例中SQL2005新建数据库T-SQL:

  1. ----/****** Object: Database [dnt2_dbNew] ******/
  2. CREATE DATABASE [dnt2_dbNew] ON PRIMARY
  3. ( NAME = N'dnt2_db', FILENAME = N'D:/Program Files/bbs/bbs3.6/dnt2_db .mdf' , SIZE = 15552KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
  4. LOG ON
  5. ( NAME = N'dnt2_db _log', FILENAME = N'D:/Program Files/bbs/bbs3.6/dnt2_db _log.ldf' , SIZE = 530112KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
  6. GO
  7. EXEC dbo.sp_dbcmptlevel @dbname=N'dnt2_dbNew', @new_cmptlevel=90
  8. GO
  9. IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
  10. begin
  11. EXEC [dnt2_dbNew].[dbo].[sp_fulltext_database] @action = 'enable'
  12. end
  13. GO
  14. ALTER DATABASE [dnt2_dbNew] SET ANSI_NULL_DEFAULT OFF
  15. GO
  16. ALTER DATABASE [dnt2_dbNew] SET ANSI_NULLS OFF
  17. GO
  18. ALTER DATABASE [dnt2_dbNew] SET ANSI_PADDING OFF
  19. GO
  20. ALTER DATABASE [dnt2_dbNew] SET ANSI_WARNINGS OFF
  21. GO
  22. ALTER DATABASE [dnt2_dbNew] SET ARITHABORT OFF
  23. GO
  24. ALTER DATABASE [dnt2_dbNew] SET AUTO_CLOSE OFF
  25. GO
  26. ALTER DATABASE [dnt2_dbNew] SET AUTO_CREATE_STATISTICS ON
  27. GO
  28. ALTER DATABASE [dnt2_dbNew] SET AUTO_SHRINK OFF
  29. GO
  30. ALTER DATABASE [dnt2_dbNew] SET AUTO_UPDATE_STATISTICS ON
  31. GO
  32. ALTER DATABASE [dnt2_dbNew] SET CURSOR_CLOSE_ON_COMMIT OFF
  33. GO
  34. ALTER DATABASE [dnt2_dbNew] SET CURSOR_DEFAULT GLOBAL
  35. GO
  36. ALTER DATABASE [dnt2_dbNew] SET CONCAT_NULL_YIELDS_NULL OFF
  37. GO
  38. ALTER DATABASE [dnt2_dbNew] SET NUMERIC_ROUNDABORT OFF
  39. GO
  40. ALTER DATABASE [dnt2_dbNew] SET QUOTED_IDENTIFIER OFF
  41. GO
  42. ALTER DATABASE [dnt2_dbNew] SET RECURSIVE_TRIGGERS OFF
  43. GO
  44. ALTER DATABASE [dnt2_dbNew] SET DISABLE_BROKER
  45. GO
  46. ALTER DATABASE [dnt2_dbNew] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
  47. GO
  48. ALTER DATABASE [dnt2_dbNew] SET DATE_CORRELATION_OPTIMIZATION OFF
  49. GO
  50. ALTER DATABASE [dnt2_dbNew] SET TRUSTWORTHY OFF
  51. GO
  52. ALTER DATABASE [dnt2_dbNew] SET ALLOW_SNAPSHOT_ISOLATION OFF
  53. GO
  54. ALTER DATABASE [dnt2_dbNew] SET PARAMETERIZATION SIMPLE
  55. GO
  56. ALTER DATABASE [dnt2_dbNew] SET READ_COMMITTED_SNAPSHOT OFF
  57. GO
  58. ALTER DATABASE [dnt2_dbNew] SET READ_WRITE
  59. GO
  60. ALTER DATABASE [dnt2_dbNew] SET RECOVERY FULL
  61. GO
  62. ALTER DATABASE [dnt2_dbNew] SET MULTI_USER
  63. GO
  64. ALTER DATABASE [dnt2_dbNew] SET PAGE_VERIFY CHECKSUM
  65. GO
  66. ALTER DATABASE [dnt2_dbNew] SET DB_CHAINING OFF
  67. GO

第二步 将高版本的表数据全部导入低版本数据库中。


案例中SQL2008R2的表数据,这里重新说明操作步骤,如下图所示:

图1

连接SQL2005目标数据库,并操作导入数据选项

图2

选择数据源

图3

选择目标服务器

图4

复制选项设定

图5

选择源表。这里全选,而不做对目标表的设定。原因在上一篇文章的{注1}部分已说明。

图6

数据导入完毕

第三步 将高版本的数据库对象同步到低版本数据库中。

打开OpenDBDiffSQL-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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
sql2008清除日志方法
SqlServer数据库(可疑)解决办法4种
SQL SERVER2008删除数据库日志文件
SQL2008清除日志,数据库文件瘦身
IIS7 - post #57 - How to setup ODBC Logging in IIS 7.0/7.5
数据库创建,设置,修改
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服