存档

文章标签 ‘ASE V15.7’,文章数:15

之前写过博文介绍Sybase ASE 15.0.3和SAP ASE 16.0静默安装数据库并创建数据库服务:

使用响应文件进行ASE 15.0.3的静默安装

SAP ASE 16静默方式安装并创建服务器

当时用的是ASE 15.0.3 32bit,用响应文件安装完ASE 15.0.3程序文件后没有自动创建ASE服务器。windows上可以使用sybatch调用资源文件以无交互方式创建ASE服务器。

下面介绍Sybase ASE 15.7使用静默方式自动安装程序文件并自动创建ASE服务器的过程。

一、操作系统及补丁要求:

Sybase ASE 15.7在windows平台上同时包含32位和64位的程序。
ASE 15.7 GA认证的windows版本为:windows xp sp1+、windows 7、windows 2008 R2;
ASE 15.7 ESD#2及更高版本认证的windows版本为:windows 7、windows 2008 R2;
ASE 15.7 ESD#4(x64)版本认证的windows版本为:windows 8(x64)、windows 2012(x64);

关于ASE 15.7 在各操作系统平台上的认证情况以及各操作系统平台上支持的ASE 15.7最低版本,请参考:Sybase ASE各版本认证情况
静默安装之前最好先安装Microsoft Visual C++ 2005/2008/2010可再发行补丁:

  • Microsoft Visual C++ 2005 Redistributable
  • Microsoft Visual C++ 2008 Redistributable
  • Microsoft Visual C++ 2010 Redistributable

32位windows仅需要安装32位的可再发行补丁,64位的windows需要同时安装32位和64位的可再发行补丁。见如下图示:


其中:vc++ 2008可再发行补丁在windows 2008R2中可能会自带。
Sybase ASE 15.7安装向导不会自动安装VC++可再发行补丁需先手动安装。如果没有的话,可以在本博客下载。

如果未安装Microsoft Visual C++ 2005 Redistributable,在开始安装程序文件之前报错:

缺少vc++ 2005可再发行补丁报错

如果未安装Microsoft Visual C++ 2010 Redistributable,在安装完ASE程序后创建ASE服务器的时候会报:

缺少vc++ 2010可再发行补丁报错

无法启动程序,因为计算机中丢失 MSVCR100.dll。尝试重新安装该程序以解决此问题。
无法启动程序,因为计算机中丢失 mfc100.dll。尝试重新安装该程序以解决此问题。

ASE 15之前版本中对象名称长度限制为30字节,ASE 15及以后版本中对象名称长度限制为255字节;这指的是服务器端的对象名称长度限制。

在创建用户对象时,还要考虑到客户端版本对名称长度的限制。

下面举四个例子:

在ASE 12.5上创建一个名称长度为33字节的存储过程:

create procedure
sp_123456789012345678901234567890
as
select getdate()
go

1、使用ASE 12.5的isql连接ASE 12.5服务器,报错:

Msg 103, Level 15, State 1:
Server 'dbainfo', Line 2:
The identifier that starts with 'sp_123456789012345678901234567' is too long.  Maximum length is 30.

2、使用ASE 15.0.3的isql连接ASE 12.5服务器,报错:

曾经写过博文介绍利用代理表统计数据库内所有表占用空间情况,也包括表的行数:

可以参考:ASE15.0中利用代理表实现统计用户表存储空间大小的功能

配置代理表可能有些麻烦,本文提供一个简单的脚本来获得数据库内表的行数。

#!/bin/bash

ISQL="isql -Usa -P -SSYBASE -w5000"
database_name="tpchdb"

$ISQL  <<EOF  | sed -e '1,2d' -e 's/^ *//;s/ *$//' -e '/^$/d' > tablename.list
use ${database_name}
go
set nocount on
go
select name from sysobjects where type='U' order by name
go
quit
EOF

while read table_name
do
        if [ "${table_name}" = "" ]; then
                break
        fi
        $ISQL <<EOF | grep "=" | sed -e 's/^ *//;s/ *$//;s/= */=/'
use ${database_name}
go
set nocount on
go
select "${table_name}=",count(*) from ${table_name}
go
quit
EOF
done < tablename.list
echo "Table Count:`wc -l tablename.list|awk '{print $1}'`"
rm -f tablename.list

使用的时候,仅仅需要修改一下红色标记的用户名、密码、服务器名称、数据库名称即可。

当然你也可以只统计相应的表的行数,修改select name from sysobjects where type='U' order by name,比如:name like 'flow_%' and crdate > '2014-01-01'

另外,如果不想用脚本而在TSQL中实现的话,可能得用到游标了。

脚本tablerowcount.sh下载地址

 

遇到两例isql登录ASE报Client password encryption fails.的错误,先总结一下。

主要原因可能有:

1、操作系统不被支持;

2、sybase环境变量不正确;

