返回首页

gbase数据、南大通用产品文档:GBase8s从标准输入恢复

更新日期:2024年09月11日


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

可以从标准输入执行恢复,必须首先已经执行到标准输出的备份。
当您从标准输入恢复时,ontape 不会提示您提供选项或信息。 如果 ontape 不能根据您在
恢复命令中提供的信息执行该操作,ontape 将退出并生成相应的错误。 从标准输入中恢
复和从磁带恢复在以下几个方面不同:

不发生逻辑恢复或逻辑日志回收。
要执行逻辑恢复,在物理恢复后使用 ontape -l 命令。
要回收逻辑日志,请在物理恢复之前使用 ontape -S 命令。

不会提示您确认恢复操作。关于归档的参考消息被送到 stderr。
如果您发现有问题,您可以在归档信息完成而数据库服务器尚未启动的 10 秒延
迟期间中断恢复。
示例
在以下示例中,ontape 从文件 level_0_archive 执行了物理恢复,该文件中包含上次执行的
到标准输出的归档。
cat /home/level_0_archive | ontape -p
在以下示例中,ontape 执行了 0 级归档的恢复,随后是 1 级归档的恢复:
cat /home/level_0_archive /home/level_1_archive | ontape -r
在以下示例中,ontape 执行了 sbspace1 的恢复:
cat/home/level_0_archive | ontape -r -D spspace1 -t STDIO
当这些恢复完成时,数据库服务器处于单用户方式。

java.sql.CallableStatement
java.sql.CallableStatement 是存储过程执行接口。
表8-2 对java.sql.CallableStatement 的支持情况
方法名
返回值类型
支持JDBC 4
getArray(int parameterIndex)
Array
Yes
getBigDecimal(int
parameterIndex)
BigDecimal
Yes
getBlob(int parameterIndex)
Blob
Yes
getBoolean(int parameterIndex)
boolean
Yes
getByte(int parameterIndex)
byte
Yes
getBytes(int parameterIndex)
byte[]
Yes
getClob(int parameterIndex)
Clob
Yes
getDate(int parameterIndex)
Date
Yes
getDate(int
parameterIndex,
Calendar cal)
Date
Yes
getDouble(int parameterIndex)
double
Yes
getFloat(int parameterIndex)
float
Yes

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
219
getInt(int parameterIndex)
int
Yes
getLong(int parameterIndex)
long
Yes
getObject(int parameterIndex)
Object
Yes
getObject(int
parameterIndex,
Class type)
Object
Yes
getShort(int parameterIndex)
short
Yes
getSQLXML(int
parameterIndex)
SQLXML
Yes
getString(int parameterIndex)
String
Yes
getNString(int parameterIndex)
String
Yes
getTime(int parameterIndex)
Time
Yes
getTime(int
parameterIndex,
Calendar cal)
Time
Yes
getTimestamp(int
parameterIndex)
Timestamp
Yes
getTimestamp(int
parameterIndex, Calendar cal)
Timestamp
Yes
registerOutParameter(int
parameterIndex, int type)
void
Yes
registerOutParameter(int
parameterIndex, int sqlType, int
type)
void
Yes
wasNull()
Boolean
Yes

不允许含有OUT 参数的语句执行批量操作。

以下方法是从java.sql.Statement 继承而来:close ,execute ,executeQuery ,
executeUpdate,
getConnection,
getResultSet,
getUpdateCount,
isClosed,setMaxRows ,
setFetchSize。

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

以下方法是从java.sql.PreparedStatement 继承而来:addBatch,clearParameters,
execute,executeQuery,executeUpdate,getMetaData,setBigDecimal,setBoolean,
setByte,
setBytes,
setDate,
setDouble,
setFloat,
setInt,
setLong,
setNull,setObject,
setString,setTime,setTimestamp 。

registerOutParameter(int parameterIndex, int sqlType, int type)方法仅用于注册复合数
据类型,其它类型不支持。

当您使用由程序逻辑补充的游标时,您可解决普通的 SQL 不可解决的问题。这些问题之
一就是部件爆炸问题,有时称为材料单处理。此问题的核心是对象之间的递归关系;一个
对象包含其他对象,其又包含其他对象。
通常以制造库存为例来说明该问题。例如,公司制造各种部件。有些部件是分立的,但有
些是其他部件的组合。
在可能称为 contains 的单个表中说明这些关系。列 contains.parent 持有系组合的部件的部件
编号。列 contains.child 具有为父部件的组件的部件的部件编号。如果部件编号 123400 是
九个部件的组合,则存在九行,123400 在第一列中,其他部件编号在第二列中。下图展示
描述部件编号 123400 的多行中的一行。
图: 部件爆炸问题


部件爆炸问题在于:给定一个部件编号,产生为那个部件的组件的所有部件的列表。下列
示例是一种解决方案的概要,如以 GBase 8s ESQL/C 实现的那样:
int part_list[200];

boom(top_part)
int top_part;
{
long this_part, child_part;
int next_to_do = 0, next_free = 1;
part_list[next_to_do] = top_part;

EXEC SQL DECLARE part_scan CURSOR FOR
SELECT child INTO child_part FROM contains

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 222 -
WHERE parent = this_part;
while(next_to_do < next_free)
{
this_part = part_list[next_to_do];
EXEC SQL OPEN part_scan;
while(SQLCODE == 0)
{
EXEC SQL FETCH part_scan;
if(SQLCODE == 0)
{
part_list[next_free] = child_part;
next_free += 1;
}
}
EXEC SQL CLOSE part_scan;
next_to_do += 1;
}
return (next_free - 1);
}
从技术上讲,contains 表的每一行都是有向无环图,或树,的头结点。该函数执行对该树的
宽度优先搜索,树根是作为它的参数传递的部件编号。该函数使用名为 part_scan 的游标返
回在 parent 列中带有特定的值的所有行。最内层的 while 循环打开 part_scan 游标,在选择
集中访存每一行,并当已检索了每一组件的部件编号时,关闭该游标。
此函数解决部件爆炸问题的核心,但该函数不是完整的解决方案。例如,它不允许组件在
树中出现多个级别。此外,实际的 contains 表还会有列count,给出在每一 parent 中使用
的 child 部件的计数。返回每一组件部件的总计数的程序要复杂得多。
之前描述的迭代方法不是解决部件爆炸问题的唯一方法。如果代的数目有固定的限制,则
您可使用嵌套的外部自连接,以单个 SELECT 语句解决该问题。
如果在一个最高级别部件内,可包含最多四代部件,则下列 SELECT 语句返回所有部件:

SELECT a.parent, a.child, b.child, c.child, d.child
FROM contains a
OUTER (contains b,
OUTER (contains c, outer contains d) )
WHERE a.parent = top_part_number
AND a.child = b.parent
AND b.child = c.parent

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 223 -
AND c.child = d.parent
此 SELECT 语句为来源于指定为 top_part_number 的祖先的每一行返回一行。对于不存在
的级别,返回 Null 值。
(请使用指示符变量来检测它们。)要将此解决方案扩展到更多级
别,请选择 contains 表的附加的嵌套外部连接。您还可修订此解决方案来返回每一级别上
部件的数目的计数。