返回首页

gbase数据、南大通用产品文档:GBase8a

更新日期:2024年09月11日

执行事务
通过设置连接参数中的autocommit=False 参数,即可控制事务,可通过连
接的commit 方法提交事务、rollback 方法回滚事务。
from GBaseConnector import connect, GBaseError
if __name__ == '__main__':
config = {'host':'172.16.0.131',
'user':'root',
'passwd':'111111',
'port':5258,
'db':'test',
'autocommit':False,}
try:
conn = connect()
conn.connect(**config)
cur = conn.cursor()
cur.execute("DROP PROCEDURE IF EXISTS test")
cur.execute("CREATE TABLE IF NOT EXISTS test(id INT, val VARCHAR(20))")
cur.execute("INSERT INTO test VALUES(1,'hello')")
conn.rollback()
cur.execute("INSERT INTO test VALUES(2,'world')")
conn.commit()
cur.execute("SELECT * FROM test")
print cur.fetchall()



GBase Python 接口开发手册
南大通用数据技术股份有限公司

- 15 -
cur.execute("DROP TABLE IF EXISTS test")
except GBaseError.DatabaseError, err:
print err
finally:
conn.close()
或者使用cur.execute("set autocommit=false")来开启一个事物。
from GBaseConnector import connect, GBaseError
if __name__ == '__main__':
config = {'host':'172.16.0.131',
'user':'root',
'passwd':'111111',
'port':5258,
'db':'test'}
try:
conn = connect()
conn.connect(**config)
cur = conn.cursor()
cur.execute("DROP PROCEDURE IF EXISTS test")
cur.execute("CREATE TABLE IF NOT EXISTS test(id INT, val VARCHAR(20))")
cur.execute("set autocommit=false")
cur.execute("INSERT INTO test VALUES(1,'hello')")
conn.rollback()
cur.execute("INSERT INTO test VALUES(2,'world')")
conn.commit()
cur.execute("SELECT * FROM test")
print cur.fetchall()
cur.execute("DROP TABLE IF EXISTS test")
except GBaseError.DatabaseError, err:
print err
finally:
conn.close()

GBase 8s JDBC Driver 不会自动在 TEXT 、BYTE 、CLOB 和 BLOB 数据类型的代码集
之间进行转换。
可以使用以下方式在 TEXT 和 CLOB 数据类型的代码集之间进行转换:

可以通过使用 IFX_CODESETLOB 环境变量自动化客户端和数据库语言环境之间
的 TEXT 或 CLOB 数据的代码集转换。

可以使用 getBytes() 、
getString() 、
InputStreamReader() 和 OutputStreamWriter() 方法
在 TEXT 数据代码集之间进行转换。
使用 IFX_CODESETLOB 环境变量转换
可以自动转换 TEXT 和 CLOB 数据类型的代码集对:

在将数据发送到数据库服务器之前从客户端语言环境转换到数据库语言环境。

在客户端检索数据之前,从数据库语言环境转换到客户端语言环境。
要自动化 TEXT 和 CLOB 数据类型的代码集之间的转换,请在连接 URL 中使
用 IFX_CODESETLOB 环境变量。例如:IFX_CODESETLOB = 4096。还可以使用以
下 IfxDataSource 类的方法来设置和获取 IFX_CODESETLOB 值:

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

public void setIfxIFX_CODESETLOB(int codesetlobFlag);
public int getIfxIFX_CODESETLOB();
IFX_CODESETLOB 可以具有以下值:
none
缺省值 不启用自动转换代码集。
0 在内部临时文件中发生自动转换代码集。
> 0 在客户端计算机的内存中发生自动转换代码集。该值指示分配给转换的字节数。

