远程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. 实用程序指南

 


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

更改字符集、排序顺序或消息语言

即使在您配置了服务器之后,系统管理员也可更改 Adaptive Server 使用 的缺省字符集、排序顺序或消息语言。因为排序顺序建立在特定字符集 的基础上,所以改变字符集总是伴随着排序顺序的改变。不过,您可以 更改排序顺序而不更改字符集,因为一种字符集可以使用多种排序顺序。

若要显示 Adaptive Server 的缺省排序顺序、字符集及其主要排序顺序表, 请输入:

sp_helpsort


更改缺省字符集


Adaptive Server 只能有一个缺省字符集,数据使用此字符集存储在数据 库中。安装 Adaptive Server 时,请指定缺省字符集。


image

警告!请仔细阅读以下内容,并且在更改 Adaptive Server 中的缺省字符 集时要小心。Sybase 强烈建议在更改缺省字符集之前执行备份。

image


更改 Adaptive Server 中的缺省字符集时,需要将所有已有数据转换到新 的缺省字符集。只有在以下情况下,才不需要转换:

服务器中没有用户数据。

对服务器中用户数据的损坏是可接受的。

您确信服务器中的数据仅使用 ASCll-7。在这种情况下,您可以更 改缺省值而无需首先将数据复制出服务器。

在其它情况下,必须转换已有数据,如下所示:

1 使用 bcp 将数据复制出来。

2 更改缺省字符集


3 使用带有适当数据转换标志的 bcp 将数据复制回服务器。 有关使用 bcp 复制数据的详细信息,请参见《实用工具指南》。

image

警告!在将数据转换到不同的字符集(特别是 UTF-8)后,对于分配的 列大小,数据可能会太大。使用大一点的列大小重新创建受影响的列。

image


必须支持现有数据的字符集与新的缺省字符集之间的代码转换。如果不支 持,将会出现转换错误,并且不会正确地转换数据。有关支持的字符集转 换的详细信息,请参见 11 章“配置客户端 /服务器字符集转换”

即使支持字符集之间的转换,由于在字符集之间存在一些细小的差别, 或者因为某些字符在其它字符集中没有等价的字符,仍可能会出现一些 错误。包含有问题数据的行不能复制回数据库,否则数据可能包含不完 整的字符或无效的字符。


用资源文件更改排序顺序

可使用资源文件更改 Adaptive Server 字符集。样本资源文件 sqlloc.rs 位 于 $SYBASE/ASE-12_5/init/sample_resource_files/ 中。

来自 Adaptive Server 12.5.1 安装的资源文件与以下内容相似:

sybinit.release_directory:USE_DEFAULT sqlsrv.server_name:PUT_YOUR_SERVER_NAME_HERE sqlsrv.sa_login:sa

sqlsrv.sa_password: sqlsrv.default_language:USE_DEFAULT sqlsrv.language_install_list:USE_DEFAULT sqlsrv.language_remove_list:USE_DEFAULT sqlsrv.default_characterset:USE_DEFAULT sqlsrv.characterset_install_list:USE_DEFAULT sqlsrv.characterset_remove_list:USE_DEFAULT sqlsrv.sort_order:USE_DEFAULT

# An example sqlloc resource file...

# sybinit.release_directory:USE_DEFAULT

# sqlsrv.server_name:PUT_YOUR_SERVER_NAME_HERE

# sqlsrv.sa_login:sa

# sqlsrv.sa_password:

# sqlsrv.default_language:french

# sqlsrv.language_install_list:spanish,german

# sqlsrv.language_remove_list:USE_DEFAULT

# sqlsrv.default_characterset:cp437

# sqlsrv.characterset_install_list:mac,cp850

# sqlsrv.characterset_remove_list:USE_DEFAULT

# sqlsrv.sort_order:dictionary


更改缺省排序顺序


Adaptive Server 只能有一种缺省排序顺序,即 Adaptive Server 用于对数 据进行排序的归类序列。考虑在特定的 Adaptive Server 上更改字符数据 的排序顺序时,请记住:组织中的所有 Adaptive Server 应具有相同的排 序顺序。单一的排序顺序可以增进一致性并使分布式处理更易于管理。

在更改缺省排序顺序后,可能要重建索引。有关详细信息,请参见 320 页的“重新配置字符集、排序顺序或消息语言”


重新配置字符集、排序顺序或消息语言

