返回首页

gbase数据、南大通用产品文档:GBase8a添加角色

更新日期:2024年09月11日

当我们需要为一个监控用户分配新的监控权限时,需要先添加新的角色,
再为该角色分配相应监管权限,首先通过点击“添加”按钮,进入添加角色界
面,如下图:
图3.2-8 添加角色

统一数据平台监控与运维系统用户手册
- 38 -
南大通用数据技术股份有限公司
界面属性说明:

角色名:用户所绑定的角色名称,长度30 个字符,字母、数字、下划
线,包括中文,不支持全角。

角色描述:对角色名以及其相应权限的简单描述。

状态:单选按钮,选择“启用”则该角色可被用户绑定,选择“禁用”
则该角色不能被用户绑定。

使用 SET ISOLATION 语句来定义在尝试同时地访问相同行的进程之中的并发程
度。
此语句是对 SQL 的 ANSI/ISO 标准的扩展。
语法

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1050

用法
SET ISOLATION 语句是对 ANSI SQL-92 标准的 GBase 8s 扩展。SET
ISOLATION 语句可更改会话的持久的隔离级别。如果您想要通过符合 ANSI 的
语句设置隔离级别,则请改为使用 SET TRANSACTION 语句。要获取这两个语
句的对比信息,请参阅 SET TRANSACTION 语句。
TO 关键字是可选的,且不起作用。
对于 DIRTY READ(在 SET TRANSACTION 中称为 UNCOMMITTED)、
COMMITTED READ 和 REPEATABLE READ(在 SET TRANSACTION 中称为
SERIALIZABLE in SET TRANSACTION)隔离级别,SET ISOLATION 提供与符
合 ISO/ANSI 的 SET TRANSACTION 语句相同的功能。
当从数据库检索行时,数据库 isolation_level 影响读并发。隔离级别指定在并
发 SQL 事务执行期间可发生的现象。可能发生下列现象:

Dirty Read。SQL 事务 T1 修改一行。然后,SQL 事务 T2 在 T1 执行
COMMIT 之前读那行。如果 T1 然后执行 ROLLBACK,则 T2 会读了
从未提交的,且可被认为从未存在的一行。

Non-Repeatable Read。SQL 事务 T1 读一行。然后 SQL 事务 T2 修改
或删除那行并执行 COMMIT。如果 T1 然后尝试重新读那行,则 T1 可
能收到修改了的值或发现那行已被删除了。

Phantom Row。SQL 事务 T1 读满足某搜索条件的多行 N 的集合。然
后 SQL 事务 T2 执行 SQL 语句,该语句生成满足 SQL 事务 T1 所使
用的搜索条件的一个或多个新行。如果 T1 然后以相同的搜索条件重复
原来的读,则 T1 收到不同的行的集合。
数据库服务器使用分享的锁来支持尝试访问数据的进程中不同的隔离级别。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1051
更新或删除进程在正被修改的行上总是要求排他锁。隔离级别不干扰您正在更新
或删除的行。如果另一进程尝试更新或删除您正在以 Repeatable Read 隔离级别读
取的行,则拒绝那个进程访问那些行。
在 GBase 8s ESQL/C 中,当 SET ISOLATION 执行时打开的那些游标检索行
时,可能会或可能不会使用新的隔离级别。从打开了游标直到应用存取行这段时
间,设置了的任何隔离级别都可能生效。数据库服务器使用在那个时刻生效的隔
离级别,可能已经将行读到内部的缓冲区和内部的临时表之内。要确保一致性和
可复现的结果,在您执行 SET ISOLATION 语句之前,请关闭任何打开的游标。
仅在打开数据库之后,您才可从客户端计算机发出 SET ISOLATION 语句。
完整连接级别设置
SET ISOLATION 语句支持完整连接级别设置。这意味着将在连接时刻本地会话
环境中的值传播到所有新的或恢复的事务。这些可包括下列事务类型:

本地数据库内的事务,

跨同一服务器实例的数据库的分布式事务,

跨两个或多个数据库服务器实例的数据库的分布式事务,

带有注册在本地数据库中的符合 XA 的数据源的全局事务。
如果您更改事务之内的隔离级别,则将新的值传播回本地环境,也传播到所有随
后的新的或恢复的事务。
GBase 8s 隔离级别
下列定义说明每一隔离级别的关键特征,从最低隔离级别到最高。
使用 Dirty Read 隔离级别
不论在它们之上是否有锁,都使用 Dirty Read 选项来从数据库复制行。获取行的
程序不放置锁且不予考虑。Dirty Read 是不实现会话日志记录的数据库的唯一可
用的隔离级别。
此隔离级别最适合于用于数据未被修改的表上的查询的静态表,因为它不提供隔
离。通过 Dirty Read,程序可能返回在随后已回滚了的事务之内插入或修改了的
未提交的行,或当您首次读查询集时不可见的幻像行,但会在同一事务内随后的

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1052
读之前在查询集中具体化。(仅 Repeatable Read 隔离级别防止访问幻像行。仅
Dirty Read 提供从并发事务访问未提交的行,这些事务可能随后被回滚。)
当使用 Dirty Read 隔离级别的 DML 操作可能返回未提交的行或幻像行时,可选
的 WITH WARNING 关键字指导数据库服务器发出警告。下列示例中的事务使用此
隔离级别:
BEGIN WORK;
SET ISOLATION TO DIRTY READ WITH WARNING;
...
COMMIT WORK;