如果分配的字节数小于大对象的大小,则返回错误。
要在内存中执行转换,必须指定一个小于客户机的内存限制的量,并且大于任何已转换大
对象的可能大小。
当您使用以下 java.sql.Clob 接口方法或 Clob 接口的 GBase 8s 扩展中的任何一种时,即使
设置了 IFX_CODESETLOB 环境变量,也不会执行代码集转换。这些方法包括:
IfxCblob::setAsciiStream(long) Clob::setAsciiStream(long position, InputStream fin, int
length)
IFX_CODESETLOB 仅对来自 java.sql.PreparedStatement 接口的方法生效。
但是,在使用以下 java.sql.Clob 接口方法或 Clob 接口的 GBase 8s 扩展时,Unicode 字符
总是自动转换为数据库语言环境代码集。以下是这些方法的列表:
Clob::setCharacterStream(long) throws SQLException
Clob::setString(long, String) throws SQLException
Clob:: setString(long pos, String str, int offset, int len)
IfxCblob::setSubString(long position, String str, int length)
使用 JDK 方法转换
getBytes() 、getString() 、InputStreamReader() 和 OutputStreamWriter() 方法接受一个代码集
参数,该参数可以在 Unicode 与指定的代码集之间相互转换
以下样例代码显示了如何将客户端代码集中的文件转换为 Unicode,然后将其从 Unicode
转换为数据库代码集:
File infile = new File("data_jpn.dat");
File outfile = new File ("data_conv.dat");..
.pstmt = conn.prepareStatement("insert into t_text values (?)");..
.// Convert data from client encoding to database encoding
System.out.println("Converting data ...\n");
try
{
String from = "SJIS";

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

String to = "8859_1";
convert(infile, outfile, from, to);
}
catch (Exception e)
{
System.out.println("Failed to convert file");
}

System.out.println("Inserting data ...\n");
try
{
int fileLength = (int) outfile.length();
fin = new FileInputStream(outfile);
pstmt.setAsciiStream(1 , fin, fileLength);
pstmt.executeUpdate();
}
catch (Exception e)
{
System.out.println("Failed to setAsciiStream");
}..
.public static void convert(File infile, File outfile, String from, String to)
throws IOException
{
InputStream in = new FileInputStream(infile);
OutputStream out = new FileOutputStream(outfile);

Reader r = new BufferedReader( new InputStreamReader( in, from));
Writer w = new BufferedWriter( new OutputStreamWriter( out, to));

//Copy characters from input to output. The InputStreamReader converts
// from the input encoding to Unicode, and the OutputStreamWriter
// converts from Unicode to the output encoding. Characters that can
// not be represented in the output encoding are output as '?'

char[] buffer = new char[4096];
int len;
while ((len = r.read(buffer)) != -1)

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

w.write(buffer, 0, len);
r.close();
w.flush();
w.close();
}
当从数据库检索数据时,
可以使用相同的方法将数据从数据库代码集转换为客户端代码集。

这些主题描述了 AC_CONFIG 环境变量和用于 archecker 实用程序的配置参数。

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

archecker 实用程序使用 ac_config.std 模板中的配置参数来验证备份或执行表级别恢复。
如果需要更改这些参数,请将 ac_config.std 模板复制到 AC_CONFIG 文件。
AC_CONFIG 环境变量指定了 AC_CONFIG 文件的位置。
由于 ON-Bar 调用 archecker 实用程序来验证备份,因此必须配置 archecker 环境变量和
参数,然后才能使用 onbar -v 选项。
您也可以使用在 ac_config.std 文件中没有缺省值,但在该文件中有效的其他 archecker 配
置参数。
表 1. archecker 实用程序使用的配置参数
配置参数
描述
AC_DEBUG
在 archecker 消息日志中打印调试消息。
AC_IXBAR
指定 IXBAR 文件的路径名。
如果未在 ac_config 文件中设置,将使用 BAR_IXBAR_PATH
配置参数的值。
AC_LTAPEBLOCK
指定用于读取逻辑日志的 ontape 块大小。
如果未在 ac_config 文件中设置,将使用 LTAPEBLOCK 配
置参数的值。
AC_LTAPEDEV
指定 ontape 用于读取逻辑日志的本地设备名。
如果未在 ac_config 文件中设置,将使用 LTAPEDEV 配置
参数的值。
AC_MSGPATH
指定 archecker 消息日志的位置。
该配置参数位于缺省 ac_config 文件中。
AC_SCHEMA
指定 archecker 模式命令文件的路径名。
AC_STORAGE
指定 archecker 构建的临时文件的位置。
该配置参数位于缺省 ac_config 文件中。
AC_TAPEBLOCK
指定磁带的块大小(以千字节为单位)。

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

