SYBASE常见问题(摘自互联网)

来源:互联网 发布:淘宝网外衣 编辑:程序博客网 时间:2024/04/30 02:04
行走在程序的世界里, 在代码的行间寻找你......


SYBASE常见问题
1.在运行安装程序时提示碰到找不到JAVA 虚拟机,在安装客户端时我碰到过
   解决方法:由于SETUP.EXE 可以带参数,所以可以在当前目录建一个Setup.bat 批处理文件,内容如下:setup -is:javahome C:"javasoft"Sun"j2eesdk1.4_beta2"jdk"jre
或者直接在命令行运行


2。如果需要以ADO 方式连接数据库
   SYABSE CLIENT 12.5 包含一个比较新的ADO OLE 驱动,选择自定义安装,选中即可


3. SYABSE SERVER端安装,如果安装时不想立即配置数据库,从菜单里选择【开始】-【程序】-【SYBASE】-【服务器配置】 报错 Invalid Command line argument ‘and ‘. 
 这是SYBASE SERVER安装时的一的BUG,如果出现了报错,一般配置SERVER不会成功,可以从安装目录进去,缺省目录 C:"SYBASE"ASE-12_5"BIN"SYCONFIG.EXE


4. 默认错误日志路径,C:"SYBASE"ASE-12_5"INSTALL


5. 如果服务启动报错,或提示服务已经启动,其实你的服务没有启动
a. 这时可能由于你启动过配置工具,当服务没有启动时,启动配置工具连接服务器,配置工具好像会尝试以单用户方式启动,你可以通过命令行检测一下,ISQL –Usa –Psa_password –Syourserver 登录,如果能登录,说明是的,这时你输入SHUTDOWN可以结束服务,然后再重启服务
b. 还有可能服务正在关闭中,你性子比较急,那么请你稍候,没事干的话,你可以在那儿点击鼠标按钮刷新WINDOWS服务列表,稍候一会再重启服务
c. 如果以上情况都不是,请删除C:"SYBASE"ASE-12_5" 的一个.KRG文件,文件名一般是你的数据库服务名, 只有服务启动,就会产山这样一个文件,如果服务终止就会自动删除这个文件,如果非正常终止,这个文件可能就会得不到正常处理,手动删掉之候,再启动服务


6. 字符集设置,排序规则设置
为了支持多语言,请把服务器设置为UTF8,如果不希望大小些敏感,可以设为不区分大小写,一旦数据有了数据,是不允许修改排序规则的,字符集的修改也会导致数据库中的数据变成乱码, 请在数据库安装的时候就设置好
a.默认UTF8是没有安装的,具体安装方法如下:


c:">cd "sybase"charsets"UTF8


c:"sybase"charsets"UTF8> charset -Usa -Psa_pass -Sserver_name nocase.srt Utf8
b.安装成功后.在SQL环境中


>select name,id from syscharsets


>go


找到name为utf8对应的id(假设为190 ,utf8_nocase 为101)


设置缺省字符集
>sp_configure "default character set id",190


>go
设置缺省排序规则
>sp_configure “default sortorder id “,101
>go
重启服务器
在a.UTF8安装好之后也可以直接通过服务器配置工具配置语言,注意,先选择语言UTF8保存,然后再选择排序规则,这时候排序规则可选的只有两项与UTF8相关的了,选择NO CASE 的那一个, 如果不先保存语言设置,排序规则好像没有立即刷新
 
注意:如果你需要安装不区分大小写的UTF8直接参照如上步骤,如果你开始希望选择UTF8二进制的,那么c:"sybase"charsets"UTF8> charset -Usa -Psa_pass -Sserver_name binary.srt Utf8
这时你设置排序为101就不会起作用,如果你覆盖安装charset -Usa -Psa_pass -Sserver_name nocase.srt Utf8 也不行,我昨天就是碰到这个情况,后来重装的


7. 为数据库分配最大内存
   默认是动态内存,为你的数据库分配最大内存后,数据库启动后优先申请固定内存,从而保证数据库性能。 不要超过物理内存的3/4 (估计值) 这个可以根据实际情况估计一下,如果你只作SYBASE SERVER可以大一点,如果有多个应用,就少一点,更重要的是,WINDOWS系统启动之后的剩余内存小于如果你分配的内存,那么系统服务将申请内存失败,启动不了
   sp_configure "max memory ",256m


