返回首页

gbase数据、南大通用产品文档:GBase8s从现有代码创建不透明类型

更新日期:2024年09月11日

前面的主题描述了用于创建不包含现有 Java™ 类的新的不透明类型的方法。从现有 Java
代码创建不透明类型时,请指定不透明类型中包含的 SQL 名称、JAR 文件 SQL 名称、
支持的 UDR(如果有)和任何其他不支持的 UDR。
(有关 SQL 名称的解释,请参阅SQL
名称。)还可以指定长度、对齐方式、隐式和显式强制转换。
要从现有的代码创建不透明类型。请使用以下方法:

UDTMetaData.setSQLName() 指定 SQL 语句中引用的不透明类型的 SQL 名称

对于不透明类型中支持的 UDR 使用 UDTMetaData.setSupportUDR()
支持的 UDR 为输入/输出、发送/接收等等。

对于不透明类型中不支持的 UDR 使用 UDTMetaData.setUDR()

UDTMetaData.setJarFileSQLName() 指定 JAR 文件的 SQL 名称

UDTMetaData.setImplicitCast() 或 UDTMetaData.setExplicitCast() 指定强制转换

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


如果不透明类型是固定长度的,
使用 UDTMetaData.setLength()
(驱动程序缺省为可
变长度)

UDTMetaData.setAlignment() 指定不透明类型所对齐的字节边界(仅当您不希望数
据库服务器默认 4 字节边界时)

UDTManager.createJar() 创建 JAR(.jar)文件(如果没有)

UDTManager.createUDT() 创建不透明类型
另外,
setXXXCast() 、
setSupportUDR() 和 setUDR() 方法仅用于从现有代码创建不透明类型:

public void setImplicitCast(int ifxtype, String methodsqlname)
throws SQLException
public void setExplicitCast(int ifxtype, String methodsqlname)
throws SQLException
public void setSupportUDR(Method method, String sqlname, int type)
throws SQLException
public void setUDR(Method method, String sqlname)
throws SQLException
setXXXCast() 方法
setXXXCast() 方法指定显式或隐式将不透明类型转换为指定的数据类型。
ifxtype 参数是类 com.gbasedbt.lang.IfxTypes 的类型代码。数据库服务器中的 ifxtype 参数和
SQL 类型之间的数据类型映射在映射转换类型中进行了详细说明。methodsqlname 参数是
实现此转换的 Java™ 方法的 SQL 名称。
以下示例使用 SQL 名称 circle2_input 设置由 Java 方法实现的隐式转换:
setImplicitCast(com.gbasedbt.lang.IfxTypes.IFX_TYPE_LVARCHAR,
"circle2_input");
以下示例使用 SQL 名称 circle_output 设置由 Java 方法实现的显式转换:
setExplicitCast(com.gbasedbt.lang.IfxTypes.IFX_TYPE_LVARCHAR,
"circle2_output");
以下示例设置一个显式转换,将 circle2 不透明类型转换为整数:
setExplicitCast(com.gbasedbt.lang.IfxTypes.IFX_TYPE_INT,
"circle2_to_int");
setSupportUDR() 和 setUDR() 方法
setSupportUDR() 方法在现有 Java™ 类中指定 Java 方法,该类将被注册为不透明类型支持
的 UDR。
method 参数指定 java.lang.reflect.Method 中的一个对象,
将其注册为数据库服务中不透明类
型的 Java 支持 UDR。支持的 UDR 为输入、输出、发送、接收等等。(有关更多信息,
请参阅 GBase 8s 用户定义的例程和数据类型开发者指南 。)

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

sqlname 参数指定方法的 SQL 名。有关更多信息,请参阅 SQL 名称。
type 参数指定支持的 UDR 的类型。如下所示:
UDTMetaData.INPUT
UDTMetaData.OUTPUT
UDTMetaData.SEND
UDTMetaData.RECEIVE
UDTMetaData.IMPORT
UDTMetaData.EXPORT
UDTMetaData.BINARYIMPORT
UDTMetaData.BINARYEXPORT
有关如何从现有代码创建不透明类型的操作步骤,请参阅从现有 Java 类创建不透明类型。