Dirty Read 隔离级别对 USELASTCOMMITTED 配置参数和
USELASTCOMMITTED 会话环境变量的当前设置非常敏感。要获取更多当将隔
离级别设置为 DIRTY READ 或 ALL 时 Dirty Read 隔离级别的行为的信息,请
参阅 Committed Read 的 LAST COMMITTED 选项。
当您使用“高可用性数据复制”时,数据库服务器有效地使用“HDR 辅助服务器”上
的 Dirty Read 隔离,不理会指定的 SET ISOLATION 或 SET TRANSACTION
隔离级别,除非启用 UPDATABLE_SECONDARY 配置参数。要获取关于此主题
的更多信息,请参阅 辅助数据复制服务器的隔离级别。
使用 Committed Read 隔离级别
使用 Committed Read 选项来保证在检索行的时刻,每个被检索的行都在表中提
交了。此选项不在获取的行上放置锁。Committed Read 是带有不符合 ANSI 的日
志记录的数据库中缺省的隔离级别。
当每一行作为独立的单元处理,而不引用同一表中或其他表中的其他行时,
Committed Read 是适合的。
Committed Read 的 LAST COMMITTED 选项
使用 Committed Read 隔离级别的 LAST COMMITTED 关键字选项来减小其他会
话持有排他的行级锁的风险,该风险会导致应用的锁定错误失败,或直到提交或
回滚并发的事务之后应用才能读锁定的行。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1053
在应用尝试读取另一会话在其上持有排他锁的行的上下文中,这些关键字指导数
据库服务器返回该行的最近提交的版本,而不是等待该锁被释放。
在下列任何环境之下,此特性隐式地在使用 SET ISOLATION 语句的 Committed
Read 隔离级别的,或使用符合 ANSI/ISO 的 SET TRANSACTION 语句的 Read
Committed 隔离级别的所有用户会话中生效:

如果 USELASTCOMMITTED 配置参数设置为 'COMMITTED READ' 或
'ALL'

如果 SET ENVIRONMENT 语句将 USELASTCOMMITTED 会话环境变
量设置为 'COMMITTED READ' 或 'ALL'。
在下列任何环境之下,此特性还隐式地在使用 SET ISOLATION 语句的 Dirty
Read 隔离级别,或使用符合 ANSI/ISO 的 SET TRANSACTION 隔离级别的的
所有用户会话中生效:

如果 USELASTCOMMITTED 配置参数设置为 'DIRTY READ' 或
'ALL'

如果 SET ENVIRONMENT 语句将 USELASTCOMMITTED 会话环境变
量设置为 'DIRTY READ' 或 'ALL'。
启用此特性不可消除锁定冲突的可能性,但它们减少其他会话读取同一行的场景
可导致错误的数目。LAST COMMITTED 关键字仅对并发读操作有效。当并发的
会话尝试写到同一行时,它们不可防止可发生的锁定冲突或错误。
在表的“最后提交的”版本不可用的上下文中,此特性对 Committed Read 或
Dirty Read 行为无效,包括:

数据库不支持事务日志记录

以 LOCK MODE PAGE 关键字创建了的表,或已更改为有一
IFX_DEF_TABLE_LOCKMODE 环境变量的锁模式设置为了 'PAGE'

DEF_TABLE_LOCKMODE 配置参数设置为 'PAGE'

LOCK TABLE 语句已显式地在表上设置了排他锁

未提交的 DDL 语句已隐式地在表上设置了排他锁

该表是在其上未提交的 DDL 语句已隐式地设置排他锁的系统目录表

该表有复合的数据类型的列或用户定义的数据类型的列

该表为 RAW 表

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1054

DataBlade 模块正在访问该表