配置参数
描述
如果未在 ac_config 文件中设置,将使用 TAPEBLOCK 配置
参数的值。
AC_TAPEDEV
指定 ontape 实用程序使用的本地设备名。
如果未在 ac_config 文件中设置,将使用 TAPEDEV 配置参
数的值。
AC_TIMEOUT
如果 onbar 和 archecker 进程之一过早退出,请为它们
指定超时值。
AC_VERBOSE
为 archecker 消息指定详细或简洁方式。
该配置参数位于缺省 ac_config 文件中。
BAR_BSALIB_PATH
与 onconfig.std 文件中的 BAR_BSALIB_PATH 服务器配置
参数相同。
有关更多信息,请参阅 BAR_BSALIB_PATH 配置参数。
如果使用 ontape 实用程序,并且 AC_TAPEDEV、AC_TAPEBLK、AC_LTAPEDEV 和
AC_LTAPEBLK 配置参数未在 AC_CONFIG 文件中设置,那么 archecker 实用程序将使
用 onconfig 文件中指定的 TAPEDEV、TAPEBLK、LTAPEDEV、LTAPEBLK 配置参数
所指定的值。

AC_CONFIG 文件环境变量
将 AC_CONFIG 环境变量设置为 archecker 配置文件(ac_config.std 或用户定义)的完整路
径名。

缺省值
UNIX™:$GBS_HOME/etc/ac_config.std
生效
ON-Bar 启动时

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

以下是有效的 AC_CONFIG 路径名的示例:
UNIX:/usr/gbasedbt/etc/ac_config.std 和 /usr/local/my_ac_config.std
如果未设置 AC_CONFIG,那么 archecker 实用程序会将 archecker 配置文件的缺省位置设
置为 UNIX 上的$GBS_HOME/etc/ac_config.std。
要点:如果未在 AC_CONFIG 文件中指定包括配置文件名的完整路径,那么 archecker 实
用程序可能无法正确工作。

AC_DEBUG 配置参数
AC_DEBUG 配置参数使调试消息打印在 archecker 消息文件中。 仅在技术支持指导下使
用该参数。
使用该配置参数可能导致 archecker 消息日志文件增长得非常大,并可能显著减慢
archecker 处理的速度。
缺省值
禁用
范围
1-16

AC_IXBAR 配置参数
使用 AC_IXBAR 配置参数可指定 IXBAR 文件的位置。
缺省值

范围
任何有效的路径名

AC_LTAPEBLOCK 配置参数
使用 AC_LTAPEBLOCK 配置参数可指定用于读取逻辑日志的 ontape 块大小。
缺省值
32 千字节
范围
0 - 2,000,000,000
用途

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

当使用以下命令执行归档时:

onbar -b,AC_TAPEBLOCK 的值应为 BAR_XFER_BUF_SIZE 配置参数值乘以当
前页面大小的结果。有关更多信息,请参阅 BAR_XFER_BUF_SIZE 配置参数。

ontape -t,AC_LTAPEBLOCK 的值应为归档时 TAPEBLK ONCONFIG 配置参数
设置为的值。有关更多信息,请参阅指定磁带块大小。

AC_LTAPEDEV 参数
使用 AC_LTAPEDEV 配置参数可指定 ontape 实用程序使用的本地设备名。
如果磁带设备设置为 STDIO,archecker 将从标准输入接收输入。
缺省值

范围
任何有效路径名或 STDIO

