powersybedit-hobbylu
  首页 帮助 退出
最新日志
无题(2008-04-26)
扩展文件系统访问(2007-08-07)
powersybedit之数...(2007-07-29)
powersybedit推出...(2007-07-26)
无题(2007-07-10)
历史档案
最新评论
访客/2008-04-10
支持!
我也是刚学s....
访客/2008-04-09
http://ww....
访客/2008-02-28


支持....
访客/2008-02-20
在哪下啊
访客/2008-02-14
下载
我的相册
我的网摘
友情链接
我的LOGO
 

本人学习研究sybase已经n多年了,从刚开始什么都不会,到现在自诩为的"专家",感受也颇深。我都会sybase什么东西呢?sybase是一个软件公司,其中包括...查看全文

·心情日记
·我的软件
·relication server
·ASE数据库

 
2008.04.26 18:16:00 
 无题  

好久好久没有上自己的博客了,每个时间段都有自己感兴趣的地方,前一段时间钟情于股票,试着自己去分析一些股票信息,于是弄了一些股票的源代码,并取出数据进行分析。可惜大行情实在事不好,大大的套牢啊。

AUL跟我联系上,希望推出AUL FOR SYBASE版本,因此已经推出了AUL FOR SYBASE的测试版本,大家感兴趣可以下载。这个工具可以完全脱离出sybase的环境,有一定的数据恢复功能,但肯定有很多bug,在接下来的日子中,可能想推出其他平台的版本,比如linux、unix等,工作量还是比较大。

我一直都有一个域名和空间,叫www.db-expert.com,可惜自己不会弄网站,还没有推出来,如果能够推出,或许对自己的市场化会有很大的帮助。思考再三,还是决定去弄,争取在五月份能够跟大家见面。

另外最近有很多公司想跟我合作项目,可惜本人时间实在是有限制,毕竟现在还是在国有企业中工作的员工。不过,如果做些咨询服务或者不要脱身的工作,我想我还是会给大家提供帮助的。

还有开始着手培训和使用sybase的产品ma,并在实验环境中测试通过,但总觉得缺少点东西。如果大家感兴趣,我可以为大家介绍一下,MA的工作原理,和简单环境的建立。

对了,今天还是儿子三周岁生日,日子过的好快。给宝宝祝福一下吧,健康快乐永远伴随你。

标签:
作者 hobbylu 阅读全文 |  评论()  | 人气() |  引用()  | 推荐 | 保存日志
 
2007.08.07 09:54:00 
 扩展文件系统访问  

扩展文件系统访问

一、什么是扩展文件系统访问(XFS)?

ASE 12.5之后的版本包含了很多个新的特性和功能。其中有一个非常有用的就是扩展文件系统访问。

在目前的商业系统中,很多情况下数据可能并不会所有的都存入到数据库中,而有可能是以文件的方式存在,因此引入了XFS这个概念,可以让ASE管理好需要管理的文件,并能够通过sql语句来进行操作。

要能够访问操作系统文件,需要在数据库中建立对应的代理表。代理表的功能就是在文件和数据库要操作的表直接建立一个映射关系。代理表的一些特性本文中就不再赘述。建立了代理表之后,就可以使用标准的T-SQL命令来对文件进行创建、删除、写和查询了。当然这其中也包括了权限,组,属主等属性。

    扩展文件访问提供了两个不同的方式。

1、            使用文件访问,你可以使用将代理表映射到单独的一个ASCII文本文件。

2、           使用扩展文件目录访问,你可以将代理表映射到一个目录,和它的所有的子目录和文件。

二、XFS配置过程

      1XFS的授权

       XFS的功能,只有在你的ASE_XFS许可证生效之后,才能够在你的系统中使用。至于如何配置许可证,这里就不多描述,具体可以参考SYSAM相关文档。

      2、激活文件访问

       将配置参数enable cis设置为1

              sp_configure ‘enable cis’,1

三、使用文件系统访问

     1访问文件

         本例中,我们将建立一个名叫Xerrors的代理表,直接映射到%SYBASE_ASE%\install目录下的errorlog文件

