返回首页

gbase数据、南大通用产品文档:GBase8aLOG2(X)

更新日期:2024年09月11日

函数说明
返回X 的以2 为底的对数。通常用于算出一个数字需要多少比特位存储。
示例
示例1:返回以2 为底,“65536”的对数。
gbase> SELECT LOG2(65536) FROM dual;
+-------------+
| LOG2(65536) |
+-------------+
|
16 |
+-------------+
1 row in set

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
759
示例2:返回以2 为底,“-100”的对数。
gbase> SELECT LOG2(-100) FROM dual;
+------------+
| LOG2(-100) |
+------------+
|
NULL |
+------------+
1 row in set

根据贵组织的需求,您可以负责执行以下各段中描述的定期任务。并不是所有这些任务都
适合每个安装。例如,如果您的数据库服务器每天运行 24 小时、每周运行 7 天,那么
您就不可以使数据库服务器进入脱机方式,这样数据库服务器的运行方式将不能定期更
改。
更改数据库服务器方式
数据库服务器管理员负责通过更改方式来启动和关闭数据库服务器。数据库服务器运行方
式说明了如何更改数据库服务器方式。
备份数据和逻辑日志文件
要确保能够在发生故障时恢复数据库,请经常备份存储空间和逻辑日志。您也可以使用
archecker 实用程序验证 ON-Bar 备份。
每隔多少时间备份一次存储空间将取决于更新数据的频率以及数据的重要性如何。备份调
度可以包括每周进行一次完全(0 级)备份、每天进行增量(1 级)备份以及每小时进行
2 级备份。还必须在执行管理任务(如添加数据库空间、删除逻辑日志文件或启用镜像)
后执行 0 级备份。
每个逻辑日志文件一满就立即备份该文件。可以手动或自动备份这些文件。有关使用ON-
Bar 和 ontape 的信息,请参阅《GBase 8s 备份与复原指南》。
监视活动
GBase 8s 数据库服务器的设计使您能够监视数据库服务器的每个方面。监视数据库服务
器活动提供了对于可用信息的描述、有关获取信息的指示信息以及有关使用信息的建议。
检查一致性
对数据的一致性执行不定期的检查。有关这些任务的描述,请参 阅一致性检查。

存储特征告诉数据库服务器如何管理智能大对象。这些特征包括诸如大小、日志记录、锁
定和打开模式这样的领域。关于存储特征,有下列选项:

使用特定于系统的存储特征作为取得智能大对象的存储特征的基础。

以下列之一来覆盖系统缺省值:

为您想要在其中存储智能大对象的特别 CLOB 或 BLOB 列定义的存储特


特别 CLOB 或 BLOB 列特有的存储特征,称为列级存储特征

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 151
-

仅为此智能大对象定义的特殊存储特征,称为特定于用户的存储特征
数据库服务器使用层级结构来从新的智能大对象取得存储特征,如下图所示。
图: 存储特征层级结构


对于给定的存储特征,在列级定义的任何值都覆盖特定于系统的值,任何用户级的值都覆
盖列级的值。可在下表中展示的三个时刻指定存储特征。
何时指定
如何指定
要获取更多信息
当创建 sbspace

onspaces 实用程序的选项
特定于系统的存储特征
GBase 8s 管理员指南
当创建数据库表

CREATE
TABLE 语句的 PUT 子句中
的关键字
GBase 8s SQL 指南:语法
当创建智能大对
象时
在 ifxLobDescriptor 类中创
建标志和方法
设置创建标志
特定于系统的存储特征
当数据库管理员初始化数据库服务器并以 onspaces 实用程序创建 sbspace 时,建立特定于
系统的存储特征,如下:

如果 onspaces 实用程序已为特定的存储特征指定了值,则数据库服务器使
用 onspaces 值作为特定于系统的存储特征。

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 152
-

如果 onspaces 实用程序还未为特定的存储特征指定值,
则数据库服务器使用系统缺
省值作为特定于系统的存储特征。
特定于系统的存储特征适用于存储在 sbspace 中的所有智能大对象,除非智能大对象以列
级或特定于用户的存储特征特意覆盖它们。
要了解 onspaces 可设置的存储特征,以及系统缺省值,请参阅 表 1 。
对于大多数应用程序,推荐您使用存储特征的特定于系统的缺省值。请注意下列例外:

