远程Sybase数据库技术支持,联系手机:13811580958,QQ:289965371!

 

随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
目前,原Sybase所有产品(包括:Adaptive Server Enterprise、Sybase IQ、Replication Server、PowerDesigner等)的官方手册仍然可以从http://infocenter.sybase.com/help/index.jsp进行浏览或下载。暂不清楚该网站http://infocenter.sybase.com/help/index.jsp何时会被完全迁移到SAP Support上!
Sybase官方手册英文版有html和pdf两种格式,而中文版手册只有pdf一种格式。为了国内Sybase用户更方便、快捷地搜索Sybase常见产品的官方手册内容,特将中文版Sybase官方手册转为html格式!
Sybase产品官方手册中文版的html格式所有内容的版权归SAP公司所有!本博客站长是Sybase数据库的铁杆粉丝!

如有Sybase数据库技术问题需要咨询,请联系我!

  QQ :289965371 点击这里给我发消息
  Email:

以下官方手册为ASE 15.7 ESD#2中文版:

  1. 新增功能公告 适用于 Windows、Linux 和 UNIX 的 Open Server 15.7 和 SDK 15.7
  2. 新增功能摘要
  3. 新增功能指南
  4. ASE 15.7 发行公告
  5. 配置指南(windows)
  6. 安装指南(windows)
  7. 参考手册:构件块
  8. 参考手册:命令
  9. 参考手册:过程
  10. 参考手册:表
  11. Transact-SQL® 用户指南
  12. 系统管理指南,卷 1
  13. 系统管理指南,卷 2
  14. 性能和调优系列:基础知识
  15. 性能和调优系列:锁定和并发控制
  16. 性能和调优系列:监控表
  17. 性能和调优系列:物理数据库调优
  18. 性能和调优系列:查询处理和抽象计划
  19. 性能和调优系列:使用 sp_sysmon 监控 Adaptive Server
  20. 性能和调优系列:利用统计分析改进性能
  21. 程序员参考 jConnect for JDBC 7.0.7
  22. Adaptive Server Enterprise 中的 Java
  23. 组件集成服务用户指南
  24. Ribo 用户指南
  25. 内存数据库用户指南
  26. Sybase Control Center for Adaptive Server® Enterprise
  27. 安全性管理指南
  28. 实用程序指南

 


< 上一个 | 内容 | 下一步 >

处理错误消息


jConnect 提供两个用于返回特定于 Sybase 的错误信息的类: SybSQLException SybSQLWarning,并提供一个 SybMessageHandler 接 口,用于自定义 jConnect 处理来自服务器的错误消息的方式。


处理作为警告返回的数字错误

Adaptive Server 12.0 12.5 中,缺省情况下,按严重级别 10 对数字

错误进行处理。严重级别为 10 的消息归类为状态信息消息,而不是归 类为错误,并且在 SQLWarning 对象中传输其内容。下面的代码摘录说 明此处理过程:

static void processWarnings(SQLWarning warning)

{

if (warning != null)

{

System.out.println ("\n -- Warning received -- \n");

}//end if

while (warning != null)

{

System.out.println ("Message:"

+ warning.getMessage()); System.out.println("SQLState:"

+ warning.getSQLState()); System.out.println ("ErrorCode:" + warning.getErrorCode());

System.out.println ("----------------------------");

warning = warning.getNextWarning();

}//end while

}//end processWarnings

当出现数字错误时,返回的 ResultSet 对象中不包含任何结果集数据, 必须从 SQLWarning 获取有关此错误的相关信息。因此,在 JDBC 应用 程序中,检查并处理 SQLWarning 的代码不应依赖于结果集。例如,下 面的代码在用于处理 while 循环的结果集的内部和外部检查并处理 SQLWarning 数据:

while (rs.next())

{

String value = rs.getString(1); System.out.println ("Fetched value:" + value);


// Check for SQLWarning on the result set. processWarnings (rs.getWarnings());


}//end while


// Check for SQLWarning on the result set. processWarnings (rs.getWarnings());

此处代码在没有结果集数据 (rs.next ( ) false)的情况下检查 SQLWarning。下面的示例是正确编写为检测并报告数字错误的程序的 输出。错误是除数为零:


-- Warning received --


Message:Divide by zero occurred. SQLState:01012

ErrorCode:3607


检索特定于 Sybase 的错误信息

jConnect 提供 EedInfo 接口来指定获取特定于 Sybase 的错误信息的方法。 EedInfo 接口在 SybSQLException SybSQLWarning 中实现,它们是 SQLException SQLWarning 的扩展类。

SybSQLException SybSQLWarning 包含以下方法:

public ResultSet getEedParams ,返回包含附带了错误消息的所有参数 值的单行结果集。

public int getStatus,如果消息中包含参数值,它将返回 “1”;如果 不包含,则返回 “0”。

public int getLineNumber ,返回引发了错误消息的存储过程或查询的 行号。

public String getProcedureName ,返回引发了错误消息的过程的名称。

public String getServerName ,返回生成消息的服务器的名称。

public int getSeverity ,返回错误消息的严重性。

public int getState ,返回有关服务器中错误消息的内部源的信息。

(仅用于 Sybase 技术支持部门。)

public int getTranState ,返回以下事务状态之一:

0 连接当前处于扩展事务中。

1 前一事务已成功提交。

3 前一事务中止。

有些错误消息可能是 SQLException SQLWarning 消息,但不是 SybSQLException SybSQLWarning 消息。应用程序应先检查其正在处理 的例外类型,然后下转到 SybSQLException SybSQLWarning


自定义错误消息处理


可以使用 SybMessageHandler 接口来自定义 jConnect 处理服务器生成的 错误消息的方式。通过在自己的类中实现 SybMessageHandler 来处理错 误消息有如下好处:

