配置会话属性

只有 DBA 或用户 gbasedbt 可以在 SQL 的 ALTER PROCEDURE 、ALTER ROUTINE 、CREATE PROCEDURE 、CREATE PROCEDURE FROM 、CREATE ROUTINE FROM 、DROP PROCEDURE 或 DROP ROUTINE 语句中创建或更改 sysdbopen( )sysdbclose( )

您可以设置 sysdbopen( ) 过程,在连接或访问时更改会话的属性,而不更改会话运行的应用程序。如果无法修改应用程序的源代码以设置环境选项或环境变量或包括会话相关的 SQL 语句,例如,因为 SQL 语句包含供应商获取的代码,这将非常有用。

按照以下步骤设置 sysdbopen()sysdbclose() 过程以配置会话属性:

  1. IFX_NODBPROC 环境变量设置为任意值,包括 0,使数据库服务器绕过并阻止 sysdbopen( )sysdbclose( ) 过程的执行。
  2. 编写 CREATE PROCEDURE 或 CREATE PROCEDURE FROM 语句定义特定用户或 PUBLIC 组的过程。
  3. 测试此过程,例如,通过在 EXECUTE PROCEDURE 语句中使用 sysdbclose( )
  4. 取消设置 IFX_NODBPROC 环境变量以启用数据库服务器运行 sysdbopen( )sysdbclose( ) 过程。

SYSDBOPEN 过程的示例

以下过程设置指定用户的角色和 PDQ 优先级,并启用 NOVALIDATE 会话环境变量:
CREATE PROCEDURE oltp_user.sysdbopen()
            SET ROLE TO oltp;
            SET PDQPRIORITY 5;
            SET ENVIRONMENT NOVALIDATE '1';
            END PROCEDURE;
以下示例过程设置 PUBLIC 组的角色和 PDQ 优先级,并将 RETAINUPDATELOCKS 会话环境变量设置为 CURSOR STABILITY
	CREATE PROCEDURE PUBLIC.sysdbopen()
            SET ROLE TO others;
            SET PDQPRIORITY 1;
            SET ENVIRONMENT 
            RETAINUPDATELOCKS 'CURSOR STABILITY';
            END PROCEDURE