应用程序需要取得额外的性能。
可使用 ifxLobDescriptor 中的 setXXX() 方法,来更改新智能大对象的磁盘存储信息。
要获取更多信息,请参阅 设置创建标志。

想要使用现有智能大对象的存储特征。
IfxLoStat.getLobDescriptor() 方法可取得打开的智能大对象的大对象描述符。然后,
可创建新的对象,
并使用IfxSmartBlob.ifxLoAlter() 方法来将它的特征设置为新的描
述符。要获取更多信息,请参阅 更改存储特征。

正在使用多个智能大对象,且不想使用缺省的 sbspace。
DBA 可以 onconfig 文件中的 SBSPACENAME 配置参数来指定缺省的 sbspace
名称。然而,必须确保您创建的智能大对象位置(sbspace 的名称)是正确的。如
果未为您的智能大对象指定 sbspace 名称,则数据库服务器将它存储在此缺省的
sbspace 中。此安排可导致空间限制。

如果知道智能大对象的大小,
请使用 IfxLobDescriptor.setEstBytes() 方法来在应用程
序中指定此大小,而不使用 onspaces 实用程序(系统级)或 CREATE TABLE 或
ALTER TABLE 语句(列级)。
取得关于存储特征的信息
要获取智能大对象的列级存储特征,应用程序可调用 IfxSmartBlob 类中的下列方法,传
递 colname 参数的列名称:
IfxLobDescriptor IfxLoColInfo(java.lang.String colname) throws
SQLException
大多数应用程序仅需要确保 sbspace 名称的正确存储特征(智能大对象的位置)。在创
建 IfxSmartBlob 对象之前,通过调用 ifxLobDescriptor 类中的各种 getXXX() 方法,可取得
此存储特征和其他存储特征的信息。下表总结 getXXX() 方法。
ifxLobDescriptor 中的方法签名
用途
int getCreateFlags()
取得对象的创建标志
long getEstSize()
取得对象的估算大小,以字节计

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 153
-
int getExtSize()
取得对象的 extent 大小
long getMaxBytes()
取得对象的最大大小,以字节计
java.lang.String getSbspace() 取得对象存储在其中的数据库服务器中的 sbspace 名

设置 sbspace 特征的示例
下列对 onspaces 实用程序的调用在 /dev/sbspace1 分区中创建名为 sb1 的 sbspace:
onspaces -c -S sb1 -p /dev/sbspace1 -o 500 -s 2000
-Df "AVG_LO_SIZE=32"
对于 sb1 sbspace 中的所有智能大对象,下表展示结果的特定于系统的存储特征。
表 1. sb1 sbspace 的特定于系统的存储特征
磁盘存储信息
特定于系统的值
由 onspaces 实用程
序指定
extent 的大小
由数据库服务器计算
系统缺省值
下一 extent 的大小
由数据库服务器计算
系统缺省值
最小 extent 大小
由数据库服务器计算
系统缺省值
智能大对象的大小
32 KB(数据库服务器用作大小
估算)
AVG_LO_SIZE
I/O 块的最大大小
由数据库服务器计算
系统缺省值
sbspace 的名称
sb1
-S 选项
日志记录
OFF
系统缺省值
最后访问时间
OFF
系统缺省值
使用磁盘存储信息
磁盘存储信息帮助数据库服务器确定如何最高效地管理磁盘上的智能大对象。
重要: 对于大多数应用程序,使用数据库服务器为磁盘存储信息计算的值。GBase 8s JDBC
Driver 中提供的方法用作特殊情况。
此磁盘存储信息包括:

extent 分配信息:

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 154
-

extent 大小:
分配 extent是数据库服务器一次分配给智能大对象的 sbspace 内连续字节的
集合。数据库服务器以 extent 大小的增量为智能大对象执行存储分配。
通过调用 ifxLobDescriptor.setExtSize() 方法可指定 extent 大小。