create proxy_table Xerrors external file at 'c:\sybase\ASE-12_5\install\errorlog'

这条命令创建了一个只有一个名为’record’列的表,类型是varchar(255)。现在我们可以查询错误日志文件中的内容了。比如:

select record from Xerrors where record like "%ASE_XFS%"

record
------
00:00000:00000:2007/07/30 22:46:57.67 kernel  Checked out license ASE_XFS

对于代理表映射到一个文件,需要以下条件

1、           文件比如是ASCII文本格式的。

2、           ASE引擎必须有权限访问相应文件。

3、           如果文件是要被创建的,那么在创建目录需要有写权限。

2 访问行长超过255字节的文本

在这种情况下,我们需要对代理表显示指定列名以及长度,如:

create existing table Xtext (record varchar(512) null)
external file at 'c:\sybase\ASE-12_5\install\errorlog'

4、        如何定义文件中的列

对于一些格式化的文本文件,比如bcp文件等,我们可以在代理表中指定改文件的列名,就如同原始的表一样,如:

create [existing] table Xpublishers
(
 pub_id  char(4),
 pub_name varchar(40),
 city  varchar(20),
 state char(2)
)
external file at 'full file path' [
列分隔符 "<string>"]

3.4 文件访问支持的命令

支持的命令如下:

  • insert
  • select
  • truncate
  • drop

四、使用目录访问

 

1 访问一个目录

访问目录主要包括以下几个功能:

  • 操作目录,子目录还有文件efficiently insert new files with content.
  • 新建目录
  • 拷贝目录
  • 删除文件

2 目录访问规则

目录必须被ase可以访问得到。在创建代理表的时候,路径上加上’;R’可以让代理表访问子目录。

以下是创建代理表命令:

create proxy_table Xdirect
external directory at '/home/sybase/dir1;R'

3 目录访问支持的命令

  • select
  • select into
  • insert
  • delete
  • update
  • writetext
  • readtext

例子如下

select

select filename, filetype from Xdirect
where filetype = 'REG'

select into

select * into local_table
from Xdirect

select * into Xdirect
from local_table

insert

