Sybase Sql Server 技术问答
目 录
- 1. 在SQL Server中表大小是否有限制?
- 2.SQL Server能否通过编程调用C函数?
- 3.一旦客户突然退出或系统重启,SQL Server如何回滚事务?
- 4.为什么有时候数据库事务日志满了,使用Dump transaction with no-log 仍不能截断 日志?
- 5.即使表上没有建立索引,为什么BCP操作仍记日志?
- 6.如何配置SQL Server来做远程备份?
- 7.能否使用系统10的Backup Server备份SQL Server 11的数据库?
- 8.如何配置SQL Server 11,使得快速BCP具有更好的性能?
- 9.在一个存储过程中,建立一张临时表,用于存放中间结果,在isql中, 执行该存储过程,非常正常。可是,在PowerBuilder中,调用此存储过程, 应用出错,为什么?
- 10.SQL Server 11能和什么版本的SQL MONITOR兼容?
- 11.什么是“pbcat"表?
- 12.如果在isql中建立表或者增加表字段或者删除表,那么能 否通过在DB Painter中连接数据库,或者浏览数据,来自动修改pbcat修改系统表?如 果不能,怎么做?
在系统11之前的SQL Server各版中,每张表只能有65535个分配页面。现在,
SQL Server 11就没有这种情况,只有表所在数据库大小的限制,而数据库大小只
受硬盘资源的限制。实际上,表大小几乎没有限制。
2.SQL Server能否通过编程调用C函数?
SQL Server提供用户T-SQL语言,来编写在服务器端运行的程序,主要是编写
存贮过程和触发器。在T-SQL语言中,不提供直接调用外部函数的机制,其主要原
因是如果用户外部函数出错或者失败,可能会导致SQL Server死机,数据库系统崩
溃。这样SQL Server运行不稳定,系统安全性差。Sybase公司采取其他的办法来实现 服务器调用外部函数,以此满足扩展其功能的需求,那就是开放的,功能强大的服 务器编程接口--Open Server。
Open Server是一套服务器编程接口,它可以同外部函数或者各种功能例程混 合编程,开发一个满足用户需求的服务器。Sybase Open Client能和连接SQL Server一
样,与Open Server通讯,Open Server和SQL Server之间交换数据。总之,采用这
种开放的,组合式结构,实现C函数调用,比服务器直接调用外部函数,要安全、灵
活,可靠。
3.一旦客户突然退出或系统重启,SQL Server如何回滚事务?
当客户端退出注册或者突然死机,SQL Server应回滚客户端送来的,但未提 交的事务。
对于Unix和VMS客户端,其操作系统会通知SQL Server它的连接已丢失,
SQL Server然后回退未提交的数据库事务。而对于PC客户端,如果TCP IP Keepalive
被设置成允许状态,它定期地检查网络端口是否存活,一旦网络连接断开,SQL Server就被通知到,它便回退未提交事务。但是,如果Keepalive被关闭,SQL Server将等待客户端的联络。服务器线索便无期限地处于发送或者接收睡眠状态。 那么,未提交事务直到下次重新启动服务器时,才能被回退。
4.为什么有时候数据库事务日志满了,使用Dump transaction with no-log仍不能截断?
日志?
有两种情况,可能出现这个问题。一是应用系统给SQL Server发送了一 个用户自定义事务,一直未提交,这个最早活跃事务阻碍系统截断日志。二是 客户端向SQL Server发送了一个修改数量大的事务,清日志时,该事务还正在 执行之中,此事务所涉及的日志只能等到事务结束后,才能被截掉。
对于第一种情况,只要督促用户退出应用或者提交事务,系统管理员便可 清掉日志。因为给SQL Server发送Dump transaction with no-log或者with truncate-only,它截掉事务日志的非活跃部分。所谓非活跃部分是指服务器 检查点之间的所有已提交或回退的事务。而从最早的未提交的事务到最近的日 志记录之间的事务日志记录被称为活跃的。从此可以看明,打开的事务能致使 日志上涨,因为在最早活跃事务之后的日志不能被截除。
对于第二种情况,道理也同上。只是在处理它时,需慎重从事。如果这个 大事务已运行较长时间,应尽量想法扩大数据库日志空间,保证该事务正常结 束。若该事务被强行回滚,SQL Server需要做大量的处理工作,往往是正向 执行时间的几倍,系统恢复时间长,可能会影响正常使用的时间。
5.即使表上没有建立索引,为什么BCP操作仍记日志?
虽然表上没有索引,服务器执行快速BCP,BCP往表里加载数据仍有可能 使日志表溢出,这是因为BCP需要记录页面空间分配日志。如果表上没有索引, 并且数据库选项“select into/bulk copy”被置成true, 服务器就不给新加载的 记录记日志。
另外,如果表上有索引和触发器,那么BCP是慢速的。
6.如何配置SQL Server来做远程备份?
在本地机器上:
(1).本地SQL Server和Backup Server能运行。
(2).在本地的Interfaces文件中,增加远程机器上的Backup Server名称,只需“Quary”
行,不允许使用别名(aliases)。
请注意:在网络上每个Backup Server必须有一个唯一的名字,这个名字必须在 Interfaces文件之中,用户可以通过查看服务器运行文件来检查它,它的选项是-S(unix) 或者/Server(VMS)。
(3).执行存储过程SP-helpServer SYB_BACKUP确认本地Backup Server具有正确的 网络名称。
远程Backup Server不一定非要在系统表Syservers中有一条记录不可,但是有它便于 测试。 请注意:不要修改SYB_BACKUP,使它指向远程Backup Server名字。在远程机器上:
(1).确认远程Backup Server正在运行。
(2).确认远程Backup Server有与本地Backup Server不同的网络名字。 请注意:在远程机器上的Interfaces文件中,必须包含远程Backup Server的定义 记录,但是它不需其他Backup Server的定义。
7.能否使用系统10的Backup Server备份SQL Server 11的数据库?
不能,SQL Server 11不能与系统10的Backup Server一起工作,但系统11的
Backup Server可以和SQL Server 10兼容。另外,不同版本的Bakcup Server相互
兼容,甚至可以在不同版本的Backup Server之间做远程备份。
8.如何配置SQL Server 11,使得快速BCP具有更好的性能?
有几种方法可以改善BCP的性能:
(1)增加扩展分配(extent allocation)。缺省情况下,预分配2到31个扩展。在一个BCP批 次中,未使用的预分配扩展被释放。为了获得最佳BCP性能,设置BCP批次大小和 “number of preallocated extents”预分配扩展个数,以消除空间重新释放。
使用Sp_config number of pre-allocated exetents,nn
对于系统10:buildmaster -ycpreallocext=nn
(2)对表进行分区
(3)配置OAM页面的缓冲策略,以减少对OAM(Object Allocation Map)页面的物理读。
(4)配置大I/O的缓冲池,例如16K: Sp-poolconfig default, "16K" (5)使用-A标记,加大网络包大小: bcp -A 16384
9.在一个存储过程中,建立一张临时表,用于存放中间结果,在isql中,执行该存储 过程,非常正常。可是,在PowerBuilder中,调用此存储过程,应用出错,为什么?
T-SQL允许在存储过程中,建立临时表,但是不允许在用户自定义事务中, 创建临时表。如果让我们了解一下PowerBuilder的事务处理机制,那么该问题的 答案便一目了然。 PowerBuilder使用事务控制结构,例如SQLCA,连接数据库服务器SQL Server,事务控制结构有一个成员AUTOCOMMIT用于控制数据库操作事务。 AUTOCOMMIT是布尔类型,缺省情况下,其值为FALSE。当其值为FALSE时, 应用应该使用PowerBuilder的事务管理命令CONNECT,COMMIT,和 DISCONNECT编写用户自定义事务。PowerBuilder发给服务器的T-SQL命令全 部都是用户自定义事务。因此,这种情况下,执行建临时表的存储过程,应用 出错。 如果将事务控制结构的AUTOCOMMIT置为TRUE,则PowerBuilder不对 事务进行管理,只是将SQL语句送给服务器。SQL Server缺省情况下,除非用 户自己定义事务,否则每条修改语句是一个事务。这种情况下,应用需要定义事 务,就直接把“begin transaction”和“commit”语句,送给SQL Server。 所以,在PowerBuilder中,要正确执行建临时的存储过程,在调用之前, 将AUTOCOMMIT置成TRUE,那么该存储过程就不在用户自定义事务中,和在 isql中测试一样,运行不会出错。 和这类似的情况还有,在PowerBuildr中,执行DDL命令,例如:建表, 或者索引等等,都和AUTOCOMMIT有关。
10.SQL Server 11能和什么版本的SQL MONITOR兼容?
SQL Server 11需要SQL Monitor 11,SQL Server 10不能和SQL Server 11兼容。此外,SQL Server 11有一个监控存储过Sp_Sysmom, 它与SQL Server一起发行。该存储过程能统计和显示与SQL Monitor相同的监控数据, 十分有用。
11.什么是“pbcat"表?
当PowerBuilder第一次连接SQL Server时,它要在用户数据库中建立它的扩 展属性数据字典,一共有五个以“pbcat"为前缀的表,它们分别是:pbcatcol(字 段), pbcatedt(编辑风格),pbcatfmt(格式),pbcattbl(表),和pbcatVld(规则)。 这就是所谓的PowerBuilder系统表,当你在DB Painter中增加或者删除表字段 时,相应地在pbcatcol和pbcattbl表中有一条相关记录手插入或删除。如果增加 扩展属性,那么在pbcatfmt,pbcatvld和pbcatedt表中,会建立相应的记录。
12.如果在isql中建立表或者增加表字段或者删除表,那么能否通过在DBPainter中 连接数据库,或者浏览数据,来自动修改pbcat修改系统表?如果不能,怎么做?
PowerBuilder不自动修改。只有在PowerBuilder中修改表定义,pbcat表才相应地 改动。尽管如此,但仍可以浏览数据,建数据窗口。如果在isql中删除了一张,这个表 的扩展信息仍然在pbcat表中,如何将它们删除呢? 在DB Painter的“Option"菜单上有“Synchronize PB Attributes"项,如果选择 它,那么PowerBuilder做pbcat表和数据库字典的同步工作,清除那些“孤立记录”, 所谓“孤立记录”是指pbcat表中那些相应表和字段已被通过isql删除的记录。需要注意 的是如果在isql中,新建了表或者增加字段,这个功能不会在Pbcat表中增加相应的扩展 信息记录,而只有在DB Painter中,第一次为该表字段定义扩展属性,pbcat表才会有 相应的更新。