返回首页

gbase数据、南大通用产品文档:GBase8c

更新日期:2024年09月11日

同步系统时间
GBase 8c 分布式数据库系统,需要各节点间时间同步,来保证数据库一致性。一般采
用NTP 服务方式来保证各节点间的时间同步。检查和配置NTP 服务的操作步骤如下:
步骤1 首先检查服务器是否安装NTP 服务以及是否正常运行:
[gbase@gbase8c ~]$ sudo systemctl status ntpd.service
ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset:
disabled)
Active: active (running) since Thu 2021-12-02 19:26:50 CST; 1 weeks 1 days ago
Main PID: 14440 (ntpd)
CGroup: /system.slice/ntpd.service
└─14440 /usr/sbin/ntpd -u ntp:ntp -g
如果显示running,则表示服务正在运行,则跳过步骤2,直接执行后续步骤。

GBase 8c V5 安装部署手册(分布式)
南大通用数据技术股份有限公司
13
步骤2 如NTP 服务未处于正常运行状态,考虑如下操作:

如果系统可以与外网通信,可以使用如下命令与NTP 服务器同步:
[gbase@gbase8c ~]$ sudo ntpdate asia.pool.ntp.org

如果服务器所在网络无法与外网通信,需要手动配置NTP 服务:
首先确认是否安装ntp:
[gbase@gbase8c ~]$ rpm -qa|grep ntp
若已安装ntp 应返回如下内容:
[gbase@gbase8c ~]$ ntp-4.2.6p5-29.el7.centos.x86_64
[gbase@gbase8c ~]$ ntpdate-4.2.6p5-29.el7.centos.x86_64
若没有ntp 显示,则应删除原有ntpdate 后重新安装ntp:
[gbase@gbase8c ~]$ sudo yum -y remove ntpdate-4.2.6p5-29.el7.centos.x86_64
[gbase@gbase8c ~]$ sudo yum -y install ntp
步骤4 配置NTP 服务。
安装完毕后,在所有节点上配置NTP 服务。选定NTP 服务主节点,一般选用主GTM
节点作为NTP 主节点。
NTP 节点配置通过修改/etc 目录下的ntp.conf 配置文件实现,
分为主
节点配置及其他节点配置。
修改各节点上ntp.conf 配置文件,命令如下:
[gbase@gbase8c ~]$ sudo vi /etc/ntp.conf

主节点修改配置文件,涉及部分配置文件及修改位置如下:
# Permit all access over the loopback interface.
This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 10.0.7.16 nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1
# Hosts on local network are less restricted.
restrict 10.0.7.255 mask 255.255.248.0 nomodify notrap
# Use public servers from the pool.ntp.org project.

GBase 8c V5 安装部署手册(分布式)
南大通用数据技术股份有限公司
14
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# 注释掉以下四行
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 127.127.1.0
Fudge 127.127.1.0 stratum 10

NTP 其他节点修改配置文件,修改涉及部分配置文件及修改位置如下:
# the administrative functions.
restrict 10.0.7.17 nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1
# Hosts on local network are less restricted.
restrict 10.0.7.255 mask 255.255.248.0 nomodify notrap
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# 注释掉以下四行
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 10.0.7.16
Fudge 10.0.7.16 stratum 10
步骤5 启动NTP 服务,并设置开机自启动。
全部节点配置完成后,在所有节点启动NTP 服务。
[gbase@gbase8c ~]$ sudo systemctl start ntpd.service
设置开机自启动:
[gbase@gbase8c ~]$ sudo systemctl enable ntpd.service
注意

某些虚拟机环境下无法配置NTP 开机自启动,需要每次重启后进行手工启动。

时间同步会影响数据库集群部署及一致性操作,须提前配置生效。

GBase 8c V5 安装部署手册(分布式)
南大通用数据技术股份有限公司
15
步骤6 配置完毕后,在各节点执行以下命令,查看NTP 服务是否连通。
[gbase@gbase8c ~]$ ntpstat
NTP 主节点应返回:
synchronised to local net (127.127.1.0) at stratum 6
time correct to within 11 ms
polling server every 64 s
NTP 其他节点应返回:
synchronised to NTP server (10.0.7.16) at stratum 7
time correct to within 57 ms
polling server every 1024 s
注意
NTP 服务器配置完毕后,需要等待5~20 分钟才能完成时间同步,如果在配置后提示
unsynchronised time server re-starting polling server every 8 s 或unsynchronised polling
server every 8 s 均属正常,等待一段时间再次执行ntpstat 命令查看即可。

