返回首页

gbase数据、南大通用产品文档:GBase8s管理共享内存

更新日期:2024年09月11日

这些主题说明如何执行涉及管理共享内存的以下任务:
 设置共享内存配置参数
 设置共享内存
 为数据库服务器共享内存的常驻部分打开或关闭驻留
 将段添加到共享内存的虚拟部分
 为关键活动预留内存
 在具有内存限制的应用程序中保留目标内存量
 监视共享内存
这些主题未涵盖 DS_TOTAL_MEMORY 配置参数。此参数将给决策支持查询的内存分配
设置上限。有关此参数的信息,请参阅《GBase 8s 性能指南》。

可以使用 onmode -we 命令创建并导出当前配置参数快照的配置文件。
语法:

元素
描述
关键注意事项
path_name 配置文件的完整或相对路
径名
不能添加扩展

用法
onmode -we 命令自动创建 ASCII 并给它命名您在命令中指定的名称。该文件的格式与
onconfig.std 文件格式相同。
如果您在当前会话中动态地变更值,
导出的文件包含已更改的值而不是在 onconfig 文件中
永久保存的值。
导出配置文件之后,可以导入它并作为配置文件使用。

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 377 -
如果运行 onmode -we 命令并指定之前导出的文件,那么该命令导出该文件的最新版本,
并重写之前导出的文件。
onmode -we 命令与带有 onmode 和 export 参数的 SQL 管理 API 命令具有相同的功能。

示例
以下命令导出了 /tmp 目录下 onconfig3 文件中所有配置参数和它们当前值:
onmode -we /tmp/onconfig3

联合运算使用 UNION 运算符将两个查询组合成单个复合查询。可以在两个或多个
SELECT 语句之间使用 UNION 运算符来产生一个临时表,它包含存在于任何一个原始表
或所有原始表中的行。还可以在视图的定义中使用 UNION 运算符。
不能在下列上下文的子查询内使用 UNION 运算符

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 149 -

在 SELECT 语句的 Projection 子句中

在 SELECT 、INSERT 、DELETE 或 UPDATE 语句的 WHERE 子句中
然而,
UNION 运算符在 SELECT 语句的 FROM 子句中的子查询中是有效的,
如下所示:
SELECT * FROM (SELECT col1 FROM tab1 WHERE col1 = 100) AS vtab1(c1),
(SELECT col1 FROM tab2 WHERE col1 = 10
UNION ALL
SELECT col1 FROM tab1 WHERE col1 < 50 ) AS vtab2(vc1);
GBase 8s 不支持对 ROW 类型进行排序。
由于 UNION 操作需要排序以除去重复值,
所以
当联合运算中的任一查询包括 ROW 类型数据时,不能使用 UNION 操作符。但是,数据
库服务器确实支持具有 ROW 类型数据的 UNION ALL,这是因为此类运算无需排序。
下图举例说明了 UNION 集合运算。
图: 联合集合运算

UNION 关键字选择两个查询中的所有行,
除去重复行并返回余下的行。
因为查询的结果组
合为一个结果,所以每个查询中的投影列表必须具有相同的列数。同时,从每个表选择的
相应列必须包含兼容的数据类型(CHARACTER 数据类型列的长度必须相同),并且这些
相应的列必须全部允许或全部不允许 NULL 值。
有关 SELECT 语句和 UNION 运算符的完整语法,
请参阅
《GBase 8s SQL 指南:
语法》

有关特定于 GBase 8s ESQL/C 产品和涉及 INTO 子句和复合查询的任何限制的信息,请参
阅《GBase 8s ESQL/C 程序员手册》。
下列查询对 stock 和 items 表中的 stock_num 和 manu_code 列执行联合。
图: 查询
SELECT DISTINCT stock_num, manu_code FROM stock
WHERE unit_price < 25.00

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 150 -
UNION
SELECT stock_num, manu_code FROM items
WHERE quantity > 3;
该查询选择单价小于 $25.00 或预订数量大于三的那些商品并列出
其 stock_num 和 manu_code,如下所示。
图: 查询结果
stock_num manu_code

5 ANZ
5 NRG
5 SMT
9 ANZ
103 PRC
106 PRC
201 NKL
301 KAR
302 HRO
302 KAR

将 ORDER BY 子句与 UNION 一起使用
如下列查询所示,
当包括 ORDER BY 子句时,
该子句必须跟在最后的 SELECT 语句后面,
并使用整数(而不是标识)来引用排序的列。排序在集合运算完成之后发生。
图: 查询
SELECT DISTINCT stock_num, manu_code FROM stock
WHERE unit_price < 25.00
UNION
SELECT stock_num, manu_code FROM items
WHERE quantity > 3
ORDER BY 2;
之前的复合查询选择与图 2相同的行但以制造商代码的顺序显示它们,如下所示。
图: 查询结果
stock_num manu_code