insert into Xdirect (filename, content)
values('dir2/inventory', 'canned soup, magazines,

insert into Xdirect (filename, filetype)
values ("subdir1", "DIR")

delete

delete from Xdirect
where filename = "dir2/dir3/farm_supplies"

update

update Xdirect
set filename = 'just_cupcakes'
where filename = 'dir2/dir3/baked_goods'

writetext

declare @value varbinary(16)
select @value = textptr(content) from Xdirect
where filename = "batteries"
writetext Xdirect.content @value "solar calculators"

readtext

select content from Xdirect
where filename = "batteries"

declare @val varbinary(16)
select @val = textptr(content) from Xdirect
where filename = "batteries"
 readtext Xdirect.content @val 1 5 using chars

五、结束语

本文对扩展文件访问从概念上、操作上做了一些简单的介绍,其中会有不足之处,请大家多多指正。也希望本文对大家有一定的帮助。

标签:
作者 hobbylu 阅读全文 |  评论()  | 人气() |  引用()  | 推荐 | 保存日志
 
2007.07.29 15:38:00 
 powersybedit之数据误删恢复  

数据库某个表被误删的情况下如何进行恢复。(不考虑有备份的情况)
一般情况下,1、可以通过扫描整个数据库的设备进行恢复;2、扫描日志。
第二种办法需要保证日志没有被截断的情况下.当然就算truncate log on checkpoint选项打开,如果马上对数据库做一个dump,在某种程度上还是可以对日志进行恢复的。powersybedit对于日志表syslogs有一个原始操作语句的功能。也就是可以把日志中delete掉的数据变成一条sql语句。因此,可以有针对性的对所有的页中的页的表id为8的也进行扫描和分析,得出被删除表的数据。powersybedit目前没有很方便的可以输入参数的方式进行扫描,目前只能修改代码进行控制,不过我想不久的将来,我会将这个功能实现的。

标签:powersybedt , 灾难恢复,sybase,误删表
作者 hobbylu 阅读全文 |  评论()  | 人气() |  引用()  | 推荐 | 保存日志
 
2007.07.26 11:20:00 
 powersybedit推出新功能  
powersybedit是一个非常强大的sybase数据恢复软件
最近有一个客户,系统硬盘损坏,经过抢救之后,得到了一些破损的备份文件,由于破损,无法正常的load数据库当中。因此要恢复里面所有的表。该破损文件有2G大小,表有一百多个,在原来的版本中只能够一个一个进行扫描,进度相当缓慢,因此进行了修改和优化,使系统支持扫描一次文件,对所有的需要扫描的表进行分析。此项工作已经基本完成,效率提高将近50倍。算是一个创举吧。最后从文件中恢复出近一千万的数据,所化的时间,也仅为2-3小时
标签:sybase 灾难恢复 powersybedit
作者 hobbylu 阅读全文 |  评论()  | 人气() |  引用()  | 推荐 | 保存日志
 
2007.07.10 23:57:00 
 无题  
好久没有写日志了,想想应该把自己最擅长的东西推销出去,sybase灾难恢复。有这方面需要的,可以跟我联系
标签:数据库,灾难恢复,sybase
作者 hobbylu 阅读全文 |  评论()  | 人气() |  引用()  | 推荐 | 保存日志
 
2007.01.07 09:48:39 晴
 有关利用java功能在ase中建立自己需要的函数  
create function (SQLJ)
说明通过将SQL 包装加入到Java 静态方法中,创建用户定义的函数。可返
回一由该方法定义的值。
语法create function [owner.]sql_function_name
( [ sql_parameter_name sql_datatype
[( length)| (precision[, scale ]) ]
[ [, sql_parameter_name sql_datatype
[( length )| ( precision[, scale ]) ]]
... ] ] )
returns sql_datatype
[ ( length)| (precision[, scale ]) ]
[modifies sql data]
[returns null on null input |
called on null input]
[deterministic | not deterministic]
[exportable]
language java
parameter style java
external name 'java_method_name
[ ( [java_datatype[, java_datatype
...] ] ) ] '
参数sql_function_name
是函数的Transact-SQL 名称。它必须符合标识符的规则且不能是变量。
sql_parameter_name
是该函数的参数名。函数执行时,提供每个输入参数的值。参数是可
选的, SQLJ 函数不需要带参数。
参数名必须符合标识符的规则。如果参数的值包含非字母数字字符,
则必须用引号将其引起来。这包括数据库名或所有者名限定的对象
名,因为它们包含一个句点。如果参数值以数字字符开头,则还必须
用引号将其引起来。
sql_datatype [(length) | ( precision [, scale])]
是参数的Transact-SQL 数据类型。有关这些参数的详细信息,请参见
第90 页的create procedure。
sql_datatype 是SQL 过程签名。
returns sql_datatype
指定函数的结果数据类型。
modifies sql data
表示Java 方法调用SQL 操作,读取并修改数据库中的SQL 数据。这
是缺省的、同时也是唯一的实现方法。将它包含进来是为了在语法上
与ANSI 标准兼容。

create function square_root
(input_number double precision) returns
double precision
language java parameter style java
external name 'java.lang.Math.sqrt'
标签:
作者 hobbylu 阅读全文 |  评论()  | 人气() |  引用()  | 推荐 | 保存日志
 
2007.01.06 13:14:13 晴
 读取其他session的临时表内容  
临时表,大家都知道是以#号为开头,并在tempdb数据库中建立的,而临时表又是session相关的。你的session读取不了别人的临时表中的内容。当然其他人也无法获取你的临时表的信息,就算有sa的权限。
但是我想很多人对别的session临时表的内容都非常感兴趣,那么我想可以通过以下的办法来获取其中的内容。
dbcc page的命令对于一个优秀的dba来说是应该掌握的一条命令,我们可以通过dbcc page读取出该临时表在tempdb中的相关页面信息,并将其分析出来。当然这个数据如果直接通过你的直觉去读取的话,我想对任何人都是一件很困难的事情。幸运的是,我在2006年写了一个东东,powersybedit,可以分析页面结构,我们就可以通过使用这个东东来获取其中的内容。
具体的操作我就不详细讲了,讲述了上述的过程之后,或许对大家有所帮助。


2007 1 6 wriiten in sjtu library
标签:
作者 hobbylu 阅读全文 |  评论()  | 人气() |  引用()  | 推荐 | 保存日志
 
2007.01.06 11:56:57 晴
 今天浏览了一下sybase官方网站,没想到上面居然有我的一篇文章  
摘录如下
Sybase:直接查询段的空间使用情况 

问:使用sp_helpsegment可以看到段的空间使用情况,但是显示结果中还有段上的所有表和索引信息,对于一个建有很多表的段来说,这是很恐怖的。想直接看到所关心的段的空间使用情况,请高手指点一下? 

答: 

/*Author Hobbylu*/ 

/*Reference from sybase procedures*/ 

/*2005-07-01*/ 

create procedure sp_helpsegment_me 

@segname varchar(30) = NULL /* segment name */ 

as 

declare @segbit int, /* this is the bit version of the segment # */ 

@segment int, /* the segment number of the segment */ 

@free_pages int, /* unused pages in segment */ 

@factor float, /* conversion factor to convert to MB */ 

@clr_pages int, /* Space reserved for CLRs */ 

@total_pages int, /* total allocatable log space */ 

@used_pages int, /* allocated log space */ 

@ismixedlog int /* mixed log & data database ? */ 

if @@trancount = 0 

begin 

set chained off 

end 

set transaction isolation level 1 

set nocount on 

/* 

** If no segment name given, get 'em all. 

*/ 

if @segname is null 

begin 


--Adaptive Server has expanded all '*' elements in the following statement 

select syssegments.segment, syssegments.name, syssegments.status 

from syssegments order by segment 

return (0) 

end 

/* 

** Make sure the segment exists 

*/ 

if not exists (select * 

from syssegments 

where name = @segname) 

begin 

/* 17520, "There is no such segment as '%1!'." */ 

raiserror 17520, @segname 

return (1) 

end 

/* 

** Show the syssegment entry, then the fragments and size it is on, 

** then any dependent objects in the database. 

*/ 

--Adaptive Server has expanded all '*' elements in the following statement 

select syssegments.segment, syssegments.name, syssegments.status 

from syssegments 

where name = @segname 

/* 

** Set the bit position for the segment. 

*/ 

select @segment = segment 

from syssegments 

where name = @segname 

/* 

** Now set the segments on @devname sysusages. 

*/ 

if (@segment < 31) 

select @segbit = power(2, @segment) 

else 

/* 

** Since this is segment 31, power(2, 31) will overflow 

** since segmap is an int. We'll grab the machine-dependent 

** bit mask from spt_values to set the right bit. 

*/ 

select @segbit = low 

from master.dbo.spt_values 

where type = "E" 

and number = 2 

/* 

** Get factor for conversion of pages to megabytes from spt_values 

*/ 

select @factor = convert(float, low) / 1048576.0 

from master.dbo.spt_values 

where number = 1 and type = "E" 

select @total_pages = sum(u.size) 

from master.dbo.sysusages u 

where u.segmap & @segbit = @segbit 

and u.dbid = db_id() 

select @ismixedlog = status2 & 32768 

from master.dbo.sysdatabases where dbid = db_id() 

/* 

** Select the sizes of the segments 

*/ 

if (@segbit = 4) 

begin 

select device = d.name, 

size = convert(varchar(20), round((sum(u.size) * @factor), 0)) + "MB" 

from master.dbo.sysusages u, master.dbo.sysdevices d 

where u.segmap & @segbit = @segbit 

and u.dbid = db_id() 

and d.status & 2 = 2 

and u.vstart between d.low and d.high 

group by d.name order by d.name 

select @clr_pages = lct_admin("reserved_for_rollbacks", db_id()) 

select @free_pages = lct_admin("logsegment_freepages", db_id()) 

- @clr_pages 

select free_pages = @free_pages 

if(@ismixedlog = 32768) 

begin 

/* 

** For a mixed log and data database, we cannot 

** deduce the log used space from the total space 

** as it is mixed with data. So we take the expensive 

** way by scanning syslogs. 

*/ 

select @used_pages = lct_admin("num_logpages", db_id()) 

/* Account allocation pages as used pages */ 

select @used_pages = @used_pages + (@total_pages / 256) 

end 

else 

begin 

/* Dedicated log database */ 

select @used_pages = @total_pages - @free_pages 

- @clr_pages 

end 

end 

else 

begin 

select device = d.name, 

size = convert(varchar(20), round((sum(u.size) * @factor), 0)) + "MB", 

free_pages = sum(curunreservedpgs(db_id(), u.lstart, u.unreservedpgs)) 

from master.dbo.sysusages u, master.dbo.sysdevices d 

where u.segmap & @segbit = @segbit 

and u.dbid = db_id() 

and d.status & 2 = 2 

and u.vstart between d.low and d.high 

group by d.name order by d.name 

select @free_pages = sum(curunreservedpgs(db_id(), u.lstart, u.unreservedpgs)) 

from master.dbo.sysusages u 

where u.segmap & @segbit = @segbit 

and u.dbid = db_id() 

select @used_pages = @total_pages - @free_pages 

select @clr_pages = 0 

end 

/* 

** Select the dependent objects 

*/ 


/* 

** Print total_size, total_pages, free_pages, used_pages and reserved_pages 

*/ 

select total_size = convert(varchar(15), 

round(@total_pages * @factor, 0)) + "MB", 

total_pages = convert(char(15), @total_pages), 

free_pages = convert(char(15), @free_pages), 

used_pages = convert(char(15), @used_pages), 

reserved_pages = convert(char(15), @clr_pages) 


return (0
 
::URL::http://www.sybase.com.cn/gvswse/site/china/content.jsp?_doc_id=1831
标签:
作者 hobbylu 阅读全文 |  评论()  | 人气() |  引用()  | 推荐 | 保存日志
 
2007.01.06 11:40:22 晴
 有关存储过程特点的一些介绍  
存储过程的特点 
  Sybase的存储过程是集中存储在ASE中的预先定义且已经编译好的事务。存储过程由SQL语句和流程控制语句组成。它的功能包括:接受参数;调用另一过程;返回一个状态值给调用过程或批处理,指示调用成功或失败;返回若干个参数值给调用过程或批处理,为调用者提供动态结果;在远程ASE中运行等。    

存储过程的性能特点如下 
  ?存储过程是预编译过的,这就意味着它与普通的SQL语句或批处理的SQL语句不同,当首次运行一个存储过程时,SQL Server的查询处理器对其进行分析,在排除了语法错误之后形成存储在系统中的可执行方案。由于查询处理的大部分工作已经完成,所以存储过程执行速度很快。 

?存储过程和待处理的数据都放在同一台运行ASE的计算机上,使用存储过程查询当地的数据,效率自然很高。 

?存储过程一般多由Client端通过存储过程的名字进行调用,即跨网传送的只是存储过程的名字及少量的参数(如果有的话),而不是构成存储过程的许多SQL语句,因此可以减少网络传输量,加快系统响应速度。 

?存储过程还有着如同C语言子函数那样的被调用和返回值的方便特性。 

所以,存储过程大大增强了SQL语言的功能、效率和灵活性。掌握和应用好存储过程,对进一步发挥Sybase数据库系统的强大功能有着重要的意义。 
 
标签:
作者 hobbylu 阅读全文 |  评论()  | 人气() |  引用()  | 推荐 | 保存日志
 
2007.01.06 11:32:30 晴
 今天下午口语考试  
来到交大的图书馆,感觉这里环境真不错,又有空调,在寒冬中有一股股的暖意
标签:
作者 hobbylu 阅读全文 |  评论()  | 人气() |  引用()  | 推荐 | 保存日志
 
  powered by blogcn.com