存档

‘Sybase ASE’ 分类的存档,文章数:183

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

Job Scheduler 提供了定义和调度数据库管理和维护任务的能力,从而简化了 ASE 的管理。有了 Job Scheduler,就可以将通常需要数据库管理员干预的作业安排为在合适的时间以无人值守的方式运行,从而让数据库管理员腾出手来关注其它问题。

    先介绍四个属于:作业、日程表、作业历史、预定作业、Job Scheduler任务、Job Scheduler代理、目标服务器、模板。

作业:在一次数据库操作中,例如备份、更新统计信息和转储数据库,对数据库执行的一个或多个系列操作。

日程表:定义了执行作业的时间以及如何重复执行作业。

作业历史:曾经执行过的预定作业。

预定作业:是指已绑定到某个日程表的作业。只有经过调度的作业才会执行。

Job Scheduler 任务(JS 任务):是功能性组件,负责管理日程表和及时通知 Job Scheduler 代理执行某个特定作业。

Job Scheduler 代理(JS 代理):是功能性组件,负责在接到 JS 任务通知时执行某个作业。

重复执行的日程表:是将要多次执行的日程表。所有重复执行的日程表都必须有开始和结束时间。

目标服务器:是预定要在其上运行业务的 Adaptive Server。

模板:是一组带有参数的 Transact-SQL (T-SQL) 语句,可用于在 Job Scheduler 中创建作业。

当您手边没有Sybase ASE服务器或者客户端环境时,当您想查看一些命令或参数而又不方便接触ASE服务器时,您可以考虑使用这台互联网上的ASE测试服务器。

本博客为Sybase初学者或者DBA完全免费提供此ASE15.0.3测试服务器。ASE所在的服务器为本博主自费购买的美国VPS虚拟机。

目前,ASE测试服务器仅支持php页面访问。使用ASE客户端直连服务器的方式后续可能会开通。

试用方法:

直接访问该页面:

Sybase ASE v15.0.3测试服务器

Sybase ASE v15.7测试服务器

试用说明:

1.本测试服务器版本为:ASE 15.0.3 ESD#4.1 / ASE 15.7 SP101,部署在Centos 5.6 64bit上;
2.本测试服务器使用免费版本:Express Edition,最多支持1 CPU,2G 内存,5G 数据库空间;
3.使用登录tpchuser连接服务器,登录tpchuser为数据库megaphone的属主,登录tpchuser不拥有sa_role角色;
4.数据库megaphone中有几张表:service、month、residential_customer(10万行)、telco_facts(120万行);
5.SQL语句执行结果有两种显示方法:表格和文本形式,表格形式使用PHP的sybase_query等函数,文本形式使用isql调用SQL文件;
6.PHP中函数sybase_query只能返回一个结果集,对于返回多个结果集的存储过程或者SQL语句块 请使用文本形式查看执行结果;
7.对于不熟悉的命令,可以使用语法数据库sybsyntax,比如:sp_syntax 'update statistics'会显示更新统计信息的相关语法;
 8.请不要执行具有破坏性的语句或命令,一些示例SQL语句请参考:queries.sql
9.有问题或者建议请发邮件:dbainfo(c)126.com

本博客提供免安装(绿色版)的ASE客户端工具Sybase Centralv4.3

统计Sybase ASE数据库的数据段和日志段的剩余空间以及剩余率。以下SQL在ASE12.5.1及以上版本通过测试。

 

select convert(char(16),db_name(data_segment.dbid)) DBName
,str(round(total_data_pages / ((1024.0 * 1024) / @@maxpagesize),2),10,2) "Total Data(MB)"
,str(round(free_data_pages / ((1024.0 * 1024) / @@maxpagesize),2),10,2) "Free Data(MB)"
,str(round(total_log_pages / ((1024.0 * 1024) / @@maxpagesize),2),10,2) "Total Log(MB)"
,str(round(free_log_pages / ((1024.0 * 1024) / @@maxpagesize),2),10,2) "Free Log(MB)"
,str( round(100.0 * free_data_pages / total_data_pages ,2),10,2) "Free_Data%"
,str( round(100.0 * free_log_pages / total_log_pages,2),10,2) "Free_Log%"
from
(select dbid,sum(size) total_log_pages,lct_admin("logsegment_freepages", dbid ) free_log_pages
  from master.dbo.sysusages
    where segmap & 4 = 4
    group by dbid
) log_segment
,
(select dbid,sum(size) total_data_pages ,sum(curunreservedpgs(dbid, lstart, unreservedpgs)) free_data_pages
  from master.dbo.sysusages
    where segmap <> 4
    group by dbid
) data_segment
where data_segment.dbid = log_segment.dbid
  --and data_segment.dbid > 3 and data_segment.dbid < 31513
order by data_segment.dbid
go

 

目标数据库:andkylee,大小:3300M,其中数据段2700M,日志段600M。为其配置dbcc检查使用 dbcc checkstorage 的准备工作

1.根据用户数据库andkylee的情况获取dbccdb的空间大小、工作空间大小、高速缓存大小、工作进程数的建议值

 

sp_plan_dbccdb "andkylee"
go

显示结果如下:

Recommended size for dbccdb database is 94MB (data = 92MB, log = 2MB).
No suitable devices for dbccdb in master..sysdevices.
Recommended values for workspace size, cache size and process count are:
dbname                         scan ws  text ws  cache  comp mem  process count
andkylee                       40576K   10176K   10151K 0K        3
(return status = 0)
由上,建议dbccdb的空间大小至少94M(其中数据段至少92M,日志段至少2M),scan工作空间至少40576K,text工作空间至少10176K,命名高速缓存至少10151K,工作进程数至少3个。

一、Sybase ASE中对表中已有的列修改默认值属性,使用命令:

alter table [database.][owner].table_name replace column_name default { constant_expression | user | null}

比如将表tmp1中dealtime字段设置成默认值为当前日期,使用:

alter table tmp1 replace dealtime default getdate()

删除列上的默认值属性:

将缺省值设置为null会删除缺省值,如: alter table tmp1 replace dealtime default null

Sybase ASE对null is null的处理结果是什么呢?
下面的SQL语句会返回所有的对象名吗?
select name from sysobjects where type=null or null is null
答案是:根据ASE版本不同,结果也不同。

在ASE v15.0.3之前的版本中会报下面的错误:
Invalid operator for datatype op: is null type: VOID TYPE.
在v15.0.3及以后的版本中,对is null的处理结果和我们平时直观的想法相同,
上面SQL语句会返回所有的对象名称。

sybase数据库中去除重复数据的方法有很多中,比如:identity+max(),set rowcount N 或 top N,distinct,ignore_dup_key等等。

以后花时间整理一下去除重复数据的不同方法。

今天,仅仅介绍如何使用union操作符来去除重复值。

在select命令中union all不删除重复行,而union会删除重复行。

这样的话,将包含重复行的记录通过union操作符插入到一张临时表中,然后再倒回来就行了。