5 ANZ
9 ANZ

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 151 -
302 HRO
301 KAR
302 KAR
201 NKL
5 NRG
103 PRC
106 PRC
5 SMT

UNION ALL 关键字
缺省情况下,UNION 关键字排除重复的行。要保留重复值,添加可选关键字 ALL,如下
所示。
图: 查询
SELECT stock_num, manu_code FROM stock
WHERE unit_price < 25.00
UNION ALL
SELECT stock_num, manu_code FROM items
WHERE quantity > 3
ORDER BY 2
INTO TEMP stock item;
该查询使用 UNION ALL 关键字联合两个 SELECT 语句并在最后一个 SELECT 后面添
加 INTO TEMP 子句来将结果放置到临时列表中。它返回与图 1相同的行,但还包括重复
的值。
图: 查询结果
stock_num manu_code

9 ANZ
5 ANZ
9 ANZ
5 ANZ
9 ANZ

5 NRG
5 NRG
103 PRC

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 152 -
106 PRC
5 SMT
5 SMT

使用不同的列名
组合查询的 Projection 子句中相应的列必须具有兼容的数据类型,但各列不需要使用相同
的列名。
下列查询从 customer 表中选择 state 列及 state 表中的相应 code 列。
图: 查询
SELECT DISTINCT state FROM customer
WHERE customer_num BETWEEN 120 AND 125
UNION
SELECT DISTINCT code FROM state
WHERE sname MATCHES '*a';
该查询返回客户号 120 至 125 的州代码缩写以及其 sname 以 a 结束的州的州代码缩写。
图: 查询结果
state

AK
AL
AZ
CA
DE

SD
VA
WV
在复合查询中,
第一个 SELECT 语句中的列名或显示标注就是出现在结果中的列名或显示
标注。因此,在此查询中,使用第一个 SELECT 语句中的列名 state 而不是第一个语句中
的列名 code。

将 UNION 与多个表配合使用
以下查询对三个表执行联合运算。最大联合数取决于应用程序的实用性和任何内存限制。
图: 查询

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 153 -
SELECT stock_num, manu_code FROM stock
WHERE unit_price > 600.00
UNION ALL
SELECT stock_num, manu_code FROM catalog
WHERE catalog_num = 10025
UNION ALL
SELECT stock_num, manu_code FROM items
WHERE quantity = 10
ORDER BY 2;
该查询选择 stock 表中的 unit_price 大于 $600、catalog 表中的 catalog_num 为 10025
或 items 表中的 quantity 为 10 的商品;查询按manu_code 对数据进行排序。该结果显示了
返回值。
图: 查询结果
stock_num manu_code

5 ANZ
9 ANZ
8 ANZ
4 HSK
1 HSK
203 NKL
5 NRG
106 PRC
113 SHM

在 Projection 子句中使用文字
下列查询在投影列表中使用文字来标记联合操作的部分输出,以便今后可以区分它。为该
标记提供标号 sortkey。查询使用 sortkey 来对检索到的行进行排序。
图: 查询
SELECT '1' sortkey, lname, fname, company,
city, state, phone
FROM customer x
WHERE state = 'CA'
UNION
SELECT '2' sortkey, lname, fname, company,

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 154 -
city, state, phone
FROM customer y
WHERE state <> 'CA'
INTO TEMP calcust;
SELECT * FROM calcust
ORDER BY 1;
该查询创建一个列表,在该列表中,来自 California 的客户首先显示。
图: 查询结果
sortkey 1
lname Baxter
fname Dick
company Blue Ribbon Sports
city Oakland
state CA
phone 415-655-0011

sortkey 1
lname Beatty
fname Lana
company Sportstown
city Menlo Park
state CA
phone 415-356-9982

sortkey 2
lname Wallack
fname Jason
company City Sports
city Wilmington
state DE
phone 302-366-7511

使用 FIRST 子句
可以使用 FIRST 子句来选择由联合查询的产生的前几行。以下查询使用 FIRST 子句返
回 stock 和 items 表之间的联合的前五行。

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 155 -
图: 查询
SELECT FIRST 5 DISTINCT stock_num, manu_code
FROM stock
WHERE unit_price < 55.00
UNION
SELECT stock_num, manu_code
FROM items
WHERE quantity > 3;
图: 查询结果
stock_num manu_code

5 NRG
5 ANZ
6 SMT
6 ANZ
9 ANZ