提示: 不必注册 SQLData 接口中方法。例如,您不需注册 SQLData.getSQLTypeName() 、
SQLData.readSQL() 或 SQLData.writeSQL()。
要指定其他 UDR,使用创建 UDR 中描述的 setUDR()。

单表列的最大数目限制为 32767 列。
有关详细信息,请参阅《GBase 8s V8.8 What's new_3.5.1》“1.3.4
GBase 8s 中的限
制新增”。


GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 38 -

使用 onbar -b 命令可备份存储空间和逻辑日志。
要运行 ON-Bar 命令,您必须是 root 用户或 gbasedbt 用户,或者是 UNIX™
上 bargroup 组的成员。
用途

示例:备份整个系统

示例:备份所有联机存储空间和逻辑日志

示例:执行增量备份

示例:备份指定的存储空间和所有逻辑日志

示例:备份文件中指定的存储空间列表

示例:备份逻辑日志

示例:物理备份
使用 ON-Bar 备份的语法

表 1. onbar -b 命令的选项
选项
描述
-b
指定一个备份
备份存储空间和逻辑日志,包括当前逻辑日志。
dbspace_list
指定要备份的存储空间,以空格分隔。
如果没有输入 dbspace_list 或 -f filename,ON-
Bar 会备份数据库服务器上所有联机的存储空间。

GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 39 -

选项
描述
-c
关闭并备份当前逻辑日志和其他所有逻辑日志。
-C
启动连续日志备份。
因为连续日志备份将无限期运行以等待逻辑日志填满,所
以请保留专用存储设备和终端窗口。
要停止连续日志备份,请使用中断命令(例如,CTRL-C
或 SIGTERM)停止 ON-Bar 进程。
-cf
指定是否备份关键文件。
有效值为:

yes = 备份关键文件。该值为执行 0 级、1 级
或 2 级备份时的缺省值。

no = 不备份关键文件。该值为备份逻辑日志文
件时的缺省值。

only = 仅备份关键文件。
-ffilename
备份 filename 值所指定的文本文件中列出的存储空
间。
使用该选项以避免每次备份时都要输入一长串存储空间。
有关更多信息,请参阅文件中的存储空间列表。
-F
执行伪备份
存储管理器应用程序不是必需的。实际上并没有发生备
份,因此不可能从伪备份进行恢复。如果确实需要伪备
份,请酌情少量使用。伪备份可能在以下情况下适用:

更改数据库日志记录方式

将 RAW 表更改为 STANDARD 表

GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 40 -

选项
描述

允许用户在不执行备份的情况下使用新的日志、
块或镜像

在您作为管理员判定不需要备份的特殊情况下
-L
指定要在存储空间上执行的备份级别:

0 = 完整备份(缺省值)

1 = 自上次 0 级备份以来的更改

2 = 自上次 1 级备份以来的更改
如果您请求增量备份,而 ON-Bar 发现没有为特定存储
空间执行前一级的备份,那么 ON-Bar会对该存储空间执
行前一级的备份。例如,如果请求 1 级备份,而 ON-
Bar 未找到 0 级备份,那么它会转而进行 0 级备份。
-l
执行对所有逻辑日志文件的备份。
当前逻辑日志文件未备份。
如果使用的是 Storage Manager,它还会备份 Storage
Manager 目录。
-O
覆盖常规备份限制。
当 Blob 空间处于脱机状态时,使用该选项备份逻辑日
志。
如果 Blob 空间脱机时发生日志备份,返回码 178 将显
示在 ON-Bar 活动日志中。
-p
仅备份物理存储空间,而不备份逻辑日志。
会将警告消息写入活动日志,以列出恢复存储空间时所需
的最新日志文件的日志唯一标识。如果逻辑日志是连续进
行备份的,请使用此选项。如有必要,将启动日志开关,

GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 41 -

