存档
Powerbuilder历程
0引言
PowerBuilder是在中国用户群很大的数据库产品,多年来深受中国用户的喜爱。作为一个使用PowerBuilder多年进行系统开发的资深用 户,我在进行开发的同时,也关注着PowerBuilder的历史以及发展,以下是我对PowerBuilder历史的研究资料,希望能够给广大 PowerBuilder提供一点有用的东西。
本文的组织有两条主线,一是两任CEO对PowerBuilder发展的贡献;二是PowerBuilder产品线的发展。
从1974年Kertzman创建Powersoft公司的前身Computer Solutions公司,1984年Mark Hoffman创建SYBASE公司,到Computer Solutions公司易名为Powersoft公司,推出PowerBuilder1.0,再到1995年Powersoft公司和SYBASE公司的 合并,以及后来陈守宗拯救SYBASE公司,真实地展现了一个高科技公司从创建到发展壮大的过程。这样一个过程,绝对值得国内的高科技公司学习与借鉴。
1. 传奇的开始
·小说般的创业
说到PowerBuilder的创始人Mitchell E. Kertzman,的确是一个传奇人物。
Mitchell E. Kertzman出生在麻省的波士顿市,他曾经当过主席和CEO,他说“高科技企业的CEO生涯就象一本故事书”,事实上,他的CEO生涯就是一本故事书。
在十几岁时,Mitchell Kertzman是一位波士顿的民间歌手,1968年,当他在Brandeis University读二年级时,Mitchell Kertzman从大学辍学成为波士顿的WBCN 的摇滚电台主持人(这是美国最为激进的电台之一),并认为这将会成为他一生的职业。然而,1968年夏天他只在电台呆了4个月,就因为被指控煽动一场暴乱 ――和平抗议波士顿的宵禁(Mitchell Kertzman否认这项指控)而被电台解雇了。随后,他在加油站工作,不久,他的母亲在软件公司给他找了一份技术员的工作。从此,他开始了其编程生涯并 为之着迷,以至于后来创办了自己的软件公司。这听起来象一本小说里的故事,但对于Mitchell Kertzman来说,这是真实的。
Mitchell Kertzman平易近人,但很难预测他的行为。他曾经说过:“我年轻的时候非常害羞,但当我学会了弹吉他和唱民间歌曲,姑娘们喜欢上我了。”
商业世界艰难的开始
经过短暂的加油站工作,Mitchell Kertzman作为音频-视觉产品技术员,在一家名为“交互式学习系统”的教育软件公司工作。“我问主管我们部门的副总,我能否参与编程”,主管回答, “当然,你可以试试”。这成为Mitchell Kertzman一生很重要的决定。接下来四年里,Mitchell Kertzman开始为公司不停地编程。“我喜爱编程”,但令人啼笑皆非的是,现在SYBASE公司用Mitchell Kertzman的代码来告诫新的程序员们,如果他们写出这样的代码,那么就会滚蛋。
当公司陷入财政微机时,Kertzman开始了两项工作。一是通过邮件提供人体生理功能节律失调图表;二是给乐队提供预约服务。“这是一个本质上的错误,我竟然相信摇滚音乐家的商业道德”,Kertzman从中得到了宝贵的商业教训。
创建Powersoft公司
1974年Kertzman决定开始自己的编程事业,在其生活过的街区,麻省的West Newton街区,他创建了一个名为Computer Solutions的公司,这是一个制作MRP(生产需求计划)的小型软件咨询公司。当时创建这个公司时,Kertzman没有很多想法,只是“为食物而 编程”,为了养家糊口。他希望人们能够喜欢他编写的程序,这样他就可以买蔬菜和付房租。
Kertzman一直干得不错。他挂出招牌“定制程序”,其头两个客户都是制造业公司,Kertzman学习了其商业流程并将其自动化,使其易于使用,迅于实施。同时,Kertzman还非常注重软件用户界面的人机工程学,这样客户非常喜爱他编写的程序。
1987年,Kertzman看到了下一波计算热潮将是运行用户界面的网络PC,后来被称为客户/服务器计算市场的潜力,就开始寻找可以重写企业生产应用 的开发工具,但是没有找到,后来Kertzman就找到并雇用了Dave Litwack来开发这种新的开发工具,Litwack是Cullinet的前研发主管,对这个巨大的市场的开发工具有很好的构想,就是后来被称为 PowerBuilder的产品。于是他就开始了重写企业生产应用和研发开发工具的工作。开发工具的工作进展相当顺利,业务量也越来越大,所以 Kertzman卖掉了开发生产应用的业务。80年代末,他将公司改名为Powersoft,这曾是提供生产需求计划MRP的最好生产商之一。在1991 年6月,Powersoft公司发布了其旗标式客户/服务器应用开发工具,PowerBuilder1.0。
Powersoft公司随后还发布了Optima++,这是快速应用开发工具的一员,用来简化C++和Java的使用,并创建WINDOWS客户/服务器应用和WEB应用;S-Designor,设计和建模工具。
说到 PowerBuilder,不得不提到他的奠基人,David Litwack。
正是这位天才的程序员,一手缔造了伟大的开发工具,PowerBuilder。David Litwack在1990年代初的客户/服务器模式(client/server)热潮中,任职于 Powersoft公司时,他推动客户/服务器模式革命,倚仗的利器是“PowerBuilder”──他亲手开发的工具,当时最受欢迎的程序开发工具之 一。也因此David Litwack当上了Powersoft公司的主席。虽然Litwack后来离开Powersoft公司另谋生路,但是,他对Powersoft公司、对 客户/服务器模式的贡献都是不可磨灭的。
创建表空间
create tablespace dultest datafile 'e:\oracle\oradata\orcl\dultest.dbf'
size 100m autoextend on next 100m maxsize unlimited
default storage(
initial 20M
next 20M
minextents 1
maxextents unlimited
pctincrease 0
);
表空间仅有一个数据文件,数据文件初始大小为100m,以后增长幅度为100m,不限制上限。表空间dultest内的对象的默认的空间分配信息为:对象初始大小为20m,后续空间增长幅度为20m。
通过系统视图查看表空间的信息:
SQL> set linesize 2000
SQL> col tablespace_name format a16
SQL> col datafile_name format a40
SQL> select ts.ts#,ts.name tablespace_name,file#, df.name datafile_name,block_size,blocks,bytes,status,enabled
2 from v$tablespace ts,v$datafile df
3 where ts.ts# = df.ts# and ts.name='DULTEST';
TS# TABLESPACE_NAME FILE# DATAFILE_NAME BLOCK_SIZE BLOCKS BYTES STATUS ENABLED
---------- ---------------- ---------- ---------------------------------------- ---------- ---------- ---------- ------- ----------
8 DULTEST 6 E:\ORACLE\ORADATA\ORCL\DULTEST.DBF 8192 25600 209715200 ONLINE READ WRITE
SQL>
删除表空间及其表空间内所有的对象
drop tablespace dultest including contents and datafiles;
删除目录下的所有文件和子文件夹:
del /S 目录名
将一个目录拷贝到另外一个目录里,比如将D盘下的data文件夹拷贝到d:\sybase里面
D:\> xcopy /E /Y /I data sybase\data
使用密码 ZaBaToAd 来将文件夹“games”的内容添加到压缩文件“secret”
rar a -pZaBaToAd -r secret games\*.*
将文件分割压缩 将文件e:\andkylee_dat.dat压缩,每个2M进行分割,压缩级别为3(标准)
"c:\Program Files\winrar\rar" a -v2000k -m3 e:\andkylee e:\andkylee_dat.dat
命令行配置telnet服务的启动状态为:手动
sc config tlntsvr start= demand
从命令行启动telnet服务
sc start tlntsvr
配置telnet服务器的最大并发用户连接数为:10
tlntadmn config maxconn= 10
配置telnet服务器空闲会话不超时
tlntadmn config timeoutactive=yes
------------------------------------------------------------------------------
telnet服务tlntadmn命令的端口设置 http://network.51cto.com/art/201007/212864.htm
- 下面我们对tlntadmn的命令对Telnet服务的端口设置问题进行一下介绍。那么具体的内容就让我们来详细看一下吧。
telnet可以帮助我们完成远程的登录设置,那么管理员如何对端口认证等系统进行管理呢?这里我们就来介绍一下tlntadmn 命令的用法。这个命令可以帮助我们完成telnet服务的这些设置。那么,tlntadmn是telnet服务的设置命令,可以对telnet服务的端 口、认证方式等进行设置:
用法: tlntadmn [computer name] [common_options] start | stop | pause | continue | -s | -k | -m | config config_options
所有会话用 'all'.
-s sessionid 列出会话的信息.
-k sessionid 终止会话.
-m sessionid 发送消息到会话.
config 配置Telnet服务器参数.
common_options 为:
-u user 指定要使用其凭据的用户
-p password 用户密码
config_options 为:
dom = domain 设定用户的默认域
ctrlakeymap = yes|no 设定 ALT 键的映射
timeout = hh:mm:ss 设定空闲会话超时值
timeoutactive = yes|no 启用空闲会话.
maxfail = attempts 设定断开前失败的登录企图数.
maxconn = connections 设定最大连接数.
port = number 设定Telnet端口.
sec = [+/-]NTLM [+/-]passwd 设定身份验证机构
fname = file 指定审计文件名.
fsize = size 指定审计文件的最大尺寸(MB).
mode = console|stream 指定操作模式.
auditlocation = eventlog|file|both 指定记录地点
audit = [+/-]user [+/-]fail [+/-]admin 指定审计的事件
使用的办法:
转自:http://space.itpub.net/?uid-7656893-action-viewspace-itemid-664954
第一步:计算整个Block Header的大小
数据块头部所需要的空间大小由以下公式计算:
Space after headers (hsize) = DB_BLOCK_SIZE - KCBH - UB4 - KTBBH - ((INITRANS - 1) * KTBIT) - KDBH
其中的一些参数说明如下:
DB_BLOCK_SIZE:数据库的block大小,可以查询V$PARAMETER视图中获得。
KCBH、UB4、KTBBH、KTBIT、KDBH都是常量,这些定义的大小可以从V$TYPE_SIZE视图中获得。
INITRANS是分配给表的初始化事务的数量,可以从USER_TABLES表中的INI_TRANS字段中获得。
第二步:计算每个数据块可用的数据空间
每个数据块为数据保留的空间是由PCTFREE参数所指定的,因此计算公式如下:
Available data space (availspace) = CEIL(hsize * (1 - PCTFREE/100))
– KDBT
其中的一些参数说明如下:
CEIL是取大于或者等于N的最小整数。
PCTFREE是在表中预留出来用于UPDATE操作的空间,可以从USER_TABLES表中的PCT_FREE字段中获得。
KDBT是常量,定义的大小可以从V$TYPE_SIZE视图中获得。如果你找不到KDBT的定义大小,用UB4定义的大小代替也可以。
第三步:计算每行所用的空间大小
计算每行所使用的空间大小是需要多步计算完成的。
首先计算列的大小,包括字节的长度:
Column size including byte length = column size + (1, if column size < 250, else 3)
对于列的大小,既可以利用经验来判断其大小,也可以使用语句来计算每列的大小:
Select avg(vsize(colname)) from table_name;
接着,计算行的大小:
Rowsize = row header (3 * UB1) + sum of column sizes including length bytes
最后,计算每行所用的空间大小:
Space used per row (rowspace) = MAX(UB1 * 3 + UB4 + SB2, rowsize) + SB2
UB1、UB4、SB2都是常量,定义的大小可以从V$TYPE_SIZE视图中获得。
当每行所占用的空间超过了一个数据块可用的空间的大小,但是仍然小于每个数据块保留给UPDATE操作的空间大小(例如,PCTFREE=0),每行记录将仍然被存储在它们自己的block块中。
当每行的空间大小超过了每个数据块可用的空间,并且没有任何保留给UPDATE操作的空间可用了,此时,这行记录将被链接到另外一个block或者更多,因此,这个时候的存储的负载会比较高。
第四步:计算在一个block中可以容纳最多的记录数量
可以使用下面的公式来计算一个数据block中可以容纳的记录的数量:
Number of rows in block = FLOOR(availspace / rowspace)
FLOOR是取小于N的最大整数。
这个过程只是提供一个大致的估算一个表的大小,而不是精确的去计算的。在大致的估算出一个表的大小之后,我们可以利用这个信息来判定在创建表的时候究竟使 用多大的INITIAL这个存储参数。当表被创建后开始使用了,空间的需求往往是大于我们通过计算得出的估计值。
有这样一个备份策略:周一对某用户数据库进行完全备份,周二,周三一直到周日都进行日志备份。此策略简单易于说明本文的问题。
假如在周五的时候,其它地方需要使用此用户库的所有数据,而又不想拷贝周一的备份和后续的多个日志备份文件。此时,如何进行数据库全备呢?
如果做全备的话,则可能对原本运行正常的备份策略产生影响。此应用场景下,对用户库做了全备后,后续的周六、周日的日志备份所对应的基点就不是周一的全备而是周五的全备了。如果还按照原本的备份策略,则势必会出现问题。
如何在做数据库全备的时候,不影响原来的备份策略呢?
解决办法:
在sql server 2005 中有个参数 copy_only。
backup database andkylee to disk='d:\andkylee.bak' with copy_only
已为数据库 'andkylee',文件 'andkylee' (位于文件 2 上)处理了 17296 页。
已为数据库 'andkylee',文件 'andkylee_log' (位于文件 2 上)处理了 1 页。
BACKUP DATABASE 成功处理了 17297 页,花费 5.790 秒(24.471 MB/秒)。
成功!
————————————————————————————————-
—- 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
—- 转载务必注明原始出处 : http://www.dbainfo.net
—- 关键字:sql server 2005 备份 完全备份 with copy_only
————————————————————————————————-
在局域网内不能ping通主机名。
如下:
C:\Documents and Settings\Administrator>ping win2003server
Ping request could not find host win2003server. Please check the name and try again.
解决办法:
网上邻居 右键 属性 ,在网络连接 窗口中选择本地连接 ,在本地连接点右键选择属性 ,选择Internet 协议(TCP/IP) ,再点属性 ,点高级 按钮,在弹出的高级TCP/IP设置 中切换到WINS 选项卡,如果NetBIOS设置 中禁用TCP/IP上的NetBIOS ,那么选择启用TCP/IP上的NetBIOS 即可解决问题。
C:\Documents and Settings\Administrator>ping win2003server
Pinging win2003server [192.168.2.176] with 32 bytes of data:
Reply from 192.168.2.176: bytes=32 time<1ms TTL=128
Reply from 192.168.2.176: bytes=32 time<1ms TTL=128
Reply from 192.168.2.176: bytes=32 time<1ms TTL=128
Reply from 192.168.2.176: bytes=32 time<1ms TTL=128
Ping statistics for 192.168.2.176:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
如果已经选择了启用TCP/IP上的NetBIOS,那么需要找其它解决办法了。
今天下午在solaris10 ASE15.0.3平台上批量创建非聚簇索引时,报下面的错误:
Msg 1526, Level 17, State 5: Server 'SYB_NFJD_TEST', Procedure 'sp_helpdb', Line 674: Sort failure. The configure size for data cache (default data cache) is not sufficient to handle the sort buffers (128) requested. Please reconfigure the data cache or sort buffers and try the command again. (return status = -7)
用命令:sp_helpcache "default data cache",发现高速数据缓冲大小为:8M,此为默认值。
执行命令将default data cache扩充至100M,sp_cacheconfig "default data cache","100m"
然后再重新执行一遍非聚簇索引的创建过程,成功完成了!
在error message & troubleshooting 中没有找到错误号1526的解释以及解决办法。
目前暂时没有想明白,为什么在创建非聚簇索引的时候需要用default data cache,而且默认数据缓存不足还会出错。难道default data cache要缓存某一层次的索引的页数据?
------------------------------------------------------------------------------------------------
以下关联一篇网上搜索的也是关于error:1526的信息
The failure is most likely happening on the remote server where the actual
physical table lives. It's certainly possible to create indexes on proxy
tables, but what really happens is that the physical index is created on the
remote server. Try logging in to the remote server where the actual table
resides. Check the memory settings on the remote server.
> Hi,
> I am trying to create a non clustered index on an "existing
> table"(proxy table). But it keeps failing with the error,
>
> Sort failure. The configure size for data cache (default
> data cache) is not
> sufficient to handle the sort buffers (30008) requested.
> Please reconfigure the
> data cache or sort buffers and try the command again.
>
> The data cache is configured 2 Gig, 800MB for 8K pool
> I have this configuration enough for most of the things.
>
> How can I make the non clustered index.
总结一下: 在建立非聚簇索引的时候,都涉及到default data cache数据缓存的使用。不管是在基本表还是在代理表上创建非聚簇索引,都会在物理表所在的ASE服务器上使用数据缓存。如果数据缓存不足,则会报 1526的错误信息。解决办法为用过程sp_cacheconfig增加default data cache即可。
————————————————————————————————-
—- 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
—- 转载务必注明原始出处 : http://www.dbainfo.net
—- 关键字:nonclustered index default data cache insufficient 1526
数据缓存不足 非聚簇索引
————————————————————————————————-
ASE15.0之前的版本中利用bcp这个实用程序只能够导出整表或视图的数据。要想利用bcp有条件得导出表内数据,只能根据条件建立视图,然后 再导出该视图的数据;或者根据条件建立临时表,再导出临时表的数据。但是,都必须在执行bcp命令之前到数据库内部去创建对象(视图或者临时表),然后再 执行bcp命令导出视图或者临时表数据。显然,不是太方便。而其它的数据库管理系统,比如sqlserver早在sqlserver2000就实现了根据 条件queryout数据的功能。利用sybase ASE的第三方工具按条件导出数据也是一种办法。
在ASE 15.0及以后版本中,sybase终于提供了按照条件导出表内数据的办法,虽然实现起来还稍微有一点点小麻烦,但是终究是有这个功能了。参数:--initstring 就是为实现这个功能而加的。
关于参数:--initstring的注意事项有:
1. 参数--initstring之后的SQL语句会在数据导出之前被发送到ASE引擎;
2. 参数--initstring之后的SQL语句被当做会话级别的SQL语句一样处理;
3. 参数--initstring之后的SQL语句在整个bcp导出数据会话期间始终有效;
4. 真正导出的数据是关键字bcp和out之间的表的数据,而不是参数--initstring中select列表的数据。
下面开始举几个例子: