远程Sybase数据库技术支持,联系手机:13811580958,QQ:289965371!

查看ASE v15正在执行的SQL语句内容

本博客已经有一篇关于的: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

查找没有授予给其它用户权限的表以及权限

以将dbo创建的所有表授予相应权限给普通用户userA为例。

将dbo拥有的表的相应权限(select/insert/update/delete)授予给普通用户userA,使用以下SQL生成授权语句:

select 'grant select  on ' + user_name(uid) + '.' + name + ' to userA'  from sysobjects where type='U' and uid=user_id('dbo')

union all

select 'grant insert on ' + user_name(uid) + '.' + name + ' to userA'  from sysobjects where type='U' and uid=user_id('dbo')

union all

select 'grant update on ' + user_name(uid) + '.' + name + ' to userA'  from sysobjects where type='U' and uid=user_id('dbo')

union all

select 'grant delete on ' + user_name(uid) + '.' + name + ' to userA'  from sysobjects where type='U' and uid=user_id('dbo')

查看某张表的上用户的权限情况:

sp_helprotect table_name

查看用户所拥有的对象权限情况:

sp_helprotect user_name

手动创建ASE服务器

1、准备环境

    首先确保sql.ini中包含主、备服务器名称;
    创建master设备所在的目录;
    主服务器和备份服务器的RUN_file文件;

2、使用命令初始化master设备
D:\ASE\sybase157\ASE-15_0\bin\sqlsrvr.exe -dD:\ASE\sybase157\data2\master.dat -b100M -Z80M -z2048 -eD:\ASE\sybase157\ASE-15_0\install\ASE157_2K.log -sASE157_2K  -MD:\ASE\sybase157\ASE-15_0

3、使用RUN_file启动新创建的服务
在windows创建的主服务的默认字符集为:cp850;
默认包含以下系统数据库:
1> select dbid,name from sysdatabases order by dbid
2> go
 dbid   name
 ------ ------------------------------
      1 master
      2 tempdb
      3 model
  31513 sybsystemdb

(4 rows affected)

4、创建sybsystemprocs数据库

Sybase ASE设备属性dsync与directio

1、ASE的dsync和directio属性都是针对文件系统上的设备文件的,不适用于裸分区/原始分区。

2、dsync和directio是互斥的,也就是: dsync on对应 directio off , directio on对应dsync off。dsync和directio不能同时启用,但是可以同时关闭。

如果已将设备的dsync属性配置为on,那么不能再将directio设置为on;如果想设置directio为on,那么必须先将dsync设置为off。

3、dsync on/off表示ASE是否保证把数据写入到设备上面去;directio on/off表示ASE是否跳过操作系统的文件系统缓存。

  • dsync on和directio off表示ASE的写操作直接在存储介质上进行,能够保证数据完全写入到设备上以及数据库的可恢复性;
  • dsync off和directio on表示ASE的写操作跳过操作系统缓冲区高速缓存,直接将数据传输到磁盘,不能保证数据真正写入到设备上;
  • dsync off和directio off表示使用文件系统的缓存。

4、在SUSE上测试ASE 15.7使用文件系统设备文件时默认是directio on(dsync off),已经跳过文件系统缓存了。

修改ASE的服务器名称

ASE全局环境变量@@servername保存当前的服务器名称。

假如将ASE服务器名称从ase1503test修改成ase1503xen,

下面是修改ASE服务器名称的步骤:

1、在ASE服务器的interfaces文件中添加新服务器名称条目信息
vi $SYBASE/interfaces
添加:
ase1503xen
   master tcp ether XXXXX 75430
   query tcp ether XXXXX 75430
 
 
2、修改RUN_servername启动文件中的服务器名称
vi $SYBASE/ASE-15_0/install/RUN_ase1503test
将-sase1503test 改为 -sase1503xen
并将启动文件名称由RUN_ase1503test 修改为:RUN_ase1503xen
 
 
3、在ASE中添加新的服务器名称
用isql登录要修改的ASE服务器,执行:select @@servername查看当前的ASE服务器名称。
先删除旧服务器名称: sp_dropserver ase1503test
再添加新的服务器名称: sp_addserver ase1503xen,local,ase1503xen
这时,使用sp_helpserver查看到新服务器名称ase1503xen已经添加到ASE了。
但是全局环境变量@@servername仍为旧名称。
重启ASE服务器后,执行select @@servername发现名称已经改好了!

使用Apache JMeter进行数据库压力测试

学习使用Jmeter对数据库进行压力测试。JMeter中称之为测试计划

JMeter的一个测试计划,包括:线程组、数据库连接、前置处理器、Sampler、后置处理器、监控结果等。

1.添加线程组:在测试计划上点右键,选择:添加》Threads(Users)》线程组;

2.添加JDBC Connection Configuration: 在线程组上点右键,选择:添加》配置元件》JDBC Connection Configuration;

3.添加前置处理器:在线程组上点右键,选择:添加》前置处理器》JDBC PreProcessor;

4.添加Sampler:在线程组上点右键,选择:添加》Sampler》JDBC Request;

5.添加后置处理器:在线程组上点右键,选择:添加》后置处理器》JDBC PostProcessor;

6.添加监控结果:在线程组上点右键,选择:添加》监听器, 可以使用 Summary Report、图形结果、用表格查看结果、监视器结果等等。

7.添加Random Variable:添加》配置元件》Random Variable;

可以设置上下级关系。

使用第三方工具访问ASE表时汉字乱码问题的解决方法

第三方工具连接ASE时,主要使用的接口方法包括:open-client 、ADO.NET和 jdbc。

第三方工具主要包括:
使用open-client接口的工具有:PowerBuilder、DBArtisan、Werysoft QweryBuilder等;WinSQL有自己的数据链接库,类似open-client方式;
使用jdbc接口的工具有:Aqua Data Studio、DbVisualizer、RazorSQL、DBeaver、DBArtisan 等;
使用ADO.NET接口的工具有:Toad for Sybase等;

解决方法:

使用open-client接口时,不需要将disable character set convers设置为1,仅需要在客户端工具中将显示字符集调整为服务器端字符集,可能有时候也需要调整一下显示的字体。
使用jdbc接口时,需要将disable character set convers设置为1,并在jdbc的连接串中将charset设置为cp936。

对于服务器端字符集为:iso_1且参数disable character set convers为默认值0的环境,可在jdbc连接串中添加:?SQLInitString=set char_convert off&charset=cp936

因此:

如果disable character set convers设置为1,两种类型的工具都可以使用。
如果disable character set convers为默认值0,那么建议使用open-client接口的工具。

以上情况适用于服务器端为iso_1,cp936等字符集的情况。

ASE中对于大文本字段的使用方法

ASE中对 text、image 和 unitext 列的限制
不能在以下情况中使用 text、image 或 unitext 列:

  1.   用作存储过程的参数或传递给这些参数的值
  2.   作为局部变量
  3.   在 order by clause、compute clause、group by 和 union 子句中
  4.   用于索引
  5.   用于子查询或连接
  6.   在 where 子句中,除非带有关键字 like
  7.   同 + 并置运算符一起使用

建立测试数据:
create table test_lob(id int not null,notes text null)
go
insert into test_lob values(1,replicate('x',1024))
go
insert into test_lob values(2,replicate('y',16384))
go
如果想造text类型字段的数据的话,因为ASE中字符串函数、变量等受限于16384,可以先bcp导出,编辑后再导入。

查看text类型字段的长度,使用函数: datalength 。
select id,datalength(notes) from test_lob
go