sybase基础知识
[ 作者:陈苏文 转贴自:http://www.chinaunix.net 点击数:9524 文章录入:sdccf ]
附:创建与装载数据库实例
use master
decl are @vedvno int
select @vdevno=max(convert(tinyint,substring(convert(binary(4),d.low),v.low,1)))+1
from master.dbo.sysdevices d,master.dbo.spt_values v
where v.type=’E’and v.number=3
declare @v_str char(2)
select @v_str=convert(char(2),@vdevno)
print @v_str
disk init
name=”YDDATA”,
physname=”D:\Syb_Data\YDDATA.dat”,
vdevno=@vdevno+1,
size=153600
disk init
name=”YDINDEX”,
physname=”D:\Syb_Data\YDINDEX.dat”,
vdevno=@vdevno+2,
size=102400
disk init
name=”YDLOG”,
physname=”D:\Syb_Data\YDLOG.dat”,
vdevno=@vdevno+3,
size=76800
create database YDMISDB
on YDDATA=300,YDINDEX=200
log on YDLOG=150
use YDMISDB
execute sp_addsegment indexdev,YTMISDB,YTINDEX
execute sp_dropsegment “default”,YTMISDB,YTINDEX
execute sp_dropsegment system,YTMISDB,YTINDEX
use master
load database YDMISDB from ‘d:\yd_dump\ydmis_backup.dmp’
online database YDMISDB
第四讲 数据库安全性与用户管理
一、安全管理概述
数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。SQL Server的安全管理是一种基于角色(role)的管理方法,位于不同权限层次(或角色)的用户具有不同的用户权限。
规定用户权限有三个因素:用户、数据对象和操作,即什么用户在哪些数据对象上可以执行什么操作。
访问SQL Server中数据的四道屏障:
(1)操作系统——操作系统登录
(2)Sybase服务器——服务器登录
(3)Sybase数据库——数据库用户登录
(4)数据库对象——对象授权
二、理解数据库角色
角色是权限的集合。
1.系统预定义角色
一个真正的数据库管理员应该是整个服务器及其数据库的拥有者,具有管理服务器及其数据库的所有权限。在一个大的系统中,数据库管理员往往不只由一人承担,而是将管理任务进行功能划分,每人提当不同的责任。系统预定义角色就是为适应这种要求而设计的。
●系统管理员(sa_role)
sa_role角色拥有执行与数据库具体应用无关的管理权限:
◇安装与更新SQL Server
◇管理服务器的物理存储
◇配置系统设置参数;
◇创建用户数据库;
◇授予SQL Server用户权限
◇┅┅
●系统安全管理员(sso_role)
sso_role用来实施安全上敏感的操作,执行有关安全性的任务:
◇建立服务器登录帐户;
◇管理口令;
◇授予除sa_role之外的任何角色;
◇管理审计系统;
◇┅┅
●操作员(oper_role)
oper_role执行全服务器范围的数据库操作,如备份与恢复任意数据库等:
◇转储数据库与日志
◇转载数据库与日志
◇┅┅
2.创建与使用自定义角色
(1)创建新的角色:create role
(2)赋予角色权限:grant
(3)设置登录帐户的角色权限:sp_role
格式:sp_role “grant”|”revoke”,角色名,登录帐号名
这里的“grant”|”revoke”是指对角色权限是授予还是撤消。
三、服务器的帐户管理
要想成为Sybase系统的一个用户,首先必须拥有自己的登录帐户。通过这一帐户连同自己的口令向服务器注册后,才能使用Sybase系统中的一些资源,每一个这样的登录帐户在系统中被赋予Server级的标识SUID。
1.添加登录
sp_addlogin 登录名,口令[,缺省的数据库]
如果不指定缺省的数据库,则该帐户的缺省数据库为master库。
2.更改登录属性
◇更改口令;
◇锁定帐户;
◇期限设置;
◇赋予角色。Sybase
四、数据库用户管理
通过某一个帐户注册到服务器后,要想使用某一个数据库,必须成为该数据库的一个用户。通过建立登录与用户之间的联系来管理对数据库的访问。
1.组的概念
组(group)是数据库用户的集合。属于某个组的用户,他自动获得该组所拥有的权限。
Sp_addgroup 组名
◇将一个用户加入某个组:(1)改变用户属性;(2)创建新用户时指定。
◇所有用户自动属于public组,即使这个用户已经属于其他组了。
2.创建新的用户
sp_adduser 登录名,用户名[,组名]
3.别名用户
Sybase的别名机制可以使得多个帐户对应于同一个数据库用户,这样使不同的登录在数据库中拥有同样的权限。这在审计系统中是一种控制责任的一种手段。
Sp_addalias 登录名,数据库中的用户名
别名——相当于给某个用户配一把别人的钥匙(登录)。
五、用户的权限管理
控制用户对数据库对象的访问,有两类权限:命令权限和对象权限。
1.命令权限
Create Database
Create Table
Create View
Create Procedure
Create Rule
Create default
命令权限授权与收权:
Grant 命令权限组合 to 组名|用户名|角色
Revoke 命令权限组合 from 组名|用户名|角色
2.对象权限
Select
Update
Insert
Delete
Reference
Execute
对象权限授权与收权:
Grant 对象权限组合 on 数据库对象 to public|组名|用户名|角色
[With Grant Option]
Revoke 对象权限组合 on 数据库对象 to public|组名|用户名|角色
From public public|组名|用户名|角色
[Cascade]
授权与收权举例:
◇Grant Insert,Delete on Employee
to user_1,Group_1
◇Grant Execute on Pro_culculate
to public
◇Grant Select on Employee(emp_id,emp_name)
to user_3
◇Grant All on Employee
to user_4
◇Revoke update on Employee(emp_id,emp_name)
from user_5
◇Revoke Create Table,Create Rule
from user_6
第五讲 数据库的备份与恢复
数据库的备份与恢复是SQL Server保障数据安全的一种重要手段,为防止意外,数据库管理员必须定期和经常制作数据库的备份。一旦系统出现故障,数据能够得到及时的恢复。
一、基本概念
1.事务处理及其日志
SQL Server使用事务来跟踪所有数据库变化。事务是SQL Server的工作单元。一个事务包含一条或多条作为整体成功或失败的T_SQL语句。每个数据库都有自己的事务日志,即系统表syslogs,事务日志自动记录每个用户发出的每个事务,它饮食了每个事务足够多的信息,以确保数据能够被恢复。
2.检查点(CheckPoint)
服务器在何时更新数据?
——在检查点。在服务器发出一个检查点时:(1)更新数据;(2)在日志中记录下执行检查点的标记。
检查点可把所有“脏页”写到数据库设备上,“脏页”是指从上一次检查点以来,在内存中修改、但没有在磁盘上修改的页。SQL Server的自动检查点机制保证了被完成的事务修改的数据页有规律地从内存中的缓冲区写到数据库设备上。
二、数据库备份
若硬件介质出现故障(如磁盘损坏),当且仅当事先已对数据库及其事务日志作了备份,才能恢复数据库。
注意:绝对不要使用操作系统的拷贝数据库设备,把这样一个拷贝装入SQL Server将导致大量数据库受损。
备份的类型:
完全备份()
增量备份——备份事务处理日志
说明:
(1)只有把事务日志放在单独的设备上,才能进行增量备份;
(2)备份事务日志会截断日志,因此备份的内容是自上次备份以来的事务处理。
(3)备份之前要启动备份服务器,并最好创建转储设备。
命令语法:
dump database 数据库名
to 转储设备名/物理文件名
dump transaction 数据库名
{with {truncate_only|no_log}
to 转储设备名/物理文件名
[with No_truncate]
Truncate_only与no_log选项用于删除事务处理而不作拷贝。Truncate_only截断日志;在事务处理日志完全满时用no_log,它不为数据库建立检查点。两个选项都会丢掉日志。当使用了这两个参数后,应及时备份整个数据库。
No_truncate拷贝日志但不截断日志,在出现介质错误时使用该选项。
图形界面的选项与命令参数的对应关系:
(1)dump transaction (2)dump transaction…… with no_truncate
(3)dump transaction…… with truncate_only
(4)dump transaction…… with no_log
三、数据库的恢复
使用load database加载备份到现有数据库,数据库可以是用于创建转储的数据库,也可以不是。语法为:
load database 数据库名 from 转储设备名/物理文件名
load transaction数据库名 from 转储设备名/物理文件名
●利用备份恢复数据库举例:
某数据库数据和日志分别存储在两个独立的磁盘上,正常运转时的执行的备份计划如下,每天的17:00执行整个数据库的备份,每天的10:00、12:00、14:00、16:00点执行增量备份:
周一17:00磁带1(100M)周二10:00磁带2(30M)周二12:00磁带3(30M)周二14:00磁带4(30M)周二16:00磁带5(30M)周二17:00磁带6(30M)
DumpdatabaseDumptransactionDumptransactionDumptransactionDumptransactionDumpdatabase
若数据磁盘在周二的下午六点损坏,可以采用如下步骤恢复数据库:
(1)使用dump transaction with no_truncate获得当前的事务日志转储,磁带7;
(2)使用load database转载最新的数据库转储,磁带6;(offline)
(3)使用load transaction提交最新的事务日志转储,磁带7;
(4)使用online database把数据库状态设置为online。
若数据磁盘在周二的下午4:50损坏,恢复过程如下:
(1)使用dump transaction with no_truncate获得当前的事务日志转储,磁带7;
(2)使用load database转载最新的数据库转储,磁带6;(offline)
(3)使用load transaction依次装载磁带2、3、4、5上的事务日志;
(4)使用load transaction提交最新的事务日志转储,磁带7;
(5)使用online database把数据库状态设置为online。
四、制定备份与恢复的策略
由于事务日志在恢复数据库中的特殊作用,应定期备份数据库及其事务日志,而且事务日志的备份要更频繁一些。如:数据库每周备份一次,事务日志每天备份一次。
第六讲 数据库与T-SQL语言
一、关系模型的基本概念
关系数据库以关系模型为基础,它有以下三部分组成:
●数据结构——模型所操作的对象、类型的集合
●完整性规则——保证数据有效、正确的约束条件
●数据操作——对模型对象所允许执行的操作方式
关系(Relation)是一个由行和列组成的二维表格,表中的每一行是一条记录(Record),每一列是记录的一个字段(Field)。表中的每一条记录必须是互斥的,字段的值必须具有原子性。
二、SQL语言概述
SQL(结构化查询语言)是关系数据库语言的一种国际标准,它是一种非过程化的语言。通过编写SQL,我们可以实现对关系数据库的全部操作。
●数据定义语言(DDL)——建立和管理数据库对象
●数据操纵语言(DML)——用来查询与更新数据
●数据控制语言(DCL)——控制数据的安全性
T-SQL语言是Sybase对SQL92标准的一种扩展,主要在它的基础上增加了三个方面的功能:自己的数据类型/特有的SQL函数/流程控制功能
T-SQL中的标识符使用说明:
(1)标识符由1-30个字符或数字构成,但首字符必须为字母。临时表的表名以#开头,长度不能超过13个字符。
(2)数据库对象的标识方法举例
database.owner.tablename.columnname
执行远程存储过程:
EXEC server.db.owner.proc_name
当执行语句在批处理的句首时,EXEC可以省略。
三、Sybase的数据类型
在创建表或声明局部变量时,必须使用Sybase系统预定义类型。
1.字符类型
Char(n) VarChar(n)
2.数值类型
整数类型——Integer SmallInt TinyInt
浮点类型——Real Float Number[P,S] Decimal[P,S]
货币类型——Money SmallMoney
3.日期/时间类型
Datetime SmallDatetime
两者时间部分的精度不同,前者精确到分,后者精确到1/30秒。
4.文本和图像类型
Text Image
5.二进制数据类型
Binary(n) VarBinary(n)
四、数据定义语言
用来定义数据库对象。数据库对象是Sybase用来存储数据的逻辑实体,主要有:
表(Table)、视图(View)、临时表(Temp Table);
主键(Primary Key)、外键(Foreign Key)、索引(Index)、规则(Rule)、默认值(Default);
存储过程(Stored Procedure)、触发器(Trigger)
●基本语法
下面给出创建主要数据库对象的语法:
1.表
创建表的基本语法是:
Create table[database.[owner].]table_name
(column_name datatype [default {constant_expression|user|null}]
{[{identity|null|not null}]|[[constraint constraint_name]
{{unique|primary key}[clustered|nonclustered]
[with{fillfactor|max_rows_per_page}=x]
[on segment_name]
|references[[database.]owner.]ref_table
[(ref_column)]
|check(search_condition)}]}…
在建立大型的数据库时,可以考虑将创建表乃至其它数据库对象的过程写到一个文本里,当数据库系统出现问题时,在最坏的情况下,重建过程可以得到简化,也能比较好的对数据库的建设过程进行监视。
创建表的过程完成下列活动:
·定义表的每一列;
·定义列名和列的数据类型并指定列是否处理空值;
·指定列是否具有IDENTITY属性;
·定义列级的完整性约束和表级的完整性约束
上述过程可见,创建表的过程可以设定填充因子,将列置于段上,设计索引,外键等等。
2.索引
索引对查询性能的影响很大,要引起重视。
索引加速了数据检索,Adaptive Server有三类索引:
·复合索引——索引包含多列;当两列或多列由于它们的逻辑关系而作为整体被查询时可建立这种索引;
·唯一索引——索引列的值不允许重复;
·簇聚索引和非簇聚索引——簇聚索引强迫Server不断地对表中数据排序或重排序以保证表中数据的物理顺序和逻辑顺序的一致性,簇聚索引对范围查询性能影响极大;非簇索引没有这样的要求,非簇聚索引对修改操作有利。
何时建索引?
·如果手动插入identity列,则创建唯一索引以保证不插入已经存在的值;
·经常被排序访问的列,即被列在order by子句中的列,最好对其建立索引以便Adaptive Server能充分利用索引顺序的优点;
·如果列经常用手连接,则可对列建立索引,这样系统能更快地执行连接;
·包含主键的列一般都有簇聚索引,尤其是当它频繁地和其它表的列相关联;
·经常被范围查询的列最好为其建立簇聚索引,一旦查询范围内的第一个值被发现,则随后的值在物理上一定相近。簇聚索引对单值查询并没有什么优点。
创建索引的基本语法:
Create [unique][clustered|nonclustered]index index_name
On [[database.]owner.]table_name
(column_name[,column_name]…)
[on segment_name][with consumers=x]
上述语法包含了这样的暗示:将簇聚索引和它的基表分离在不同的段上;段是逻辑概念,但段可以位于不同的物理设备上,也即将簇聚索引和基表物理上分开。 这是不允许的,我们将在后面讨论设备、数据库、段、表分区时作详细讨论。
3.键(key)
理解键是理解关联的关键。
键和索引往往是一回事。键的意义在概念上,键用于参照完整性约束。
主键是表的单值列的集合,主键通过在放置它们的表上创建一个单值索引来实现其单值性的。实际上主键是作为标志表的标志符而存在的,一旦主键确定,则由该主键就确定了的表也就确定了。
外键是和其它表中的主键相关的列,主键和外键的关系确定了外键的值域,该值域即为相应主键的取值范围。这样就从理论上强制实现了表与表之间的参照完整性。
前面创建表的语法里包含了创建键的成分。也可以通过其它途径创建主键和外键。
◇Unique约束和Primary key约束的区别
Unique约束和Primary key约束用来保证同一表中指定的列上没有重复值,这两个约束都产生唯一索引确保数据一致性,默认情况下,Unique约束产生唯一的非聚集索引,Primary key约束产生唯一的聚集索引。Primary key约束比Unique约束严格:Primary key列不允许有空值,Unique列允许有空值。
4.视图
视图是查看多表中数据的方法,视图从基表派生,它并非物理存在,而是逻辑表;视图也系统提供管理表的一种安全机制。视图使得用户集中精力在感兴趣的数据集上。
创建视图的语法:
create view [[database.]owner.]view_name
[(column_name[,column_name]…)]
as select [distinct] select_statement
[with check option]
有distinct关键字的视图不能更新。当视图涉及关联时,定义视图要小心,这时是对多表操作,完整性显得很重要。
五、数据操纵语言
1.Select语句
基本语法:
SELECT[all|distinct]字段列表
[into表名]
[from表名]
[where条件表达式]
[group by [all]字段列表]
[having筛选表达式]
[order by 字段列表[asc|desc]]
[compute聚集函数列表[by字段列表]]
注意:Select语句中的子句必须按照上述顺序使用。也就是说,若该语句包括一个group by子句和一个order by子句where,group by子句必须放在order by子句之前。
Having子句类似于where子句,不同之处有两点:(1)Having子句必须结合group by子句使用;(2)where子句不能用聚集函数,而Having子句可以。