选项
描述
以便可以备份此日志。如果当前的日志比最近一次存储空
间的归档检查点日志新,那么不会启动日志开关。
-s
数据库服务器发生故障后,回收磁盘上现有的所有逻辑日
志。当服务器处于脱机状态时,可以运行onbar -l -
s 命令。
如果可能,替换损坏的磁盘前请使用该选项。如果使
用 onbar -r 在未损坏的磁盘上执行冷恢复,ON-
Bar 将自动回收逻辑日志。
-w
备份整个系统,其中包含基于单个检查点的所有存储空间
和逻辑日志。
备份的时间与备份信息存储在一起。在整个系统的备份
中,所有存储空间中的数据是一致的,因此,不再需要恢
复逻辑日志。如果不保存逻辑日志,您必须 使用 -
w 选项。
用途
在备份数据之前,请通过运行 oncheck -cD 命令来确保您的数据是一致的。
要运行 ON-Bar 命令,您必须是 root 用户或 gbasedbt 用户,或者是 UNIX 上 bargroup 组
的成员。有关更多信息,请参阅 ON-Bar 安全性。
当数据库服务器处于联机、停顿或快速恢复方式时,可以备份存储空间和逻辑日志。
存储空间块可以存储在原始磁盘存储空间上、熟文件中。
仅备份联机的存储空间。使用 onstat -d 命令来确定哪些存储空间是联机的。备份期间,如
果 ON-Bar 遇到关闭的数据库空间,它将跳过并随后返回一个错误。如果存储空间处于脱
机状态,请在存储空间回到联机状态时重新启动备份。
开始备份 后,在 ON-Bar 活动日志和数据库服务器消息日志中监视其进度。
可以单独备份逻辑日志或与存储空间一起备份。一旦逻辑日志填满,请立即对其进行备
份,这样就可以复用这些日志,并防止在包含这些日志的磁盘丢失时发生数据丢失。如果
日志文件填满,数据库服务器将暂停,直到备份了逻辑日志为止。可以手动备份逻辑日
志,也可以运行 onbar -b -C命令来启动连续逻辑日志备份。逻辑日志备份始终是 0 级
的。关闭当前逻辑日志后就可以对其进行备份。

GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 42 -

如果执行整个系统的备份与恢复,那么无需恢复逻辑日志。但是,请在使用整个系统的备
份时备份逻辑日志。这些日志备份允许您将数据恢复到整个系统备份后的某一时间,从而
使数据丢失降到最低限度。
如果要运行连续的逻辑日志备份,然后启动整个系统备份,那么 ON-Bar 进程会尝试保存
逻辑日志。由于连续的逻辑日志备份正在运行,因此会返回错误消息以指示逻辑日志备份
已在运行,且整个系统备份会返回非零错误代码。在这种情况下,逻辑日志只会备份一
次。要避免该错误,请使用onbar -b -w -p 命令创建物理备份。
要在 ON-Bar 中备份特定表或一组表,请将这些表存储在单独的数据库空间中,然后备份
该数据库空间。或者,您也可以使用 archecker 实用程序执行表级别恢复。

示例:备份整个系统
以下命令在执行所有联机存储空间和逻辑日志的检查点后执行整个系统的 0 级备份:
onbar -b -w
以下命令执行整个系统的 1 级备份:
onbar -b -w -L 1

示例:备份所有联机存储空间和逻辑日志
以下命令执行所有联机存储空间和已用逻辑日志的标准 0 级备份:
onbar -b

示例:执行增量备份
以下命令执行标准 1 级备份:
onbar -b -L 1

示例:备份指定的存储空间和所有逻辑日志
以下命令对名为 fin_dbspace1 和 fin_dbspace2 的数据库空间以及所有逻辑日志执行 0 级备
份:
onbar -b fin_dbspace1 fin_dbspace2

示例:备份文件中指定的存储空间列表
以下名为 listfile3 的样本文件包含要备份的存储空间列表:blobsp2.1、my_dbspace1、
blobsp2.2、dbsl.1、rootdbs.1 和 dbsl.2。
blobsp2.1
# a comment ignore this text

GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 43 -