本节总结在更改 Adaptive Server 的缺省字符集、排序顺序或消息语言前 后需要执行的步骤。有关如何为新服务器配置字符集、排序顺序或消息 语言的过程,请参见所用平台的配置文档。

在更改字符集或排序顺序的前后,请备份 Adaptive Server 中的所有数据 库。备份数据库之后,如果满足以下条件,请使用 bcp 将数据复制入或 复制出数据库:

数据库包含字符数据,并且您希望将数据转换到新的字符集。不要 将数据的数据库转储装载到使用新缺省字符集的服务器中。 Adaptive Server 假定装载的数据采用新的字符集,并且会损坏数据。

您只更改缺省排序顺序,而不更改缺省字符集。您无法从在更改排 序顺序之前执行的转储中装载数据库,如果尝试这样做,则会出现 错误消息,并且 Adaptive Server 将中止装载。

改变缺省字符集,而旧排序顺序或新排序顺序不是二进制的。不能 装载更改字符集之前所做的数据库转储。

一旦重新配置了缺省字符集和排序顺序之后,您将无法从数据库转储中 重新装载数据(除非旧字符集和新字符集均使用二进制排序顺序,并且 无需在旧字符集和新字符集之间进行转换)。有关详细信息,请参见

318 页的“更改缺省字符集”


Unicode 示例


在以下示例中,将对名为 xpubs 的虚构数据库进行修改以使用

univarchar 列。


模式

假定在一台具有所有缺省安装设置(即字符集“iso_1”,缺省排序顺序

ID 50binary_iso_1”)的服务器上使用以下脚本创建了一个数据库。

> create database xpubs

> go

> use xpubs

> go

> create table authors (au_id int, au_lname varchar(255), au_fname varchar(255))

> go

> create index au_idx on authors(au_lname, au_fname)

> go

然后使用一系列插入和更新操作将数据装载到该服务器中。


转换到 UTF-8


转为使用 Unicode 的第一步是提取数据,并将其转换为 UTF-8 格式。

% bcp xpubs..authors out authors.utf8.bcp -c -Jutf8 -Usa -P

下一步是安装 UTF-8 作为服务器中的缺省字符集:

% charset -Usa -P binary.srt utf8

% isql -Usa -P

> sp_configure 'default sortorder id', 50, 'utf8'

> go

> shutdown

> go


% isql -Usa -P

重新启动服务器以修改缺省字符集并在系统表上重新创建索引。再次重 新启动服务器,然后重新装载数据:

> sp_dboption xpubs, 'select into', true

> go

> use xpubs

> go

> checkpoint

> go

> delete from authors

> go

> quit

% bcp xpubs..authors in authors.utf8.bcp -c -Jutf8 -Usa -P


将所选列迁移到 unichar

对于一个使用 UTF-8 作为缺省字符集运行的工作数据库,将所选列转换 为 univarchar 非常简单:

% isql -Usa -P

> use xpubs

> go

> alter table authors modify au_lname univarchar(255), au_fname univarchar(255)

> go

这些列将被修改为新的数据类型,数据将进行相应的转换,并且将重新 创建索引。


迁移到 unitext 或从 unitext 迁移

目前,alter table modify 命令不支持 textimage unitext 列。若要从 text 迁移到 unitext 列,必须首先使用 bcp 创建带有 unitext 列的表,然后再 次使用 bcp 将数据放入新表中。只有用 -Jutf8 选项调用 bcp 时,此迁移路 径才有效。


预备步骤


在运行安装程序对 Adaptive Server 进行重新配置之前:

1 转储所有用户数据库和 master 数据库。如果更改了 model

sybsystemprocs,也要对其进行转储。

2 如果尚未装载语言模块,则进行装载(有关完整的说明,请参见所 用平台的配置文档)。

3 如果要更改 Adaptive Server 的缺省字符集,而当前数据库包含非

ASCII-7 数据,则应使用 bcp 将现有数据从数据库中复制出来。

装载了语言模块之后,即可运行 Adaptive Server 安装程序来完成以下 操作:

安装或删除 Adaptive Server 包含的消息语言和字符集

更改缺省消息语言或字符集

选择另一种排序顺序


有关使用安装程序的说明,请参见所用平台的配置文档。


image

注释 更改字符集或排序顺序前,Adaptive Server 打开的数据库必须与 由服务器管理的数据库的数量相同。如果更改 Adaptive Server 排序顺序 后重新启动时没有打开足够数量的数据库,则 Adaptive Server 就会将此 消息输出到错误日志,并且服务器将还原为其先前的排序顺序:

The configuration parameter 'number of open databases' must be at least as large as the number of databases, in order to change the character set or sort order."Re- start Adaptive Server, use sp_configure to increase 'number of open databases' to at least %d, then re- configure the character set or sort order

image


若要重新配置语言、字符集或排序顺序,请使用《实用程序指南》中介 绍的 sqlloc 实用程序。如果使用的是 Windows,请使用《配置指南》的 第 3 章“Adaptive Server 缺省配置”中介绍的 Server Config 实用程序。

如果安装了其它语言,但没有更改 Adaptive Server 字符集或排序顺序, 则已完成了重新配置过程。

如果更改了 Adaptive Server 的缺省字符集,而当前数据库中包含非 ASCII-7 数据,则应使用带有启用转换所需标志的 bcp 将数据复制回数 据库。

如果更改了 Adaptive Server 缺省排序顺序或字符集,请参见 320 页的 “重新配置字符集、排序顺序或消息语言”


设置用户的缺省语言

如果安装了其它语言,运行客户端程序的用户可以运行 create login 将该 语言设置为缺省语言,或使用 locales.dat 中的相应条目在客户端计算机 上设置 LANG 变量。


重新配置后的恢复


每次停止和重新启动 Adaptive Server 时,将在每个数据库上自动执行恢 复。《系统管理指南,卷 2》的第 11 章“制订备份和恢复计划”中详细 论述了自动恢复。

完成恢复后,将装载新的排序顺序和字符集定义。


如果更改了排序顺序, Adaptive Server 将切换到单用户模式,以便允许 对系统表进行必要的更新并防止其它用户使用该服务器。将自动检查每 个包含基于字符的索引的表,以查看索引是否由于排序顺序的更改而损 坏。如有必要,使用新的排序顺序定义自动重建表中基于字符的索引。

重建系统索引之后,将在 sysindexes 系统表中将基于字符的用户索引标 记为“可疑”。在 sysobjects 中会将包含可疑索引的用户表标记为“只 读”,以防止对这些表进行更新或使用“可疑”索引,直到这些索引经 过检查或重建(如有必要)。

将在域分区用户表中检查是否有基于字符的分区键,并且,如果排序顺 序更改或字符集更改可能导致分区损坏,则将这些表标记为“可疑”。

接着,新的排序顺序信息将替换磁盘上存放配置信息的区域中的旧信息。 然后,Adaptive Server 将关闭,以便使用一组完整、准确的系统信息启 动下一个会话。


使用 sp_indsuspect 查找损坏的索引

Adaptive Server 关闭之后重新启动它,并使用 sp_indsuspect 查找需要 重建索引的用户表。

sp_indsuspect [tab_name]

其中 tab_name 是您正调查的表的名称。如果缺少 tab_namesp_indsuspect 会创建一个列表,其中包括当前数据库中包含排序顺序更 改时标记为“可疑”的索引的所有表。

以下示例显示,在 mydb 数据库中运行 sp_indsuspect 将产生一个可疑索引:

sp_indsuspect

Suspect indexes in database mydb Own.Tab.Ind (Obj_ID, Ind_ID) = dbo.holdings.h_name_ix(160048003, 2)


更改排序顺序后重建索引

dbcc reindex 通过运行“快速”版本的 dbcc checktable 来检查用户表上索 引的完整性。有关详细信息,请参见《系统管理指南,卷 2》中的第 10 章“检查数据库一致性”。dbcc reindex 将删除并重建那些所用排序顺序 与新排序顺序不一致的索引。当 dbcc reindex 发现第一个与索引相关的 错误时,它将显示一条消息,然后重建不一致的索引。更改了 Adaptive Server 中的排序顺序之后,系统管理员或表所有者应运行 dbcc reindex

dbcc reindex ({table_name | table_id})


sp_indsuspect 列出的所有包含可疑索引的表运行此命令。例如:

dbcc reindex (titles)

One or more indexes are corrupt.They will be rebuilt.

在以上示例中, dbcc reindex 在表 titles 中发现了一个或多个可疑索引, 而且删除并重建了相应的索引。

如果表的索引已经是正确的,或者表没有索引,则 dbcc reindex 不会重建 任何索引。而是显示一条消息。如果怀疑表中包含损坏的数据,则命令 中止。如果发生这种情况,就会显示错误消息,指示用户运行 dbcc checktable

dbcc reindex 成功完成后,将删除表索引上的所有“可疑”标记。表上 的“只读”标记也将被删除,而且可以对表进行更新。无论是否必须重 建任何索引,这些标记都将删除。

