<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Oracle Berkeley DB 中国研发团队的博客 &#187; 未分类</title>
	<atom:link href="http://www.bdbchina.com/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bdbchina.com</link>
	<description>Oracle Berkeley DB 中国研发团队的博客</description>
	<lastBuildDate>Thu, 15 Dec 2011 10:35:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>BDB 5.2新特性简介——SQL 的高可用(High Availability)</title>
		<link>http://www.bdbchina.com/2011/12/bdb-5-2%e6%96%b0%e7%89%b9%e6%80%a7%e7%ae%80%e4%bb%8b%e2%80%94%e2%80%94sql-%e7%9a%84%e9%ab%98%e5%8f%af%e7%94%a8high-availability/</link>
		<comments>http://www.bdbchina.com/2011/12/bdb-5-2%e6%96%b0%e7%89%b9%e6%80%a7%e7%ae%80%e4%bb%8b%e2%80%94%e2%80%94sql-%e7%9a%84%e9%ab%98%e5%8f%af%e7%94%a8high-availability/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 08:59:46 +0000</pubDate>
		<dc:creator>傅翠云</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=1746</guid>
		<description><![CDATA[Oracle Berkeley DB 11gR2 5.2版本（下文简称BDB 5.2）在SQL接口层引入一个关于 高可用（HA）的新功能，即可以通过PRAGMA配置和启动在多个节点上运行SQL数据库集群的实例，从而通过scale-out的办法将数据库读操作能力扩展到多机上。这一机制的内部原理是使用底层BDB数据库内核的主从复制（即replication）机制。本文将简要介绍SQL HA的使用和实例。

BDB数据库内核的主从复制(BDB HA)工作原理 
BDB HA提供主从节点复制，以在分布式系统中提供高可用性和水平读扩展性。每个BDB HA组由单个master节点和多replica节点组成，并提供自动容错切换，其中master提供读写服务，replica节点上提供读服务。Replica为了和master保持数据一致，它会从master或者其他（和master同步的）replica上获得事务日志，并将数据库事务在本地数据库“重演”（replay）。因此，不论master还是replica，所有节点都保留一份当前HA组master上的数据文件和日志。下图1解释BDB的主从复制工作原理。
 
图 1 BDB HA工作原理
任何HA组有且只能有一个master。启动一个新的HA组前，先显式指派某个节点为master。此后，后续加入的节点都是replica节点。运行过程中，当master被关或者网络不可连接时，该HA组剩余节点将投票选举出新的master，此后，旧master再次加入该HA组时，只能以只读replica的方式进入。
在一个由n个节点构成的HA组中，通过选举产生master，最简单的方式是任何一个参与者投票给它认为拥有最多最新数据的节点，此时，获得半数以上(n/2+1)投票的节点将成为新的master。如果一个HA组无法选举出一个master，该HA组将只能提供读（即查询）服务，不能做数据写操作（如增、删、改）。
感兴趣的同学可以去了解一下分布式消息一致性和投票算法，如paxos，请参见参考文档。
 SQL层的主从复制（SQL HA）的工作原理
BDB SQL接口在5.2版本之前仅支持单节点的扩展性，通过SQL语句管理和操作数据库。在BDB 5.2版本中，BDB SQL引入多机扩展的功能（即HA，又叫主从复制的高可用），提供分布式多机环境下的SQL数据库集群功能。因此SQL HA为数据库提供更强大的读操作能力和更高的数据库服务可用性（即高可用）。
BDB 底层HA机制中，每个节点都是拥有唯一主机名和端口组合的BDB环境（可以看成是一个关系型数据库实例），而一个BDB环境可以有多个数据库（可以看成是关系型数据库的二维表）。而在SQL HA中，每个节点是拥有唯一主机名和端口组合的BDB数据库，每个数据库拥有各自的BDB环境。与BDB 底层HA机制略有不同的是，SQL HA里的复制粒度是单个数据库表（BDB里面称之为数据库），这个粒度比前者更细。如下图2所示：
  
图 2 BDB SQL HA架构示意图
SQL HA的使用语法
你可以通过BDB SQL层的PRAGMA指令来配置高可用的相关参数并启动集群。以下是相关的语法：
（1）   启动和关闭HA：PRAGMA replication=ON&#124;OFF
该语句必须在BDB SQL创建或重建数据库之前设置。在此之前，应先设置本地节点的地址和端口，以及本地节点是否是master，如果不是，则应设置一个远程节点的地址和端口。当HA初始化之后，可以关闭replication，但是它仅在下一次重开这个环境的时候起效。
（2）   设置本地节点是否master：PRAGMA replication_initial_master=ON&#124;OFF
该语句只能在初次创建一个HA时使用，本地节点是这个新的HA的第一个节点，其master的角色不是无限期的，当master掉线时，master的角色有可能转移到其后进入HA的节点上。
（3）   设置本地节点的地址和端口：PRAGMA replication_local_site=&#8221;hostname:port&#8221;
（4）   设置远程节点的地址和端口：PRAGMA replication_remote_site=&#8221;hostname:port&#8221;
当加入一个已存在的HA时，本地节点需要知道一个在线的远程节点，以帮助其进入HA。
（5）   设置被删除节点的地址和端口：PRAGMA replication_remove_site=&#8221;host:port&#8221;
永久地删除HA中的一个节点。与暂时掉线或者被关闭的节点不同，HA的任何一个有效节点都不再记录该节点，即HA中的节点数量减一。
（6）   设置是否输出HA相关日志信息：PRAGMA replication_verbose_output=ON&#124;OFF
（7）   设置HA相关日志信息的输出文件：PRAGMA replication_verbose_file=filename
应用示例
本文将示范如何在BDB SQL的命令行工具中配置和运行一个三个节点的HA。
(1) 配置首个节点，即master

// 创建数据库
dbsql univ.db
pragma replication_local_site="localhost:10001";
// 指定为该组的master
pragma replication_initial_master=ON;
// 启动replication
pragma replication=ON;

(2) 加入第二个节点

// 创建数据库，HA里每个节点的数据库名字应相同
dbsql [...]]]></description>
			<content:encoded><![CDATA[<p>Oracle Berkeley DB 11gR2 5.2版本（下文简称BDB 5.2）在SQL接口层引入一个关于 高可用（HA）的新功能，即可以通过PRAGMA配置和启动在多个节点上运行SQL数据库集群的实例，从而通过scale-out的办法将数据库读操作能力扩展到多机上。这一机制的内部原理是使用底层BDB数据库内核的主从复制（即replication）机制。本文将简要介绍SQL HA的使用和实例。</p>
<p><span id="more-1746"></span></p>
<h2>BDB数据库内核的主从复制(BDB HA)工作原理 </h2>
<p>BDB HA提供主从节点复制，以在分布式系统中提供高可用性和水平读扩展性。每个BDB HA组由单个master节点和多replica节点组成，并提供自动容错切换，其中master提供读写服务，replica节点上提供读服务。Replica为了和master保持数据一致，它会从master或者其他（和master同步的）replica上获得事务日志，并将数据库事务在本地数据库“重演”（replay）。因此，不论master还是replica，所有节点都保留一份当前HA组master上的数据文件和日志。下图1解释BDB的主从复制工作原理。</p>
<p style="text-align: center;"> <a href="http://www.bdbchina.com/wp-content/uploads/2011/12/BDB-HA工作原理.png"><img class="alignnone" title="BDB HA工作原理" src="http://www.bdbchina.com/wp-content/uploads/2011/12/BDB-HA工作原理.png" alt="" width="508" height="209" /></a></p>
<p style="text-align: center;">图 1 BDB HA工作原理</p>
<p>任何HA组有且只能有一个master。启动一个新的HA组前，先显式指派某个节点为master。此后，后续加入的节点都是replica节点。运行过程中，当master被关或者网络不可连接时，该HA组剩余节点将投票选举出新的master，此后，旧master再次加入该HA组时，只能以只读replica的方式进入。</p>
<p>在一个由n个节点构成的HA组中，通过选举产生master，最简单的方式是任何一个参与者投票给它认为拥有最多最新数据的节点，此时，获得半数以上(n/2+1)投票的节点将成为新的master。如果一个HA组无法选举出一个master，该HA组将只能提供读（即查询）服务，不能做数据写操作（如增、删、改）。</p>
<p>感兴趣的同学可以去了解一下分布式消息一致性和投票算法，如paxos，请参见参考文档。</p>
<h2> SQL层的主从复制（SQL HA）的工作原理</h2>
<p>BDB SQL接口在5.2版本之前仅支持单节点的扩展性，通过SQL语句管理和操作数据库。在BDB 5.2版本中，BDB SQL引入多机扩展的功能（即HA，又叫主从复制的高可用），提供分布式多机环境下的SQL数据库集群功能。因此SQL HA为数据库提供更强大的读操作能力和更高的数据库服务可用性（即高可用）。</p>
<p>BDB 底层HA机制中，每个节点都是拥有唯一主机名和端口组合的BDB环境（可以看成是一个关系型数据库实例），而一个BDB环境可以有多个数据库（可以看成是关系型数据库的二维表）。而在SQL HA中，每个节点是拥有唯一主机名和端口组合的BDB数据库，每个数据库拥有各自的BDB环境。与BDB 底层HA机制略有不同的是，SQL HA里的复制粒度是单个数据库表（BDB里面称之为数据库），这个粒度比前者更细。如下图2所示：</p>
<p style="text-align: center;">  <a href="http://www.bdbchina.com/wp-content/uploads/2011/12/BDB-SQL-HA.png"><img class="size-full wp-image-1747 aligncenter" title="BDB SQL HA" src="http://www.bdbchina.com/wp-content/uploads/2011/12/BDB-SQL-HA.png" alt="" width="524" height="234" /></a></p>
<p style="text-align: center;">图 2 BDB SQL HA架构示意图</p>
<h2>SQL HA的使用语法</h2>
<p>你可以通过BDB SQL层的PRAGMA指令来配置高可用的相关参数并启动集群。以下是相关的语法：</p>
<p>（1）   启动和关闭HA：PRAGMA replication=ON|OFF</p>
<p>该语句必须在BDB SQL创建或重建数据库之前设置。在此之前，应先设置本地节点的地址和端口，以及本地节点是否是master，如果不是，则应设置一个远程节点的地址和端口。当HA初始化之后，可以关闭replication，但是它仅在下一次重开这个环境的时候起效。</p>
<p>（2）   设置本地节点是否master：PRAGMA replication_initial_master=ON|OFF</p>
<p>该语句只能在初次创建一个HA时使用，本地节点是这个新的HA的第一个节点，其master的角色不是无限期的，当master掉线时，master的角色有可能转移到其后进入HA的节点上。</p>
<p>（3）   设置本地节点的地址和端口：PRAGMA replication_local_site=&#8221;hostname:port&#8221;</p>
<p>（4）   设置远程节点的地址和端口：PRAGMA replication_remote_site=&#8221;hostname:port&#8221;</p>
<p>当加入一个已存在的HA时，本地节点需要知道一个在线的远程节点，以帮助其进入HA。</p>
<p>（5）   设置被删除节点的地址和端口：PRAGMA replication_remove_site=&#8221;host:port&#8221;</p>
<p>永久地删除HA中的一个节点。与暂时掉线或者被关闭的节点不同，HA的任何一个有效节点都不再记录该节点，即HA中的节点数量减一。</p>
<p>（6）   设置是否输出HA相关日志信息：PRAGMA replication_verbose_output=ON|OFF</p>
<p>（7）   设置HA相关日志信息的输出文件：PRAGMA replication_verbose_file=filename</p>
<h2>应用示例</h2>
<p>本文将示范如何在BDB SQL的命令行工具中配置和运行一个三个节点的HA。</p>
<p>(1) 配置首个节点，即master<br />
<code><br />
// 创建数据库<br />
dbsql univ.db<br />
pragma replication_local_site="localhost:10001";<br />
// 指定为该组的master<br />
pragma replication_initial_master=ON;<br />
// 启动replication<br />
pragma replication=ON;<br />
</code><br />
(2) 加入第二个节点<br />
<code><br />
// 创建数据库，HA里每个节点的数据库名字应相同<br />
dbsql univ.db <br />
pragma replication_local_site="localhost:10002";<br />
// 指定一个在线节点<br />
pragma replication_remote_site="localhost:10001";<br />
pragma replication=ON;<br />
</code><br />
(3) 在第一个节点上插入数据<br />
<code><br />
INSERT INTO university VALUES(2, "Harvard University", "harvard.edu", "us", "North America", 7 , 2, 12, 1);<br />
</code><br />
(4) 在第二个节点查询数据<br />
<code><br />
SELECT * FROM university;<br />
</code><br />
(5) 加入第三个节点<br />
<code><br />
dbsql univ.db<br />
pragma replication_local_site="localhost:10003";<br />
// 第一个或者第二个节点都可以成为第三个节点的远程节点<br />
pragma replication_remote_site="localhost:10002";<br />
pragma replication=ON;<br />
</code><br />
(6) 在第三个节点删除第二个节点<br />
<code><br />
PRAGMA replication_remove_site="localhost:10002";<br />
CREATE TABLE university (<br />
rank int,<br />
name varchar(75),<br />
domains varchar(75),<br />
country varchar(30),<br />
region varchar(30),<br />
size int,<br />
visibility int,<br />
rich int,<br />
scholar int<br />
);<br />
</code></p>
<p>第二个节点被删除后，将不再获得第一个节点上的数据更新。</p>
<p>(7) 第三个节点设置不启动replication，并重新启动第三个节点<br />
<code><br />
PRAGMA replication=OFF;<br />
.quit<br />
dbsql univ.db<br />
</code></p>
<p>关闭之后的所有HA数据更新都不会再应用到第三个节点上，该节点变成单机数据库，可进行读写操作。</p>
<h2>参考文档</h2>
<ul>
<li>SQL HA 相关的Pragma指令： <a href="http://download.oracle.com/docs/cd/E17076_02/html/bdb-sql/addedpragmas.html#replication_pragmas">http://download.oracle.com/docs/cd/E17076_02/html/bdb-sql/addedpragmas.html#replication_pragmas</a></li>
<li>BDB主从复制机制介绍：<a href="http://www.oracle.com/technetwork/database/berkeleydb/overview/high-availability-099050.html">http://www.oracle.com/technetwork/database/berkeleydb/overview/high-availability-099050.html</a></li>
<li>SQL HA应用示例代码：<a href="http://download.oracle.com/docs/cd/E17076_02/html/bdb-sql/rep_usageexamples.html">http://download.oracle.com/docs/cd/E17076_02/html/bdb-sql/rep_usageexamples.html</a></li>
<li>Paxos算法：<a href="http://en.wikipedia.org/wiki/Paxos_%28computer_science%29">http://en.wikipedia.org/wiki/Paxos_%28computer_science%29</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2011/12/bdb-5-2%e6%96%b0%e7%89%b9%e6%80%a7%e7%ae%80%e4%bb%8b%e2%80%94%e2%80%94sql-%e7%9a%84%e9%ab%98%e5%8f%af%e7%94%a8high-availability/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>重要通知：关于甲骨文2010校招的在线测试</title>
		<link>http://www.bdbchina.com/2009/11/%e9%87%8d%e8%a6%81%e9%80%9a%e7%9f%a5%ef%bc%9a%e5%85%b3%e4%ba%8e%e7%94%b2%e9%aa%a8%e6%96%872010%e6%a0%a1%e6%8b%9b%e7%9a%84%e5%9c%a8%e7%ba%bf%e6%b5%8b%e8%af%95/</link>
		<comments>http://www.bdbchina.com/2009/11/%e9%87%8d%e8%a6%81%e9%80%9a%e7%9f%a5%ef%bc%9a%e5%85%b3%e4%ba%8e%e7%94%b2%e9%aa%a8%e6%96%872010%e6%a0%a1%e6%8b%9b%e7%9a%84%e5%9c%a8%e7%ba%bf%e6%b5%8b%e8%af%95/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 09:27:20 +0000</pubDate>
		<dc:creator>chaohuang</dc:creator>
				<category><![CDATA[Berkeley DB]]></category>
		<category><![CDATA[Chao Huang]]></category>
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=719</guid>
		<description><![CDATA[各位2010的应届生同学们，
甲骨文的在线笔试通知已经在2009/11/10以Email形式发到每一个在线申请者的邮箱，请大家注意查收并按照指示答题。提交答案的最后期限是2009/11/13。。
如果有通过在线申请，但是还没有收到Email通知的同学、或者至今还没有完成在线申请的同学，请速与我联系：将你的Resume ID，申请的职位及工作地点，和简历发到chao.huang@oracle.com。最后的机会 &#8211; 截至到11/15！！
如果你错过了Oracle校园招聘的在线申请，但现在还想申请Oracle Berkeley DB职位的同学，请在12月1号前将你的简历发到chao.huang@oracle.com。
]]></description>
			<content:encoded><![CDATA[<p>各位2010的应届生同学们，</p>
<p>甲骨文的在线笔试通知已经在<strong>2009/11/10</strong>以Email形式发到<strong>每一个在线申请者</strong>的邮箱，请大家注意查收并按照指示答题。提交答案的最后期限是<strong>2009/11/13。</strong>。</p>
<p><strong><span style="color: red">如果有通过在线申请，但是还没有收到Email通知的同学、或者至今还没有完成在线申请的同学，请速与我联系：将你的Resume ID，申请的职位及工作地点，和简历发到chao.huang@oracle.com。最后的机会 &#8211; 截至到11/15！！</span></strong></p>
<p><strong><span style="color: red">如果你错过了Oracle校园招聘的在线申请，但现在还想申请Oracle Berkeley DB职位的同学，请在12月1号前将你的简历发到chao.huang@oracle.com。</span></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2009/11/%e9%87%8d%e8%a6%81%e9%80%9a%e7%9f%a5%ef%bc%9a%e5%85%b3%e4%ba%8e%e7%94%b2%e9%aa%a8%e6%96%872010%e6%a0%a1%e6%8b%9b%e7%9a%84%e5%9c%a8%e7%ba%bf%e6%b5%8b%e8%af%95/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SQL开发者的BerkeleyDB入门指南</title>
		<link>http://www.bdbchina.com/2009/08/sql%e5%bc%80%e5%8f%91%e8%80%85%e7%9a%84berkeleydb%e5%85%a5%e9%97%a8%e6%8c%87%e5%8d%97/</link>
		<comments>http://www.bdbchina.com/2009/08/sql%e5%bc%80%e5%8f%91%e8%80%85%e7%9a%84berkeleydb%e5%85%a5%e9%97%a8%e6%8c%87%e5%8d%97/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 08:47:12 +0000</pubDate>
		<dc:creator>Winter</dc:creator>
				<category><![CDATA[Berkeley DB]]></category>
		<category><![CDATA[Winter Zhang]]></category>
		<category><![CDATA[未分类]]></category>
		<category><![CDATA[bdb]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=505</guid>
		<description><![CDATA[随着BerkeleyDB的发展，越来越多原来与传统关系数据库打交道的开发者希望了解、学习BerkeleyDB，并且在开发过程中应用BerkeleyDB。
但是， 与传统的关系数据库不同， BerkeleyDB目前并不支持SQL 查询处理，使用者需要书写代码来实现类似SQL的查询。许多SQL开发者在此过程遇到不少困难。
为了方便SQL开发者学习BerkeleyDB, 我们提供了两篇入门指南，供大家参考。 考虑到有些朋友可能不好访问国外网站，在提供链接的同时， 我们还将这两篇指南上传至开心网BerkeleyDB群组的文件共享区，需要的可以下载阅读(不提供BerkeleyDB XML版本的该指南，因为在BerkeleyDB XML中可以直接使用功能强大的XQuery来查询内容)。
1  对BerkeleyDB
指南地址为： Guide to Oracle Berkeley DB for SQL Developers
开心网文件地址：http://www.kaixin001.com/group/file.php?gid=627784&#38;fid=401933&#38;start=0
2 对BerkeleyDB Java Edition
指南地址为：  Performing Queries in Oracle Berkeley DB Java Edition 
开心网文件地址为: http://www.kaixin001.com/group/file.php?gid=627784&#38;fid=396176&#38;start=0
]]></description>
			<content:encoded><![CDATA[<p>随着BerkeleyDB的发展，越来越多原来与传统关系数据库打交道的开发者希望了解、学习BerkeleyDB，并且在开发过程中应用BerkeleyDB。</p>
<p>但是， 与传统的关系数据库不同， BerkeleyDB目前并不支持SQL 查询处理，使用者需要书写代码来实现类似SQL的查询。许多SQL开发者在此过程遇到不少困难。</p>
<p>为了方便SQL开发者学习BerkeleyDB, 我们提供了两篇入门指南，供大家参考。 考虑到有些朋友可能不好访问国外网站，在提供链接的同时， 我们还将这两篇指南上传至开心网BerkeleyDB群组的文件共享区，需要的可以下载阅读(不提供BerkeleyDB XML版本的该指南，因为在BerkeleyDB XML中可以直接使用功能强大的XQuery来查询内容)。</p>
<p>1  对BerkeleyDB</p>
<p>指南地址为：<a href="http://www.oracle.com/technology/pub/articles/seltzer-berkeleydb-sql.html"> Guide to Oracle Berkeley DB for SQL Developers</a></p>
<p>开心网文件地址：<a href="http://www.kaixin001.com/group/file.php?gid=627784&amp;fid=401933&amp;start=0">http://www.kaixin001.com/group/file.php?gid=627784&amp;fid=401933&amp;start=0</a></p>
<p>2 对BerkeleyDB Java Edition</p>
<p>指南地址为： <strong></strong> <a class="bodylink" href="http://www.oracle.com/technology/products/berkeley-db/pdf/performing%20queries%20in%20oracle%20berkeley%20db%20java%20edition.pdf">Performing Queries in Oracle Berkeley DB Java Edition </a></p>
<p>开心网文件地址为: <a href="http://www.kaixin001.com/group/file.php?gid=627784&amp;fid=396176&amp;start=0">http://www.kaixin001.com/group/file.php?gid=627784&amp;fid=396176&amp;start=0</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2009/08/sql%e5%bc%80%e5%8f%91%e8%80%85%e7%9a%84berkeleydb%e5%85%a5%e9%97%a8%e6%8c%87%e5%8d%97/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
Դ
