返回首页

gbase数据、南大通用产品文档:GBase8cAI4DB:趋势预测

更新日期:2024年09月11日


GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
14

本节解释数据库服务器如何存储于数据库或表的创建相关的数据以及如何分配存储数据所
必需的磁盘结构。
数据库的创建
在 root dbspace 存在之后,用户可以创建数据库。以下各段描述当数据库服务器添加新
的数据库时磁盘上所发生的主要事件。
对系统目录表的磁盘空间分配
数据库服务器搜索 dbspace 中的 chunk 可用列表页,以查找要在其中创建系统目录表的
可用空间。接下来,对于每个系统目录表,数据库服务器分配 8 个连续页,即每个系统目
录表的初始 extent 的大小。这些表是分别创建的,不一定以彼此邻接的方式驻留在
dbspace 中。它们可以位于不同的 chunk 中。当为每张表的初始 extent 找到足够的空间
时,分配这些项,并更新相关联的 chunk 可用列表页。
对系统目录表的跟踪
数据库服务器跟踪在数据库 tblspace (驻留在 root dbspace 中)中新创建的数据库,
描述该数据库的条目添加到 root
dbspace 中的 数据库 tblspace 中。
(请参阅 database
tblspace 的结构。)对于每个系统目录表,数据库服务器向构建数据库的 dbspace 中的
tblspace tblspace 添加一个一页的条目。(请参阅Tblspace Tblspace 的结构。) 图 1
图说明了数据库 tblspace 条目和该数据库的 systables 系统目录表的位置之间的关系。

图: 新数据库

有关如何在创建数据库之后如何列出它们的指示信息,请参阅 GBase
8s 管理员指南 中的
管理数据库日志状态一章中的监视数据库。
表的创建
在 root
dbspace 存在并创建了一个数据库之后,具有必需 SQL 特权的用户可以创建数据
库表。当用户创建表时,数据库服务器以名为 extent 的单位向表分配磁盘空间。(请参

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

阅 GBase
8s 管理员指南 中的数据存储在哪里一章中什么是 extent )。以下各段描述当
数据库服务器创建表并分配磁盘空间的初始 extent 时所发生的主要事件。
磁盘空间分配
数据库服务器搜索 dbspace 中的 chunk 可用列表页,以查找等于表的初始 extent 大小
的连续可用空间。当找到足够空间时,分配这些页并更新相关联的 chunk 可用列表页。
如果数据库服务器无法在 dbspace 的任何地方找到足够的相邻空间,
那么它向该表分配最
大可用数量的相邻空间。如果分配是可能的,那么即使所分配的空间量小于所请求的量,
也不会返回任何错误信息。如果无法分配最小 extent 大小,那么返回错误。(Extent 不
能跨两个 chunk 。)
tblspace tblspace 中的条目
数据库服务器向此 dbspace 中的 tblspace tblspace 添加一个该表的一页项目。指定给
该表的 tblspace 编号是从描述该表的 tblspace
tblspace 中的逻辑页号派生出来的。请
参阅 tblspace 编号 。
tblspace 编号标识 tblspace 所位于的 dbspace 。
tblspace
extent 可位于任何 dbspace
chunk 中。
如果必须确切知道 tblspace
extent 的位置,请执行 oncheck
-pe 命令,以获得按 chunk
排列的 dbspace 布局列表。
系统目录表中的条目
表本身是在数据库系统目录表中所存储的条目中完全描述的。每张表都指定由表标识或
tabid 。数据库中第一个用户定义的表对象的 tabid 值总是为 100 。( tabid = 100 的
对象也可能是一个视图、
同义词或者一个序列。

有关系统目录的全面讨论,
请参阅 GBase
8s SQL 参考指南 。
表可以位于与包含数据库的 dbspace 不同的 dbspace 中。Tblspace 本身是所分配
extents 的总和,而不是空间的单个连续分配,数据库服务器跟踪 tblspace 而不依赖于
数据库。
临时表的创建
创建临时表所涉及的任务类似于数据库服务器添加新的永久表时所执行的任务。主要区别
在于临时表不接收数据库的系统目录中的条目。有关更多信息,请参阅 GBase 8s 管理员
指南 中的数据存储在哪里一章中的定义临时表一节。

GBA-02DU-0006
错误码
错误标识
错误信息
GBA-02DU-000
6
ER_GCLUSTER_HAS
H_COLUMN_UPDAT
E
Can't
update
distributed
column
'column-name'
错误出现原因
不允许更新hash 分布列的值
分析与建议
不支持对Hash 分布列的更新操作,请采取其他方式实现。