case 1:

在SUSE 10 x64 上安装了ASE 15.7 ESD#7的32位的客户端,使用isql连接的时候,报: Client password encryption fails(客户端密码加密失败)

通过查询sybase官方的版本与平台支持信息

ID Product Prod
Version
Prod
Word Size
OS Version Status
1436 Adaptive Server Enterprise 15.0 64-bit SuSE SLES 10 (AMD64/EM64T) Certified
     
General Notes:    ASE15.7 release does NOT support SLES10. Due to recent changes in glibc, the environment variable LD_POINTER_GUARD should be set to 1 for ASE to function properly. This variable should be set before starting any ASE binary. Note that there is known bug with the configuration step of the ASE installer. Please use "srvbuild" or "srvbuildres" to configure devices. This bug will be fixed in a future release of ASE. ASE15.5 ESD5.2 can't install on SUSE10SP2 Work-round: Replace sylapi with 32bit and change to 32bit JRE. ASE 15.5 support SUSE10: kernel-smp-2.6.16.21-0.8 glibc-2.4-31.2 ASE CE 15.5 support SUSE10.1: kernel-smp-2.6.16.46-0.12 glibc-2.4-31.30 e2fsprogs-1.38-25.21 libaio-0.3.104-14.2 libgcc-3.3.3-43.41 libstdc++-3.3.3-44.41 compat-libstdc++-5.0.7-22.2
Minimum Product Level :    ASE 15.0.2 ESD#1
ASE15.5 GA to ASE15.5 ESD5.1
ASE15.7 release does NOT support SLES10.
Minimum Required OS Level :    ASE15.7 release does NOT support SLES10. ASE15.7 requires SLES 11.0 as minOS.

For ASE15.0.2 and higher to ASE15.5 ESD5.1:
SuSE 10

kernel-smp-2.6.16.21-0.8
glibc-2.4-31.2
glibc-devel-2.4-31.2

再查看ASE 15.7的最低支持平台,看到:

ASE 15.7 SP100版本开始支持以html格式显示查询计划。

生成html形式的查询计划前需要启用一些会话级别的选项:

set statistics plan_html on
set statistics timing_html on
set statistics plan_detail_html on
set statistics parallel_plan_detail_html on
set statistics plan_directory_html "e:\"
set statistics plan_directory_html on
go

在执行SQL语句后,会在e:\发现生成了对应的查询计划html文件。

文件名称格式为:qp_username_spid_timestamp.html,比如:qp_sa_25_2013-11-19T17_48_08.html

使用浏览器打开qp_sa_25_2013-11-19T17_48_08.html,内容截图为:

禁止生成html格式的查询计划,使用选项:

set statistics plan_html off
set statistics timing_html off
set statistics plan_detail_html off
set statistics parallel_plan_detail_html off
go

 

ASE自12.5.1开始在内部处理中支持xml;自15.x版本xml功能得到进一步完善。

ASE15.x中使用xml不需要额外的license。

一、导出xml文档

在ASE的select语句中加入关键字for xml即可以xml格式显示结果集。

语法:

限制:

  • for xml select语句不能包括into_clause、compute_clause、read_only_clause、isolation_clause、browse_clause 或 plan_clause。
  • 不能在命令create view、declare cursor、subquery 或 execute command中指定 for xml select。
  • 不能在以下命令中使用for xml 子查询:for xml select、create view、declare cursor、select into;亦不能将其用作定量判定子查询,如 any/all、in/not in、exists/not exists。

下面举例导出xml格式的SQL查询结果集:

mark:

rand2()  ASE 15.0.2

newid()  ASE 12.5.1

rand()    Any Version

set rowcount N
select * from table order by rand(convert(int,row1)+datepart(ms,getdate()))
set rowcount 0

本博客已经有一篇关于的:Sybase ASE 统计当前执行的SQL语句的存储过程! 

现在提供另外一种方法:使用系统存储过程sp_monitor查看当前数据库连接中正在执行的SQL语句信息!

sp_monitor connection

在执行上面语句之前需要启用对connection的监控, 执行:sp_monitor enable,connection。可以在监控完成后关闭该选项。

设置参数:max SQL text monitored为2048,该参数为静态参数,需要重启ASE。

sp_monitor connection的结果默认按照连接占用的cpu时间和等待时间的总和进行逆序排序。

sp_monitor connection的第二个参数有:cpu , diskio , elapsed time 分别表示按照cpu时间、物理读取次数、cpu时间+等待时间 进行逆序排序。

在查看完正在执行的SQL语句内容后,关闭对connection的监控以减少对生产服务器的影响。

执行的语句如下:

sp_configure "max SQL text monitored",2048
go
--reboot ASE
--...
sp_monitor enable,connection
go
sp_monitor connection
go
-- some SQL statement
-- ...
sp_monitor disable,connection
go