DATETIME 数据类型会存储以日历日期和一天中的时间表示的瞬间时刻。
您选择存储 DATETIME 值的精确度;其精度范围可从一年到几分之一秒。
DATETIME 将数据值存储为在数据类型声明中表示每个时间单位(年、月和日等等)的
连续字段序列。
用于指定 DATETIME 数据类型的字段限定符具有以下格式:
DATETIME largest_qualifier TO smallest_qualifier
这类似于 INTERVAL 字段限定符,
但 DATETIME 表示时间点而不是时间范围
(INTERVAL
表示时间范围)。DATETIME 和 INTERVAL 限定符之间存在如下差异:
DATETIME 关键字替换 INTERVAL 关键字。
DATETIME 字段限定符不能指定 largest_qualifier 时间单位的非缺省精度。
DATETIME 数据类型的字段限定符可以包含 YEAR、MONTH 和更小的时间单位,而
包含 DAY 字段限定符(或更小时间单位)的 INTERVAL 数据类型不能还包含 YEAR 或
MONTH 字段限定符。
如果 smallest_qualifier 未指定大于 largest_qualifier 的时间单位,那么

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 90 -

DATETIME 数据类型的 largest_qualifier 和 smallest_qualifier 可以是下表列出的任
何字段。(最大和最小时间单位可以相同;例如,DATETIME YEAR TO YEAR。)
表 4. DATETIME 字段限定符
限定符字段
有效条目
YEAR
从 1 到 9,999(公元)编号的年份
MONTH
从 1 到 12 编号的月份
DAY
从 1 到 31 编号的日(适合于月)
HOUR
从 0(午夜)到 23 编号的小时
MINUTE
从 0 到 59 编号的分钟
SECOND
从 0 到 59 编号的秒
FRACTION
最多具有 5 位小数位的秒的十进制小数。缺省小数位是 3 位(千分
之一秒)。对于 smallest_qualifier,要指定另一个小数位,请写
FRACTION(n),其中 n 是位数(从 1 到 5)。

DATETIME 列的声明不需要包括全部 YEAR 至 FRACTION 时间单位范围。
它可以包括这
些时间单位的任何连续子集,或者甚至仅包括单个时间单位。
例如,
如果每个输入的值都包含连续的时间单位系列的信息,
就可以在声明为 YEAR
TO
MINUTE 的列中输入 MONTH TO HOUR 值。但是,不能只输入 MONTH 和 HOUR 的值;条目中
还必须包括 DAY 的值。
如果使用 DB-Access TABLE 菜单,并且未指定 DATETIME 限定符,那么会指定缺省
DATETIME 限定符 YEAR TO YEAR。
有效的 DATETIME 文字必须包含 DATETIME 关键字、要输入的值和字段限定符。如前
面说明的那样,由于输入的值可包含比对列声明的字段数少的字段,所以必须包括这些限
定符。第一个字段和最后一个字段的可接受限定符与表 1列出的有效 DATETIME 字段的列
表完全相同。
将字段限定符的值用整数表示并用定界符隔开这些限定符。下表列出了在缺省的美国
英语语言环境中与 DATETIME 值配合使用的定界符。(这些定界符是在 INTERVAL 值中使
用的定界符的超集。)
表 5. 与 DATETIME 配合使用的定界符
定界符
在 DATETIME 文字中的位置
连字符
( - )( = )
在 YEAR、MONTH 和 DAY 时间单位值之间
空格 ( )
在 DAY 与 HOUR 时间单位值之间
冒号 ( : )
在 HOUR、MINUTE 与 SECOND 时间单位值之间
小数点 ( . )
在 SECOND 与 FRACTION 时间单位值之间

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 91 -


