Sybase 常见问题解答
1.1 Windows无法安装 ASE:窗口一闪而过... 2
1.3 Windows无法新建 adaptive server 2
1.5 ASE 安装过程中,安装程序一直停留在初始化数据库这一步,无法继续... 3
1.6 Windows覆盖补丁时,提示有个别文件无法覆盖... 3
1.7 安装sybase ha,当运行insthasv以安装HA存储过程时出错,提示ha service not enable 3
2.1 Windows添加新设备,一点浏览按钮,则会自动退出应用程序... 3
2.4 Sybase11.9升级到Sybase12.5后应用程序不能登陆... 4
2.7 如何把Sybase HA的某一个服务关闭,但又不会变成failover模式... 5
2.8 ASE 12.5.0 安装完后,从“开始”菜单运行配置工具时报错,错误信息:“Invalid command line argument 'and'.” 6
2.9 Windows2003上,ASE 12.5不能从服务启动... 6
2.10 利用 Windows 任务计划自动备份数据库... 6
2.11 新安装ASE或新建服务后,客户端无法连接服务器... 8
2.15 如何删除tempdb数据库在master设备上的记录?... 10
2.17 如果不小心直接删除了日志的设备文件,如何恢复数据库?... 11
3.2 jConnect 中 Statemnt 的注意事项... 15
3.3 jConnect 与 Scrollable Cursor 16
3.4 理解 SET CHAINED command not allowed within multi-statement transaction. 16
4.6 如何让Sybase服务在系统启动时自动启动?... 21
4.10 在 RedHat 9 上运行 ASE 12.5.x. 26
5 Sybase 发行版本(Release)术语... 26
[@more@]1 安装
1.1 Windows无法安装 ASE:窗口一闪而过
当出现此问题时,可以明确两点:其一,ASE 版本为 12.5.0;其二、硬件为 PIV 以上。这源于 ASE 12.5.0 安装程序所带的 JRE 的 JIT (Just-In-Time)实时编译器在 PIV 下存在 Bug。 解决方法: 方法一:使用命令行窗口,先 set JAVA_COMPILER=NONE,然后再运行安装程序; 方法二:删除或重命名 ASE 安装目录下的 shared-1_0jre1.2.2insymcjit.dll 文件; 方法三:打 JRE 1.2.2 的补丁。 需要注意的是:在安装完后,仍需按以上方法对已安装的系统进行修改。
1.2 Windows安装界面乱码
分析及解决办法:修改安装盘的文件名
如果是win2000,复制font.properties.zh为font.properties.zh.NT5.0如果是win2003,复制font.properties.zh为font.properties.zh.NT5.2如果是winxp,复制font.properties.zh为font.properties.zh.NT5.1
1.3 Windows无法新建 adaptive server
分析及解决办法:
必须要在服务器端建库,不能通过远程桌面。
1.4 Windows安装库后服务无法启动
分析及解决办法:服务中的机器名要写全(带域名)
1.5 ASE 安装过程中,安装程序一直停留在初始化数据库这一步,无法继续
这是一个莫明其妙的 bug,在初始化库的过程中,tempdb 满了! 解决方法:
此时,ASE 服务实际已经启动,因此,可以通过 isql 登录,然后修改 tempdb 的大小:
1. 在命令行下键入以下命令,注意斜体部份用实际服务名代替:
c:>isql -Usa -S 服务名
2. 键入下面下划线的命令:
1> alter database tempdb on master ="2M"
2> go
1.6 Windows覆盖补丁时,提示有个别文件无法覆盖
分析及解决办法:一点一点地覆盖,提示不能覆盖的文件,则把目标文件改名后再覆盖。
1.7 安装sybase ha,当运行insthasv以安装HA存储过程时出错,提示ha service not enable
分析及解决办法:尝试运行sp_configure ‘enable HA’ ,1 重新启动数据库服务,依然报同样的错误;查看日志文件,发现是没有HA的license,于是在“Sybase 软件资产管理 (SySAM)”中输入用户提供的license,还是报同样的错。估计用户购买的sybase12.5,没有HA的LICENSE
2 维护
2.1 Windows添加新设备,一点浏览按钮,则会自动退出应用程序
分析及解决办法:不要点击浏览按钮,直接输入设备文件和路径
2.2 使用工具查询数据库数据时,显示乱码
分析及解决办法:客户端与服务器端字符集不匹配。修改..Sybaselocaleslocales.dat文件,使用写字板打开该文件,修改windows系统下的字符集,将所有iso_1修改为cp850。包括dos,nt,win32等所有windows的系统。
2.3 应用程序管理端不能登陆
分析及解决办法:sa 密码不能为空
2.4 Sybase11.9升级到Sybase12.5后应用程序不能登陆
分析及解决办法:
--导出登陆用户
由于Sybase11.9.2的syslogins表比版本12.5 的syslogins表少两个字段,为了保证Bcp正确执行,在原数据库建立一个比syslogins多两个字段的临时表,再进行Bcp的导入和导出。
例:
* 在原数据库上运行
>select *, convert(int,null) as logincount, convert(int,null) as procid into tempdb..mysyslogins from master..syslogins
bcp tempdb..mysyslogins out mysyslogins -e mysyslogins.out -c -Usa –Sganggao
--在新数据库运行,打开允许更新系统表开关
sp_configure "allow updates to system tables",1
--在新数据库运行,导入登陆用户
bcp master..syslogins in mysyslogins -e mysyslogins.in -c -b1 -Usa -Ssybase152
--在新数据库运行,关闭允许更新系统表开关
sp_configure "allow updates to system tables",0
--更改数据库的登陆用户
use addb
go
sp_changedbowner dbgg_dbo
go
2.5 Sybase HA故障切换及故障恢复方法
1.如果要isql在故障切换和恢复时不会数据开,isql登陆时必须要加-Q参数
如:isql –Usa –P –Q –Snfsyb_1
2.故障切换模拟
在“群集管理器”中,移动相应的sybase资源组
如:如果想把nfsyb_1实例中的数据库切换到nfsyb_2中,则移动组nfsyb_1_grp
3.故障恢复模拟
在“群集管理器”中,移动相应的sybase资源组
如:如果想把已切换到nfsyb_2实例中的nfsyb_1实例数据库恢复到nfsyb_1中,则移动组nfsyb_1_grp;或者登陆到nfsyb_2中,输入命令: sp_companion “NFSYB_1”,prepare_failback
4.查看HA 状态命令
sp_companion
2.6 如何把Sybase HA变成挂起模式
如:想把nfsyb_2和nfsyb_1由常规协同模式变成挂起模式,则登陆nfsyb_2,输入sp_companion “NFSYB_1”,suspend 如果想恢复则登陆nfsyb_2,输入sp_companion “NFSYB_1”,resume
2.7 如何把Sybase HA的某一个服务关闭,但又不会变成failover模式
如果想把其中一个sybase实例关闭,必须采用把资源组脱机的方法,如果用shutdown命令,可能会发生资源组移动。把资源组联机以后,会自动变成常规协同模式
@@cmpstate 协同模式
0 单服务器
1 保留
2 辅助常规
3 辅助挂起
4 辅助故障切换
5 辅助故障恢复
6 保留
7 主常规
8 主挂起
9 主故障恢复
10 保留
11 对称常规
12 对称故障切换
13 对称挂起
14 对称故障恢复
15 保留
2.8 ASE 12.5.0 安装完后,从“开始”菜单运行配置工具时报错,错误信息:“Invalid command line argument 'and'.”
解决办法:从命令行启动 syconfig。
2.9 Windows2003上,ASE 12.5不能从服务启动
遇上此问题的,ASE 版本显然是 12.5.0。Windows 2003 修改了服务接口,而 ASE 12.5.0 先于 Windows 2003 发布。 解决办法:安装 EBF 11449,即可解决问题。 注:Sybase 只提供 ASE 12.5 + 以上版本号对 Windows 2003 的认证。12.5 之前的版本不支持通过 Windows 2003 的服务启动,可通过命令行手工启动,或采用 Service Any。
_安装_ASE_时,提示">2.10 利用 Windows 任务计划自动备份数据库
对于一些小型企业,预算有限,可能无法购买价格高昂的商业化备份软件,手工备份又太烦琐,易忘。其实使用 Windows 自身的任务计划可以很好地解决问题。
REM @ECHO OFF
REM 检查参数
IF "%1" == "" GOTO displayUsage
IF "%2" == "" GOTO displayUsage
IF "%3" == "" GOTO displayUsage
IF "%4" == "" GOTO displayUsage
REM 取系统日期
REM for windows2000
SET day=%DATE:~-10%
REM for windows xp/2003
REM SET day=%DATE:~0,10%
REM 取当前完整时间,将:号改为_
SET currentTime=%TIME::=_%
SET currentTime=%currentTime: =0%
REM 设置备份路径
REM 此备份目录必须手工设定,并且事先创建好。
SET localBackupDir=C:dbbackup
SET remoteBackupDir=D:RemoteBackup
REM 设置备份服务器
REM 设置本地日志路径,日志只能存放于本地!
SET defaultBackupServer=SYB_BACKUP
IF "%5" == "" (
SET backupServer=
SET logDir=%defaultBackupServer%
SET backupDir=%localBackupDir%
) ELSE (
SET backupServer=at %5
SET logDir=%5
SET backupDir=%remoteBackupDir%
)
IF NOT EXIST %logDir% mkdir %logDir%
REM 设置备份文件名,格式:数据库服务名.数据库名.日期.时间.dmp
SET filenamePrefix=%1.%4.%day%.%currenttime%
SET dmpFile=%backupDir%%filenamePrefix%.dmp
REM 临时SQL文件名
SET sqlFile=%1.%4.dump.sql
REM 日志文件
SET logFile=%logDir%%filenamePrefix%.log
REM 产生临时SQL文件
echo dump database %4 to '%dmpFile%' %backupserver% >%sqlfile%
echo go >>%sqlfile%
REM 备份
isql -S%1 -U%2 -P%3 -i%sqlfile% -o%logfile%
ECHO 备份完成,请检查日志文件%logFile%。
GOTO finished
:displayUsage
ECHO 用法:
ECHO %0 service user password databasename [backupserver]
ECHO service : Sybase 服务名
ECHO user : 用户名
ECHO password : 用户密码
ECHO databasename : 数据库名
ECHO backupserver : 备份服务器名,可选
ECHO
ECHO 必须手工设置备份目录,并事先创建好!
ECHO 日志目录将建在当前运行目录下
ECHO 备份文件名格式:
ECHO <服务名>.<数据库>.<日期>.<时间>.dmp
:finished
将以上脚本另存为 BAT 文件,并修改相应的备份目录。然后创建任务,调用 BAT 文件,调用形式参考脚本。
_Sybase_">2.11 新安装ASE或新建服务后,客户端无法连接服务器
在安装完 ASE 或新建服务后,服务器上能使用 dsedit 连接数据库服务,但客户端无法连接。
通常的原因是数据库服务绑定了 127.0.0.1,使用 dsedit,或直接修改 interfaces 文件,绑定确实的 IP 即可。
通常,这是由于 ASE 安装/服务初始化程序的 BUG 导致的。在创建服务时,ASE 会创建一个名为类似 XXXX_BS 的备份服务,同时会在 master..sysservers 中插入一条对应记录。以服务名 FLYBAEN 为例,下面是 interfaces 文件和 sysservers 中的记录:
interfaces 文件内容:
FLYBEAN_BS
master tcp ether FLYBEAN_LINUX 5001
query tcp ether FLYBEAN_LINUX 5001
sysservers 的记录:(select srvname, srvnetname from sysservers where srvname='SYB_BACKUP')
srvname srvnetname
------------------------------ --------------------------------
SYB_BACKUP FLYBEAN_BS
通常默认的备份服务器就是 SYB_BACKUP 。在 load/dump 时,ASE 通过 sysservers 获取备份服务器对应 interfaces 的信息,然后在 interfaces 文件中搜索该服务的实际位置(IP和端口)。在此例中,ASE 通过 sysservers 得到 interfaces 中的服务名为 FLYBEAN_BS,然后在interfaces 中获取该服务的物理信息。如果 ASE 无法通过 sysservers 中的 srvnetname 在 interfaces 中获取相关信息,则会报上面的错误。 那么解决办法就是非常简单的。 方法一:修改 interfaces 文件,将服务名改为 sysservers.srvnetname 对应的值; 方法二:修改 sysservers 中相应记录的 srvnetname 的值为 interfaces 文件中的服务名。
2.12 如何配置异地备份?
自 12.5.0(12.0是否支持待确认) 开始,ASE 支持异地备份,具体方法举例如下: 假设两台 ASE 数据库服务器,分别为 A 和 B,数据库服务分别为: SRV_A, SRV_A_BS; SRV_B, SRV_B_S 。我们要把 B 上的数据库 DB_1 备份到 A 上。 1. 修改 B 上的 interfaces 文件,增加 SRV_A_BS 的配置,如:
SRV_A_BS
master tcp ether A BS_PORT
query tcp ether A BS_PORT
2.用 isql 登录 SRV_B,为 SRV_B 增加一个远程服务:SRV_A_BS sp_addserver "SRV_A_BS",null,"SRV_A_BS" 3.测试:
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10190/viewspace-966508/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10190/viewspace-966508/