下一 extent 大小:
数据库服务器试图作为 chunk 中单个连续的区域来分配 extent。然而,如果
没有足够大的单个 extent ,则数据库服务器必须使用所需的多个 extent 来
满足当前的写请求。 在初始的 extent 填满之后,数据库服务器尝试分配另
一连续的 extent 磁盘空间。此过程称为下一 extent 分配。
要获取关于 extent 的更多信息,请参阅《GBase 8s 管理员指南》中关于磁盘结构
和存储的主题。

大小信息:

新智能大对象中估算的字节数

智能大对象可增长到的最大字节数
要指定大小信息,可使用 ifxLobDescriptor 类中的 setMaxBytes() 和 setEstBytes() 方
法。
如果知道智能大对象的大小,则请使用 setEstBytes() 方法来指定此大小。这是设置
extent 大小的最佳方式,
因为数据库服务器可分配整个智能大对象作为一个 extent。


位置:
标识存储智能大对象处位置的 sbspace 名称。要设置此名称,可使
用 vifxLobDescriptor.setSbSpace() 方法。
数据库服务器使用磁盘存储信息,来确定如何最优地确定大小、分配和管理 sbspace 的
extent。它可为智能大对象计算除了 sbspace 名称之外的所有磁盘存储信息。
下表总结为智能大对象指定磁盘存储信息的方式。
表 1. 指定磁盘存储信息.
为智能大对象指定
特定于系统的存储特征
列级存储特征 特定于用户的
存储特征

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 155
-
磁盘存储信息的方
法。
通过使用系统缺
省值,或由
onspaces 实用程序
指定的值来取得特
定于系统的磁盘存
储信息。由 CREATE
TABLE 的 PUT 子句
来指定列级存储特
征。由 GBase 8s
JDBC Driver 方法
来指定特定于用户
的存储特征。
磁盘存储信息
系统缺省值
由 onspaces 实
用程序指定
由 CREATE
TABLE 的 PUT
子句指定
由 GBase 8s
JDBC
Driver 方法
指定
extent 的大小
由数据库服务器
计算
EXTENT_SIZE
EXTENT SIZE

下一 extent 的大

由数据库服务器
计算
NEXT_SIZE


最小 extent 大小
4 KB
MIN_EXT_SIZE


智能大对象的大小
由数据库服务器
计算
sbspace 中所有
智能大对象的平
均大小:
AVG_LO_SIZE

特殊智能大对
象的估计大小
特殊智能大对
象的最大大小
I/O 块的最大大小
由数据库服务器
计算
MAX_IO_SIZE


sbspace 的名称
SBSPACENAME
-S 选项
智能大对象在
其中的现有
sbspace 名
称:IN 子句


GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 156
-
使用日志记录、最后访问时间,以及数据完整性
数据库管理员和应用程序可影响某些附加的智能大对象属性:

是否在系统日志文件中记录智能大对象的更改

是否保存智能大对象的最后访问时间

如何格式化智能大对象的 sbspace 中的页
下表总结如何在系统、列和应用程序级别上修改这些属性。
表 1. 指定属性信息
属性信息
特定于系统
的存储特征
缺省值
特定于系统的
存储特征,由
onspaces 实
用程序指定
列级存储特征,由
CREATE TABLE 的
PUT 子句指定
特定于用户的存
储特征,由 JDBC
驱动程序方法指

日志记录
OFF
LOGGING
LOG、NO LOG

最后访问时间
OFF
ACCESSTIME
KEEP ACCESS TIME、
NO KEEP ACCESS TIME

缓冲模式
OFF
BUFFERING


锁定模式
锁定整个智
能大对象
LOCK_MODE


数据完整性
高完整性

HIGH INTEG、
MODERATE INTEG

日志记录
在缺省情况下,数据库服务器不日志记录智能大对象的用户数据。您可控制智能大对象的
日志记录行为,作为它的创建标志的一部分。要获取更多信息,请参阅 设置创建标志。
当数据库执行日志记录时,由于下列原因,智能大对象可能导致长事务:

智能大对象非常大,甚至达到数 GB 大小。
日志记录用户数据所需的日志存储量很容易使日志溢出。