下图显示具有定界符的 DATETIME YEAR TO FRACTION(3) 值。图 2. 具有定界符的
DATETIME 值示例

当输入具有比列中的时间单位字段少的时间单位字段的值时,就会自动扩展输入的值
以填满所有声明的时间单位字段。如果漏掉任何较高有效字段(即,时间单位大于包含的
任何时间单位),那么会用系统时钟日历中的那些时间单位的当前值自动填充这些字段。
如果漏掉任何不太重要的字段,那么在条目中会用零(或对 MONTH 和 DAY 使用 1)填充
这些字段。
还可以将 DATETIME 值作为字符串输入。字符串必须包括 DATETIME 列中定义的每个
字段的信息。下面示例中的 INSERT 语句显示了作为字符串输入的 DATETIME 值:
INSERT INTO cust_calls (customer_num, call_dtime, user_id,
call_code, call_descr)
VALUES (101, '2001-01-14 08:45', 'maryj', 'D',
'Order late - placed 6/1/00');
如果将 call_dtime 声明为 DATETIME YEAR TO MINUTE,那么字符串必须包含年、月、
日、小时和分钟字段的值。
如果字符串不包含所有已声明字段的信息(或如果它添加了其他字段),那么数据库
服务器会返回错误。
除了 year 和 fraction 字段之外,DATETIME 列的所有字段都是 2 位数。year 字段
存储为 4 位。当在年份字段中输入两位值时,缩写的年份扩展为四位的方式取决于
DBCENTURY 环境变量的设置。
例如:
如果输入 02 作为 year 值,
那么将该年份是解释为 1902、
2002 还是 2102 取
决于 DBCENTURY 的设置和执行时系统时钟日历的值。如果不设置 DBCENTURY,那么在缺省
情况下,将追加当前年份的前导数字。

小数字段需要 n 位数,其中 1 ≤ n ≤ 5,上舍入为偶数。可以使用以下公式(上舍
入为整数个字节)来计算 DATETIME 值需要的字节数:
(所有字段的总位数)/2 + 1
例如,YEAR
TO
DAY 限定符总共需要八位(四位用于年,两位用于月,两位用于日)。
根据公式,此数据值需要 5(即 (8/2) + 1)个字节的存储器。

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 92 -

当数据库服务器在 SQL 语句中从操作系统获取当前时间时,
USEOSTIME 配置参数可能
会影响亚秒级粒度。有关详细信息,请参阅 GBase 8s 管理员参考。
使用 ESQL
API 时,DBTIME 环境变量会影响 DATETIME 格式。GL_DATE 和 DBDATE 环
境变量的非缺省语言环境和设置还会影响日期时间数据的显示。但是,它们不会影响
DATETIME 列的内部存储格式。
如果指定的语言环境不是美国英语,那么该语言环境为 DATETIME 值定义特定于文化
的显示格式。要更改缺省显示格式,更改 GL_DATETIME 环境变量的设置。当具有非缺省语
言环境的数据库使用非缺省 GL_DATETIME 设置时,USE_DTENV 环境变量必须设置为 1,数
据库服务器才能在以下运算中正确处理本地化的 DATETIME 值:
使用 DB-Access 的 LOAD 或 UNLOAD 功能
使用 dbexport 或 dbimport 迁移实用程序
对 CREATE EXTERNAL TABLE 语句定义的数据库表或对象使用 SQL 的 DML 语句。

如果selector值为NULL,则不能在WHEN NULL条件下被匹配,相反,可以在WHEN
boolean_expression IS NULL条件下使用CASE表达式搜索。
DECLARE
grade CHAR(1); -- NULL by default
appraisal VARCHAR2(20);
BEGIN
appraisal :=
CASE grade
WHEN NULL THEN 'No grade assigned'
WHEN 'A' THEN 'Excellent'
WHEN 'B' THEN 'Very Good'
WHEN 'C' THEN 'Good'
WHEN 'D' THEN 'Fair'
WHEN 'F' THEN 'Poor'
ELSE 'No such grade'
END;
DBMS_OUTPUT.PUT_LINE ('Grade ' || grade || ' is ' || appraisal);
END;

--Result:
--Grade is No such grade