8. SYBASE SERVER12.0 与SYBASE CLIENT12.5 安装冲突
当你在已经安装了SYBASE Server12.0 的机器上安装SYBASE Client 12.5 那么[恭喜你],你的SYBASE 将起不来了,解决方法如下
原因是:由于12.5的CLIENT默认安装的JAVA虚拟机版本跟SERVER12.0 不一样,并且把他加到WINDOWS环境变量里去了。具体解决办法,在WIDNOWS环境变量里把SYBASE CLIENT的与JRE相关的环境变量去掉(记下来),特别注意的是SYBASE这个环境变量,CLIENT安装之后,就指向CLIENT端安装目录了,把他改为SERVER端安装目录,然后重启,这样的结果是SERVER可启动了,但CLIENT 的JAVA CENTER启动不了了,JAVA CENTER 启动是通过C:"sybase"client"sybcent41"bin"scjview.bat 批处理文件启动的,可以直接这个批处理文件,把刚刚记下来的环境变量CLIENT的设置直接添加到BAT处理文件中去,批处理文件中读取环境变量的地方替换成刚刚记下的目录.
结论:a. 除非必要,不建议在一台机器上同时安装SERVER和CLIENT
        b. 如果同时,安装请安装在不同目录
      c. 在安装好SERVER端后,请保存好当前SERVER的环境变量,然后再安装CLIENT端,
      d. 修改批处理文件前,如果不了解批处理,请先了解一下批处理的一些基本命令


9. 数据库设备
a. 创建数据库前,必须先创建数据库设备


 b. 建立数据库时必须先选择数据库设备,请把日志和数据分开存放,有利与数据库的备份与恢复
c. 建立系统设备,为系统存储过程和临时表扩容, 因为大量数据库查询操作时,统统利用临时表缓存的


10. 数据库的备份与恢复
. 首先启动数据库备份服务
. dump database database_name to “c:" database_name.bak”
 load database database_name from “c:" database_name.bak”
 另外在转储的时候,可以截断日志然后再备份,以减少文件大小
 一些常用命令如下:
 对整个数据库进行转储
 dump database
 对日志进行转储
 dump transaction 
 数据库发生设备故障后转储事务日志
 dump transaction with no_truncate 
 截断日志不备份,然后复制整个数据库
 dump transaction with truncate_only
 dump database
 因为日志空间不足,导致通常方法失败后,截断日志,然后复制真格数据库
 dump transaction with no_log
 dump database
 更详细的命令可以参考SYBASE手册,其官方网站上有


11. 数据的转储与恢复


数据导入还可以用SYBASE 的BCP程序来完成。在SYBASE 端添加一个SERVER,指向SQL SERVER 的地址和端口。然后用


bcp database_name.owner.table_name out datafile_name -c -t'|' -Usa -Ppwd -Ssqlsrv -b5000


可以将SQL SERVER的表table_name的数据导出成文本格式的文件。然后用


bcp database_name.owner.table_name in datafile_name -c -t'|' -Usa -Ppwd -Ssybsrv -b5000
参数说明: b 表示每5000 行写日志,如果没有这个参数,数据量很大时,会频繁写日志,会导致日志空间很快用完
         t 指定制表符,当数据库里有中文时,如果不用制表符会出现导不进去的情况


12 客户端查询管理器乱码
   修改安装目录"locals"locals.dat 查找[NT] 项的最后一行
locale = default, us_english, iso_1 改为
locale = default, us_english, utf8 即可


13.当客户端启用了utf8后,有些中文字符插入不进数据库
可能是由于SYBASE 与微软操作系统在UTF8之间的兼容性问题,SYBASE没有给与解决办法, 可以通过补空格的方法
另外如果只有中文,可以设为CP936,或者默认ISO_1 
当然,如果你不用考虑服务器支持多语言字符集,服务器也是CP936最彻底了


14. CLIENT CENTRAL 的好处
 可以直接浏览数据表的数据
 可以直接查看VIEW的脚本,不过好像有BUG,如果你包含中文或者注释行,显示有时将会碰到问题,没关系,你可以通过SP_HELPTEXT YOUR_VIEW 得到视图的脚本,还可以通过GERERATE DDL看到脚本


15 查询管理器 SQL ADVANTAGE
 不用也吧,JAVA写的,显示极慢,如果你有的耐性的话可以使用,否则可选择第三方的工具,推荐一个Embarcadero DBArtisan 7.2.1 ,可以支持多种数据库


16 命令查询表属性的几个系统存储过程
sp_helptext
sp_columsn
sp_tables
sp_who
等等,对MSSQLSERVER适用(MSSQLSERVER下用不着,无论企业管理器,还是查询管理都很好用),当然,如果你有了Embarcadero DBArtisan 你就可以抛弃CLIENT CENTRAL 和SQL ADVANTAGE 这个两个又占资源又其慢的东西,也不需要用这几个系统存储过程


17. 关于ADO OLE使用的注意
a. 先选择正确的驱动


