存档
在用isql连接数据 库的时候,比较常见的错误有:服务 没启动报错,报密码错误,报服务名不存在。
分别为:
1.服务名不存在:
CT-LIBRARY error:
ct_connect(): directory service layer: internal directory control layer error: Req
uested server name not found.
2.服务没有启动:
CT-LIBRARY error:
ct_connect(): network packet layer: internal net library error: Net-Lib protocol d
river call to connect two endpoints failed
3.密码错误:
Msg 4002, Level 14, State 1:
Server 'TEST':
Login failed.
CT-LIBRARY error:
ct_connect(): protocol specific layer: external error: The attempt to connect to t
he server failed.
在执行isql命令连接数据库 的时候,报密码错误和服务名称不存在这两个错误的情况下,反映很快。也就是说:在isql命令行后敲入回车后很快就给你提示服务名不存在或密码错误。
但是在报因服务没有启动导致的错误时,要等一段时间才有结果。因为 isql 需要等待 ASE 服务器的响应。
连接sybase数据库的时候将依次尝试sql.ini文件 中相应服务名下面的所有监听信息。如果所有的监听信息都连接失败后,才给出无法连接的提示信息。
sybase尝试连接一个监听地址端口需要花费多长时间?失败后将继续尝试几次? 以后再总结。
————————————————————————————————-
—- 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
—- 转载务必注明原始出处 : http://www.dbainfo.net
—- 关键字: ASE isql login two endpoints failed 连接失败情况
————————————————————————————————-
此篇为对以前的问题的整理。
在solaris 10 64-bit上安装Sybase15.0.3 ESD#1,程序安装好了后用资源文件 resource-files来创建服务 。但是老是报不能创建共享内存 的错误。
Solaris环境为:
Sun OS 5.10 Generic_127111-11 sun4v sparc SUNW,SPARC-Enterprise-T5120
16G内存,64核CPU
共享内存已经配置为如下,故没有调整。
root@SERVER # more /etc/system | grep shm
set shmsys:shminfo_shmmin=1
set shmsys:shminfo_shmmni=100
set shmsys:shminfo_shmseg=10
set shmsys:shminfo_shmmax=4294967295
* exclude: sys/shmsys
set shmsys:shminfo_shmmax=10294967295
set shmsys:shminfo_shmmin=1
* set shmsys:shminfo_shmmni=100
* set shmsys:shminfo_shmseg=10
* set shmsys:shminfo_shmmax = 268435456
* set shmsys:shminfo_shmseg = 1024
* set shmsys:shminfo_shmmni = 1024
set shmsys:shminfo_shmmni = 4096
其中曾经重启过一次服务器 。
但是用资源文件创建服务时,srvbuildres -I /app/sybase/interfaces -r /app/sybase/srvbuild-adaptiveserver.res
一直下面的报错。
-bash-3.00$ more srvbuild0111.017
Mon Jan 11 22:55:57 2010: srvbuild/15.0.3 ESD #1/P/Sun_svr4/SunOS 5.8/EBF 16556/OPT/Mon Ma
r 9 02:14:53 PDT 2009
Mon Jan 11 22:55:57 2010: Getting attribute values from sybinit resource file `/app/sybase
/srvbuild.adaptive_server.rs'.
Mon Jan 11 22:55:57 2010:
Mon Jan 11 22:55:57 2010:
Mon Jan 11 22:55:57 2010:
Mon Jan 11 22:55:57 2010:
type = 1
application_type = MIXED
server_page_size = 4k
master_device_physical_name = /app/sybdata/master.dat
master_device_size = 200
master_database_size = 160
sybsystemprocs_device_physical_name = /app/sybdata/rsystemprocs.dat
sybsystemprocs_device_size = 200
sybsystemprocs_database_size = 200
errorlog = /app/sybase/ASE-15_0/install/SYBASE.log
configfile = /app/sybase/ASE-15_0/SYB_XXXX_TEST.cfg
sybsystemdb_device_physical_name = /app/sybdata/rsystemdb.dat
sybsystemdb_device_size = 20
sybsystemdb_database_size = 20
tempdb_device_physical_name = /app/sybdata/tempdbdev.dat
tempdb_device_size = 100
tempdb_database_size = 100
shmem = /app/sybase/ASE-15_0
default_backup_server = SYB_XXXX_TEST_BS
ifiledir = /app/sybase
addl_cmdline_parameters =
do_configure_pci = no
sybpcidb_device_physical_name = PUT_THE_PATH_OF_YOUR_SYBPCIDB_DATA_DEVICE_HERE
sybpcidb_device_size = 48
sybpcidb_database_size = 48
server_name = SYB_XXXX_TEST
force_buildmaster = no
do_optimize_config = no
Mon Jan 11 22:55:57 2010: (Shell command) /app/sybase/ASE-15_0/bin/dataserver -d/app/sybda
ta/master.dat -b200M -z4k -sSYB_XXXX_TEST -e/app/sybase/ASE-15_0/install/SYBASE.log -T1623
> /tmp/sbAAAjCaGrf 2>&1
dataserver: master device size for this server: 200.0 Mb
dataserver: master database size for this server: 26.0 Mb
dataserver: model database size for this server: 6.0 Mb
00:00000:00000:2010/01/11 22:55:57.87 kernel SySAM: Using licenses from: /app/sybase/SYSA
M-2_0/licenses
00:00000:00000:2010/01/11 22:55:57.96 kernel SySAM: Checked out license for 1 ASE_CORE (2
009.1231/permanent/19B3 47BC 0B7E 8DC3).
00:00000:00000:2010/01/11 22:55:57.96 kernel This product is licensed to: ASE Developer E
dition - For Development and Test use only
00:00000:00000:2010/01/11 22:55:57.96 kernel Checked out license ASE_CORE
00:00000:00000:2010/01/11 22:55:57.96 kernel Adaptive Server Enterprise (Developer Editio
n)
00:00000:00000:2010/01/11 22:55:57.97 kernel Initializing device /app/sybdata/master.dat
from offset 0 with zeros.
00:00000:00000:2010/01/11 22:56:00.46 kernel Finished initialization.
00:00000:00000:2010/01/11 22:56:00.47 kernel Using config area from primary master device
.
00:00000:00000:2010/01/11 22:56:00.47 server Configuration Error: Configuration file, '/a
pp/sybase/SYB_XXXX_TEST.cfg', does not exist.
00:00000:00000:2010/01/11 22:56:00.66 kernel Warning: A configuration file was not specif
ied and the default file '/app/sybase/SYB_XXXX_TEST.cfg' does not exist. ASE creates the d
efault file with the default configuration.
00:00000:00000:2010/01/11 22:56:00.68 kernel Warning: Using default file '/app/sybase/SYB
_XXXX_TEST.cfg' since a configuration file was not specified. Specify a configuration file
name in the RUNSERVER file to avoid this message.
00:00000:00000:2010/01/11 22:56:00.69 kernel os_create_region: can't allocate 70795264 by
tes
00:00000:00000:2010/01/11 22:56:00.69 kernel kbcreate: couldn't create kernel region.
00:00000:00000:2010/01/11 22:56:00.69 kernel kistartup: could not create shared memory
Mon Jan 11 22:56:00 2010: Buildmaster return code: 0.
sybdata/master.dat -e/app/sybase/ASE-15_0/install/SYBASE.log -c/app/sybase/ASE-15_0/SYB_XXXX_TEST.cfg -M/app/sybase/ASE-15_0 -i/app/sybase -sSYB_XXXX_TEST -T1623 > /dev/null 2>&1
-bash-3.00$
是共享内存的问题吗?我不是已经按照安装文档上的说明修改了solaris的共享内存了吗?
后来,经过咨询solaris工程师,原来是solaris10和以前的solaris9在共享内存上有些不同。solaris10修改了共享内存方式,针对用户级别可以设置用户所能共享的内存段。
为sybase用户在项目数据库中添加一条记录,命令如下:
projadd -U sybase -p 1233 -c "sybase parameters" user.sybase
projmod -sK "project.max-shm-memory=(priv,6G,deny)" user.sybase
projmod -sK "project.max-sem-ids=(priv,100,deny)" user.sybase
projmod -sK "process.max-sem-nsems =(priv,256,deny)" user.sybase
另外,可以查看文件/etc/project来检查上面的配置是否生效。
修改完之后,再次执行srvbuildres命令创建sybase主服务,成功!
————————————————————————————————-
—- 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
—- 转载务必注明原始出处 : http://www.dbainfo.net
—- 关键字:ASE solaris 10 shared memory projadd 共享内存 couldn't create kernel region
————————————————————————————————-
接上篇的关于MySQL中的分页方法,本篇简单讨论在Sybase ASE中实现数据结果分页的方式。
本篇介绍三种方法。
第一种:利用游标
程序开发人员比较喜欢使用游标,因为游标的“循环”遍历方式类似编程语言中的for,while,loop语句的实现方法,写起来比较容易。使用游标一般步骤是:为指定的SQL语句定义一个游标,打开并移动游标,当移动到指定行号的记录行之后,再按照需要提取的行数来取数据。从表面上看解决了提取指 定范围数据的问题;但是在实际应用上,有可能会出现严重的性能问题。建立游标需要耗用一定的系统资源之外;当表内的数据量有上千万甚至到亿级别并且需要取大量的数据结果时,用游标每移动一 次就取这行数据,然后再移动游标,这个过程将是缓慢的。在使用游标的过程中,系统会给相应的表加上共享锁,导致锁竞争而严重影响数据库的性能。
在此不再介绍游标的实现方式,此法比较简单。一个使用游标分页的例子:sp_splitpage_by_cursor.sql
第二种:利用临时表和标志列
在Sybase ASE12.5.3及以后的版本中,我们可以用top关键字来限定只返回结果集的前N行数据。在ASE12.5.3之前的版本中只能用set rowcount N 的方法来“曲线救国”了。
对于取结果集的第N行至第N+M行数据的要求,我们考虑利用top来实现的话,比较容易想到的是:执行两次top,再加一次倒序排序。
步骤如下:
(1) select top N+M * from table_name where_clause order by ID ASC --把此结果集派生为表:table_name1
(2) select top M * from table_name1 order by ID DESC --把此结果集派生为表:table_name2
(3) select * from table_name2 order by ID ASC
上面的3条语句好像能够实现返回第N行至第N+M行数据的要求。但是,在Sybase ASE中仅仅利用派生表而不利用临时表是不能实现这个要求的。
仅仅是ASE中的“派生出派生表(derived table)的SQL语句中不能含有order by 子句”这个限制就足以使上面的方法行不通。还有一个限制是,上面的3个步骤中都利用ID列进行排序。如果表中没有可用的排序列时,那么上述方法也不能用 了。不过幸运的是,一般要求对其结果集进行分页的表都是有可以用作排序的列的(数字型或者日期型)。
继续寻找一个能用的方法,下面着重介绍目前通用的ASE的分页思路。此思路的关键是产生identity自增列和临时表。
在ASE中大家要是找到了不用临时表就可以实现分页的方法请麻烦告诉我一声。 我尝试了很多次,都不是很理想。
概括起来主要语句有两条:
(1) select syb=identity(10),* into #temp_table from table_name where_clause order_by_clause
(2) select * from #temp_table where_clause and syb >= N and syb <= N+M
使用此方法实现ASE分页的一个存储过程为:
-- 此存储过程适用于所有版本的ASE中
use sybsystemprocs
go
if exists(select 1 from sybsystemprocs.dbo.sysobjects where type='P' and name='sp_page')
drop procedure sp_page
gocreate procedure sp_page @qry varchar(16384),@ipage int,@num int
as
begin
declare @rcount int
declare @execsql varchar(16384)
select @rcount=@ipage*@num
set @execsql = 'set rowcount '|| convert(varchar,@rcount)
set @execsql = @execsql || stuff(@qry,charindex('SELECT ',upper(@qry)),6,' SELECT sybid=identity(12),')
set @execsql = stuff(@execsql,charindex(' FROM ',upper(@execsql)),6,' INTO #temptable FROM ')
set @execsql = @execsql || ' SELECT * FROM #temptable WHERE sybid >' || convert(varchar,(@ipage-1)*@num)
set @execsql = @execsql || ' AND sybid<=' || convert(varchar,@ipage*@num) + ' set rowcount 0'
execute(@execsql)
end
goexec sp_procxmode 'sp_page',anymode
go
grant execute on sp_page to public
go
用一个例子演示一下:
(1) 建立测试表:testA
create table testA(id int not null,name varchar(30) null)
go
(2) 插入测试数据
insert into testA
select 1,'liuzhenfu'
go
insert into testA
select 2,'andkylee'
go
(3) 循环插入大量的重复数据
insert into testA
select id+(select max(id) from testA),name from testA
go 15
向表testA循环插入已有的数据,15次之后,表testA内的数据达到2^16 = 65536 行。
(4) 利用临时表 + 自增标志列来提取第100行至第200行的数据。
语句如下:
select syb=identity(10) ,* into #tempA from testA
select * from #tempA where syb>=100 and syb<=200
drop table #tempA
返回的结果为:
1> select syb=identity(10),* into #tempA from testA
2> select * from #tempA where syb>=100 and syb<=200
3> go
(65536 rows affected)
syb id name
------------- ----------- ---------------------------
100 100 andkylee
101 101 liuzhenfu
102 102 andkylee
103 103 liuzhenfu
104 104 andkylee
105 105 liuzhenfu
106 106 andkylee
107 107 liuzhenfu
108 108 andkylee
109 109 liuzhenfu
110 110 andkylee
111 111 liuzhenfu
112 112 andkylee
113 113 liuzhenfu
114 114 andkylee
115 115 liuzhenfu
116 116 andkylee
117 117 liuzhenfu
118 118 andkylee
119 119 liuzhenfu
120 120 andkylee
121 121 liuzhenfu
122 122 andkylee
123 123 liuzhenfu
124 124 andkylee
125 125 liuzhenfu
126 126 andkylee
127 127 liuzhenfu
128 128 andkylee
129 129 liuzhenfu
130 130 andkylee
131 131 liuzhenfu
132 132 andkylee
133 133 liuzhenfu
134 134 andkylee
135 135 liuzhenfu
136 136 andkylee
137 137 liuzhenfu
138 138 andkylee
139 139 liuzhenfu
140 140 andkylee
141 141 liuzhenfu
142 142 andkylee
143 143 liuzhenfu
144 144 andkylee
145 145 liuzhenfu
146 146 andkylee
147 147 liuzhenfu
148 148 andkylee
149 149 liuzhenfu
150 150 andkylee
151 151 liuzhenfu
152 152 andkylee
153 153 liuzhenfu
154 154 andkylee
155 155 liuzhenfu
156 156 andkylee
157 157 liuzhenfu
158 158 andkylee
159 159 liuzhenfu
160 160 andkylee
161 161 liuzhenfu
162 162 andkylee
163 163 liuzhenfu
164 164 andkylee
165 165 liuzhenfu
166 166 andkylee
167 167 liuzhenfu
168 168 andkylee
169 169 liuzhenfu
170 170 andkylee
171 171 liuzhenfu
172 172 andkylee
173 173 liuzhenfu
174 174 andkylee
175 175 liuzhenfu
176 176 andkylee
177 177 liuzhenfu
178 178 andkylee
179 179 liuzhenfu
180 180 andkylee
181 181 liuzhenfu
182 182 andkylee
183 183 liuzhenfu
184 184 andkylee
185 185 liuzhenfu
186 186 andkylee
187 187 liuzhenfu
188 188 andkylee
189 189 liuzhenfu
190 190 andkylee
191 191 liuzhenfu
192 192 andkylee
193 193 liuzhenfu
194 194 andkylee
195 195 liuzhenfu
196 196 andkylee
197 197 liuzhenfu
198 198 andkylee
199 199 liuzhenfu
200 200 andkylee
(101 rows affected)
需要将select * from #tempA中的星号*替换为需要返回的列名。
继续。。。。
当要求返回满足name='andkylee'的所有行中的第100行至第200行的数据时, 利用
select syb=identity(10),* into #tempA from testA where name='andkylee'
select * from #tempA where syb>=100 and syb<=200
drop table #tempA
第三种:利用rowcount
此种方法有点不足:必须利用可用作排序的列 对结果集进行排序。
还是上面的测试表testA,如果从第9000行开始选择10行数据,那么语句如下:
declare @id1 int
set rowcount 9000
select @id1 = id from testA order by id
set rowcount 10
select *from testA where id >= @id1 order by id
set rowcount 0
go
此种方法中核心语句是select @id1=id from testA order by id , 在对表testA执行查询的过程中,每读取一行都会把id列的值赋给@id1这个变量,一直持续到最后一行,@id1这个变量反复被下一行的id值刷新, 最后结果只得到最后一行的id值。如果在此select语句之前加上rowcount的限定,那么就可用变量@id1来获得第rowcount行的id 值,于是我们也就获得了要返回的范围结果集的起点了。
后面的 set rowcount 10
select * from testA where id >= @id1 order by id
这两句实际上可以用一句select top 10 * from testA where id >= @id1 order by id 来替代。
这样,两种不同的实现形式为:
declare @id1 int
set rowcount 9000
select @id1 = id from testA order by id
set rowcount 0
select top 10 *from testA where id >= @id1 order by id
go
分别看看执行结果吧!
第一种方式的执行结果:
1> declare @id1 int
2> set rowcount 9000
3> select @id1 = id from testA order by id
4> set rowcount 10
5> select *from testA where id >= @id1 order by id
6> set rowcount 0
7> go
(9000 rows affected)
id name
----------- ------------------------------
9000 andkylee
9001 liuzhenfu
9002 andkylee
9003 liuzhenfu
9004 andkylee
9005 liuzhenfu
9006 andkylee
9007 liuzhenfu
9008 andkylee
9009 liuzhenfu
(10 rows affected)
1>
第二种方式的执行结果:
1> declare @id1 int
2> set rowcount 9000
3> select @id1 = id from testA order by id
4> set rowcount 0
5> select top 10 *from testA where id >= @id1 order by id
6> go
(9000 rows affected)
id name
----------- ------------------------------
9000 andkylee
9001 liuzhenfu
9002 andkylee
9003 liuzhenfu
9004 andkylee
9005 liuzhenfu
9006 andkylee
9007 liuzhenfu
9008 andkylee
9009 liuzhenfu
(10 rows affected)
1>
当然,两种结果一模一样。
最后我们测试表testA中的ID列顺序值打乱, 来看看以上语句的执行情况。执行:
update testA set id = id + cast( rand() * 65536 as int )
ID列值打乱之后,前100行的数据为:
1> select top 100 * from testA
2> go
id name
----------- ------------------------------
51366 liuzhenfu
33573 andkylee
19447 liuzhenfu
19408 andkylee
57839 liuzhenfu
18817 andkylee
......................
19075 liuzhenfu
17081 andkylee
26444 liuzhenfu
6620 andkylee
52344 liuzhenfu
49348 andkylee
(100 rows affected)
我们要求返回满足name='andkylee'的从第9000行开始的10行数据。
declare @id1 int
set rowcount 9000
select @id1 = id from testA where name='andkylee' order by id
set rowcount 10
select *from testA where name='andkylee' and id >= @id1 order by id
set rowcount 0
go
结果为:
1> declare @id1 int
2> set rowcount 9000
3> select @id1 = id from testA where name='andkylee' order by id
4> set rowcount 10
5> select *from testA where name='andkylee' and id >= @id1 order by id
6> set rowcount 0
7> go
(9000 rows affected)
id name
----------- ------------------------------
48639 andkylee
48639 andkylee
48641 andkylee
48641 andkylee
48642 andkylee
48643 andkylee
48644 andkylee
48644 andkylee
48650 andkylee
48650 andkylee
(10 rows affected)
如果不对ID列进行排序, 有下面的sql语句:
declare @id1 int
set rowcount 9000
select @id1 = id from testA where name='andkylee'
set rowcount 10
select *from testA where name='andkylee' and id >= @id1
set rowcount 0
go
相应的结果集为:
1> declare @id1 int
2> set rowcount 9000
3> select @id1 = id from testA where name='andkylee'
4> set rowcount 10
5> select *from testA where name='andkylee' and id >= @id1
6> set rowcount 0
7> go
(9000 rows affected)
id name
----------- ------------------------------
74076 andkylee
74514 andkylee
74053 andkylee
74385 andkylee
74339 andkylee
74792 andkylee
74794 andkylee
74984 andkylee
75052 andkylee
74138 andkylee
(10 rows affected)
1>
可以发现这个两句的结果是不同的。
我想既然都要求返回指定范围的结果集, 肯定是有排序的依据了, 否则怎么知道该返回哪个范围呢?
还有,我给出的第三种方法,在进行表扫描的时候,即使不指定排序,也是能够得到正确结果的。因为表扫描时很可能会按照表内数据在物理页面上的物理位置来返回结果。
就先介绍到这里吧, 后续可能会根据情况进行补充。
文件下载:
使用第二种方法在ASE实现分页的存储过程: sp_page.sql 包含top和set rowcount两种。
根据显示的当前页号进行优化处理、更通用些的存储过程:splitpage.sql
————————————————————————————————-
—- 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
—- 转载务必注明原始出处 : http://www.dbainfo.net
—- 关键字:ASE 分页 top identity set rowcount temp table 自增列 伪列 临时表
————————————————————————————————-
今天在sqlcentral群里面有人讨论主键和索引的区别,特地搜索了一下。找到一篇,特作收藏。
http://www.cnblogs.com/chinhr/archive/2007/09/30/911792.html
其实指定列的索引就相当于对指定的列进行排序,为什么要排序呢?因为 排序有利于对该列的查询,可以大大增加查询效率。(那么可能有人认为应该对所有的列排序,这样就可以增加整个数据库的查询效率?这样的想法是错误的,原因 是建立索引也是要消耗系统资源的,给每个表里的每个列都建立索引那么将对系统造成极大的负担,那就更别提效率了!)---------简单的说建立一个列 的索引,就相当与建立一个列的排序。
主键其实就是一个索引,但是这个索引跟一般的索引有所不同,不 同在于主键所在的列里的每一个的记录都是唯一的,也可以说不能在主键里出现相同的记录,在同一个表里只能有一个主键。(主键等于索引,索引不一定等于主 键)----------简单的说主键就是所在列不能出现相同记录的特殊索引,而且这个索引只能在表里出现一次。
1.主键一定是唯一性索引,唯一性索引并不一定就是主键;
2.一个表中可以有多个唯一性索引,但只能有一个主键;
3.主键列不允许空值,而唯一性索引列允许空值。
来自:http://tech.sina.com.cn/it/2010-05-13/14374182429.shtml
--------------------------------------------------------------
导读:美国IT网站ComputerWorld今天撰文称,SAP收购Sybase的主要目的在于拓展移动商业应用领域,使得企业用户可以实现实时 决策。
以下为文章全文:
溢价收购
周三宣布斥资58亿美元收购Sybase后,SAP将未来的大赌注压在了移动商业应用领域。
SAP首席技术官维舍尔·斯卡(Vishal Sikka)在电话会议上说:“有了Sybase,我们将有机会大幅加速移动业务的发展。我们可以将SAP核心产品中的每个部分都分解开来,并面向移动领 域推出。当然,也包括SAP和Business Objects的分析产品。”
SAP周三晚些时候表示,该公司计划以每股65美元的价格收购Sybase。较Sybase过去三个月的平均股价溢价44%。
SAP预计,该交易有望于今年7月完成,此前还需要获得监管部门的审批以及足够多的Sybase股东支持。
拓展移动领域
从某些方面来看,Sybase仍然是最为知名的数据库企业,而SAP高管周三也讨论了有关Sybase IQ数据库的问题。该产品可以提升分析和数据仓储技术的性能。
但是Sybase还有许多产品被广泛用于部署智能手机或其他移动设备的商业应用,这似乎才是SAP真正感兴趣的东西。
“我们的许多用户,尤其是规模最大的用户,都试图实现企业的实时运营。但是当处于移动状态的员工手头没有数据进行实时决策时,就会变得非常困 难。”SAP联席CEO施杰翰(Jim Hagemann Snabe)说。
SAP将利用Sybase的移动应用平台,让企业员工可以通过各大移动设备平台访问SAP的商业和分析应用。“这将把车间与办公室连接起 来。”SAP另外一名联席CEO孟鼎铭(Bill McDermott)说。
斯卡表示,移动互联网“比桌面互联网大10倍”,而SAP认为“下一代企业员工将彻底连接并且完全处于移动状态”。他说,这一趋势在中国和印度 等新兴市场尤其明显。
斯卡说:“我们认为,世界将向移动方向发展,并将布满连接。”他认为,这一交易将对SAP的三元战略起到支持作用,包括企业预置(On- Premise)、按需随选(On-Demand)和移动应用(On-Device)。
不跟风甲骨文
SAP此前很少进行大规模并购。Sybase的交易是该公司历史上规模第二大的一起并购。仅次于2007年斥资68亿美元对数据分析厂商 Business Objects的收购。除此之外,SAP更倾向于通过规模较小的交易来获取一些无法快速自主研发的技术。
孟鼎铭表示,对Sybase的收购将拓展SAP现已确定的市场,并加速该公司的业务发展。
而作为SAP的主要竞争对手,甲骨文则借助大量的收购来拓展技术触角和用户基础。甲骨文的业务范围已经遍及数据库、应用、中间件、服务器和存储 器等各个技术领域。
SAP表示,该公司不会效仿这种方法。施杰翰说:“我们根本不认同这种全面开花的收购策略。我们认同用户的选择,并且专注于正确的领域。”
Sybase发展计划
施杰翰表示,Sybase今后将作为SAP的全资子公司运营,“使得该品牌能够兴旺繁荣”。但SAP不会将该公司的应用与Sybase联系起 来,也不会将其作为优先组合向用户推广。SAP的应用仍将对其他厂商的数据库一视同仁。
这很可能是明智之举。Sybase的Adaptive Server Enterprise(以下简称“ASE”)数据库目前并不是SAP用户的热门选择。根据美国市场研究公司Gartner的数据,该产品在全球数据库市场 仅占3.1%的份额。
事实上,ASE甚至无法支持所有的SAP应用,但这种情况现在可能会发生变化。SAP表示,该公司将利用内存(in-memory)技术来改进 ASE。该技术此前主要是被用于提升SAP的商业智能应用。
Sybase CEO程守宗(John Chen)将会加盟SAP并负责数据库部门,SAP还计划为其提供一个董事会席位。程守宗表示,尽管市场份额较小,但ASE在金融机构和股票交易所中却非 常受欢迎,而且Sybase过去5年间的收入保持了9%的年均增速。
咨询机构扬基集团(Yankee Group)认为这一交易对SAP而言至关重要。该公司称:“Sybase带来了一个移动平台,可以帮助SAP将应用转变成随时随地可以通过任何设备使用 的产品。这一点非常重要,可以帮助SAP保持竞争力。”
受到收购消息的刺激,Sybase股价周三下午飙升35%,盘后交易中又再度上涨15%,达到64.50美元,而周二的收盘价仅为41.57美 元。SAP股价周三则略有下滑,报收于44.55美元。(鼎宏)
------------------------------------------------------------------------------------------------------
PS:sap收购sybase,看重的是asa的移动数据库解决方案。sybase作为子公司独立运行,估计之前作为sybase子公司运行的 ianywhere会被改组成单独的比较重要的部门。sybase要是把全资子公司ianywhere卖给sap,sap一定太高兴了。但 是,sybase不可能傻到这种地步。
不知道IMDB这个ASE数据库能够多大程度上满足sap的应用?感觉对ase的前途不是很好。
IQ作为三驾马车中的之一,应该不会像ase那样受到亏待。
对于我们这些dba,虽然sybase目前的形势还不是太明朗,但是,感觉未必是坏事。
————————————————————————————————-
—- 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
—- 转载务必注明原始出处 : http://www.dbainfo.net
—- 关键字:收购 sybase SAP ASE ASA IQ 商业软件 auquire
————————————————————————————————-
据网易科技:2010-05-13 08:05:09
--------------------------------
5月13日消息,据国外媒体报道,德国软件巨擘SAP周三宣布,将以58亿美元的现金收购Sybase
SAP将以每股65美元的价格收购Sybase,交易总金额为58亿美元。自20世纪90年代中期以来,Sybase股价从未超过50 美元。
SAP是全球最大的商业管理软件厂商,而Sybase是全球领先的数据管理及企业集成解决方案供应商,该交易将有助于SAP与甲骨文抗衡。甲骨文不 久前以74亿美元收购Sun。
SAP表示,该交易将使SAP获得Sybase的核心技术,使一些商业应用在手机上运行。如果顺利,该交易预计于今年第三季度完成。
在交易宣布前,市场上已经有相关传闻,导致Sybase股价上扬35%至56.14美元。在盘后交易中,Sybase股价再度上扬15%至 64.30美元。
from AP,May 12, 2010
---------------------
SOFTWARE SNAP-UP: German business software maker SAP AG is buying Sybase Inc . for $5.8 billion. Sybase makes database software and technology that connects business applications to mobile phones.
ATTACKING ORACLE: SAP is muscling in to more of Oracle Corp .'s database turf with the deal. Oracle has spent $40 billion since 2004 on acquisitions, mostly to buy its way into markets where SAP is strong.
BIG MOVE FOR NEW BOSSES: The acquisition is the first big move by SAP's new co-CEOs Bill McDermott and Jim Hagemann Snabe, who took over in February after the previous CEO resigned.
Copyright 2010 The Associated Press. All rights reserved. This material may not be published, broadcast, rewritten, or redistributed.
哎!sybase从09年下半年在国内刚开始起色,怎么又被卖了呢?本来还打算最近考个sybase认证的。看来得推迟或者取消了。
在ASE12.x版本中Sybase没有提供类似replace的函数。在ASE15.x版本中添加了替换某个字符串中指定的字符为另一个字符的函数:str_replace。
使用方法为:
1> select str_replace('aaaa|bbb|ccc|','|',';')
2> go-------------
aaaa;bbb;ccc;
上面的例子为将字符串aaaa|bbb|ccc|中的|替换为;
但是,在ASE12.x中需要上面上面的功能,就稍微一点麻烦了。需要结合两个函数:charindex,stuff来循环替换。
两个函数的用法分别为:
charindex - Returns an integer representing the starting position of an expression.
charindex(expression1, expression2)
stuff - Returns the string formed by deleting a specified number of characters from one string and replacing them with another string.
stuff(char_expr1|uchar_expr1, start, length,char_expr2|uchar_expr2)
实现的算法为:
declare @my_var char(25)
select @my_var = 'abc|ert|rfrfrf|'
while charindex('|', @my_var) > 0
begin
select @my_var = stuff(@my_var, charindex('|', @my_var), 1, ';')
end
select @my_var
执行结果为:
1> declare @my_var char(25)
2> select @my_var = 'abc|ert|rfrfrf|'
3> while charindex('|', @my_var) > 0
4> begin
5> select @my_var = stuff(@my_var, charindex('|', @my_var), 1, ';')
6> end
7> select @my_var
8> go
-------------------------
abc;ert;rfrfrf;
————————————————————————————————-
—- 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
—- 转载务必注明原始出处 : http://www.dbainfo.net
—- 关键字:替换 字符串 replace str_replace stuff charindex
————————————————————————————————-
在Sybase ASE中isql是个小巧而灵活的命令行实用工具。本人非常喜欢用这个工具,无论备份恢复、创建大到数据库小到表索引、配置参数、查看数据库的监控信息、 分析dbcc的命令结果等等我都喜欢用isql来实现。有些用图形界面工具能够实现的功能,我都揣摩如何用命令来实现的,因为在ASE中所有用图形界面能 够实现的功能操作都是可以用命令来完成的(当然图形工具还不能实现的地方太多)。我几乎不用sybase central,感觉这个工具既难用还低级简单。
下面介绍isql工具的使用方法。
呵呵,一些简单的命令参数我就不在这赘述了。我想每个sybase DBA对isql应该再熟悉不过了。今天我仅仅介绍几个本人自认为不太常用但是又比较实用的命令参数。
首先,查看一下isql这个工具都有哪些参数。
可能大家都知道在windows下用程序文件名称后面加空格再加上/? 来查看命令帮助。但是,对isql不能这么用。需要输入isql --help,如下图显示结果(有省略)
C:\Documents and Settings\Administrator>isql --help
usage: isql [option1] [option2] ... where [options] are ...
-b Disables the display of the table headers output.
-e Echoes input.
-F Enables the FIPS flagger.
-p Prints performance statistics.
-n Removes numbering and the prompt symbol when used with -e.
-v Prints the version number and copyright message.
-W Turn off extended password encryption on connection retries.
-X Initiates the login connection to the server with client-side
password encryption.
-Y Tells the Adaptive Server to use chained transactions.
-Q Enables the HAFAILOVER property.
如果输入 isql --h ,则返回简化版的命令参数。
C:\Documents and Settings\Administrator>isql --h
Syntax Error in '--h'.
usage: isql [-b] [-e] [-F] [-p] [-n] [-v] [-W] [-X] [-Y] [-Q]
[-a display_charset] [-A packet_size] [-c cmdend] [-D database]
[-E editor] [-h header] [-H hostname] [-i inputfile]
[-I interfaces_file] [-J client_charset] [-K keytab_file]
[-l login_timeout] [-m errorlevel] [-M labelname labelvalue]
[-o outputfile] [-P password] [-R remote_server_principal]
[-s col_separator] [-S server_name] [-t timeout] [-U username]
[-V [security_options]] [-w column_width] [-y sybase directory]
[-z localename] [-Z security_mechanism] [-x trusted.txt_file]
[--retserverror] [--conceal [wildcard]] [--help]
今天仅介绍 -b, -e, -n,-E,-s,-w这六个参数的使用情况。
(1) 对于-b,命令参数的解释为:Disables the display of the table headers output。也就是不显示表的标题行。
如下面代码所示:
C:\Documents and Settings\Administrator>isql -Usa -Stest -b -Dandkylee
Password:
1> select * from testa
2> go
1 aaaaaa
2 bbbbbb
3 ccccccc
(3 rows affected)
(2) 对于参数-e 和 -n ,-n要依附于-e来使用。
-e 表示Echoes input,也就是回显sql语句。
-n 表示Removes numbering and the prompt symbol when used with -e,也就是不显示sql语句前面的行号。
-e的用法如下:
C:\Documents and Settings\Administrator>isql -Usa -Stest -e -Dandkylee
Password:
1> select db_name()
2> go
1> select db_name()
------------------------------
andkylee
(1 row affected)
1> select * from testa
2> go
1> select * from testa
id name
----------- ------------------------------
1 aaaaaa
2 bbbbbb
3 ccccccc
(3 rows affected)
-e 和 -n 的联合用法如下:
C:\Documents and Settings\Administrator>isql -Usa -Stest -e -n -Dandkylee
Password:
select db_name()
go
select db_name()
------------------------------
andkylee
(1 row affected)
select * from testa
go
select * from testa
id name
----------- ------------------------------
1 aaaaaa
2 bbbbbb
3 ccccccc
(3 rows affected)
这时候你可能在怀疑了,上面我都输入了sql语句,我还要在返回结果中回显刚才输入的sql语句干什么?
的确,这个地方不是-e的应用场景。如果你用isql执行一个sql文件,并想把返回的结果保存到一个文件中,那么这个时候-e就有用处了。isql会在每个sql语句的执行结果前面加上相应的sql语句,这样看起来就很方便了。
简单举个例子:
假设有d:\test_isql.txt,里面的内容为:
select db_name()
go
select * from testa
go
我执行如下的命令参数:isql -Usa -P -Stest -Dandkylee -e -id:\test_isql.txt -od:\test_isql_result.txt
查看d:\test_isql_result.txt的文件内容为:
1> select db_name()
------------------------------
andkylee
(1 row affected)
1> select * from testa
id name
----------- ------------------------------
1 aaaaaa
2 bbbbbb
3 ccccccc
(3 rows affected)
对每个语句的执行结果一目了然,非常直观。
(3) -E 参数的使用
-E editor的意思是:Specifies an editor other than the default editor vi,也就是你可以指定一个文本编辑器用来在isql会话过程中编辑sql语句。这一点和sqlplusw中的ed命令是一模一样的。
多说一点,通过other than the default editor vi字面意思就可以看出,windows下的isql和unix下的isql有点不同。unix的isql下默认就可以使用vi进行编辑sql语句,但是 windows上的isql必须手动指定文本编辑器才能够使用这个功能。
C:\Documents and Settings\Administrator>isql -Usa -Stest -Enotepad -Dandkylee
Password:
1> notepad
[sh:notepad D:\PROGRA~1\ADMINI~1\LOCALS~1\Temp\cti9CE.tmp]
1> select db_name()
2> go
3> reset
1> notepad
[sh:notepad D:\PROGRA~1\ADMINI~1\LOCALS~1\Temp\cti9CE.tmp]
1> select db_name()
2> go
------------------------------
andkylee
(1 row affected)
使用方法是在isql的连接参数中加上-Enotepad(或者其它的文本编辑器,如notepad2,editlus都行,只要在win+R中能够成功执行的都可以!)
然后在提示符下输入notepad加上回车,就会弹出一个记事本让你进行编辑sql语句。这样是不是很方便,尤其在执行很长的sql语句的时候。哪 怕输错一点点都要reset再重新输入一遍。 这样就可以在文本编辑器中编辑好了再去执行了。(呵呵,可能你会说? 不能在记事本中编辑好了直接复制粘贴到isql下执行吗?当然可以! )
另外需着重注意一点,在文本编辑器中编辑的sql语句不能带有go,大家可以在我上面的演示代码中看出这一点。这个苛刻的要求就限制了我们不能在文本编辑器中输入多个sql语句命令。只能一个一个得来。
(4) 再来介绍今天的最后两个参数 -s -w, 我也是最近才开始使用这个参数-s的。感觉挺好。
-s col_separator的意思是:Resets the column separator character, which is blank by default,也就是说,你可以重新指定新的列分割符来替代默认的空格分隔符。
-w column_width 的意思是:Sets the screen width for output,也就是说,你可以指定屏幕的显示宽度(是像素还是字节,我没搞清楚)。
我把这两个参数放在一起使用,感觉效果很不错。请看下面的显示结果:
C:\Documents and Settings\Administrator>isql -Usa -Stest -Enotepad -s"|" -w5000
Password:
1> use andkylee
2> go
1> select * from test
2> go
|id |name |net_type|colc |COLD|COLE|
|-----------|------------------------------|--------|----------|----|----|
| 1|liu |NULL |1 |NULL|NULL|
| 1|liu |NULL |1 |NULL|NULL|
| 2|zhang |NULL |1 |NULL|NULL|
| 3|邓啟中 |1 |1 |NULL|0 |
(4 rows affected)
1>
在这里我把列分割符替换成了|,显示出来的效果如上。 是不是有点类似mysql的显示效果?我把屏幕的宽度设置成了-w5000。同时需要注意的是:你也需要把cmd的屏幕宽度设置大些。在命令提示符cmd 的属性里选择布局,调整屏幕缓冲区里面的宽度。这样就会显示类似上面的效果了。
执行一个字段多点的表,看看效果吧!
1> select * from sysobjects
2> where id< 20
3> go
|name |id |uid |type|userstat|sysstat|indexdel|schemacnt|sysstat2 |crdate |expdate |deltrig |instrig |updtrig |seltrig |ckfirst |cache |audflags |objspare |versionts |loginame |identburnmax |spacestate|erlchgts |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------|-----------|----|--------|-------|--------|---------|-----------|--------------------------|--------------------------|-----------|-----------|-----------|-----------|-----------|------|-----------|-----------|--------------------------|------------------------------|-----------------------------------------|----------|------------------|
|sysobjects | 1| 1|S | 0| 97| 1| 0| 229376| Dec 2 2009 6:58PM| Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|sysindexes | 2| 1|S | 0| 97| 0| 0| 229376| Dec 2 2009 6:58PM| Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|syscolumns | 3| 1|S | 0| 97| 0| 0| 229376| Dec 2 2009 6:58PM| Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|systypes | 4| 1|S | 0| 97| 1| 0| 229376| Dec 2 2009 6:58PM| Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|sysprocedures | 5| 1|S | 0| 97| 1| 0| 229376| Dec 2 2009 6:58PM| Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|syscomments | 6| 1|S | 0| 97| 1| 0| 229376| Dec 2 2009 6:58PM| Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|syssegments | 7| 1|S | 0| 65| 0| 0| 98304| Dec 2 2009 6:58PM| Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|syslogs | 8| 1|S | 0| 1| 0| 0| 73728| Dec 2 2009 6:58PM| Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| NULL|NULL |
|sysprotects | 9| 1|S | 0| 97| 1| 0| 229376| Dec 2 2009 6:58PM| Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|sysusers | 10| 1|S | 0| 97| 3| 0| 229376| Dec 2 2009 6:58PM| Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|sysalternates | 11| 1|S | 0| 97| 1| 0| 229888| Dec 2 2009 6:58PM| Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|sysdepends | 12| 1|S | 0| 97| 1| 0| 229376| Dec 2 2009 6:58PM| Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|syskeys | 13| 1|S | 0| 97| 1| 0| 229376| Dec 2 2009 6:58PM| Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|sysgams | 14| 1|S | 0| 1| 0| 0| 73728| Dec 2 2009 6:58PM| Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| NULL|NULL |
|sysusermessages | 15| 1|S | 0| 113| 2| 0| 73728| Dec 2 2009 6:58PM| Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| NULL|NULL |
|sysreferences | 16| 1|S | 0| 97| 3| 0| 229376| Dec 2 2009 6:58PM| Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|sysconstraints | 17| 1|S | 0| 97| 2| 0| 229888| Dec 2 2009 6:58PM| Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|systhresholds | 18| 1|S | 0| 65| 0| 0| 98304| Dec 2 2009 6:58PM| Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|sysroles | 19| 1|S | 0| 97| 1| 0| 229888| Dec 2 2009 6:58PM| Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
(19 rows affected)
1>
(你要是发现比|还好的列分割符号,麻烦告诉我一下。谢谢!)
(5) 最后,介绍一个对于显示结果非常实用的存储过程sp_autoformat.
我也是在浏览一些系统存错过程源代码的时候发现的这个过程。这个是sybase 未公开的系统过程,用来格式化输出结果。如果想看这个过程的语法,请到sybsystemprocs里面查找。
看个效果吧!
1> sp_autoformat sysobjects,@whereclause="where id < 20"
2> go
|name |id|uid|type|userstat|sysstat|indexdel|schemacnt|sysstat2|crdate |expdate |deltrig|instrig|updtrig|seltrig|ckfirst|cache|audflags|objspare|versionts |loginame|identburnmax|spacestate|erlchgts |
|---------------|--|---|----|--------|-------|--------|---------|--------|-------------------|-------------------|-------|-------|-------|-------|-------|-----|--------|--------|--------------------------|--------|------------|----------|------------------|
|sysobjects | 1| 1|S | 0| 97| 1| 0| 229376|Dec 2 2009 6:58PM|Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|sysindexes | 2| 1|S | 0| 97| 0| 0| 229376|Dec 2 2009 6:58PM|Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|syscolumns | 3| 1|S | 0| 97| 0| 0| 229376|Dec 2 2009 6:58PM|Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|systypes | 4| 1|S | 0| 97| 1| 0| 229376|Dec 2 2009 6:58PM|Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|sysprocedures | 5| 1|S | 0| 97| 1| 0| 229376|Dec 2 2009 6:58PM|Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|syscomments | 6| 1|S | 0| 97| 1| 0| 229376|Dec 2 2009 6:58PM|Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|syssegments | 7| 1|S | 0| 65| 0| 0| 98304|Dec 2 2009 6:58PM|Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|syslogs | 8| 1|S | 0| 1| 0| 0| 73728|Dec 2 2009 6:58PM|Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| NULL|NULL |
|sysprotects | 9| 1|S | 0| 97| 1| 0| 229376|Dec 2 2009 6:58PM|Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|sysusers |10| 1|S | 0| 97| 3| 0| 229376|Dec 2 2009 6:58PM|Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|sysalternates |11| 1|S | 0| 97| 1| 0| 229888|Dec 2 2009 6:58PM|Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|sysdepends |12| 1|S | 0| 97| 1| 0| 229376|Dec 2 2009 6:58PM|Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|syskeys |13| 1|S | 0| 97| 1| 0| 229376|Dec 2 2009 6:58PM|Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|sysgams |14| 1|S | 0| 1| 0| 0| 73728|Dec 2 2009 6:58PM|Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| NULL|NULL |
|sysusermessages|15| 1|S | 0| 113| 2| 0| 73728|Dec 2 2009 6:58PM|Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| NULL|NULL |
|sysreferences |16| 1|S | 0| 97| 3| 0| 229376|Dec 2 2009 6:58PM|Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|sysconstraints |17| 1|S | 0| 97| 2| 0| 229888|Dec 2 2009 6:58PM|Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|systhresholds |18| 1|S | 0| 65| 0| 0| 98304|Dec 2 2009 6:58PM|Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
|sysroles |19| 1|S | 0| 97| 1| 0| 229888|Dec 2 2009 6:58PM|Dec 2 2009 6:58PM| 0| 0| 0| 0| 0| 0| 0| 0|NULL |NULL | NULL| 1|0x0000000000000000|
(19 rows affected)
(return status = 0)
(6) 补充,参数-p,显示性能统计信息.
参数-p:Prints performance statistics,与之对应的是会话级别的set statistics time on 。这两个方法都能够显示出 统计信息,但是,会话级别的set statistics time on比参数-p的显示结果更详细些。
示例如下:
利用参数-p来显示简要统计信息:
C:\Documents and Settings\Administrator>isql -Usa -P -p
1> select count(*) from sysobjects
2> go
-----------
160
(1 row affected)
Execution Time (ms.): 0 Clock Time (ms.): 0
在每个SQL语句的最后显示执行时间和耗用时间。
会话级别的选项set statistics time on 显示比较详细的统计时间:
C:\Documents and Settings\Administrator>isql -Usa -P
1>
2> set statistics time on
3> go
Execution Time 0.
Adaptive Server cpu time: 0 ms. Adaptive Server elapsed time: 0 ms.
1> select count(*) from sysobjects
2> go
Parse and Compile Time 0.
Adaptive Server cpu time: 0 ms.
-----------
160
Execution Time 0.
Adaptive Server cpu time: 0 ms. Adaptive Server elapsed time: 0 ms.
(1 row affected)
1>
由上可以看出,会话级别选项set statistics time on会显示解析和编译时间、SQL执行时间、以及总计的执行时间、耗用时间。
啰啰嗦嗦就介绍这么多吧!
————————————————————————————————-
—- 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
—- 转载务必注明原始出处 : http://www.dbainfo.net
—- 关键字:isql -b -e -E -n -s -w 命令实用工具 sp_autoformat
————————————————————————————————-