原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。
在使用 GBase 8s 数据库时,创建兼容 ANSI 的数据库是一个重要的功能,它可以帮助开发者更好地符合 SQL 语言的 ANSI/ISO 标准。本文将详细介绍如何创建兼容 ANSI 的数据库,并探讨不同模式下的数据库特性及其使用场景。
创建数据库的模式
在 GBase 8s 中,创建数据库时可以选择不同的模式,每种模式都有其特定的用途和特性:
- 无日志模式:这种模式下的数据库性能较好,但不支持逻辑恢复操作。
- 缓冲式日志模式:支持数据库逻辑恢复,同时避免频繁的 I/O 操作,适合生产系统。
- 无缓冲式日志模式:会有频繁的 I/O 操作,但一旦数据库宕机,数据损失较小。
- ANSI 模式:一种特殊的无缓冲式日志模式,符合额外的 ANSI 规则。
创建数据库的语法
创建数据库的基本语法如下:
CREATE DATABASE database [IN dbspace] [WITH LOG | WITH BUFFERED LOG | WITH LOG MODE ANSI] [NLSCASE SENSITIVE | NLSCASE INSENSITIVE];
参数说明
- database:新数据库的名称,必须在数据库服务器中唯一。
- dbspace:数据库存储数据的 dbspace,默认为 rootdbs 。
- WITH LOG:启用日志记录。
- WITH BUFFERED LOG:启用缓冲日志记录。
- WITH LOG MODE ANSI:创建兼容 ANSI 的数据库。
- NLSCASE SENSITIVE:创建区分大小写的数据库。
- NLSCASE INSENSITIVE:创建不区分大小写的数据库
使用说明
- 当前数据库: CREATE DATABASE 指定的数据库将成为当前数据库。
- 权限设置:如果未设置 DBCREATE_PERMISSION 配置参数,则任何用户都可以创建数据库。如果设置了该参数,则只有指定的用户才能创建数据库。 gbasedbt 用户始终具有创建数据库的权限。
示例配置
DBCREATE_PERMISSION - Specifies the users who can create
databases (by default, any user can).
Add a DBCREATE_PERMISSION entry
for each user who needs database
creation privileges. Ensure user
gbasedbt is authorized when you
first initialize GBase.
Example:
DBCREATE_PERMISSION gbasedbt
创建不同模式的数据库
(一)无日志模式
CREATE DATABASE db_no;
这种模式下的数据库不能使用事务日志记录的事务或语句,如 BEGIN WORK 、 COMMIT WORK 、 ROLLBACK WORK 等。
(二)缓冲日志模式
CREATE DATABASE db_buf WITH BUFFERED LOG;
使用缓冲日志可以提高日志记录的性能,但可能面临失败后无法恢复最后几个事务的风险。
(三)无缓冲日志模式
CREATE DATABASE db_unbuf WITH LOG;
在高可用集群的辅助服务器上创建数据库时,必须使用 WITH LOG 选项。
(四)兼容 ANSI 的数据库
CREATE DATABASE db_ansi WITH LOG MODE ANSI;
兼容 ANSI 的数据库具有以下特性:
- 所有 SQL 语句自动包含在事务中。
- 使用无缓冲的日志记录。
- 实施所有者命名,查看表、视图等对象时必须使用所有者名称。
- 默认隔离级别为 REPEATABLE READ 。
- 对象上的默认权限与非兼容 ANSI 的数据库不同。
- 所有的 DECIMAL 数据类型是定点值。
(五)区分大小写的数据库
CREATE DATABASE db_sens1 WITH LOG;
CREATE DATABASE db_sens2 WITH LOG NLSCASE SENSITIVE;
在区分大小写的数据库中,布尔条件 'M' MATCHES 'm' 计算为假。
(六)不区分大小写的数据库
CREATE DATABASE db_insens1 WITH LOG NLSCASE INSENSITIVE;
在不区分大小写的数据库中,NCHAR 和 NVARCHAR 列的字符串处理不考虑字母大小写。
查询数据库属性
可以通过查询 sysmaster:sysdatabases 表来获取数据库的属性信息:
SELECT * FROM sysmaster:sysdatabases WHERE name = 'db_insens2';
属性说明
| 列名 | 类型 | 描述 |
|---|---|---|
| name | char(128) | 数据库名称 |
| partnum | integer | 数据库的 systables 表的分区编号(tblspace ID) |
| owner | char(32) | 数据库创建者的用户 ID |
| created | date | 创建日期 |
| is_logging | integer | 如果启用日志记录,则为 1;否则为 0 |
| is_buff_log | integer | 如果是缓冲日志记录,则为 1;否则为 0 |
| is_ansi | integer | 如果 ANSI/ISO 兼容,则为 1;否则为 0 |
| is_nls | integer | 如果启用 GLS,则为 1;否则为 0 |
| is_case_insens | integer | 如果 NCHAR 和 NVARCHAR 列区分大小写,则为 1;否则为 0 |
| flags | smallint | 日志记录标志 |
在 GBase 8s 中,创建兼容 ANSI 的数据库可以帮助开发者更好地符合 SQL 语言的 ANSI/ISO 标准。通过本文的介绍,你可以了解不同模式下的数据库特性及其使用场景。希望本文能帮助你在数据库开发中更高效地创建和管理数据库。
原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。