随着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数据库技术问题需要咨询,请联系我!
以下官方手册为SAP IQ 16.0 SP03中文版:
数据库服务器支持 Java 存储过程和函数。Java 存储过程或函数与 SQL 存储过程或函 数的行为基本相同,只是过程或函数的代码用 Java 编写并且在数据库服务器外(即在 Java VM 环境内)执行。
应该注意的是,每个数据库对应于一个 Java VM 实例,而不是每个连接对应于一个 实例。Java 存储过程可以返回结果集。
在数据库支持中使用 Java 有几个前提条件:
1. 数据库服务器计算机中必须装有一个 Java 运行时环境副本。
2. 数据库服务器必须能够找到 Java 可执行文件 (Java VM)。
要在数据库中使用 Java,请确保数据库服务器能够找到并启动 Java 可执行文件。通 过执行以下语句可验证这一点:
START EXTERNAL ENVIRONMENT JAVA;
如果数据库服务器未能启动 Java,问题的原因可能是数据库服务器不能找到 Java 可 执行文件。这种情况下应执行 ALTER EXTERNAL ENVIRONMENT 语句,以特意设置 Java 可执行文件的位置。务必要包含可执行文件名。
ALTER EXTERNAL ENVIRONMENT JAVA
LOCATION 'java-path';
例如:
ALTER EXTERNAL ENVIRONMENT JAVA
LOCATION 'c:\\jdk1.6.0\\jre\\bin\\java.exe';
通过执行以下 SQL 查询,可查询将要用于数据库服务器的 Java VM 的位置:
SELECT db_property('JAVAVM');
请注意,除非用于验证数据库服务器能否启动 Java VM,否则不必使用 START EXTERNAL ENVIRONMENT JAVA 语句。一般而言,调用 Java 存储过程或函数会自动 启动 Java VM。
同样,停止 Java 实例也不必使用 STOP EXTERNAL ENVIRONMENT JAVA 语句,因为数 据库的所有连接终止时 Java 实例会自动消失。但是,如果要彻底停用 Java 并且想要 释放一些资源,则 STOP EXTERNAL ENVIRONMENT JAVA 语句可以减少 Java VM 的使 用次数。
验证了数据库服务器可以启动 Java VM 可执行文件后,接下来要做的事就是在数据 库中安装所需的 Java 类代码。可用 INSTALL JAVA 语句执行这种操作。例如,可以执 行以下语句来将 Java 类从文件安装到数据库中。
INSTALL JAVA NEW
FROM FILE 'java-class-file';
也可以将 Java JAR 文件安装到数据库中。
INSTALL JAVA NEW
JAR 'jar-name'
FROM FILE 'jar-file';
可以从变量安装 Java 类,如下所示:
CREATE VARIABLE JavaClass LONG VARCHAR;
SET JavaClass = xp_read_file('java-class-file') INSTALL JAVA
NEW
FROM JavaClass;
要从数据库中删除 Java 类,请使用 REMOVE JAVA 语句,如下所示:
REMOVE JAVA CLASS java-class
要从数据库中删除 Java JAR,请使用 REMOVE JAVA 语句,如下所示:
REMOVE JAVA JAR 'jar-name'
要修改现有 Java 类,可以使用 INSTALL JAVA 语句的 UPDATE 子句,如下所示:
INSTALL JAVA UPDATE
FROM FILE 'java-class-file'
也可以在数据库中更新现有 Java JAR 文件。
INSTALL JAVA UPDATE
JAR 'jar-name'
FROM FILE 'jar-file';
可以从变量更新 Java 类,如下所示:
CREATE VARIABLE JavaClass LONG VARCHAR;
SET JavaClass = xp_read_file('java-class-file') INSTALL JAVA
UPDATE
FROM JavaClass;
Java 类安装在数据库中后,接下来可以创建存储过程和函数,以与 Java 方法连接。 EXTERNAL NAME 字符串含有调用 Java 方法以及返回 OUT 参数和返回值所需的信息。 必须在 EXTERNAL NAME 子句的 LANGUAGE 属性中指定 JAVA。EXTERNAL NAME 子
句的格式为:
EXTERNAL NAME 'java-call' LANGUAGE JAVA
java-call:
[package-name.]class-name.method-name method-signature
method-signature:
( [ field-descriptor, ... ] ) return-descriptor
field-descriptor 和 return-descriptor:
• Z
• | B
• | S
• | I
• | J
• | F
• | D
• | C
• | V
• | [descriptor
• | Lclass-name;
Java 方法签名是参数类型和返回值类型的压缩字符表示形式。如果参数数量少于显示 在方法签名中的数量,则差值必须等于 DYNAMIC RESULT SETS 中指定的数量,并且 方法签名中超出过程参数列表中参数的每个参数的方法签名必须是 [Ljava/SQL/ ResultSet;。
对于 Java UDF,无需设置 DYNAMIC RESULT SETS;暗示 DYNAMIC RESULT SETS 等于
1。
field-descriptor 和 return-descriptor 的含义如下:
字段类型 |
Java 数据类型 |
B |
byte |
C |
char |
D |
double |
F |
float |
I |
int |
字段类型 |
Java 数据类型 |
J |
long |
L class-name; |
是类 class-name 的实例。类名必须是完全限定的,而且名称中的任何点都必 须替换为 /。例如 java/lang/String |
S |
short |
V |
无类型 |
Z |
布尔型 |
[ |
数组的每个维度都使用一个 |
例如,
double some_method( boolean a,
int b, java.math.BigDecimal c, byte [][] d,
java.sql.ResultSet[] rs ) {
}
可以有以下签名:
'(ZILjava/math/BigDecimal;[[B[Ljava/SQL/ResultSet;)D'
以下过程创建 Java 方法的接口。Java 方法不返回任何值 (V)。
CREATE PROCEDURE insertfix()
EXTERNAL NAME 'JDBCExample.InsertFixed()V' LANGUAGE JAVA;
以下过程创建具有字符串 ([Ljava/lang/String;) 输入参数的 Java 方法的接口。Java 方法 不返回任何值 (V)。
CREATE PROCEDURE InvoiceMain( IN arg1 CHAR(50) )
EXTERNAL NAME 'Invoice.main([Ljava/lang/String;)V' LANGUAGE JAVA;
以下过程创建 Java 方法 Invoice.init (可接收一个字符串参数 (Ljava/lang/ String;)、一个双精度参数 (D)、另一个字符串参数 (Ljava/lang/String;) 和另一个双精度 参数 (D))的接口,并且不返回任何值 (V)。
CREATE PROCEDURE init( IN arg1 CHAR(50),
IN arg2 DOUBLE,
IN arg3 CHAR(50), IN arg4 DOUBLE)
EXTERNAL NAME 'Invoice.init(Ljava/lang/String;DLjava/lang/ String;D)V'
LANGUAGE JAVA
下面的示例 Java 含有函数 main,该函数可以接收一个字符串参数并将其写入数据库 服务器消息窗口。其中还含有函数 whare,该函数可返回 Java 字符串。
import java.io.*;
public class Hello
{
public static void main( String[] args )
{
System.out.print( "Hello" );
for ( int i = 0; i < args.length; i++ ) System.out.print( " " + args[i] );
System.out.println();
}
public static String whare()
{
return( "I am SQL Anywhere." );
}
}
以上 Java 代码位于 Hello.java 文件中,并使用 Java 编译器进行编译。所生成的类 文件将装载到数据库中,如下所示。
INSTALL JAVA NEW
FROM FILE 'Hello.class';
通过 Interactive SQL,用于在 Hello 类中连接方法 main 的存储过程将按如下方式创 建:
CREATE PROCEDURE HelloDemo( IN name LONG VARCHAR )
EXTERNAL NAME 'Hello.main([Ljava/lang/String;)V' LANGUAGE JAVA;
请注意,main 的参数描述为 java.lang.String 数组。用 Interactive SQL 通过执 行以下 SQL 语句来测试该接口。
CALL HelloDemo('SQL Anywhere');
如果检查数据库服务器消息窗口,将会找到此处写入的消息。所有到 System.out
的输出将重定向到服务器消息窗口。
通过 Interactive SQL,用于在 Hello 类中连接方法 whare 的函数将按如下方式创 建:
CREATE FUNCTION Whare() RETURNS LONG VARCHAR
EXTERNAL NAME 'Hello.whoAreYou(V)Ljava/lang/String;' LANGUAGE JAVA;
请注意,函数 whare 以返回 java.lang.String 的形式进行描述。用 Interactive SQL 通过执行以下 SQL 语句来测试该接口。
SELECT Whare();
应该会在“Interactive SQL 结果”窗口中看到响应。
尝试排除 Java 外部环境未启动的故障时,也就是调用 Java 时应用程序遇到“主线程 未找到”错误时,DBA 应该执行以下检查:
• 如果 Java VM 与数据库服务器的位数不相同,则确保数据库服务器计算机中装有 位数与 VM 相同的客户端库。
• 确保共享对象 sajdbc.jar 和 dbjdbc12/libdbjdbc12 来自同一软件内部版 本。
• 如果数据库服务器计算机中有多个 sajdbc.jar ,则确保其都已与同一软件版本 同步。
• 如果数据库服务器计算机很忙,则可能会因为超时而报错。
另请参见
• INSTALL JAVA 语句 (第 335 页)
• CREATE PROCEDURE 语句 (Java UDF) (第 337 页)
• CREATE FUNCTION 语句 (Java UDF) (第 339 页)
• REMOVE 语句 (第 342 页)
• START JAVA 语句 (第 343 页)
• STOP JAVA 语句 (第 344 页)
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。+-------------------------------------华丽的分割线-------------------------------------------------------------------------