my_dbspace1 # back up this dbspace
; another comment
blobsp2.2 dbsl.1
rootdbs.1 dbsl.2 ; backing up two spaces
以下命令备份 listfile3 文件中列出的存储空间:
onbar -b -f listfile3

示例:备份逻辑日志
以下命令启动手动逻辑日志备份:
onbar -b -l
以下命令备份当前逻辑日志文件:
onbar -b -l -c

示例:物理备份
以下命令备份所有存储空间,而不备份任何逻辑日志:
onbar -b -p -L 0
会将警告消息写入 ON-Bar 活动日志文件中,说明该日志文件备份未启动。该消息还包含
恢复存储空间时所需的最新日志文件的日志唯一标识。所需的最新日志文件包含最近一次
备份的数据库空间的归档检查点。
示例消息:
2011-12-14 09:30:35 14277 14275 (-43354) WARNING: Logical logs were
not backed up as part of this operation. Logs through log unique ID 9
are needed for restoring this backup. Make sure these logs are backed
up separately.

文件中的存储空间列表
您可以在文件中列出要备份或恢复的存储空间。
filename 值可以是任何有效的 UNIX™ 文件名:

简单文件名,例如:listfile_1

相对文件名,例如:../backup_lists/listfile_2 或 ..\backup_lists\listfile2

绝对文件名,例如:/usr//backup_lists/listfile3 或 c:\\backup_lists\listfile3
文件的格式规则如下:

GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 44 -


如果要恢复块,那么列出不带路径的存储空间名称。每行可以列出多个存储空
间,用空格或制表符分隔。

如果要重命名块,那么列出旧块路径名、旧偏移量、新块路径名和新偏移量。在
每项之间放置一个空格或一个制表符。将每个块的信息置于单独的行上。

注释以 # 或 ; 符号开头,并继续到当前行的结尾。

ON-Bar 将忽略文件中的所有注释和空白行。

备份期间使用 Storage Manager
使用 ism_watch 命令可监视发送到 Storage Manager 服务器的备份与恢复。在备份期间,
Storage Manager 服务器自动将存储空间数据路由到 ISMData 卷池中的卷,并将逻辑日志
文件路由到 ISMLogs 卷池中的卷。

始终保持 ISMLogs 池中有安装的卷,以确保存储设备总是可用于接受逻辑日志数据。如
果未安装此卷,备份会暂停。有关使用设备和 Storage Manager 命令的更多信息,请参阅
《GBase 8s Storage Manager 管理员指南》。
备份操作期间,Storage Manager 会创建已备份数据的保存集并在 Storage Manager 目录中
输入有关已备份数据的信息。您还可以使用 ism_catalog -create_bootstrap 命令来备份
Storage Manager 目录:
如果使用 onbar 脚本备份存储空间和逻辑日志,将自动备份 Storage Manager 目录。如果
直接调用 onbar_d,那么必须使用 ism_catalog -create_bootstrap 命令。

备份 Blob 空间
您可以在使用事务日志记录的数据库中备份 Blob 空间。
备份新的 Blob 空间之前,确保对 Blob 空间创建进行了记录的日志文件不再是当前的日
志文件。您可以运行 onstat -l 命令来验证逻辑日志状态。
当用户更新或删除 Blob 空间中的简单大对象时,直到释放了包含删除记录的日志文件后
才能释放 Blob 页以重新使用。必须备份日志文件才能将其释放。
重要: 如果在更新或删除没有备份逻辑日志的 Blob 空间的数据后对该 Blob 空间执行热恢
复,那么该 Blob 空间可能无法恢复。
要备份 Blob 空间:
1.
通过运行 onstat -l 或 xctl onstat -l 命令来验证逻辑日志的状态。
2.
通过运行 onmode -l 命令来切换到下一个日志文件。
3.
备份逻辑日志:

GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 45 -


如果 Blob 空间是联机的,请运行 onbar -b -l -c 命令。

如果 Blob 空间是脱机的,请运行 onbar -b -l -O 或 onbar -b -O 命令。如果备
份成功,ON-Bar 将返回 178。
4.
通过运行 onbar -b 或 onbar -b -w 命令来备份 Blob 空间。