返回首页

gbase数据、南大通用产品文档:GBase8a

更新日期:2024年09月11日

安装准备.......................................... 4

下列为样例数据库模式:
create table tab ( a set(integer not null), b integer);
insert into tab values ("set{1, 2, 3}", 10);
下列为使用 java.util.HashSet 对象的访存示例:
java.util.HashSet set;

PreparedStatement pstmt;
ResultSet rs;
pstmt = conn.prepareStatement("select * from tab");
System.out.println("prepare ... ok");
rs = pstmt.executeQuery();
System.out.println("executeQuery ... ok");

rs.next();
set = (HashSet) rs.getObject(1);
System.out.println("getObject() ... ok");

/* The user can now use HashSet.iterator() to extract
* each element in the collection.

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 118 -

*/
Iterator it = set.iterator();
Object obj;
Class cls = null;
int i = 0;
while (it.hasNext())
{
obj = it.next();
if (cls == null)
{
cls = obj.getClass();
System.out.println(" Collection class: " + cls.getName());
}
System.out.println(" element[" + i + "] = " +
obj.toString());
i++;
}
pstmt.close();
在此示例的 set = (HashSet) rs.getObject(1) 语句中, GBase 8s JDBC Driver 取得列 1 的类型。
由于它是 SET 类型,因此,实例化一HashSet 对象。接下来,将每一集合元素转换至 Java
™ 对象内,并插入至集合内。
下列访存示例使用 java.util.TreeSet 对象:
java.util.TreeSet set;

PreparedStatement pstmt;
ResultSet rs;

/*
* Fetch a SET as a TreeSet instead of the default
* HashSet. In this example a new java.util.Map object has
* been allocated and passed in as a parameter to getObject().
* Connection.getTypeMap() could have been used as well.
*/
java.util.Map map = new HashMap();
map.put("set", Class.forName("java.util.TreeSet"));
System.out.println("mapping ... ok");


GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 119 -

pstmt = conn.prepareStatement("select * from tab");
System.out.println("prepare ... ok");
rs = pstmt.executeQuery();
System.out.println("executeQuery ... ok");

rs.next();
set = (TreeSet) rs.getObject(1, map);
System.out.println("getObject(Map) ... ok");

/* The user can now use HashSet.iterator() to extract
* each element in the collection.
*/
Iterator it = set.iterator();
Object obj;
Class cls = null;
int i = 0;
while (it.hasNext())
{
obj = it.next();
if (cls == null)
{
cls = obj.getClass();
System.out.println(" Collection class: " + cls.getName());
}
System.out.println(" element[" + i + "] = " +
obj.toString());
i++;
}
pstmt.close();
在 map.put("set", Class.forName("java.util.TreeSet" )); 语句中,
覆盖 set = HashSet 的缺省映射。

在 set = (TreeSet)rs.getObject(1, map) 语句中,GBase 8s JDBC Driver 为列 1 取得类型,并
发现它是 SET 对象。然后,驱动程序查找类型映射信息,找到 TreeSet,并实例化
一 TreeSet 对象。接下来,将每一集合元素映射至 Java 对象,并插入至集合内。
下列示例展示插入。此示例将 set (0, 1, 2, 3, 4) 插入至 SET 列内:
java.util.HashSet set = new HashSet();
Integer intObject;
int i;

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 120 -


/* Populate the Java collection */
for (i=0; i < 5; i++)
{
intObject = new Integer(i);
set.add(intObject);
}
System.out.println("populate java.util.HashSet...ok");

PreparedStatement pstmt = conn.prepareStatement
("insert into tab values (?, 20)");
System.out.println("prepare...ok");

pstmt.setObject(1, set);
System.out.println("setObject()...ok");
pstmt.executeUpdate();
System.out.println("executeUpdate()...ok");
pstmt.close();
此示例中的 pstmt.setObject(1, set) 语句首先序列化集合的每一元素。接下来,构造类型信息
作为每一元素转换为 Java 对象。
如果该集合中任何元素的类型都与第一个元素的类型不匹
配,则抛出异常。将类型信息发送至数据库服务器。

库级别增量同步要求源数据库与目标数据库下的所有表的表名及列名完全
一致。如果有部分表不需要同步,可以使用排除表功能排除掉这些表。
在目标库为GBase 8t 数据库时,同步工具支持断点续传。为了保证断点续
传功能,同步工具在目标库中创建了table_lsn 表用于保存lsn 信息。该表会
导致源库与目标库中的表个数不一致,因此,在库级同步时,需要目标端配置
排除table_lsn 表。如果不需要排除表,可以删除配置文件中的tables 标签。
下面按照步骤详细介绍:
修改任务文件config_task.xml,该文件在读端,写端,管理端各有一份,