使用“虚拟表接口”创建了的表。
不需要用户定义的访问方式来支持 LAST COMMITTED 特性。
LAST COMMITTED 语义的作用域既不是基于语句的,也不是基于事务的。此隔
离级别与不带 LAST COMMITTED 选项的 Committed Read 隔离级别有相同的瞬
间作用域。例如,当在生效的带有 LAST COMMITTED 的单个事务内执行查询
两次时,可能通过相同的查询返回不同的结果,如果在查询的两次提交的间隔之
间提交正在相同的数据上操作的其他 DML 事务的话。Committed Read 和
Committed Read Last Committed 语义的此瞬时特性恰好实现 ANSI/ISO Read
Committed 隔离级别。
LAST COMMITTED 特性不支持通过表级锁的读取。如果使用 LAST
COMMITTED 特性的查询的访问计划遇到它需要访问的表或索引中的表级锁,则
该查询会返回下列错误代码:
SQL 错误代码:
252: Cannot get system information for table.
ISAM 错误代码:
113: ISAM error: the file is locked.
使用 Cursor Stability 隔离级别
使用 Cursor Stability 选项来在获取的行上放置共享锁,当您获取另一行或关闭该
游标时,将其释放。另一进程还可在同一行上放置共享锁,但没有进程可获得排
他锁来更改该行中的数据。当程序基于它从该行读取的数据来更新另一表时,这
样的行稳定性很重要。
如果您将隔离级别设置为 Cursor Stability,但您未正在使用事务,则 Cursor
Stability 的作用就像 Committed Read 隔离级别一样。
使用 Repeatable Read 隔离级别
使用 Repeatable Read 选项来在会话期间选择的每行上放置共享锁。另一进程也可
在被选择的行上放置共享锁,但没有其他进程可在您的事务期间修改任何被选择

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1055
的行,或在您的事务期间插入满足您的查询的搜索条件的行。如果您在事务期间
重复该查询,则您重新读取相同的信息。仅当事务提交或回滚时,才释放共享
锁。Repeatable Read 是符合 ANSI 的数据库中缺省的隔离级别。
Repeatable Read 隔离级别放置的锁数目最大,持有锁的时间最长。因此,它是最
能减少并发的级别。
缺省的隔离级别
当您根据数据库类型创建数据库时,建立特定数据库的缺省的隔离级
别。下列列表描述每一数据库类型的缺省的隔离级别。
隔离级别 数据库类型
Dirty Read 在没有日志记录的数据库中的缺省级别
Committed Read 在不符合 ANSI 的日志记录的数据库中的缺省级别
Repeatable Read 在符合 ANSI 的数据库中的缺省级别
直到您发出 SET ISOLATION 语句之前,缺省的级别保持有效。在执行 SET
ISOLATION 语句之后,直到下列事件发生之前,新的隔离级别保持有效:

您输入另一 SET ISOLATION 语句。

您打开另一数据库,该数据库的缺省隔离级别不同于您最后的 SET
ISOLATION 语句指定的级别。

程序结束。
对于不符合 ANSI 的 GBase 8s 数据库,除非您显式地设置
USELASTCOMMITTED 配置参数,否则,对于缺省的隔离级别 LAST
COMMITTED 特性无效。SET ENVIRONMENT 语句或 SET ISOLATION 语句可
覆盖此缺省值,并为当前的会话启用 LAST COMMITTED。
使用 RETAIN UPDATE LOCKS 选项
当数据库服务器处理 SELECT ... FOR UPDATE 语句时,使用 RETAIN®
UPDATE LOCKS 选项来影响它的行为。
在隔离级别设置为 Dirty Read、Committed Read 或 Cursor Stability 的数据库中,
数据库服务器在 SELECT ... FOR UPDATE 语句获取的行上放置更新锁。当您开

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1056
启 RETAIN UPDATE LOCKS 选项时,数据库服务器保持更新锁,直到事务结束
为止,而不是在下一随后的 FETCH 时或当关闭游标时才释放它。此选项防止在
当前的用户到达事务的结束之前其他用户在更新了的行上放置排他锁。
您可使用此选项来获得相同的锁定效果,但避免 dummy 更新或可重复读隔离级
别的开销。
在当前的会话期间的任何时刻,您都可开启或关闭此选项。
您可通过重置隔离级别而不使用 RETAIN UPDATE LOCKS 关键字来关闭该选项,如
下例中所示。
BEGIN WORK;
SET ISOLATION TO
COMMITTED READ LAST COMMITTED RETAIN UPDATE LOCKS;
...
COMMIT WORK;
BEGIN WORK;
SET ISOLATION TO COMMITTED READ LAST COMMITTED ;
...
COMMIT WORK;