在数据集合可相当长的情况下,可能使用智能大对象。
例如,如果智能大对象保存低品质音频记录,则数据集合的量可能不太大,但记录
的会话可能非常长。

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 157
-
简单的变通方法是将长事务分成几个较小的事务。然而,如果不能接受此情况,则可控制
数据库服务器执行智能大对象日志记录的时间。(表 1 展示可如何控制智能大对象的日志
记录行为。)
当启用日志记录时,数据库服务器日志记录对智能大对象的用户数据的更改。它按照当前
的数据库日志模式来执行此日志记录。
对于不符合 ANSI 的数据库,数据库服务器不保证在事务提交时刷新关于智能大对象的日
志记录。然而,元数据总能恢复至活动一致状态;也就是说,恢复至确保在元数据(智能
大对象的控制信息,诸如引用计数)中不存在结构性不一致的状态。
符合 ANSI 的数据库服务器使用非缓冲的日志记录。当启用智能大对象日志记录时,在事
务提交时,刷新关于智能大对象的所有日志记录(元数据和用户数据)。然而,在提交时
刻,不保证将用户数据刷新至它的稳定存储位置。
当禁用日志记录时,即使数据库服务器日志记录其他数据库更改,数据库服务器也不日志
记录对用户数据的更改。然而,数据库服务器始终日志记录对元数据的更改。因此,数据
库服务器仍可将元数据恢复至活动一致状态。
重要: 请慎重考虑是否启用智能大对象的日志记录。数据库服务器会承受对智能大对象的相当
高的开销。您还必须确保系统日志文件足够大,以保存智能大对象的值。当更新事务是活动的
时,逻辑日志大小必须超过数据库服务器日志记录的数据的总量。
编写应用程序,以便于任何带有潜在长更新的智能大对象的事务不会导致其他事务等待。
如果满足下列条件,则多个事务可访问同一智能大对象实例:

对于智能大对象,事务可访问包含 LO 句柄的数据库行。
对于同一智能大对象,
如果多列持有 LO 句柄,
则在同一智能大对象上可存在多个
引用。

在智能大对象上,另一事务不持有互相冲突的锁。
要获取关于智能大对象锁的更多信息,请参阅 使用锁。
在加载操作完成之后,当加载智能大对象并重新启用它时,当禁用日志记录特性时,会产
生最佳更新性能和最少的逻辑日志问题。如果开启日志记录,则在批量加载然后执行 0 级
备份之前,您可能想要关闭日志记录。
最后访问时间
智能大对象的最后访问时间是数据库服务器最后读或写智能大对象时的系统时间。最后访
问时间记录对智能大对象的用户数据和元数据的访问。以从 1970 年 1 月 1 日以来的秒
数来存储此系统时间。数据库服务器在 sbspace 的元数据区域中存储此最后访问时间。
在缺省情况下,数据库服务器不保存最后访问时间。通过设置
LO_KEEP_LASTACCESS_TIME 创建标志并调用 IfxLobDescriptor.setCreateFlags()方法,

指定保存最后访问时间。要获取更多信息,请参阅 设置创建标志。

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 158
-
对于智能大对象,数据库服务器还跟踪最后修改时间和最后状态更改。要获取更多信息,
请参阅 使用状态特征。
重要: 请慎重考虑是否跟踪智能大对象的最后访问时间。对于智能大对象,日志记录与维护最
后访问时间并发,都会使数据库服务器承受相当高的开销。
数据完整性
通过调用 IfxLobDescriptor.setCreateFlags() 方法,以 LO_HIGH_INTEG 和
LO_MODERATE_INTEG 创建标志,可指定数据完整性。要获取更多信息,请参阅 设置创
建标志。
sbpage 是为智能大对象数据分配的单元,
其存储在 sbspace 的用户数据区域中。
sbspace 中
sbpage 的结构确定数据库服务器可提供何种程度的数据完整性。数据库服务器使用页标头
和页结尾来检测不完整的写和数据损坏。
数据库服务器支持下列数据完整性级别:

高完整性告诉数据库,在每一 sbpage 中同时使用页标头和页结尾。