“通用”错误处理


错误处理逻辑可放在错误消息处理程序中,而不需要在整个应用程 序中重复。

“通用”错误记录 错误消息处理程序可包含处理所有错误记录的逻辑。

根据应用程序要求重新映射错误消息严重性

错误消息处理程序可以包含识别特定错误消息的逻辑,并根据应用 程序的要求而不是根据服务器的严重性级别来降低或提高错误的严 重级。例如,在进行删除旧行的清除操作期间,可能想降低消息 “一行不存在”的严重级。然而,在其它环境中又可能需要提高严 重级。


image

注释 实现 SybMessageHandler 接口的错误消息处理程序仅接收服务器生 成的消息。它们不处理由 jConnect 生成的消息

image


jConnect 接收到错误消息时,它会检查是否已注册 SybMessageHandler 类来处理该消息。如果已注册, jConnect 将调用 messageHandler 方法, 该方法接受 SQL 例外作为其参数。然后,jConnect 根据 messageHandler 返回的值处理该消息。错误消息处理程序可以:

依原样返回 SQL 例外。

返回 nulljConnect 将忽略此消息。

根据 SQL 例外创建 SQL 警告,并将其返回。警告结果被添加到警 告消息链中。

如果初始消息是 SQL 警告, messageHandler 可将此 SQL 警告评估 为紧急,并创建和返回一个 SQL 例外,一旦控制权返回到 jConnect 就会引发此例外。


安装错误消息处理程序

通过从 SybDriverSybConnection SybStatement 调用 setMessageHandler 方法可安装实现 SybMessageHandler 的错误消息处理程序。如果从 SybDriver 安装错误消息处理程序,则所有后续 SybConnection 对象都会 继承此处理程序。如果从 SybConnection 对象安装错误消息处理程序, 则由该 SybConnection 对象创建的所有 SybStatement 对象都会继承此处理 程序。


此继承关系仅从安装了错误消息处理程序对象后才起作用。例如,如果 创建一个名为 “myConnection”的 SybConnection 对象,然后调用 SybDriver.setMessageHandler 来安装错误消息处理程序对象,则 “myConnection”无法使用此对象。

若要返回当前错误消息处理程序对象,请使用 getMessageHandler


错误消息处理程序示例

import java.io.*; import java.sql.*;

import com.sybase.jdbcx.SybMessageHandler; import com.sybase.jdbcx.SybConnection; import com.sybase.jdbcx.SybStatement;

import java.util.*;


public class MyApp

{

static SybConnection conn = null; static SybStatement stmt = null static ResultSet rs = null; static String user = "guest";

static String password = "sybase";

static String server = "jdbc:sybase:Tds:192.138.151.39:4444"; static final int AVOID_SQLE = 20001;


public MyApp()

{

try

{

Class.forName("com.sybase.jdbc4.jdbc.SybDriver").newInstance(); Properties props = new Properties();

props.put("user", user); props.put("password", password); conn = (SybConnection)

DriverManager.getConnection(server, props); conn.setMessageHandler(new NoResultSetHandler()); stmt =(SybStatement) conn.createStatement(); stmt.executeUpdate("raiserror 20001 'your error'");


for (SQLWarning sqw = _stmt.getWarnings(); sqw != null;

sqw = sqw.getNextWarning());

{

if (sqw.getErrorCode() == AVOID_SQLE);

{


System.out.println("Error" + sqw.getErrorCode()+ " was found in the Statement°Øs warning list."); break;

}

}

stmt.close();

conn.close();

}

catch (Exception e)

{

System.out.println(e.getMessage()); e.printStackTrace();

}

}


class NoResultSetHandler implements SybMessageHandler

{

public SQLException messageHandler(SQLException sqe)

{

int code = sqe.getErrorCode(); if (code == AVOID_SQLE)

{

System.out.println("User " + _user + " downgrading " + AVOID_SQLE + " to a warning");

sqe = new SQLWarning(sqe.getMessage(), sqe.getSQLState(),sqe.getErrorCode());

}

return sqe;

}

}


public static void main(String args[])

{

new MyApp();

}




--------------------------------------华丽的分割线-------------------------------------------------------------------------
之前就已经研发成功了能够从Sybase SQL Anywhere的DB文件中恢复数据的工具:ReadASADB。
此工具支持ASA v5.0,v6.0,v7.0,v8.0,v9.0,v10.0,v11.0,v12.0等版本。
恢复Sybase SQL Anywhere的工具在国内应该算首创。

ReadASADB功能
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具

  1. 适用于所有的SQL Anywhere版本    包括:5.x,6.x,7.x,8.x,9.x,10.x,11.x,12.x
  2. 适用于所有的UltraLite版本
  3. 能够恢复出来表结构和数据
  4. 能够恢复自定义数据类型
  5. 能够恢复存储过程等对象的语法
  6. 能够导出到目标数据库
  7. 能够导出到SQL文件并生成导入脚本
  8. 支持多种字符集  包括:cp850、cp936、gb18030、utf8等
  9. 能够恢复未加密或者简单加密类型的数据
  10. 简单易用
  11. 限制:不支持AES加密的数据文件
请参考:研发成功了从Sybase SQL Anywhere的DB文件上恢复数据的工具
            SQL Anywhere数据库非常规恢复工具ReadASADB使用介绍

ReadASADB适用场景

各种误操作:

  1. 误截断表(truncate table)
  2. 误删除表(drop table)
  3. 错误的where条件误删数据
  4. 误删除db或log文件
  5. 误删除表中的字段

本工具的应用场景:

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等等。
+-------------------------------------华丽的分割线-------------------------------------------------------------------------