扩展文件系统访问
一、什么是扩展文件系统访问(XFS)?
ASE 12.5之后的版本包含了很多个新的特性和功能。其中有一个非常有用的就是扩展文件系统访问。
在目前的商业系统中,很多情况下数据可能并不会所有的都存入到数据库中,而有可能是以文件的方式存在,因此引入了XFS这个概念,可以让ASE管理好需要管理的文件,并能够通过sql语句来进行操作。
要能够访问操作系统文件,需要在数据库中建立对应的代理表。代理表的功能就是在文件和数据库要操作的表直接建立一个映射关系。代理表的一些特性本文中就不再赘述。建立了代理表之后,就可以使用标准的T-SQL命令来对文件进行创建、删除、写和查询了。当然这其中也包括了权限,组,属主等属性。
扩展文件访问提供了两个不同的方式。
1、 使用文件访问,你可以使用将代理表映射到单独的一个ASCII文本文件。
2、 使用扩展文件目录访问,你可以将代理表映射到一个目录,和它的所有的子目录和文件。
二、XFS配置过程
1、XFS的授权
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
五、结束语
本文对扩展文件访问从概念上、操作上做了一些简单的介绍,其中会有不足之处,请大家多多指正。也希望本文对大家有一定的帮助。 |