Postgre SQL 9.1 beta:开源世界的礼物

开源数据库产品Postgre SQL最新版本9.1的beta发布了,其开发者宣称这将会是划时代的一个版本,9.1将为我们带来企业级别的可靠性与数据完整性。Postgre SQL的核心开发小组成员Josh Berkus表示,即将到来的9.1版本引入了大量通过同步复制特性来完善数据库容错能力,使得数据库可以保证在主节点失败的情景中不丢失写操作。Berkus说:”在这个版本中,我们将提供Oracle DataGuard所能提供的所有特性,这将让如日本NTT等使用Oracle的公司从容地迁移到Postgre SQL上来”。

对于还在酝酿中的9.2版本,核心开发小组认为在他们试图提供更多容错与集群技术之前,首要的任务是完善最基础的同步复制功能,而后才有可能引入更为复杂的特性。

一个令人鼓舞的消息是EnterpriseDB公司正和NTT公司合作一个名为”PostgresXC”的项目,其目的为Postgre增加类似于Oracle RAC的功能,虽然在具体设计上2者存在区别。另一方面Postgres-R项目组获得了足够的资金,该项目致力于为Postgre SQL加入基于群组通信的集群功能,因为解决了后顾之忧该项目可能在今年发布新的版本。

Postgre SQL如果能成功引入Data Guard和RAC的相关功能,那么不失为一个功能丰富而又价格低廉的解决方案!

更多原始信息可以参考:PostgreSQL devs lift open source database to enterprise heights

Performance: PostgreSQL VS SQLSERVER

最近(2010 March) redhat公司release了一份对PostgreSQL和SQLSERVER的性能检测报告,使用相同的HP ProLiant DL370 G6(Intel Xeon W5580)主机,操作系统是Redhat Enterprise Linux 5:Windows Server 2008 Enterprise;PostgreSQL 部分参数进行了优化,包括checkpoint_timeout,effective_cache_size等,值得注意的是关掉了自动vacuum(autovacuum=false).测试结果是PostgreSQL略有优势,见图:

点击浏览性能报告.

EnterpriseDB Replication,复制Oracle数据测试(2)

介绍完了EnterpriseDB复制软件基本原理和注意事项,我们接下来进行Oracle数据复制到EntepriseDB advanced Server的实际演练。

先在Oracle实例中创建复制测试所用到的数据:

SQL> drop user source cascade; User dropped. SQL> create user source identified by source; User created. SQL> grant dba to source; Grant succeeded. SQL> grant create any trigger to source; Grant succeeded. SQL> conn source/source Connected. SQL> create table EMP 2 ( 3 EMPNO NUMBER(4) not null, 4 ENAME VARCHAR2(10), 5 . . . → Read More: EnterpriseDB Replication,复制Oracle数据测试(2)

EnterpriseDB Replication,复制Oracle数据测试(1)

EntepriseDB 复制软件目前支持多种数据库到postgre的复制,其基本结构由发布者(Publication)与订阅者(Subscriptions)组成,Replication软件可针对来自不同类型数据库的多个发布者,将其数据复制到多个订阅者(Subscriptions)数据库中。 其可能的几种拓扑结构,如以下图:

同Oracle中普通的物化视图一样,不支持对订阅者(Subscriptions)数据的修改–Changes must not be made to the data or the definitions of the subscription tables.

EnterpriseDB Replication软件的具体工作模式分成2种:即快照模式(snapshot)与同步模式(synchronization);在第一次启用同步前,需要进行一次快照操作,之后便可以进行较为轻量级同步操作了。若要使用同步模式(synchronization)则要求发布者所包含的表必须具有主键,而在仅使用快照模式的情景中则不需要。(Each table used in a publication must have a primary key with the exception of tables in snapshot-only publications, which do not require a primary key.) 以上模式均支持过滤器(fliter),即可以指定需要复制的具体数据子集。

EnterpriseDB Replication软件其同步(synchronization)模式复制的基本原理是基于trigger的,而非如Quest公司的shareplex或golden gate般抽取重做日志生成SQL的方式。trigger方式会在数据库源端产生一定的性能影响,若在mission critical的生产数据库中实施EDB replication 复制则需要考虑到这一点(这种情况下推荐使用Snapshot模式)。这可能是EDB复制软件比较不成熟的一点,就目前仅对Oracle日志文件的研究认识,挖掘重做日志进而实现数据复制的途径已经没有技术上的难点了。

以下发布者所包含的数据对象或表属性,将在订阅者成功建立时被复制到订阅者所在的数据库:

Tables . . . → Read More: EnterpriseDB Replication,复制Oracle数据测试(1)

EnterpriseDB Migration 迁移工具使用测试(2)

下面我们来测试EnterpriseDB Migration 工具对于Oracle 大对象(LOB)的迁移情况; 首先在在Oracle实例Scott模式下创建具有LOB对象的表,如:

SQL> create table tlob (t1 int primary key,t2 clob,t3 blob); Table created. — 并填充数据 SQL> begin 2 for i in 1..100 loop 3 insert into tlob values(i,rpad(‘A’,9999,’Z'),hextoraw(i) ); 4 end loop; 5 commit; 6 end; 7 / PL/SQL procedure successfully completed.

打开EnterpriseDB Migration 工具界面,从树形图中找到需要迁移的表TLOB,选择进行在线迁移:

导出日志:

[Starting Migration] 源数据库连接信息… 连接 . . . → Read More: EnterpriseDB Migration 迁移工具使用测试(2)

EnterpriseDB Migration 迁移工具使用测试(1)

EntperpriseDB 目前作为Postgre开源数据库的企业发行版,在原开源社区的基础上对postgre进行了扩展(contribute),值得关注的技术有infiniteCache,以及其强大的迁移工具Migration tools;下面我们来简单测试该迁移工具.

通过安装postgreplus-advanced-server软件包,其中将默认包括DBA management Server,DBA monitor Console,Migrate Studio,Replication Tools等一系列管理工具。我们需要用到的是Migrate Studio.

打开Migrate Studio首先定义迁移目标端的Enterprisedb实例,事先已经在主机rh2.home上安装了EnterpriseDB 8.3R2版本,同时创建了名为maclean的数据库(database),使用默认端口5444,新建EDB服务器:

该工具同大多数Oracle管理工具一样使用java驱动,但速度较快显得十分轻量级。

接着我们需要创建源端的Oracle服务器,同样在远程主机rh2.home上建立了Version 10.2.0.1的Oracle EE版数据库实例名为g10r21,Listener监听在端口1521上,尝试创建该服务器时将被要求Oracle JDBC包,该包可以到oracle官方网站下载,之后将该包放置到$EDBHOME/jre/lib/ext目录下;新建Oracle服务器:

之后我们可以尝试将Oracle实例中Scott模式下的对象迁移到enterprisedb中,在此之前我们在该模式下建立简单的存储过程,协同测试。

SQL> create or replace procedure scott.count_emp as 2 c int; 3 begin 4 select count(*) into c from scott.emp; 5 dbms_output.put_line(‘emp count is ‘||c); 6 end; 7 / Procedure created. SQL> set serveroutput . . . → Read More: EnterpriseDB Migration 迁移工具使用测试(1)