数据库

 首页 > 数据库 > postgresql > Postgres数据库迁移至MSSQL 2012过程记录

Postgres数据库迁移至MSSQL 2012过程记录

分享到:
【字体:
导读:
         摘要:Postgres数据库数据转移到MSSQL2012刚从澳门一家酒店做了个酒店系统数据转移,从Postgres数据库里转移数据到我们的威望酒店管理系统(MicrowinPropertyManagementSystem)的MSSQL2012里,在这里记录下步骤,以便以后用,分析对方的数据结构是件痛苦的...

Postgres数据库迁移至MSSQL 2012过程记录

Postgres数据库数据转移到 MSSQL 2012

刚从澳门一家酒店做了个酒店系统数据转移,从Postgres数据库里转移数据到我们的威望酒店管理系统(Microwin Property Management System)的MS SQL 2012里,在这里记录下步骤,以便以后用,分析对方的数据结构是件痛苦的事情,在转移数据花时间最多的步骤。

环境参数: Postgres数据库安装在Linux下,Postgres版本是7.4, 数据库的大小有5G左右,最大一个数据表的行数超过400万行。MSSQL 2012 安装在Windows 2008 server 下,繁体系统,我做转移的系统是Windows XP SP3 简体系统,为什么要说我做转移时是简体系统呢,因为在做转移时如果没有选择好ODBC的Driver会出现乱码,

因为只有3个小时的时间做转换数据,所以前期准备工作要做好,保证转移过来的数据要正确,而不能影响正常的工作。

前提准备连接PostgreSQL 数据库:

Windows怎么连接到Linux下的Postgres数据库上,直接从官网上下载PSQLODBC安装到Windows上用ODBC方式连接到Linux下的Postgres数据库上,
这样的连接数据库就解决了,安装PSQLODBC后会在ODBC数据源管理器里有两个驱动程式,PostgreSQL ANSI 和 PostgreSQL Unicode ,刚开始我是用PostgreSQL Unicode这个来连接到PostgreSQL 的,但发现读出来的数据中文会乱码,在繁体XP里也是乱码,但用PostgreSQL ANSI这个繁体中文就没有问题,但简体中文又出现乱码,最后只能繁体中文和简体中文分别转移了。

第一种备份恢复方法:
在我的XP上安装从Postgres 官网上下载下来的Windows 版本的 Postgres 8.4 ,恢复从Linux下备份的Postgres数据库来做转移数据,但恢复过来的数据不但中文是乱码,重要的是大表的数据(超过100万级的数据行)没有恢复进来,到现在也没有搞清楚这是什么问题,所以就放弃这个方法。

第二种直连方法:
直接用MSSQL的sp_addlinkedserver 连接到PostgreSQL ,真接读取数据到暂时数据库,再做数据转换到我们的威望酒店系统,当时想是服务器对服务器直接读写应该很快,但试后发现很慢,远远超过5小时间,所以这种方法也放弃了,如果数据少的话这种方法是可以用的。

sp_addLinkedserver方法使用如下:

先建立一个能读取PostgreSQL 数据库的用户和密码一样的用户在MSSQL 数据库上。

sp_dropserver 'sourceDB'

EXEC master.dbo.sp_addlinkedserver @server = N'sourceDB', @srvproduct=N'PostgreSQL ANSI',
@provider=N'MSDASQL', @provstr=N'Driver=PostgreSQL ANSI;uid=username;pwd=password;Server=ipaddress;database=databasename;'

exec sp_droplinkedsrvlogin @rmtsrvname = 'sourceDB' , @locallogin =null

/* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'sourcdDB', @useself=N'True',@locallogin=NULL,@rmtuser='username',@rmtpassword='password'

--在MSSQL上读取PostgreSQL那边的数据表
SELECT * FROM OpenQuery(sourceDB, 'SELECT * From information_schema.tables')

--在MSSQL上读取PostgreSQL那边的指定数据表的数据
select * from "sourceDB"."databasename"."public"."tablename"

第三种DTS方法(分两大步):
第一步: 在MSSQL建立一下新的数据库,用DTS(也就是MSSQL提供的导出/导入数据服务)把Postgres数据库全部数据转移到新的MSSQL数据库里,在选择源数据库时最好用PostgreSQL ANSI ODBC驱动程式,否则会出现中文乱码,但奇怪是的,MSSQL 2012 提供的DTS不能读取Postgres的数据结构,但MSSQL 2000提供的DTS是可以的,所以说有时不是版本越高就越好,能用才是好工具啊,所以我就用2000提供的DTS工具想把PostgreSQL数据库的数据先转移到mssql 2012 ,但在转移大数据表的时候会出现 Out of memory 信息,但我的XP已经是 4G 内存了,32位的系统最大了,但还是不能转移大数据表的数据,我发现数据行大行50万以上就会出现out of memory 信息,所以最后只能编程方法来把数据分成30万行左右一次转移,用DTS保存下来的DTS包,用VB6编程把数据提取30万行左右一次一次转移大数据表,其它少于30万的数据直接用DTS来转移,做好程式安装到繁体和简体系统电脑里分别进行,如果可以的话安装多台机器来运行会更快点,这个方法我用1个半小时就转移完我要的数据到MSSQL的暂时数据库了。

第二步: 用了数据在同一个服务器后,读取就方便和快捷了,在新的MSSQL数据库里再根据数据结构用T-SQL提取数据需要的数据到我们的酒店系统的数据里,由于两个数据库的数据表结构不一样所以这步在同一个SQL服务器里的不同数据库做比较方便,根据数据结构不同写不同的SQL语句进行读取及写入。这个步骤大概也花了一小时间左右,当然根据服务的性能不同时间也会不同的。

结论: 我经常要转移数据到我们的威望酒店系统(Microwin Property Management System),所以也经常做不同数据库间的转移数据,以前大部分是同类型的数据库转移,这次是不同数据库和不同系统所以做起来比较麻烦,所以记下来以后参考,大家用更好方法来信分享一下。

Postgres数据库迁移至MSSQL 2012过程记录
分享到:
PostgreSQL数据库索引介绍
PostgreSQL数据库索引介绍 索引是一种特殊的查询表,可以使用搜索引擎的数据库以加快数据检索。简单地说,索引是表中的数据的一个指针,在一个数据库中的索引是非常相似,如:一本书的目录。 例如,如果想在一本书中引用的所有页面讨论某个话题,先参考索引按字母顺序列出所有目录主题,然后转到一个或多个特定的页...
在RHEL系统上安装subversion-1.4.2-2的过...
在RHEL系统上安装subversion-1.4.2-2的过程记录 下面的安装过程仅作为自己实践的纪念,呵呵。 [root@localhost CDROM]# find . -name "*sub*" ./Server/subversion-devel-1.4.2-2.el5.i386.rpm ./Server/subversion-1.4.2-2.el5.i386.rpm ./Server/subversion-javahl-1.4.2-2.el5.i386.rpm ./Server/subversion...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……