随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
目前,原Sybase所有产品(包括:Adaptive Server Enterprise、Sybase IQ、Replication Server、PowerDesigner等)的官方手册仍然可以从https://infocenter.sybase.com/help/index.jsp进行浏览或下载。暂不清楚该网站https://infocenter.sybase.com/help/index.jsp何时会被完全迁移到SAP Support上!
Sybase官方手册英文版有html和pdf两种格式,而中文版手册只有pdf一种格式。为了国内Sybase用户更方便、快捷地搜索Sybase常见产品的官方手册内容,特将中文版Sybase官方手册转为html格式!
Sybase产品官方手册中文版的html格式所有内容的版权归SAP公司所有!本博客站长是Sybase数据库的铁杆粉丝!
如有Sybase数据库技术问题需要咨询,请联系我!
以下官方手册为ASE 15.7 ESD#2中文版:
- 新增功能公告 适用于 Windows、Linux 和 UNIX 的 Open Server 15.7 和 SDK 15.7
- 新增功能摘要
- 新增功能指南
- ASE 15.7 发行公告
- 配置指南(windows)
- 安装指南(windows)
- 参考手册:构件块
- 参考手册:命令
- 参考手册:过程
- 参考手册:表
- Transact-SQL® 用户指南
- 系统管理指南,卷 1
- 系统管理指南,卷 2
- 性能和调优系列:基础知识
- 性能和调优系列:锁定和并发控制
- 性能和调优系列:监控表
- 性能和调优系列:物理数据库调优
- 性能和调优系列:查询处理和抽象计划
- 性能和调优系列:使用 sp_sysmon 监控 Adaptive Server
- 性能和调优系列:利用统计分析改进性能
- 程序员参考 jConnect for JDBC 7.0.7
- Adaptive Server Enterprise 中的 Java
- 组件集成服务用户指南
- Ribo 用户指南
- 内存数据库用户指南
- Sybase Control Center for Adaptive Server® Enterprise
- 安全性管理指南
- 实用程序指南
jConnect for JDBC 7.07 和 Adaptive Server Enterpris ODBC 驱动程序 15.7 支持大对象 (LOB) 定位符。 LOB 定位符中包含指向 LOB 数据的逻辑指 针,而不是数据本身,减少了通过网络在 Adaptive Server 和其客户端之 间传送的数据量。Adaptive Server 15.7 中引入了对 LOB 定位符的服务器 支持。
当连接到支持 LOB 定位符的 Adaptive Server 并关闭 autocommit 时, jConnect for JDBC 7.07 使用服务器端定位符访问 LOB 数据。否则, jConnect 会在客户端物化 LOB 数据。可以将整个 LOB API 用于客户端 物化 LOB 数据,但由于数据较大, API 性能可能会与用于 LOB 定位符 时不同。
Adaptive Server Enterprise ODBC 驱动程序 15.7 客户端无法使用 LOB 定 位符,除非连接到支持它的 Adaptive Server。
注释 当您使用 LOB 定位符时,检索每个行上都包括 LOB 数据的大结果 集可能会影响应用程序的性能。Adaptive Server 将 LOB 定位符作为结果 集的一部分返回,并获取 LOB 数据, jConnect 和 ODBC 驱动程序必须 高速缓存剩余的结果集。 Sybase 建议您让结果集小一些,或者启用游标 支持来限制要高速缓存的数据的大小。
jConnect for JDBC 支持
要启用 LOB 定位符支持,请在 ENABLE_LOB_LOCATORS 连接属性设 置为 true 的情况下建立与 Adaptive Server 的连接。启用后,客户端应用 程序便可以使用 java.sql 软件包中的 Blob、Clob 和 NClob 类访问定位符。
注释 如果 LOB 定位符和 autocommit 都已启用, jConnect 会自动将 LOB 定位符切换为客户端物化 LOB 定位符,即使连接的 Adaptive Server 能 够支持它们时也是如此。这会增大客户端使用的内存,而且可能会降低 性能。因此,建议您在设置了 autocommit off 时使用 LOB 定位符。
有关 Blob、 Clob 和 NClob 类的详细信息,请参见 Java 文档。
Adaptive Server Enterprise ODBC 驱动程序支持
若要启用 LOB 定位符支持,请在 EnableLOBLocator 连接属性设置为 1
的情况下建立与 Adaptive Server 的连接。当 EnableLOBLocator 设置为 0
(缺省值)时, ODBC 驱动程序无法检索 LOB 列的定位符。当启用
LOB 定位符时,连接应设置为 autocommit off。
还必须在程序中包括 sybasesqltypes.h 文件。 sybasesqltypes.h 文件位于
ODBC 安装目录下的 include 目录中。
用于定位符支持的 ODBC 数据类型映射
用于 Adaptive Server 定位符数据类型的 ODBC 数据类型映射为:
ASE 数据类型 |
ODBC SQL 类型 |
ODBC C 类型 |
text_locator |
SQL_TEXT_LOCATOR |
SQL_C_TEXT_LOCATOR |
image_locator |
SQL_IMAGE_LOCATOR |
SQL_C_ IMAGE_LOCATOR |
unitext_locator |
SQL_UNITEXT_LOCATOR |
SQL_C_ UNITEXT_LOCATOR |
支持的转换
Adaptive Server 定位符数据类型支持的转换为:
SQL_C_TEXT_ LOCATOR |
SQL_C_IMAGE_ LOCATOR |
SQL_C_UNITEXT_ LOCATOR |
|
SQL_TEXT_LOCATOR |
X |
||
SQL_IMAGE_LOCATOR |
X |
||
SQL_UNITEXT_LOCATOR |
X |
||
SQL_LONGVARCHAR |
|||
SQL_WLONGVARCHAR |
|||
SQL_LONGVARBINARY |
图例:x = 支持的转换。
支持 LOB 定位符的 ODBC API 方法
• SQLBindCol – TargetType 可以是任意 ODBC C 定位符数据类型。
• SQLBindParameter – ValueType 可以是任意 ODBC C 定位符数据类 型。 ParameterType 可以是任意 ODBC SQL 定位符数据类型。
• SQLGetData – TargetType 可以是任意 ODBC C 定位符数据类型。
• SQLColAttribute – SQL_DESC_TYPE 和 SQL_DESC_CONCISE_TYPE
描述符可以返回任意 ODBC SQL 定位符数据类型。
• SQLDescribeCol – 数据类型指针可以是任意 ODBC SQL 定位符数据 类型。
请参见 Microsoft ODBC API Reference(《Microsoft ODBC API 参考》)。
预取 LOB 数据的隐式转换
//Set Autocommit off SQLRETURN sr;
在 Adaptive Server Enterprise ODBC 驱动程序 15.7 中,当 Adaptive Server 返回 LOB 定位符时,您可以使用 SQLGetData 和 SQLBindCol,通过将列 绑定到 SQL_C_CHAR 或 SQL_C_WCHAR (对于 text 定位符)或 SQL_C_BINARY (对于 image 定位符)来检索基础预取 LOB 数据。
设置 SQL_ATTR_LOBLOCATOR 属性可在连接中启用或禁用定位符。 如果在连接字符串中指定了 EnableLOBLocator,则会使用 EnableLOBLocator 的值初始化 SQL_ATTR_LOBLOCATOR,否则,它 设置为 SQL_LOBLOCATOR_OFF (缺省值)。若要启用定位符,请将 该属性设置为 SQL_LOBLOCATOR_ON。使用 SQLSetConnectAttr 可设 置该属性的值,使用 SQLGetConnectAttr 可检索其值。
使用 SQLSetStatementAttr 可设置 SQL_ATTR_LOBLOCATOR_FETCHSIZE 以指定要检索的 LOB 数据的 大小 (对于二进制数据以字节为单位,对于字符数据以字符为单位)。 缺省值 0 表示不请求预取数据,值为 -1 将检索整个 LOB 数据。
注释 如果要检索的列的基础 LOB 数据大小超过您设置的预取数据大小, 则在 ODBC 客户端尝试直接检索数据时会引发本机错误 3202。发生这 种情况时,客户端可以通过调用 SQLGetData 获取基础定位符并执行定 位符的所有可用操作,来检索完整数据。
示例 1 当预取数据代表完整 LOB 值时,使用 SQLGetData 检索 image 定 位符:
sr = SQLSetConnectAttr(dbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, 0);
//Enable LOB Locator for this exchange
sr = SQLSetConnectAttr(dbc, SQL_ATTR_LOBLOCATOR, (SQLPOINTER)SQL_LOCATOR_ON, 0);
//Set size of prefetched LOB data
sr = SQLSetStatementAttr(stmt, SQL_ATTR_LOBLOCATOR_FETCHSIZE, (SQLPOINTER)32768, 0);
//Get a locator from the server SQLLEN lLOBLen = 0;
Byte cBin[COL_SIZE];
SQLLEN lBin = sizeof(CBin);
unsigned char cLOC[SQL_LOCATOR_SIZE]; SQLLEN lLOC = sizeof(cLOC);
int id = 4;
SQLLEN l1 = sizeof(int); SQLLEN idLen = sizeof(int);
sr = SQLBindParameter(stmt, 1, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, idLen, 0, &id, idLen, &idLen);
printError(sr, SQL_HANDLE_STMT, stmt);
//Execute the select statement to return a locator sr = SQLExecDirect(stmt, selectCOL_SQL, SQL_NTS); printError(sr, SQL_HANDLE_STMT, stmt);
sr = SQLFetch(stmt);
printError(sr, SQL_HANDLE_STMT, stmt);
//Retrieve the binary data (Complete Data is returned) sr = SQLGetData(stmt, 1, SQL_C_BINARY, cBin, lBin, &lBin); printError(sr, SQL_HANDLE_STMT, stmt);
//Cleanup
sr = SQLFreeStmt(stmt, SQL_UNBIND);
sr = SQLFreeStmt(stmt, SQL_RESET_PARAMS); sr = SQLFreeStmt(stmt, SQL_CLOSE);
SQLEndTran(SQL_HANDLE_DBC, dbc,SQL_COMMIT);
//Disable LOB Locator for the future
sr = SQLSetConnectAttr(dbc, SQL_ATTR_LOBLOCATOR, (SQLPOINTER)SQL_LOCATOR_OFF, 0);
//Set Autocommit off SQLRETURN sr;
示例 2 当预取数据代表截断 LOB 值时,使用 SQLGetData 检索 image 定 位符:
sr = SQLSetConnectAttr(dbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, 0);
//Enable LOB Locator for this exchange
sr = SQLSetConnectAttr(dbc, SQL_ATTR_LOBLOCATOR, (SQLPOINTER)SQL_LOCATOR_ON, 0);
//Set size of prefetched LOB data sr = SQLSetStatementAttr(stmt,
SQL_ATTR_LOBLOCATOR_FETCHSIZE, (SQLPOINTER)32768, 0);
//Get a locator from the server SQLLEN lLOBLen = 0;
Byte cBin[COL_SIZE];
SQLLEN lBin = sizeof(CBin);
unsigned char cLOC[SQL_LOCATOR_SIZE]; SQLLEN lLOC = sizeof(cLOC);
int id = 4;
SQLLEN l1 = sizeof(int); SQLLEN idLen = sizeof(int);
sr = SQLBindParameter(stmt, 1, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, idLen, 0, &id, idLen, &idLen);
printError(sr, SQL_HANDLE_STMT, stmt);
//Execute the select statement to return a locator sr = SQLExecDirect(stmt, selectCOL_SQL, SQL_NTS); printError(sr, SQL_HANDLE_STMT, stmt);
sr = SQLFetch(stmt);
printError(sr, SQL_HANDLE_STMT, stmt);
// Retrieve the binary data(Truncated data is returned)
sr = SQLGetData(stmt, 1, SQL_C_BINARY, cBin, lBin, &lBin);
if(sr == SQL_SUCCESS_WITH_INFO)
{
SQLTCHAR errormsg[ERR_MSG_LEN]; SQLTCHAR sqlstate[SQL_SQLSTATE_SIZE+1];
SQLINTEGER nativeerror = 0; SQLSMALLINT errormsglen = 0;
retcode = SQLGetDiagRec(handleType, handle, 1, sqlstate, &nativeerror, errormsg, ERR_MSG_LEN, &errormsglen);
printf("SqlState:%s Error Message:%s\n", sqlstate, errormsg);
//Handle truncation of LOB data; if data was truncated call SQLGetData to
// retrieve the locator.
/* Warning returns truncated LOB data */
if (NativeError == 32028) //Error code may change
{
BYTE ImageLocator[SQL_LOCATOR_SIZE];
sr = SQLGetData(stmt, 1, SQL_C_IMAGE_LOCATOR, &ImageLocator, sizeof(ImageLocator), &Len);
printError(sr, SQL_HANDLE_STMT, stmt);
/*
Perform locator specific calls using image Locator on a separate statement handle if needed
*/
}
}
//Cleanup
sr = SQLFreeStmt(stmt, SQL_UNBIND);
sr = SQLFreeStmt(stmt, SQL_RESET_PARAMS); sr = SQLFreeStmt(stmt, SQL_CLOSE);
SQLEndTran(SQL_HANDLE_DBC, dbc,SQL_COMMIT);
//Disable LOB Locator for the future
sr = SQLSetConnectAttr(dbc, SQL_ATTR_LOBLOCATOR, (SQLPOINTER)SQL_LOCATOR_OFF, 0);
使用定位符访问和处理 LOB
ODBC API 不直接支持 LOB 定位符。 ODBC 客户端应用程序必须使用 Transact-SQL 函数,才能对定位符进行运算和处理 LOB 值。 Adaptive Server Enterprise ODBC 驱动程序引入了若干存储过程来达成必需 Transact-SQL 函数的使用。
本节讨论如何对 LOB 定位符执行多种运算。这些参数的输入和输出值 可以是 Adaptive Server 可隐式转换为存储过程定义的任意类型。
有关此处所列的 Transact-SQL 命令和函数的详细信息,请参见 Adaptive Server Enterprise 《参考手册:构件块》中的 “Transact-SQL 函数”。
初始化 text 定位符
使用 sp_drv_create_text_locator 可创建 text_locator 并 (可选)初始化以为 其赋值。 sp_drv_create_text_locator 访问 Transact-SQL 函数 create_locator。
语法 sp_drv_create_text_locator [init_value]
输入参数 init_value – 一个 varchar 或 text 值,用于初始化新定位符。
输出参数 无。
结果集 一个类型为 text_locator 的列。定位符引用的 LOB 附带了 init_value。
初始化 unitext 定位符
使用 sp_drv_create_unitext_locator 可创建 unitext_locator 并 (可选)初始 化以为其赋值。 sp_drv_create_unitext_locator 访问 Transact-SQL 函数 create_locator。
语法 sp_drv_create_unitext_locator [init_value]
输入参数 init_value – 一个 univarchar 或 unitext 值,用于初始化新定位符。
输出参数 无。
结果集 一个类型为 unitext_locator 的列。定位符引用的 LOB 附带了 init_value。
初始化 image 定位符
使用 sp_drv_create_image_locator 可创建 image_locator 并 (可选)初始化 以为其赋值。 sp_drv_create_image_locator 访问 Transact-SQL 函数 create_locator。
语法 sp_drv_create_image_locator [init_value]
输入参数 init_value – 一个 varbinary 或 image 值,用于初始化新定位符。
输出参数 无。
结果集 一个类型为 image_locator 的列。定位符引用的 LOB 附带了 init_value。
从 text 定位符中获取完整 text 值
使用 sp_drv_locator_to_text,它可访问 Transact-SQL 函数 return_lob。
语法 sp_drv_locator_to_text locator
输入参数 locator – 要检索其值的 text_locator。
输出参数 无。
结果集 一个含有 locator 所引用的 text 值的列。
从 unitext 定位符中获取完整 unitext 值
使用 sp_drv_locator_to_unitext,它可访问 Transact-SQL 函数 return_lob。
语法 sp_drv_locator_to_unitext locator
输入参数 locator – 要检索其值的 unitext_locator。
输出参数 无。
结果集 一个含有 locator 所引用的 unitext 值的列。
从 image 定位符中获取完整 image 值
使用 sp_drv_locator_to_image,它可访问 Transact-SQL 函数 return_lob。
语法 sp_drv_locator_to_image locator
输入参数 locator – 要检索其值的 image_locator。
输出参数 无。
结果集 一个含有 locator 所引用的 image 值的列。
从 text 定位符中获取子字符串
使用 sp_drv_text_substring,它可访问 Transact-SQL 函数 substring。
语法 sp_drv_text_substring locator, start_position, length
输入参数 • locator – 一个 text_locator 值,引用要处理的数据。
• start_position – 一个 integer 值,指定要读取和检索的第一个字符的 位置。
• length – 一个 integer 值,指定要读取的字符数。
输出参数 无。
结果集 一个类型为 text 的列,其中包含检索到的子字符串。
从 unitext 定位符中获取子字符串
使用 sp_drv_unitext_substring,它可访问 Transact-SQL 函数 substring。
语法 sp_drv_unitext_substring locator, start_position, length
输入参数 • locator – 一个 unitext_locator 值,引用要处理的数据。
• start_position – 一个 integer 值,指定要读取和检索的第一个字符的 位置。
• length – 一个 integer 值,指定要读取的字符数。
输出参数 无。
结果集 一个类型为 unitext 的列,其中包含检索到的子字符串。
从 image 定位符中获取子字符串
使用 sp_drv_image_substring,它可访问 Transact-SQL 函数 substring。
语法 sp_drv_image_substring locator, start_position, length
输入参数 • locator – 一个 image_locator 值,引用要处理的数据。
• start_position – 一个 integer 值,指定要读取和检索的第一个字节的 位置。
• length – 一个 integer 值,指定要读取的字节数。
输出参数 无。
结果集 一个类型为 image 的列,其中包含检索到的子字符串。
在指定的位置插入 text
使用 sp_drv_text_setdata,它可访问 Transact-SQL 函数 setadata。
语法 sp_drv_text_setdata locator, offset, new_data, data_length
输入参数 • locator – 一个 text_locator 值,引用要插入到的 text 列。
• offset – 一个 integer 值,指定开始写入新内容的位置。
• new_data – 要插入的 varchar 或 text 数据。
输出参数 data_length – 一个 integer 值,包含写入的字符数。
结果集 无。
在指定的位置插入 unitext
使用 sp_drv_unitext_setdata,它可访问 Transact-SQL 函数 setadata。
语法 sp_drv_unitext_setdata locator, offset, new_data, data_length
输入参数 • locator – 一个 unitext_locator 值,引用要插入到的 unitext 列。
• offset – 一个 integer 值,指定开始写入新内容的位置。
• new_data – 要插入的 univarchar 或 unitext 数据。
输出参数 data_length – 一个 integer 值,包含写入的字符数。
结果集 无。
在指定的位置插入 image
使用 sp_drv_image_setdata,它可访问 Transact-SQL 函数 setadata。
语法 sp_drv_image_setdata locator, offset, new_data, datalength
输入参数 • locator – 一个 image_locator 值,引用要插入到的 image 列。
• offset – 一个 integer 值,指定开始写入新内容的位置。
• new_data – 要插入的 varbinary 或 image 数据。
输出参数 data_length – 一个 integer 值,包含写入的字节数。
结果集 无。
插入定位符引用的 text
使用 sp_drv_text_locator_setdata,它可访问 Transact-SQL 函数 setadata。
语法 sp_drv_text_locator_setdata locator, offset, new_data_locator, data_length
输入参数 • locator – 一个 text_locator 值,引用要插入到的 text 列。
• offset – 一个 integer 值,指定开始写入新内容的位置。
• new_data_locator – 一个 text_locator 值,引用要插入的 text 数据。
输出参数 data_length – 一个 integer 值,包含写入的字符数。
结果集 无。
插入定位符引用的 unitext
使用 sp_drv_unitext_locator_setdata,它可访问 Transact-SQL 函数
setadata。
语法 sp_drv_unitext_locator_setdata locator, offset, new_data_locator, data_length
输入参数 • locator – 一个 unitext_locator 值,引用要插入到的 unitext 列。
• offset – 一个 integer 值,指定开始写入新内容的位置。
• new_data_locator – 一个 unitext_locator 值,引用要插入的 unitext 数 据。
输出参数 data_length – 一个 integer 值,包含写入的字符数。
结果集 无。
插入定位符引用的 image
使用 sp_drv_image_locator_setdata,它可访问 Transact-SQL 函数
setadata。
语法 sp_drv_image_locator_setdata locator, offset, new_data_locator, datalength
输入参数 • locator – 一个 image_locator 值,引用要插入到的 image 列。
• offset – 一个 integer 值,指定开始写入新内容的位置。
• new_data_locator – 一个 image_locator 值,引用要插入的 image 数 据。
输出参数 data_length – 一个 integer 值,包含写入的字节数。
结果集 无。
截断基础 LOB 数据
使用 truncate lob 可截断 LOB 定位符引用的 LOB 数据。请参见 Adaptive Server Enterprise 《参考手册:命令》。
查找基础 text 数据的字符长度
使用 sp_drv_text_locator_charlength 可查找 text 定位符引用的 LOB 列的字 符长度。 sp_drv_text_locator_charlength 访问 Transact-SQL 函数 char_length。
语法 sp_drv_text_locator_charlength locator, data_length
输入参数 locator – 一个 text_locator 值,引用要处理的 text 列。
输出参数 data_length – 一个 integer 值,指定 locator 引用的 text 列的字符长度。
结果集 无。
查找基础 text 数据的字节长度
使用 sp_drv_text_locator_bytelength 可查找 text 定位符引用的 LOB 列的字 节长度。 sp_drv_text_locator_bytelength 访问 Transact-SQL 函数 data_length。
语法 sp_drv_image_locator_bytelength locator, data_length
输入参数 locator – 一个 text_locator 值,引用要处理的 text 列。
输出参数 data_length – 一个 integer 值,指定 locator 引用的 text 列的字节长度。
结果集 无。
查找基础 unitext 数据的字符长度
使用 sp_drv_unitext_locator_charlength 可查找 unitext 定位符引用的 LOB 列 的字符长度。 sp_drv_unitext_locator_charlength 访问 Transact-SQL 函数 char_length。
语法 sp_drv_unitext_locator_charlength locator, data_length
输入参数 locator – 一个 unitext_locator 值,引用要处理的 unitext 列。
输出参数 data_length – 一个 integer 值,指定 locator 引用的 unitext 列的字符长度。
结果集 无。
查找基础 unitext 数据的字节长度
使用 sp_drv_unitext_locator_bytelength 可查找 unitext 定位符引用的 LOB 列 的字节长度。 sp_drv_unitext_locator_bytelength 访问 Transact-SQL 函数 data_length。
语法 sp_drv_image_locator_bytelength locator, data_length
输入参数 locator – 一个 unitext_locator 值,引用要处理的 unitext 列。
输出参数 data_length – 一个 integer 值,指定 locator 引用的 unitext 列的字节长度。
结果集 无。
查找基础 image 数据的字节长度
使用 sp_drv_image_locator_bytelength 可查找 image 定位符引用的 LOB 列 的字节长度。 sp_drv_image_locator_bytelength 访问 Transact-SQL 函数 data_length。
语法 sp_drv_image_locator_bytelength locator, data_length
输入参数 locator – 一个 image_locator 值,引用要处理的 image 列。
输出参数 data_length – 一个 integer 值,指定 locator 引用的 image 列的字节长度。
结果集 无。
查找搜索字符串在定位符引用的 text 列内的位置
使用 sp_drv_varchar_charindex,它可访问 Transact-SQL 函数 charindex。
语法 sp_drv_varchar_charindex search_string, locator, start, position
输入参数 • search_string – 要搜索的类型为 varchar 的文字。
• locator – 一个 text_locator 值,引用要在其中进行搜索的 text 列。
• start – 一个整数值,指定开始搜索的位置。第一个位置是 1。
输出参数 position – 一个 integer 值,指定 search_string 在 locator 引用的 LOB 列 中的开始位置。
结果集 无。
查找一个 text 定位符引用的字符串在另一个定位符引用的 text 列中的位置
使用 sp_drv_textlocator_charindex,它可访问 Transact-SQL 函数
charindex。
语法 sp_drv_textlocator_charindex search_locator, locator, start, position
输入参数 • search_locator – 一个 text_locator 值,指向要搜索的文字。
• locator – 一个 text_locator 值,引用要在其中进行搜索的 text 列。
• start – 一个整数值,指定开始搜索的位置。第一个位置是 1。
输出参数 position – 一个 integer 值,指定文字在 locator 引用的 LOB 列中的开始 位置。
结果集 无。
查找搜索字符串在定位符引用的 unitext 列内的位置
使用 sp_drv_univarchar_charindex,它可访问 Transact-SQL 函数
charindex。
语法 sp_drv_univarchar_charindex search_string, locator, start, position
输入参数 • search_string – 要搜索的类型为 univarchar 的文字。
• locator – 一个 unitext_locator 值,引用要在其中进行搜索的 unitext
列。
• start – 一个整数值,指定开始搜索的位置。第一个位置是 1。
输出参数 position – 一个 integer 值,指定 search_string 在 locator 引用的 LOB 列 中的开始位置。
结果集 无。
查找一个 unitext 定位符引用的字符串在另一个定位符引用的 unitext 列中的位置
使用 sp_drv_unitext_locator_charindex,它可访问 Transact-SQL 函数
charindex。
语法 sp_drv_charindex_unitextloc_in_locator search_locator, locator, start, position
输入参数 • search_locator – 一个 unitext_locator 值,指向要搜索的文字。
• locator – 一个 unitext_locator 值,引用要在其中进行搜索的 text 列。
• start – 一个整数值,指定开始搜索的位置。第一个位置是 1。
输出参数 position – 一个 integer 值,指定文字在 locator 引用的 LOB 列中的开始 位置。
结果集 无。
查找字节序列在 image 定位符引用的列内的位置
使用 sp_drv_varbinary_charindex,它可访问 Transact-SQL 函数 charindex。
语法 sp_drv_varbinary_charindex byte_sequence, locator, start, position
输入参数 • byte_sequence – 要搜索的类型为 varbinary 的字节序列。
• locator – 一个 image_locator 值,引用要在其中进行搜索的 image 列。
• start – 一个整数值,指定开始搜索的位置。第一个位置是 1。
输出参数 position – 一个 integer 值,指定 search_string 在 locator 引用的 LOB 列 中的开始位置。
结果集 无。
查找一个 image 定位符引用的字节序列在另一个定位符引用的 image 列中的位置
使用 sp_drv_image_locator_charindex,它可访问 Transact-SQL 函数
charindex。
语法 sp_drv_image_locator_charindex sequence_locator, locator, start, start_position
输入参数 • sequence_locator – 一个 image_locator 值,指向要搜索的字节序列。
• locator – 一个 image_locator 值,引用要在其中进行搜索的 image 列。
• start – 一个整数值,指定开始搜索的位置。第一个位置是 1。
输出参数 start_position – 一个 integer 值,指定字节序列在 locator 引用的 LOB 列 中的开始位置。
结果集 无。
检查 text_locator 引用是否有效
使用 sp_drv_text_locator_valid,它访问 locator_valid。
语法 sp_drv_text_locator_valid locator
输入参数 locator – 要验证的 text_locator。
输出参数 一个 bit,代表以下值之一:
• 0 – false, locator 无效。
• 1 – true, locator 有效。
结果集 无。
检查 unitext_locator 引用是否有效
使用 sp_drv_unitext_locator_valid,它访问 locator_valid。
语法 sp_drv_unitext_locator_valid locator
参数 locator – 要验证的 unitext_locator。
输出参数 一个 bit,代表以下值之一:
• 0 – false, locator 无效。
• 1 – true, locator 有效。
结果集 无。
检查 image_locator 引用是否有效
使用 sp_drv_image_locator_valid,它访问 locator_valid。
语法 sp_drv_image_locator_valid locator
参数 locator – 要验证的 image_locator。
输出参数 一个 bit,代表以下值之一:
• 0 – false, locator 无效。
• 1 – true, locator 有效。
结果集 无。
释放 LOB 定位符
使用 deallocate locator。请参见 Adaptive Server Enterprise 《参考手册:命 令》。
示例
示例 1 分配句柄并建立连接:
// Assumes that DSN has been named "sampledsn" and
// UseLobLocator has been set to 1.
SQLHENV environmentHandle = SQL_NULL_HANDLE; SQLHDBC connectionHande = SQL_NULL_HANDLE; SQLHSTMT statementHandle = SQL_NULL_HANDLE; SQLRETURN ret;
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &environmentHandle); SQLSetEnvAttr(environmentHandle, SQL_ATTR_ODBC_VERSION, SQL_ATTR_OV_ODBC3); SQLAllocHandle(SQL_HANDLE_DBC, environmentHandle, &connectionHandle);
Ret = SQLConnect(connectionHandle, "sampledsn", SQL_NTS, "sa", SQL_NTS, "Sybase",SQL_NTS);
示例 2 选择列并检索定位符:
// Selects and retrieves a locator for bk_desc, where
// bk_desc is a column of type text defined in a table
// named books. bk_desc contains the text "A book".
SQLPrepare(statementHandle, "SELECT bk_desc FROM books WHERE bk_id =1", SQL_NTS);
SQLExecute(statementHandle);
BYTE TextLocator[SQL_LOCATOR_SIZE]; SQLLEN Len = 0;
ret = SQLGetData(statementHandle, SQL_C_TEXT_LOCATOR, TextLocator, sizeof(TextLocator),&Len);
If(Len == sizeof(TextLocator))
{
Cout << Locator was created with expected size << Len;
}
示例 3 确定数据长度:
SQLLEN LocatorLen = sizeof(TextLocator); ret = SQLBindParameter(statementHandle, 1,
SQL_PARAM_INPUT, SQL_C_TEXT_LOCATOR, SQL_TEXT_LOCATOR, SQL_LOCATOR_SIZE, 0, TextLocator,
sizeof(TextLocator), &LocatorLen);
SQLLEN CharLenSize = 0; SQLINTEGER CharLen = 0;
ret = SQLBindParameter(statementHandle, 2, SQL_PARAM_OUTPUT, SQL_C_LONG,SQL_INTEGER,0 , 0,
&CharLen, sizeof(CharLen), &CharLenSize); SQLExecDirect(statementHandle,
"{CALL sp_drv_text_locator_charlength( ?,?)}" , SQL_NTS);
cout<< "Character Length of Data " << charLen;
示例 4 向 LOB 列中附加文本:
SQLINTEGER retVal = 0;
SQLLEN Col1Len = sizeof(retVal);
SQLCHAR appendText[10]=” abcdefghi on C++” ;
SQLBindParameter(statementHandle, 14,
SQL_PARAM_OUTPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &retVal, 0, Col1Len);
SQLBindParameter(statementHandle, 21, SQL_PARAM_INPUT,
SQL_C_TEXT_LOCATOR, SQL_TEXT_LOCATOR,
SQL_LOCATOR_SIZE, 0, &TextLocator, sizeof(TextLocator), SQL_NULL_HANDLE);
SQLBindParameter(statementHandle, 32, SQL_PARAM_INPUT,
SQL_C_SLONG, SQL_INTEGER, 0, 0, &charLen, 0, SQL_NULL_HANDLE);
SQLBindParameter(statementHandle, 43, SQL_PARAM_INPUT,
SQL_C_CHAR, SQL_CHAR, 10, 0, append_text, sizeof(append_text), SQL_NULL_HANDLE);
SQLExecDirect(statementHandle,
"{? = CALL sp_drv_setdata_text (?, ?, ?,?)}" , SQL_NTS);
SQLFreeStmt(statementHandle, SQL_CLOSE);
示例 5 从 LOB 定位符中检索 LOB 数据。
SQLCHAR description[512]; SQLLEN descriptionLength = 512;
SQLBindParameter(statementHandle, 1, SQL_PARAM_INPUT, SQL_C_TEXT_LOCATOR, SQL_TEXT_LOCATOR,
SQL_LOCATOR_SIZE, 0, TextLocator, sizeof(TextLocator), SQL_NULL_HANDLE);
SQLExecDirect(statementHandle, "{CALL sp_drv_locator_to_text(?)}", SQL_NTS); SQLFetch(statementHandle);
SQLGetData(statementHandle, 1,SQL_C_CHAR, description, descriptionLength, &descriptionLength)
Cout << "LOB data referenced by locator:"<< description
<< endl;
Cout << "Expected LOB data:A book on C++" << endl;
示例 6 将数据从客户端应用程序传输到 LOB 定位符。
description = "A lot of data that will be used for a lot
of inserts, updates and deletes"; descriptionLength = SQL_NTS;
SQLBindParameter(statementHandle, 1, SQL_PARAM_INPUT,
SQL_C_CHAR, SQL_CHAR, 512, 0, description, sizeof(description), &descriptionLength);
SQLExecDirect(statementHandle,
"{CALL sp_drv_create_text_locator(?)}", SQL_NTS); SQLFetch(statementHandle);
SQLGetData(statementHandle, SQL_C_TEXT_LOCATOR, TextLocator, sizeof(TextLocator),&Len);
Sybase SQL Anywhere数据库恢复工具ReadASADB:
之前就已经研发成功了能够从Sybase SQL Anywhere的DB文件中恢复数据的工具: ReadASADB。此工具支持ASA v5.0, v6.0, v7.0, v8.0, v9.0, v10.0, v11.0, v12.0, v16.0, v17.0等版本。
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具。
恢复Sybase SQL Anywhere的工具在国内处于领先水平。
Sybase SQL Anywhere数据库恢复工具ReadASADB功能
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具
- 适用于所有的SQL Anywhere版本 包括:5.x,6.x,7.x,8.x,9.x,10.x,11.x,12.x,16.x,17.x
- 适用于所有的UltraLite版本
- 能够恢复出来表结构和数据
- 能够恢复自定义数据类型
- 能够恢复存储过程等对象的语法
- 能够导出到目标数据库
- 能够导出到SQL文件并生成导入脚本
- 支持多种字符集,包括:cp850、cp936、gb18030、utf8等
- 能够恢复未加密或者简单加密类型的数据
- 简单易用
- 限制:不支持AES加密的数据文件
SQL Anywhere数据库非常规恢复工具ReadASADB使用介绍
Sybase SQL Anywhere数据库恢复工具ReadASADB适用场景
各种误操作:
- 误截断表(truncate table)
- 误删除表(drop table)
- 错误的where条件误删数据
- 误删除db或log文件
- 误删除表中的字段
Sybase SQL Anywhere数据库恢复工具ReadASADB的应用场景:
1.因为物理磁盘故障、操作系统、系统软件方面或者掉电等等原因导致的Sybase SQL Anywhere数据库无法打开的情况;
2.误操作,包括truncate table,drop table,不正确的where条件导致的误删除等;
Sybase SQL Anywhere无法打开时,比较常见的错误是:Assertion failed。
如:
1、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Checkpoint log: invalid bitmap page -- transaction rolled back
2、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Page number on page does not match page requested -- transaction rolled back
3、Internal database error *** ERROR *** Assertion failed:200502 (9.0.2.2451) Checksum failure on page 23 -- transaction rolled back
4、File is shorter than expected
5、Internal database error *** ERROR *** Assertion failed: 201116 Invalid free list index page found while processing checkpoint log -- transaction rolled back
6、*** ERROR *** Assertion failed: 51901 Page for requested record not a table page or record not present on page
7、*** ERROR *** Assertion failed: 201417 (7.0.4.3541) Invalid count or free space offset detected on a table page
8、Internal database error *** ERROR *** Assertion failed: 201425 (8.0.3.5594) Invalid count or free space offset detected on a free list page -- transaction rolled back.
9、Internal database error *** ERROR *** Assertion failed: 100702 (8.0.1.2600) Unable to modify indexes for a row referenced in rollback log -- transaction rolled back
Sybase ASE数据库恢复工具READSYBDEVICE:
一个不依赖数据库管理系统、直接从Sybase数据库设备文件上提取数据的业内领先的恢复工具!能够从损坏的Sybase ASE设备文件(.dat)上提取数据的非常规恢复工具。
Sybase ASE数据库恢复工具READSYBDEVICE的主要功能:
- 被勒索病毒加密数据文件及备份文件情况下的恢复;
- 系统崩溃只剩下数据文件的情况下的恢复,甚至数据库文件不存在而只有损坏的备份文件情况下的恢复;
- 因断电、硬盘坏道等造成数据库文件损坏情况下的恢复;
- delete数据恢复、误update数据恢复、误删除表(drop)恢复、误truncate表恢复 等;
- 各种Sybase内部系统表损坏、索引错误的修复;
- master数据库损坏而无法正常运行情况下的恢复;
- Sybase数据库被标记为可疑,不可用等情况的恢复;
- Sybase数据库中数据文件内部出现坏块情况下的恢复;
- Sybase数据库无数据文件但有日志文件的情况下的恢复;
- Sybase数据库只有数据文件无任何日志文件的情况下的恢复;
- Sybase数据文件被误删除情况下的碎片提取恢复;
- 磁盘阵列上的Sybase数据库被误格式化情况下的数据库恢复;
- 数据库sysobjects等系统表损坏无法正常应用情况下的恢复;
- Sybase数据库还原数据库出现失败情况下的恢复;
- Sybase数据库只剩下损坏的备份文件情况下的恢复。
Sybase ASE数据库恢复工具READSYBDEVICE支持的版本:
Sybase ASE 11.0.x,11.5.x,11.9.x,12.0.x,12.5.x,15.0.x,15.5.x,15.7.x,16.0.xSQL Server数据库恢复工具SQLRescue:
一个不依赖数据库管理系统、直接从SQL Server数据库文件上提取数据的业内领先的恢复工具!能够从损坏的SQL Server数据库文件(.mdf)上提取数据的非常规恢复工具。
SQL Server数据库恢复工具SQLRescue的主要功能:
- 系统崩溃只剩下数据文件的情况下的恢复,即无日志文件或者日志文件损坏情况下的恢复;
- 断电导致数据库文件损坏情况下的恢复;
- 硬盘坏道造成数据库损坏情况下的恢复;
- 数据文件内部存在坏页情况下的恢复;
- 企业管理器误删除数据表记录,管理软件误删除数据表记录的恢复;
- 并闩锁错误、格式化、误删除后导致软件不能使用的情况;
- 无法读取并闩锁页sysindexes失败情况下的修复;
- 数据文件被误删除情况下的碎片提取恢复;
- 系统表损坏、索引错误、误删除数据库表、删除记录的数据找回;
- master数据库损坏而无法正常运行情况下的恢复;
- 数据文件无法附加情况下的数据恢复;
- 数据库被标记为可疑,质疑,不可用等情况的恢复;
- 数据库sysobjects等系统表损坏情况下的恢复;
- 数据被误(drop、delete、truncate)删除表数据的恢复,误update后的数据恢复等;
- 还原时报一致性错误,错误823等情况下的数据恢复,各种错误提示的数据库文件修复;
- 数据库被误格式化等情况下的数据库恢复;
- 日志收缩造成数据库损坏情况下的恢复;
- 仅剩损坏的备份文件情况下的恢复。
SQL Server数据库恢复工具SQLRescue技术特点:
只要SQL Server数据库的数据文件存在,我们就有办法帮您从数据文件中找回重要数据。- 从数据文件中直接恢复数据
- 不能附加时直接恢复数据并生成新的数据库
- 系统表损坏的数据库修复
- 快速修复SQL 823错误、连接中断错误
SQL Server数据库恢复工具SQLRescue支持的版本:
Microsoft SQL Server 7.0, 2000, 2005, 2008, 2008R2, 2012, 2014, 2016, 2017,2019。+-------------------------------------华丽的分割线-------------------------------------------------------------------------