GBase RTSync 同步工具手册
- 110 -
南大通用数据技术股份有限公司
如果同步工具安装后再修改该文件请确保三处配置文件一致。


id="server1"
mqType="kafka" queueName="8ttooraMQ" dataRecoveryMode="auto"
isHighAvailable="false">
httpPort="8080" isTableHotPatch="true"/>
readParseAdapter="adapter" user="root" password="root" queueSize="10000"
openMonitor="true" monitorInterval="300" rpcPort="9191" sshPort="22"/>
writeDataAdapter="adapter" user="root" password="root"
errorishandle="true" sendDataBySocket="false" sshPort="22" rpcPort="9191"
monitorInterval="300"/>

id="ora_8t_5.1_5.2">

charset="utf8"
type="GBASE8T"
startLSN="0"
fetchSize="500"
oracleScnStep="50000"
timestampWithFraction="false"
maxRecordsPerRead="200"
maxSizeOfPerRecord="1024"
timeOut="1"
driver="com.informix.jdbc.IfxDriver"
url="jdbc:informix-sqli://192.168.5.4:31267/syscdcv1:informixserver=
ol_informix1210"
user="informix"
password="1"
catalog="testdb">


GBase RTSync 同步工具手册
南大通用数据技术股份有限公司
- 111 -
charset="UTF8"
type="ORACLE"
commitSize="100"
queueSize="20000"
user="test"
password="test"
driver="oracle.jdbc.driver.OracleDriver"
catalog="TEST"
timeOut="2"
url="jdbc:oracle:thin:test/test@//192.168.5.6:1521/orcl"
>




sourcePkColName="" targetTableName="" targetPkColName="" />

sourcePkColName="" targetTableName="T2" targetPkColName="" />

sourcePkColName="" targetTableName="TABLE_LSN" targetPkColName="" />






修改消息队列配置文件:config_kafka_8ttooraMQ.properties。

GBase RTSync 同步工具手册
- 112 -
南大通用数据技术股份有限公司
#kafka 主题
topic.name=8ttoora
#producer conf
#kafka集群ip及服务端口
bootstrap.servers=192.168.5.11:9092,192.168.5.12:9092
#批量发送数据到kafka的批次数
kafka.batch.commit.count=400
#批量发送数据到kafka等待的超时时间,单位毫秒
kafka.batch.commit.time=100
#kafka 发送数据到kafka异常重发的次数,超过该次数仍然未成功同步工具将退出服务
kafka.resend.max.retries=3
#kafka 接收数据的应答机制。
0代表立即返回,
无论数据是否成功写入kafka;1代表leader
节点成功写入磁盘后才返回结果;all代表所有节点都要写入磁盘才返回结果。根据数据安
全性要求可以实际配置。
kafka.acks=all
#kafka生产者其他必要参数配置,参数信息为标准的kafka生产者参数。
kafka.producer.paramers=request.timeout.ms=30000;metadata.fetch.timeout.
ms=30000
#consumer conf
#kafka所使用zookeeper信息
zookeeper.connect=192.168.5.21:2181,192.168.5.22:2181,192.168.5.23:2181
#kafka消费者组名称
group.id=test
#自动提交时间间隔,一般不用修改
auto.commit.interval.ms=1000
#zookeeper follower能落后leader多久还被认为是活着的
zookeeper.sync.time.ms=2000
#zookeeper session超时时间,如果这段时间没有收到zk的心跳,则认为kafka服务异常
zookeeper.session.timeout.ms=4000
#发送数据到kafka单条数据的最大值,单位字节,超过该大小经进行分包发送
send.data.max.size=1000000
#从kafka获取单条数据的最大值,单位字节,该值应该大于等于send.data.max.size
fetch.message.max.bytes=1000000
完成后,既可启动同步工具。使用root 用户登录192.168.5.3,执行如下
命令启动同步工具组件:

GBase RTSync 同步工具手册
南大通用数据技术股份有限公司
- 113 -
# cd /opt/RTSync /
# sh RTSyncManagerServer.sh start
启动后,同步工具将开始同步数据工作。
可以使用如下命令监控同步工具运行状况。
# tail -f logs/sync.log