1.1 CREATE XADATASOURCE 语句
使用 CREATE XADATASOURCE 语句创建新的兼容 XA 的数据源并为其在 sysxadatasources 系统目录表中创建一个条目。该语句是 SQL ANSI/ISO 标准的扩展。
语法

元素 | 描述 | 限制 | 语法 |
xa_source | 此处为新的 XA 数据源声明的名称 | 在 sysxadatasources 中的 XA 数据源名称中必须是唯一的 | 标识符 |
xa_type | 现有 XA 数据源类型的名称 | 必须已经存在于 sysxasourcetypes 系统目录表的数据库中 | 标识符 |
用法
符合 XA 标准的数据源是符合 X/Open DTP XA 标准的外部数据源,用于管理事务管理器和资源管理器之间的交互。要在数据库中注册符合 XA 的数据源,需要执行以下两条 SQL 语句:
l 首先通过使用 CREATE XADATASOURCE 语句创建一个或多个符合 XA 的数据类型。
l 然后用 CREATE XADATASOURCE 语句创建一个或多个符合 XA 数据源的实例。
您可以使用两阶段提交协议将 XA 数据源中的事务与 GBase 8s 事务集成,以确保事务在多个数据库之间一致提交或回滚,并在同一全局事务中管理多个外部 XA 数据源。
高可用集群的辅助服务器上不支持 CREATE XADATASOURCE 语句。
任何用户都可以根据数据库是否符合 ANSI 的状态创建遵循所有者命名规则标准的 XA 数据源。只有使用事务日志记录的数据库才支持 X/Open DTP XA 标准。
如果您包含了可选的 IF NOT EXISTS 关键字,则如果它指定名称的 XA 数据源已在当前数据库中注册,则数据库服务器不会执行任何操作(而不是向应用程序发送异常)。
XA 数据源类型和 XA 数据源实例都会指定到一个数据库。要支持分布式事务,必须在多个与外部 XA 数据源交互的数据库中创建它们。
以下语句创建一个新的 XA 数据源实例,它的名称为 gbasedbt.NewYork ,是 gbasedbt.MQSeries 类别。
CREATE XADATASOURCE gbasedbt.NewYork USING gbasedbt.MQSeries;
SQL 语句在 XA 环境中无效
当您在尝试在 X/Open 分布式事务处理环境中执行以下任何语句时, GBase 8s 数据库服务器发出错误 -701 :
l CLOSE DATABASE
l CREATE DATABASE
l DROP DATABASE
l SET LOG
l SAVEPOINT
l RELEASE SAVEPOINT
l ROLLBACK TO SAVEPOINT
在 XA 环境中,您可以在 xa_open 调用指定当前数据库后执行一个 DATABASE 语句。但是,当选择了该数据库后,在同一会话中不能有其它 DATABASE 语句。如果您创建执行第二个 DATABASE 语句,DATABASE 语句发生错误 -701 并失败。
1.2 CREATE XADATASOURCE TYPE 语句
使用 CREATE XADATASOURCE TYPE 语句创建新的符合 XA 的数据源类型,并在 sysxasourcetypes 系统目录表中为其创建一个条目。该语句是 SQL ANSI/ISO 标准的扩展。
语法

元素 | 描述 | 限制 | 语法 |
xa_type | 在此处声明新的 XA 数据源类型的名称 | 在 sysxasourcetypes 系统目录表中的 XA 数据源类型名称中必须是唯一的 | 标识符 |
用法
CREATE XADATASOURCE TYPE 语句向数据库中添加一个符合 XA 的数据源类型。
高可用集群的辅助服务器上不支持 CREATE XADATASOURCE TYPE 语句。
任何用户都可以根据数据库是否符合 ANSI 的状态创建遵循所有者命名规则标准的 XA 数据源类型。只有使用事务日志记录的数据库才支持 X/Open DTP XA 标准。
要创建数据源类型,您必须声明它的名称并指定 purpose functions 和 purpose values 作为 XA 源类型的属性。源类型名称后面的大多数的选项将 sysxasourcetypes 系统目录表中的列与 UDR 相关联。
如果您包含了可选的 IF NOT EXISTS 关键字,则如果它指定名称的 XA 数据源类型名称已在当前数据库中注册,则数据库服务器不会执行任何操作(而不是向应用程序发送异常)。
XA 数据源类型和 XA 数据源实例都会指定到一个数据库。要支持分布式事务,必须在多个与外部 XA 数据源交互的数据库中创建它们。
以下语句创建新的 XA 数据源类型,名为 MQSeries® ,被用户 gbasedbt 所有。
CREATE XADATASOURCE TYPE 'gbasedbt'.MQSeries(
xa_flags = 1,
xa_version = 0,
xa_open = gbasedbt.mqseries_open,
xa_close = gbasedbt.mqseries_close,
xa_start = gbasedbt.mqseries_start,
xa_end = gbasedbt.mqseries_end,
xa_rollback = gbasedbt.mqseries_rollback,
xa_prepare = gbasedbt.mqseries_prepare,
xa_commit = gbasedbt.mqseries_commit,
xa_recover = gbasedbt.mqseries_recover,
xa_forget = gbasedbt.mqseries_forget,
xa_complete = gbasedbt.mqseries_complete);
您需要为上述列出的选项提供一个值或 UDR 名称,但是您列出它们的顺序并不重要。(在此示例中目标选项的顺序与 sysxasourcetypes 系统目录表中列名称的顺序相对应。)
此语句成功执行后,您创建了 gbasedbt.MQSeries 类型的实例。以下语句创建了新的实例 gbasedbt.MenloPark ,它符合 XA 数据源类型 gbasedbt.MQSeries :
CREATE XADATASOURCE gbasedbt.MenloPark USING gbasedbt.MQSeries;