AC_MSGPATH 配置参数
使用 AC_CONFIG 文件中的 AC_MSGPATH 参数可指定 archecker 消息日志
(ac_msg.log) 的位置。
ac_config.std 值
UNIX™:AC_MSGPATH /tmp/ac_msg.log
生效
ON-Bar 启动时
用途
必须在 AC_CONFIG 文件中指定消息日志的完整路径,否则 archecker 实用程序将无法
正确工作。
当您使用 onbar -v 验证备份时,archecker 实用程序将摘要消息 写入到 bar_act.log 中并
指示验证是成功还是失败。它将详细消息写入到 ac_msg.log 中。 如果备份验证失败,请
放弃该备份并尝试其他备份,或将 ac_msg.log 提供给 GBase 软件支持。有关样本消息,
请参阅onbar -v 语法:验证备份。

AC_SCHEMA 配置参数
使用 AC_SCHEMA 配置参数可指定 archecker 模式命令文件的路径名。
缺省值

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


范围
任何有效的路径名
-f cmdfile 命令行选项会覆盖该配置参数。

AC_STORAGE 配置参数
使用 AC_CONFIG 文件中的 AC_STORAGE 配置参数可指定 archecker 存储其临时文件的
目录的位置。
ac_config.std 值
UNIX™:/tmp
生效
ON-Bar 启动时
用途
您必须在 AC_CONFIG 文件中指定存储位置的完整路径,否则 archecker 实用程序可能无
法正确工作。
下表列出了 archecker 构建的目录和文件。如果验证成功,这些文件将被删除。
表 1. archecker 临时文件
目录
文件
CHUNK_BM
每个已备份的存储空间的位图信息。
信息
备份的统计分析和调试信息。
保存
PT.######## 文件中的分区页。
FL.######## 文件中的可用块页。
RS.######## 文件中的保留页。
BF.######## 文件中的可用 Blob 映射页
要计算所需要的可用空间大小,请参阅用于备份验证的临时空间。建议您将
AC_STORAGE 设置为具有足够可用空间的位置。

AC_TAPEBLOCK 配置参数

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

使用 AC_TAPEBLOCK 配置参数可在使用 onbar -b 命令或 ontape -t 命令执行归档时指
定磁带块的大小(以千字节为单位)。
缺省值
32 千字节
范围
0 - 2,000,000,000
用途
当使用以下命令执行归档时:

onbar -b,AC_TAPEBLOCK 的值应为 BAR_XFER_BUF_SIZE 配置参数值乘以当
前页面大小的结果。有关更多信息,请参阅 BAR_XFER_BUF_SIZE 配置参数。

ontape -t,AC_LTAPEBLOCK 的值应为归档时 TAPEBLK ONCONFIG 配置参数
设置为的值。有关更多信息,请参阅指定磁带块大小。

AC_TAPEDEV 配置参数
使用 AC_TAPEDEV 配置参数可指定 ontape 实用程序使用的本地设备名。
如果磁带设备设置为 STDIO,archecker 将从标准输入接收输入。
缺省值

范围
任何有效路径名或 STDIO

AC_TIMEOUT 配置参数
如果 onbar 和 archecker 进程之一过早退出,请使用 AC_TIMEOUT 配置参数为它们指
定超时值。
ac_config.std 值
UNIX™:300
单位

生效
当 onbar-v 命令启动时

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

引入了 AC_TIMEOUT 配置参数以在 onbar 和 archecker 进程之一过早退出时避免它们
无限期地互相等待,从而避免在数据服务器初始化期间创建孤立的 zombie 进程。

AC_VERBOSE 配置参数
使用 AC_CONFIG 文件中的 AC_VERBOSE 参数可指定 archecker 消息日志
(ac_msg.log) 中是详细输出还是简洁输出。
ac_config.std 值
1
值的范围
1 = ac_msg.log 中的详细消息
0 = ac_msg.log 中的简洁消息
生效
ON-Bar 启动时