中等完整性告诉数据库服务器,在每一 sbpage 中仅使用页标头。
中等完整性提供下列优势:

它排除额外的数据复制操作,当 sbpage 有页标头和页结尾时,这是必需的。

它保持页上用户数据对齐,因为不出现页标头和页结尾。
对于包含大量通过数据库服务器移动的音频或视频文件,且不需要高数据完整性的智能大
对象,中等完整性可能非常有用。在缺省情况下,数据库服务器使用 sbspace 页的高完整

(页标头和页结尾)

您可控制智能大对象的数据完整性,
作为它的存储特征的一部分。
重要: 对于智能大对象,请慎重考虑是否使用 sbpage 的中等完整性。虽然中等完整性每页占
用较少磁盘空间,但如果发生磁盘错误,它也降低了数据库服务器恢复信息的能力。
要获取关于 sbspace 页的信息,请参阅《GBase 8s 管理员指南》。
更改存储特征
IfxSmartBlob 类中的 IfxLoAlter() 方法允许您更改智能大对象的存储特征。
要更改智能大对象特征,请:
1.
创建新的大对象描述符。
例如:
IfxLobDescriptor loDesc = new IfxLobDescriptor(conn);
2. 调用 IfxLobDescriptor.setCreateFlags()、
setEstBytes()、
IfxLobDescriptor.setMaxBytes()、
setExtSize 和 setSbspace(),来指定新特征:
public void setCreateFlags( int flags )
public void setEstBytes(long estSize)

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 159
-
public void setMaxBytes (long maxSize)
public void setExtSize (long extSize)
public void setSbspace(java.lang.String sbspacename)
flag 参数是来自 设置创建标志 的常量。
调用 IfxLoAlter() 来修改现有的智能大对象,以包含该新描述符:
public int IfxLoAlter(IfxLocator loPtr, IfxLobDescriptor loDesc)
throws SQLException
public int IfxLoAlter(IfxBblob blob, IfxLobDescriptor loDesc)
throws SQLException
public int IfxLoAlter(IfxCblob clob, IfxLobDescriptor loDesc)
throws SQLException

在进行更新之前,对于整个智能大对象,IfxLoAlter() 在服务器中取得一个排他锁。它保持
此锁,直至更新完成为止。
设置创建标志
通过调用 IfxLobDescriptor.setCreateFlags() 方法,可更改下列特征:

日志记录特征
可指定 LO_LOG 或 LO_ NOLOG 常量。
对于对应的智能大对象,LO_LOG 导致服务器遵循当前数据库日志使用的日志记
录过程。此选项可生成大量日志流量,并增加逻辑日志填满的风险。
不采用完全日志记录,当初始地加载智能大对象时,您可以关闭日志记录,然后一
旦加载了智能大对象,就再一次开启日志记录。如果使用 NO LOG,则稍后将智能
大对象元数据恢复至不存在结构性不一致的状态。在大多数情况下,都不存在事务
不一致性,但不能保证该结果。
要获取关于日志记录的更多详细用法信息,请参阅 日志记录。

最后访问时间特征
可指定 LO_ KEEP_LASTACCESS_TIME 或 LO NOKEEP_LASTACCESS_TIME
常量。在智能大对象元数据中,LO_ KEEP_LASTACCESS_TIME 记录最后读或写
对应的智能大对象时的系统时间。
要获取关于最后访问时间的更详尽用法,请参阅 最后访问时间。

是否通过以页标头和页结尾来产生用户数据页,以检测不完整的写和数据损坏
可指定 LO_ HIGH_INTEG 或 LO_moderate_integ 常量。LO_ HIGH_INTEG 是缺
省的数据完整性行为。
要获取关于数据完整性的更详尽用法,请参阅 数据完整性。

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 160
-
下列示例设置多个标志:
loDesc.setCreateFlags
(IfxSmartBlob.LO_LOG+IfxSmartBlob.LO_TEMP+...)
并行 getXXX() 方法允许您取得大对象的当前存储特征:
public int getCreateFlags()
要获取关于所有特征的更详尽信息,请参阅《GBase 8s SQL 指南:语法》中描述 CREATE
TABLE 语句的 PUT 子句的部分。