Sybase SQL Server是一个多库结构的RDBMS 体系结构大致如下
数据库
服务器自身所使用的数据库 也可以说是管理服务器和用户数据库的数据库 Sybase在安装时 自动创建了四个系统数据库
master model tempdb sybsystemprocs
) master数据库
它是管理和控制用户数据库以及维护服务器正常运行的核心数据库 它保存了大量的系统信息 如服务器配置 用户 设备等
在master数据库中不允许普通用户在其中创建数据库对象 否则会使得master数据库的事务日志很快变满 如果事务日志用尽 就无法使用dump transaction命令释放master数据库中的空间
)model数据库
它是为创建用户数据库而提供的模板 每当创建新的数据库时 SQL Server自动建立model数据库的一份拷贝 并把它扩充到用户所要求的大小 以此作为新用户数据库
Model数据库中包含每个用户数据库所要求的系统表 Model数据库可以被修改以便定制新创建的
)tempdb数据库
它是个临时数据库 为服务器运行与处理提供一个共享的存储区域 如group by和order by的中间结果就存放在这里 Tempdb的空间为服务器中所有数据库的所有用户所共享
每次重启SQL Server 服务器的一个自动进程都拷贝model数据库到tempdb数据库 并清除tempdb中原来的内容 因此tempdb中的用户表都是临时的 临时表分为两类 可共享的和不可共享的 不可共享的临时表在由create table中将符号#置于表名之前创立;可共享的临时表通过create table中指定表名前缀tempdb 而创立 不可共享的临时表SQL Server自动为其添加数字后缀名 且它只存在于当前会话中
)sybsystemprocs数据库master数据库
它是专门用来保存系统命令(存储过程)的数据库 如sp_help sp_configure sp_helpdevice等 当任一数据库用户运行以sp_开头的存储过程时 SQL Server按照以下顺序查找 当前数据库 sybsystemprocs数据库 master数据库
用户数据库
用户数据库是我们使用Sybase服务器的真正目的 要管理用户数据 必须在Sybase中创建自己的数据库 它是指用create database命令创建的数据库 不能存取master数据库的用户是无权创建新的数据库的
数据库中的主要内容——数据库对象
表 视图 临时表
索引 主键 外键
缺省值 规则
lishixinzhi/Article/program/Sybase/201311/11220
Sybase *** 作型BI数据管理与数据集成
数据管理服务组件
Sybase可提供 *** 作型BI数据管理与数据集成 它不仅开发了管理BI信息的产品 还开发了数据库设计产品 Sybase IQ与Sybase PowerDesigner则是其中两个关键的产品
Sybase IQ
Sybase *** 作型BI解决方案的基于是Sybase IQ关系型数据库系统 该产品于 年从Expressway收购而得 从那时起 它就稳步赢得客户的青睐 对高性能的BI信息管理能力的需求使得该产品更加引人关注 今天 全球使用Sybase IQ的客户超过 家
Sybase IQ与传统的关系型数据库最关键的不同之处就是 它是专门为高性能的分析型进程设计的 该性能通过存储数据的方式——列存储 而不是传统关系型数据库中的行存储而获得
Sybase IQ列存储模型提高了性能 因为查询中检索的只是列 从而减少了系统I/O 通过为每一个列的访问分配线程 允许进行并行的查询 而进一步提高了性能 这对涉及到多个列的复杂查询尤其有利 列存储模型的另一个好处就是它允许极高效率的数据压缩 例如 西班牙Telefonica管理著 TB的原数据 它们存储到Sybase IQ中 只有 TB 同时 他们发现 查询的运行速度比传统的解决方案能快到 倍
从BI应用外部来看 Sybase IQ数据库跟其他的关系型数据库并没什么两样 该产品支持标准的SQL 提供各种功能如存储过程 函数等 应用接口支持ODBC JDBC OLEDB Web 服务器 运行环境包括Linux Windows Unix等 Sybase IQ数据库的非结构化数据选项支持存储大型二进制对象 比如文本与多媒体数据等
另外 Sybase还提供了一个可选的Sybase IQ Multiplexing功能 允许一个单一的Sybase IQ数据库被多个计算机节点共享 这进一步提高了大型数据库与工作负载的性能与可扩展性 服务器 处理器 硬盘可以按照需要加入到该配置中 该解决方案支持传统供应商如HP IBM Sun等公司提供的硬件与 *** 作系统软件
Sybase PowerDesigner
Sybase PowerDesigner是一个行业领先的企业模型工具 他将商业分析与数据库设计加入到传统的软件生命周期 它联合使用了大量的建模机制 包括业务进程建模 数据建模 基于对象的UML建模 以及XML建模 它支持主要的行业开发环境如JAVA Eclipse Microsoft NET 而且支持超过 个关系型数据库产品包括Sybase IQ IBM DB Oracle Microsoft SQL Server等
PowerDesigner提供了一个元数据管理功能 支持需求管理 影响分析 文档 数据映射 SOA驱动的项目的综合管理 基于角色的安全等等 它通过团队协作 以及将商业需求同商业与数据模型进行联结和同步的功能强化了商业与IT的结合
数据集成服务组件
Sybase支持数据集成机制中的数据联合和数据传播方式 即Sybase Avaki EII支持数据联合 Sybase Replication Server支持数据传播 而数据合并与ETL则由Sybase第三方合作伙伴如Business Objects IBM Ascential与Informatica提供支持
Sybase Avaki EII
Sybase Avaki EII是Sybase公司于 年 月通过收购Avaki公司而获得 就象其他EII产品 Sybase Avaki EII提供了一个分散数据的虚拟商业视图 对于BI应用 使用一个虚拟视图 分散的数据看起来是存储在一个单一的SQL关系型表中 当应用基于该视图提交一个SQL语句时 EII服务器访问与 *** 作适当的数据源 组合成一个查询结果集 将结果集返回到应用 EII Server将SQL 进程智能地分配到源系统中 以减少需要从给定的源系统中检索的数据量
Avaki EII支持的数据源包括纯文本文件(包括XML NFS等) 关系型数据库 商业应用(例如JCA Web服务器 或由iWay Sofare等公司提供的第三方连接器)
该产品包含了有别于其他竞争对手的特征
· 服务视图 随时可用 它包含支持更深入的数据转换与分析的嵌入式程序逻辑 除了Sybase 提供的服务视图之外 开发人员可以使用JavaScript编写他们自己的视图 服务视图与SQL视图使用基于Eclips的Avaki Studio开发工具进行定义与管理
· Avaki EII集成框架允许服务视图与外部应用如数据质量与ETL工具 定制的代码等等进行交互
· 一个集成的缓冲工具允许结果提前预存(基于管理员定义的参数) 以提升查询性能
· Sybase Avaki EII提供了一个有价值的EII功能 可以直接被BI报表与分析型应用使用 或者与Sybase IQ数据库配合使用时由Sybase IQ应用使用
Sybase Replication Server
Sybase Replication Server支持数据变化从源系统到目标系统的数据传播 在Sybase *** 作型BI环境中 目标系统将会是Sybase IQ信息管理环境 其他目标系统包括那些Sybase RepConnect与EnterpriseConnect支持的系统 RepConnect 允许数据变化传播到消息产品(IBM Websphere JMS TIBCO) 而EnterConnect支持第三方数据库系统如IBM DB Microsoft SQL Server Oracle与ODBC
Replication Server支持的数据源包括IBM DB IBM IMS与VSAM Microsoft SQL Server Oracle Sybase ASE以及SQL Anywhere 复制代理(Replication Agent)从这些源数据库日志文件中捕获数据变化 这种数据复制的异步方式降低了复制代理对 *** 作型BTx应用的性能影响 这些数据变化可以被传播到 Sybase IQ低延迟数据存储中以备由 *** 作型BI应用进行 *** 作
Sybase *** 作型BI解决方案提供了一个适时数据集成环境 它将数据变化压缩 传送到由Sybase IQ管理的低延迟的存储中 第三方 *** 作型报表和绩效管理应用可以使用Sybase IQ提供的高性能的查询能力以生成 *** 作型图形显示并据此执行自动化决策 当需要当前信息时 BI应用可以使用Sybase Avaki EII服务访问分散的 *** 作型数据
*** 作型BI案例研究
西班牙Telefonica和澳大利亚电信供应商Telstra是两个已经成功使用Sybase IQ的客户 他们清楚地显示了 *** 作型BI如何使企业更加灵活与更加智能
西班牙Telefonica 万客户端的信息 来自于 个各自独立的分散的 *** 作型系统 Telefonica开发了统一信息系统作为其 *** 作型数据存储(ODS)概念的一部分 该系统的目标是为Telefonic众多 *** 作型系统的数据管理建立一个单一的 集成的 通用的数据存储 企业内的所有用户都通过访问这个单一的数据库存储来处理 *** 作型信息 而不论这些信息最初来源于哪个 *** 作型系统
为部署ODS项目 Telefonica使用Sybase IQ与Sybase Replication Server Replication Server用于从运行在MVS之上的IBM DB 和运行在UNIX平台的Oracle中捕获在线更新并传送到Sybase IQ ODS中 每隔 分钟 从 *** 作型系统将更新传送到ODS中
为确保项目的顺利进行 还引入了一个先导测试 该测试基于Sybase与Sun共同提供的数据仓库参考设计 花费四周的时间完成 该模型存储了比其他市场上的数据库多出 到 倍的存储容量 同时减少了在硬件 支持 管理与维护上的成本 Telefonica系统工程经理Pedro Romera说 至于响应速度 该平台显示出超出其他系统 多倍的性能优势
另外 该项目的革新之处在于所有的Telefonica *** 作型系统将向ODS提供数据 这意味着Sybase IQ将管理大约 TB的压缩数据(相当于 TB的真实信息) 为维护大量数据下的高效性 Sybase IQ Multiplex功能被加以使用
Telstra为澳大利亚提供广泛的电信与信息服务 包括固定电话线路 两个移动电话网络以及Internet服务 Telstra是 年悉尼奥运会独家电信供应商
Telstra需要一种技术 可以提供接近实时的有关通话事务的信息 以便调整其移动蜂窝管理系统从而满足需求 我们需要在奥运会期间运行一个无失误的 无堵塞的移动电话网络 Telstra区域网络经理 Anthony Goonan说
Telstra所要面对的挑战 主要是移动服务 它需要提供无堵塞的网络访问 对我们而言 存在大量的未知情况——究竟有多少人会来到悉尼他们对移动电话的使用量以及由国际无线通讯以及印刷媒体所产生的话务量是多少呢 Goonan说 我们需要实时观察网络的性能以满足所有这些需求
在网络设计时 Telstra部署了一种可以将容量从网络的某部分转移到另外部分的功能 这取决于客户在哪里发出呼叫 当我们为此搜寻解决方案时 我们发现了Compudigm的SeePower 它由Sybase IQ提供技术基础 正是我们所需要的解决方案 Goonan说
在奥林匹克公园 Telstra部署了超过 个移动电话蜂窝系统 大约每 平方英里一个 我们需要我们的工程师同时观察所有这些蜂窝系统的性能 Goonan说 该应用具有这种功能 它能将整个奥林匹克的网络运行情况显示到一个屏幕上 并接近实时地辨识热点区域 这使我们可以调整网络以满足我们客户的需求
Sybase IQ从遍及悉尼奥林匹克公园的 多个蜂窝系统上收集大量的数据 这是我们第一次在蜂窝移动网络运行过程中拥有这种综合的强大功能 Goonan 说 Sybase IQ实时地将数据发送到seePower应用 它为我们的工程师提供了管理网络的信息 从而为我们的客户提供他们所需的服务
lishixinzhi/Article/program/Sybase/201311/21916
存储过程的特点
Sybase的存储过程是集中存储在SQL Server中的预先定义且已经编译好的事务 存储过程由SQL语句和流程控制语句组成 它的功能包括:接受参数;调用另一过程;返回一个状态值给调用过程或批处理 指示调用成功或失败;返回若干个参数值给调用过程或批处理 为调用者提供动态结果;在远程SQL Server中运行等
存储过程的性能特点如下:
·存储过程是预编译过的 这就意味着它与普通的SQL语句或批处理的SQL语句不同 当首次运行一个存储过程时 SQL Server的查询处理器对其进行分析 在排除了语法错误之后形成存储在系统中的可执行方案 由于查询处理的大部分工作已经完成 所以存储过程执行速度很快
·存储过程和待处理的数据都放在同一台运行SQL Server的计算机上 使用存储过程查询当地的数据 效率自然很高
·存储过程一般多由Client端通过存储过程的名字进行调用 即跨网传送的只是存储过程的名字及少量的参数(如果有的话) 而不是构成存储过程的许多SQL语句 因此可以减少网络传输量 加快系统响应速度
·存储过程还有着如同C语言子函数那样的被调用和返回值的方便特性
所以 存储过程大大增强了SQL语言的功能 效率和灵活性 掌握和应用好存储过程 对进一步发挥Sybase数据库系统的强大功能有着重要的意义
存储过程的语法规则
建立存储过程的语法规则为:
CREATE PROCedure[owner ]procedurename[;number] [[(]@parameter_name datatype[=default][OUTput] [ @parameter_name datatype[=default][OUTput]] [)]] [WITH REPILE] AS SQL_statements
使用存储过程的语法规则为:
[EXECute][@return status=] [[[server ]database ]owner ]procedurename[;number] [[@parameter_name=]value|[@parameter_name=]@varialbe[OUTput] [ [@parameter_name=]value|[@parameter_name=]@variable[OUTput] ]] [WITH REPILE]
[page]下面简要介绍这两个命令的常用选项以及建立和使用存储过程的要点 关于选项的更为详细的说明请参考有关手册
·[[[server ]database ]owner ]procedure_name:存储过程的名字
·@parameter_name datatype[=default][OUTput]:形式参数(形参)的名称 类型 df ault是赋予的缺省值(可选) OUTput指定本参数为输出参数(可选) 形参是存储过程中的自变量 可以有多个 名字必须以@打头 最长 个字符
·SQL_statements:定义存储过程功能的SQL语句
·@return_status:接受存储过程返回状态值的变量
·[@parameter_name=]value:实际参数(实参) @parameter_name为实参的名称(可选) 如果某个实参以@parameter_name=value提供 那么随后的实参也都要采用这一形式提供
·[@parameter_name=]@varialbe[OUTput]:将变量@varialbe中的值作为实参传递给形参@parameter_name(可选) 如果变量@varialbe是用来接受返回的参数值 则选项OUTput不可缺少
存储过程的建立和使用 我们将通过几个例子进行介绍
假设有一个用下述语句生成的技能工资表RS LS GZ JiNeng:
create table RS_LS_GZ_JiNeng /技能工资表/
(GeRen_id char( ) /个人代码 /
RiQi alldatetime /执行日期 /
YuanYin_id char( ) null /变动原因代码 /
JinE allmoney) /技能工资金额 /
该表存储著某单位员工多年来技能工资的历史档案
例 如果要查询全体员工的技能工资变动历史 则可先建立一个存储过程p RsGz JiNeg All:
create procedure p_RsGz_JiNeng_All as select from RS_LS_GZ_JiNeng order by GeRenid RiQi
然后用批处理语句调用存储过程p_RsGz_JiNeng_All进行查询:
execute p_RsGz_JiNeng_All
本例只显示查询到的数据 无输入 输出参量 是最简单的一个存储过程
例 如果要查询某人技能工资的变动历史 可建立另一个存储过程p_RsGz_JiNeng:
create procedure p_RsGz_JiNeng @c_GeRenId char( ) as select from RS_LS_GZ_JiNeng where GeRen_id=@c_GeRenId order by RiQi
之后用批处理语句调用存储过程p_Rs_Gz_JiNeng进行查询:
declare @GeRenId char( )
select @GeRenId= /设要查询员工的个人代码为 /
execute p_RsGz_JeNeng @c_GeRenId=@GeRenId
存储过程p_RsGz_JiNeng中定义了一个形参@c_GeRenId 是字符型变量 在调用该过程的批处理中 既可以用具体的值也可以用变量作为实参 用变量作实参(如本例)时 必须用del are语句加以说明 值得注意的是 在批处理的调用过程语句中 @c_GeRenId=@GeRenId中的@ c_GeRenId是存储过程p_RsGz_JiNeng中的形参名 不是批处理中的变量 所以不能将它列入d eclare语句的变量单中
例 如果要计算当月工资 就必须从工资历史中查出员工距离当前最近的一次技能工资变动的结果:
create procedure p_RsGz_JiNeng_Slt (@c_GeRenId char( ) @ _JinE allmoney output) as select @ _JinE=JinE from RS_LS_GZ_JiNeng where RiQi=(select max(RiQi) from RS_LS_GZ_JiNeng
where GeRenid=@c GeRenId)/找出历史记录中距离当前最近的日期/
调用存储过程p_RsGz_JiNeng_Slt进行查询:
declare @GeRenId char( ) @JinE allmoney select @GeRenid= /设要查询员工的个人代码为 / select @JinE= execute p_RsGz_JiNeng_slt @c_GeRenId=@GeRenId @ _JinE=@ JinE output
这里 变量 @JinE用来存储过程形参@ _JinE传回的金额 在调用过程语句中 @ _JiE = @JinE output中的output不可省略 否则 变量@JinE将得不到形参传回的数值而始终为零(等于初值)
例 查到了个人代码为 员工的技能工资就显示其历史纪录 查不到则显示一条出错信息
create procedure p_RsGz_JiNeng_Rtn @c_GeRenId char( ) as declare @ErrCode allint select @ErrCode= if exists(select from RS LS GZ JiNeng where GeRenid=@c GeRenId) begin select from RS_LS_GZ_JiNeng whrer GeRen_id=@c_GeRenId order by RiQi return @ErrCodE end eslE begin select @ErrCode= return @ErrCodE end
调用存储过程p_RsGz_JiNeng_Rtn:
declare @GeRenId char( ) @RtnCode allint select @GeRenId= select @RtnCode= execute @RtnCode=p_RsGz_JiNeng_Rtn @c_GeRenId=@GeRenId if @RtnCode= print No this one!
存储过程p_RsGz_JiNeng_Rtn向调用者返回一个存储在变量@ErrCode里的值 这个值被称为状态值 它向调用者反映存储过程执行的成败状态 在本例中 如果查不到指定员工技能工资的任何记录时 就认为 查无此人 返回出错状态值 否则 返回成功状态值
调用过程的批处理语句使用变量@RtnCode存储返回的状态值 一旦检出存储过程p_RsG_ JiNeng_Rtn返回了错误标志(@RtnCode= ) 就显示一条信息 No this one! [page]
小结
上述四个例子简要介绍了存储过程常用的几种形式 从中我们已经可以领略到它的编程特色以及使用上的灵活性和方便性
lishixinzhi/Article/program/Oracle/201311/17494
使用sybase 时将userId字段设置为identity属性,即为自增但是sybase中自增时有时会跳跃,即 上一条还是5,下一条可能一下跳到500000+ 了with identity_gap = 1 可以设置跳跃值为1
sybase数据库中的numeric[(p[,s])],固定精度和小数位数,使用最大精度时,有效值的范围为 -10^38 + 1 到 10 ^ 38 - 1。decimal 的 ISO 同义词为 dec 和 dec(p,s)numeric在功能上等价于 decimal
p(精度),最多可以存储的十进制数字的总位数,包括小数点左边和右边的位数该精度必须是从 1 到最大精度 38 之间的值默认精度为 18,s (小数位数),小数点右边可以存储的十进制数字的最大位数小数位数必须是从 0 到 p 之间的值仅在指定精度后才可以指定小数位数默认的小数位数为 0。
命令方式下Load完毕后是必须使用online database 来使其在线的
Sybase central图形方式下做的load会自动发出online database 命令。
通常借助EXCEL辅助处理。具体做法如下:
1)新建一个Excel文件,将所有单元格的格式都设置成文本内容,再将txt文件中的内容复制、粘贴到这个Excel文件中。 这样可以避免复制时候Excel自动转换数据的格式,如:把数字转成时间形式、自动抹去字符串前面的“0”等,这个功能有时候很让人很恼火。
注意:Excel只能处理65536(行)×256(列),如果你的txt文件中记录数超过65536条的话,只有分次做了。
2)在最前面增加一列,然后在头几个单元格里填入几个数字,1,2,3,4。。。。, 然后用鼠标向下拉,让它自动产生行号(这些数字不重复),最后把这个Excel文件保存成文本文件的形式。
3)在数据库中新建一个临时表,表的结构和刚才做的Excel文件的结构一样。就是第一列是数值型,并且设成主键;其余的列和要导入的表的结构一样。然后向这个临时表里导入刚刚做好的文本文件。
注意:如果你的表中有这样的字段,它是字符型的,不允许为空(NULL),但是有些记录的值是“”(空串),这样在从文本文件导入数据的时候会报错,这个时候数据库认为文本中的数据是NULL,不是空串。所以在创建临时表的时候,如果有这样的字段,一定要设置成允许为空。等数据导入到数据库以后再做处理。
4)现在用SQL语句开始对临时表中的数据进行检查。通常的办法是用group by(字段1,字段2。。。) having count() >1。其中,字段1,字段2。。。是那个表的主键。 这样可以找到主键重复的记录,查找重复原因,修改数据。最后把临时表的数据导入正式表里。
注:如果你对Excel比较熟的话,会自己写VBA,也可以再Excel中处理数据。
ok,完活!
BTW, 好像有些数据库允许往没有主键的表里插入数据,好像Foxpro可以,如果我记错了就当我没说,好久没用过那个东西了。如果我没记错的话,也可以将数据导入Foxpro中,对数据处理后再导入正式的数据库中。
不同考生的答案在一个表中,这时候主键就不要设置自增键或者学生考号了,因为这张表中一个学生可能对应多个问题答案,所以可以选择学生ID及问题ID两个字段作为联合主键共同构成唯一约束就可以避免主键重复了,不用为每个考生建一个新表。
以上就是关于Sybase SQL Server体系结构介绍全部的内容,包括:Sybase SQL Server体系结构介绍、Sybase *** 作型BI数据管理与数据集成、讲解Sybase存储过程的建立和使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)