b. 切换到最后一页,填写SERVER NAME 和端口, 默认端口5000, (关键点:一般驱动是不需要切换到这个业签来的,第一次使用SYBASE OLE 驱动可能碰到这个问题)




c. 输入用户名,密码,选择数据库,当然这些也可以在上面的页面页,然后再返回这个页面测试连接 (反正要回来,还不如直接在这个页面修改)


18 .关于日志的一些注意事项(转摘)
细说SYBASE数据库日志 作者:佚名


 我们知道,SYBASE SQL Server用事务(Transaction)来跟踪所有数据库的变化。事务是SQL Server的工作单元。一个事务包含一条或多条作为整体执行的T-SQL语句。每个数据库都有自己的事务日志(Transaction Log),即系统表(Syslogs)。事务日志自动记录每个用户发出的每个事务。日志对于数据库的数据安全性、完整性至关重要,我们进行数据库开发和维护必须熟知日志的相关知识。


  一、SYBASE SQL Server 如何记录和读取日志信息


  SYBASE SQL Server是先记Log的机制。每当用户执行将修改数据库的语句时,SQL Server就会自动地把变化写入日志。一条语句所产生的所有变化都被记录到日志后,它们就被写到数据页在缓冲区的拷贝里。该数据页保存在缓冲区中,直到别的数据页需要该内存时,该数据页才被写到磁盘上。若事务中的某条语句没能完成,SQL Server将回滚事务产生的所有变化。这样就保证了整个数据库系统的一致性和完整性。


  二、日志设备


  Log和数据库的Data一样,需要存放在数据库设备上,可以将Log和Data存放在同一设备上,也可以分开存放。一般来说,应该将一个数据库的Data和Log存放在不同的数据库设备上。这样做有如下好处:一是可以单独地备份Backup事务日志;二是防止数据库溢满;三是可以看到Log的空间使用情况。


  所建Log设备的大小,没有十分精确的方法来确定。一般来说,对于新建的数据库,Log的大小应为数据库大小的30%左右。Log的大小还取决于数据库修改的频繁程度。如果数据库修改频繁,则Log的增长十分迅速。所以说Log空间大小依赖于用户是如何使用数据库的。此外,还有其它因素影响Log大小,我们应该根据实际操作情况估计Log大小,并间隔一段时间就对Log进行备份和清除。


  三、日志的清除


  随着数据库的使用,数据库的Log是不断增长的,必须在它占满空间之前将它们清除掉。清除Log有两种方法:


  1.自动清除法


  开放数据库选项 Trunc Log on Chkpt,使数据库系统每隔一段时间自动清除Log。此方法的优点是无须人工干预,由SQL Server自动执行,并且一般不会出现Log溢满的情况;缺点是只清除Log而不做备份。


  2.手动清除法


  执行命令“dump transaction”来清除Log。以下两条命令都可以清除日志:


dump transaction with truncate_only


dump transaction with no_log


  通常删除事务日志中不活跃的部分可使用“dump transaction with trancate_only”命令,这条命令写进事务日志时,还要做必要的并发性检查。SYBASE提供“dump transaction with no_log”来处理某些非常紧迫的情况,使用这条命令有很大的危险性,SQL Server会弹出一条警告信息。为了尽量确保数据库的一致性,你应将它作为“最后一招”。


  以上两种方法只是清除日志,而不做日志备份,若想备份日志,应执行“dump transaction database_name to dumpdevice”命令。


  四、管理庞大的事务


  有些操作会大批量地修改数据,如大量数据的修改(Update)、删除一个表的所有数据(Delete)、大量数据的插入(Insert),这样会使Log增长速度很快,有溢满的危险。下面笔者给大家介绍一下如何拆分大事务,以避免日志的溢满。


  例如执行“update tab_a set col_a=0”命令时,若表tab_a很大,则此Update动作在未完成之前就可能使Log溢满,引起1105错误(Log Full),而且执行这种大的事务所产生的独占锁(Exclusive Table Lock),会阻止其他用户在执行Update操作期间修改这个表,这就有可能引起死锁。为避免这些情况发生,我们可以把这个大的事务分成几个小的事务,并执行“dump transaction”动作。


  上例中的情况就可以分成两个或多个小的事务:


update tab_a set col_a=0 where col_b>x


go


dump transaction database_name with truncate_only


go


update tab_a set col_a=0 where col_b <=x


go


dump transaction database_name with truncate_only


go


  这样,一个大的事务就被分成两个较小的事务。


  按照上述方法可以根据需要任意拆分大的事务。若这个事务需要备份到介质上,则不用“with truncate_only”选项。若执行“dump transaction with truncate_only”命令,应该先执行“dump database”。以此类推,我们可以对表删除、表插入等大事务做相应的拆分。
0 0
原创粉丝点击