金仓数据库KingbaseES rac全局事务与两阶段提交操作演示
关键字:
KingbaseES、RAC、人大金仓
rac全局事务与两阶段提交操作演示:
系数据库共享存储集群支持全局事务:
crm status 2. 修改kingbase.conf中的max_prepared_transactions参数开启两阶段提交: vim /sharedata/data_gfs2/rac/data/kingbase.conf 3. 如上修改完成后,重启数据库: crm resource restart clone-DB 4. 两节点同时用rac用户连接ksql,执行\d : /home/rac/KingbaseRAC/bin/ksql -Usystem -dtest -p55555 5. 任选其中一节点,创建一张test表,默认情况自动提交功能是开启的 create table test(id int); \echo :AUTOCOMMIT 6. 此时去另一节点 \d查询表视图,可以看到test表已被创建: 7. 在节点1通过begin语句来开启事务,并执行插入数据操作 insert into test values(1); 8. 在节点2查询test表数据,预期无数据: select * from test; 9. 节点1通过end语句提交该事务,节点2便可以读到数据: select * from test; 10. 节点1通过begin语句开启事务,然后写入1条数据,使用savepoint建一个保存点,再次写入数据,两节点查看表中数据: begin; insert into test values(2); savepoint my_savepoint01; insert into test values(3); select * from test; 节点1: 节点2: 11. 节点1执行rollback操作回滚至保存点位置,节点1查看表数据变化,再节点1执行commit提交后,节点2查看表数据: rollback to savepoint my_savepoint01; select * from test; commit; select * from test; 节点1: 节点2: 【两阶段提交】 12. 节点1创建表t1,通过begin语句开启事务,写入1条数据,然后准备事务提交的第一阶段,此时两节点都查看全局事务视图,查看t1中的表数据无新增: create table t1(id int); begin; insert into t1 values(1); prepare transaction 'trans_001'; select * from sys_prepared_xacts; select * from t1; 节点1: 节点2: 可见此事务已被持久化,即便数据库重启,该事务也不会回滚或丢失。 13. 此时退出ksql连接,重新连接,查看全局事务视图发现事务trans_001仍存在,任选一节点执行commit操作,成功后再次查看全局事务视图和表数据,事务已提交数据已更新: \q /home/rac/KingbaseRAC/bin/ksql -Usystem -dtest -p55555 select * from sys_prepared_xacts; commit prepared 'trans_001'; select * from sys_prepared_xacts; select * from t1; 节点1: 节点2: 可见全局事务已提交,数据已更新; 14. 节点1通过begin语句开启事务,写入1条数据,然后准备事务提交的第一阶段,此时两节点都查看全局事务视图,查看t1中的表数据无新增 begin; insert into t1 values(2); prepare transaction 'trans_002'; select * from t1; select * from sys_prepared_xacts; 节点1: 节点2: 15. 两节点退出ksql连接,重新连接,查看全局事务视图发现事务trans_002仍存在,任选一节点执行rollback操作,成功后再次查看全局事务视图和表数据: 节点1: \q /home/rac/KingbaseRAC/bin/ksql -Usystem -dtest -p55555 select * from sys_prepared_xacts; select * from t1; 节点2: \q /home/rac/KingbaseRAC/bin/ksql -Usystem -dtest -p55555 select * from sys_prepared_xacts; select * from t1; rollback prepared 'trans_002'; select * from sys_prepared_xacts; 可见全局事务已回滚。 |