通过会话环境控制更新锁
禁用 RETAIN UPDATE LOCKS 行为的另一种方法是执行此 SQL 语句:
SET ENVIRONMENT RETAINUPDATELOCKS 'NONE';
通过重置 RETAINUPDATELOCKS 会话环境变量,这为当前的事务,或为同一
会话的任意随后的事务禁用 RETAIN UPDATE LOCKS 子句。
SET ENVIRONMENT RETAINUPDATELOCKS 语句还可使得更新锁的保持成为
Committed Read、Cursor Stability 或 Dirty Read 隔离级别,或对于所有这些隔离
级别的缺省行为,不论 SET ISOLATION 语句是否包括 RETAIN UPDATE
LOCKS 子句。
要获取更多关于更新锁的信息,请参阅 RETAINUPDATELOCKS 环境选项 和
锁定注意事项。
在事务期间关闭选项

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1057
在事务已经开始之后,但在提交或回滚事务之前,如果您将 RETAIN® UPDATE
LOCKS 选项设置为 OFF,则可能仍存在几个更新锁。
切换到 OFF,该特性不直接地释放任何更新锁。当您关闭此选项时,数据库服务
器恢复到三个隔离级别的正常行为。也就是说,通过紧接在前面的 FETCH 语
句,FETCH 语句释放放置在行上的更新锁,且关闭了的游标释放在当前行上的更
新锁。
不释放稍早的 FETCH 语句放置的更新锁,除非在同一事务之内出现多个更新游
标。在此情况下,随后的 FETCH 还可能释放其他游标的较旧的更新锁。
隔离级别的影响
您不可在没有日志记录的数据库中设置事务隔离级别。在这样的数据库中发生的
每次检索都作为 Dirty Read。
从 BYTE 或 TEXT 列检索的数据可有所不同,这依赖于事务隔离级别。在
Dirty Read 或 Committed Read 隔离级别之下,进程可读取或被删除的(如果该删
除尚未提交的话)或在正被删除的进程之中的 BYTE 或 TEXT 列。在这些隔离
级别之下,在某些情况下,被删除的数据是可读的。要获取更过关于这些情况的
信息,请参阅 GBase 8s 管理员指南。
当您使用 DB-Access 时,由于您使用更高的隔离级别,所以锁冲突发生得更频
繁。例如,如果您使用 Cursor Stability,则与您使用 Committed Read 相比,会发
生更多的锁冲突。
在 GBase 8s ESQL/C 事务中使用滚动游标,或通过将级别设置为 Repeatable
Read,或通过在事务期间锁定整个表,您可在您的临时表与数据库表之间强制一
致性。
如果您在事务中使用滚动游标 WITH HOLD,则您不可在您的临时表与数据库表之
间强制一致性。当事务完成时,释放表级锁或通过 Repeatable Read 设置的锁,
但处于保持状态的滚动游标在事务结束之外仍保持打开。事务一结束,您就可修
改释放了的行,但在临时表中的被检索的数据可能与实际数据不一致。
注意: 请不要在事务内使用无日志记录的表。如果您需要在事务内使用无日志记
录的表,则或者将隔离级别设置为 Repeatable Read,或者以 Exclusive 模式锁定
该表来防止并发问题。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1058
辅助数据复制服务器的隔离级别
如果禁用 UPDATABLE_SECONDARY 配置参数(通过未设置或通过设置为
零),则辅助数据复制服务器为只读。在此情况下,在“高可用性数据复制”
(HDR)和远程独立辅助(RSS)服务器上仅 Dirty Read 或 Read Uncommitted
事务隔离级别是可用的。
如果启用 UPDATABLE_SECONDARY 参数(通过设置为一个大于零的有效的连
接数),则辅助数据复制服务器可支持 Read Committed、Committed Read 或
Committed Read Last Committed 事务隔离级别,带有或不带 SET
ENVIRONMENT 语句的 USELASTCOMMITTED 会话环境变量。仅 SQL 的
DELETE、INSERT、UPDATE 和 MERGE 语句(以及 dbexport 实用程序,如
果设置 STOP_APPLY、USELASTCOMMITTED 和 UPDATABLE_SECONDARY
配置参数的话)可支持在可更新的辅助服务器上的写操作。
然而,“共享磁盘辅助”(SDS)服务器可支持 Read Committed、Committed
Read、Committed Read Last Committed 隔离级别,不管他们的
UPDATABLE_SECONDARY 设置。要获取更多关于
UPDATABLE_SECONDARY 配置参数的信息,请参阅 GBase 8s “管理员参考手
册”。

语法

元素
用途
关键注意事项

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 351 -

元素
用途
关键注意事项
-a
seg_size
允许添加新的虚拟共享内
存段。以千字节为单位
限制: seg_size 的值必须是正整数。它不得超
过操作系统对共享内存段大小的限制

通常,您无需向共享内存的虚拟部分添加段,因为数据库服务器会在需要时自动添加段。
然而,随着段的添加,数据库服务器可能在获得其需要的内存之前达到段最大数量的操作
系统限制。这种情况通常在 SHMADD 配置参数设置得太小,以致数据库服务器在获得某
些操作所需内存之前耗尽可用段的数量时发生。
如果手工添加的段大于 SHMADD 所指定的段,那么可以避免耗尽这些段的操作系统限制
数,但仍满足数据库服务器对额外内存的需要。
该命令具有同等的 SQL 管理 API 命令。