dbcc reindex 不会为系统表重建索引。如果有必要,在排序顺序更改后重 新启动 Adaptive Server,然后作为恢复操作的一个自动执行的部分检查 并重建系统索引。


更改字符集之后升级 text 数据

如果已将 Adaptive Server 字符集更改为多字节字符集,请使用 dbcc fix_text 升级 text 值。

text 值可以大到占据多页;因此,Adaptive Server 必须能够处理跨越页边 界的字符。为此,Adaptive Server 需要有关每个 text 页的额外信息。系 统管理员或表所有者必须在每个包含 text 数据的表上运行 dbcc fix_text, 以计算所需的新值。

若要查看所有包含 text 数据的表的名称,请使用:

select sysobjects.name

from sysobjects, syscolumns where syscolumns.type = 35

and sysobjects.id = syscolumns.id 系统管理员或表所有者必须运行 dbcc fix_text 来计算所需的新值。 dbcc fix_text 的语法是:

dbcc fix_text (table_name | table_id)

命名的表必须在当前数据库中。


dbcc fix_text 打开指定的表,计算每个 text 值所需的字符统计信息,并将 这些统计信息添加到相应的页标头字段中。此过程可能需要很长的时间, 具体情况取决于表中 text 值的数量和大小。dbcc fix_text 可能会生成大量 的日志记录,这些记录可能会填满事务日志。dbcc fix_text 以一系列小事 务的形式执行更新,这样,如果日志已满,则只会丢失少量的工作。

如果日志空间已用完,请清理日志(请参见《系统管理指南,卷 2》中 的第 12 章“备份和恢复用户数据库”)。然后,重新启动 dbcc fix_text, 使用原来的 dbcc fix_text 停止时所升级的同一个表。每个多字节文本值均 包含表示其是否已升级的信息,所以 dbcc fix_text 只升级在以前的处理过 程中未处理的 text 值。

如果数据库将其日志存储在单独的段上,可以使用阈值来管理日志的清 除。请参见《系统管理指南,卷 2》中的第 16 章“使用阈值管理可用 空间”。

如果 dbcc fix_text 在文本页上不能获得所需的锁,则将报告问题并继续工 作,如下所示:

Unable to acquire an exclusive lock on text page 408. This text value has not been recalculated.In order to recalculate those TEXT pages you must release the lock and reissue the dbcc fix_text command.


在更改字符集后,检索 text

如果在更改为多字节字符集后试图检索 text 值,且尚未运行 dbcc fix_text, 则命令将失败并出现以下错误消息:

Adaptive Server is now running a multi-byte character set, and this TEXT columns character counts have not been recalculated using this character set.Use dbcc fix_text before running this query again.

如果更改了排序顺序或字符集,并且出现了错误,请参见《Adaptive Server Enterprise 故障排除和错误消息指南》中的“如何手动更改排序顺 序或缺省字符集”。


处理可疑分区


将出现以下两个原因将分区标记为可疑:

域分区表上的排序顺序或字符集更改

包含散列分区表的跨平台转储和装载


如果表标记为具有可疑分区:

此表上的所有更新和游标活动将挂起。

不允许使用 alter table 命令(partition by 除外)。不允许对具有可疑 分区的表使用 create index drop index

允许对包含可疑分区的表使用 select 命令。但是,优化程序将此类 表视为循环分区表,以避免使用可能损坏的分区条件。


修复具有可疑分区的表

如果分区条件需要在排序顺序更改后修复,则可以使用带 partition by

选项的 alter table 对具有可疑分区的表重新分区。

如果分区条件不需要修复,则可以使用 reorg rebuild table 命令重建该 表,同时仅在分区之间重新分配数据行。

如果表上的索引以及分区均标记为可疑,请使用 partition by reorg rebuild 同时修复可疑索引和可疑分区。


在跨平台转储和装载操作中处理可疑分区

在跨两个字节顺序类型不同的平台执行 load database 后,首次执行

online database 命令的过程中,散列分区被标记为可疑分区。

循环分区(已使用 unichar varchar 分区键在内部生成分区条件) 上的任何全局聚簇索引都会被标记为可疑索引。

数据库联机后,使用 sp_post_xpload 可修复可疑分区和索引。




--------------------------------------华丽的分割线-------------------------------------------------------------------------
之前就已经研发成功了能够从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等等。
+-------------------------------------华丽的分割线-------------------------------------------------------------------------