在国内一些复杂度较高的 ABAP 实现项目中,需要在同一个 ABAP 报表中同时访问多个数据库模式,甚至完全不同的数据库系统。
SAP 在 NetWeaver 里通过 Open SQL Multi‑Connect 机制,提供了标准连接(Standard Connection)、二级连接(Secondary Connection)与服务连接(Service Connection)三种方式,并允许它们在 Open SQL、Native SQL (EXEC SQL)、ADBC 以及 AMDP 之间共享。
多连接为何重要?
在传统 ABAP 应用中,绝大多数 SQL 都通过「标准连接」访问系统本身的数据库模式(SAP Help Portal)。
然而,随着数据湖、审计日志、预归档等需求的增加,后台往往需要跨库写入或读取只读副本来减轻主库压力。
二级连接和服务连接正是为此而生:前者可以通向任意受 SAP 支持的外部数据库,后者则在标准数据库内部,建立独立事务上下文,两者皆可通过同一工作进程并行存在。
标准连接 (Standard Connection)
特点:随应用服务器启动即存在,无法关闭;所有内部会话共享;别名 DEFAULT 可显式指定(SAP Help Portal)。
典型场景:绝大多数业务 SQL;无需额外配置。
SAP 帮助文档里给出了标准连接的一个使用例子:
DELETE FROM demo_update CONNECTION default.INSERT demo_update CONNECTION defaultFROM @( VALUE #( id = 'X' col1 = 1 col2 = 2 col3 = 3 col4 = 4 ) ).COMMIT CONNECTION default.
二级连接 (Secondary Connection)
定义:在表 DBCON 内维护,键值 CON_NAME 作为连接名,区分大小写。
限制:目标数据库必须受 SAP 支持;需部署相应 DBSL(Database Shared Library) 与客户端库。
用法:在任何 SQL 技术栈中使用同名标识符即可,首次调用自动打开连接;最多 15 条二级/服务连接同时存在于同一工作进程中,加上标准连接共 16 条上限。
这个数据库连接数目的上限,出自以下 SAP 帮助文档:
https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-US/abenopensql_multiconnect.htm
二级连接的使用例子:
DATA conn TYPE dbcon-con_name.cl_demo_input=>request( CHANGING field = conn ).SELECT SINGLE @abap_true FROM dbcon WHERE con_name = @conn INTO @DATA(dbtype).IF sy-subrc <> 0. cl_demo_output=>display( 'Connection not in DBCON' ). RETURN.ENDIF.DELETE FROM demo_update CONNECTION (conn).INSERT demo_update CONNECTION (conn)FROM @( VALUE #( id = 'X' col1 = 1 col2 = 2 col3 = 3 col4 = 4 ) ).COMMIT CONNECTION (conn).
实际项目案例:
某全球服装集团将门店销售明细实时落盘至 HANA 主库,同时用二级连接将关键字段异步写入 Oracle 数据仓库,用于 BI 分析,避免在核心 OLTP 库创建体量巨大的报表索引。
服务连接 (Service Connection)
命名规则:R/3* 前缀 + 1~26 位自定义名,完全区分大小写。
特性:始终指向标准数据库,但事务隔离于标准连接;便于手动控制日志、锁和提交粒度。
潜在风险:若同一行数据库记录,被标准连接与服务连接同时修改且忘记显式 COMMIT, 会造成「单进程死锁」。还好此类错误可以通过早期代码审查来发现。
服务连接的使用例子:
DELETE FROM demo_update CONNECTION R/3*service_conn.INSERT demo_update CONNECTION R/3*service_connFROM @( VALUE #( id = 'X' col1 = 1 col2 = 2 col3 = 3 col4 = 4 ) ).COMMIT CONNECTION R/3*service_conn.
下一篇文章,继续介绍 ABAP 这三种数据库连接的生命周期管理,上限与监控,以及在下列四大技术栈中的使用差异。
Open SQL
ADBC
Native SQL
AMDP
领取专属 10元无门槛券
私享最新 技术干货