第一篇:SQL Server 2008之数据库大型应用解决方案总结
SQL Server 2008之数据库大型应用解决方案总结
本教案需配合视频教程学习,视频教程地址为:http://www.xiexiebang.com/eschool/SQLxin3721/ 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天百万级甚至上亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。
一、负载均衡技术
负载均衡集群是由一组相互独立的计算机系统构成,通过常规网络或专用网络进行连接,由路由器衔接在一起,各节点相互协作、共同负载、均衡压力,对客户端来说,整个群集可以视为一台具有超高性能的独立服务器。
1、实现原理
实现数据库的负载均衡技术,首先要有一个可以控制连接数据库的控制端。在这里,它截断了数据库和程序的直接连接,由所有的程序来访问这个中间层,然后再由中间层来访问数据库。这样,我们就可以具体控制访问某个数据库了,然后还可以根据数据库的当前负载采取有效的均衡策略,来调整每次连接到哪个数据库。
2、实现多据库数据同步
对于负载均衡,最重要的就是所有服务器的数据都是实时同步的。这是一个集群所必需的,因为,如果数不据实时、不同步,那么用户从一台服务器读出的数据,就有别于从另一台服务器读出的数据,这是不能允许的。所以必须实现数据库的数据同步。这样,在查询的时候就可以有多个资源,实现均衡。比较常用的方法是Moebius for SQL Server集群,Moebius for SQL Server集群采用将核心程序驻留在每个机器的数据库中的办法,这个核心程序称为Moebius for SQL Server 中间件,主要作用是监测数据库内数据的变化并将变化的数据同步到其他数据库中。数据同步完成后客户端才会得到响应,同步过程是并发完成的,所以同步到多个数据库和同步到一个数据库的时间基本相等;另外同步的过程是在事务的环境下完成的,保证了多份数据在任何时刻数据的一致性。正因为Moebius 中间件宿主在数据库中的创新,让中间件不但能知道数据的变化,而且知道引起数据变化的SQL语句,根据SQL语句的类型智能的采取不同的数据同步的策略以保证数据同步成本的最小化。
数据条数很少,数据内容也不大,则直接同步数据 数据条数很少,但是里面包含大数据类型,比如文本,二进制数据等,则先对数据进行压缩然后再同步,从而减少网络带宽的占用和传输所用的时间。
数据条数很多,此时中间件会拿到造成数据变化的SQL语句,然后对SQL语句进行解析,分析其执行计划和执行成本,并选择是同步数据还是同步SQL语句到其他的数据库中。此种情况应用在对表结构进行调整或者批量更改数据的时候非常有用。
3、优缺点
(1)扩展性强:当系统要更高数据库处理速度时,只要简单地增加数据库服务器就 可以得到扩展。
(2)可维护性:当某节点发生故障时,系统会自动检测故障并转移故障节点的应用,保证数据库的持续工作。(3)安全性:因为数据会同步的多台服务器上,可以实现数据集的冗余,通过多份数据来保证安全性。另外它成功地将数据库放到了内网之中,更好地保护了数据库的安全性。(4)易用性:对应用来说完全透明,集群暴露出来的就是一个IP(1)不能够按照Web服务器的处理能力分配负载。
(2)负载均衡器(控制端)故障,会导致整个数据库系统瘫痪。
二、数据库的读写分离
1,实现原理:读写分离简单的说是把对数据库读和写的操作分开对应不同的数据库服务器,这样能有效地减轻数据库压力,也能减轻io压力。主数据库提供写操作,从数据库提供读操作,其实在很多系统中,主要是读的操作。当主数据库进行写操作时,数据要同步到从的数据库,这样才能有效保证数据库完整性。
(ebay的读写比率是260:1,ebay的读写分离)(微软数据库分发)
2,实现方法:在MS Sql server中可以使用发布定义的方式实现数据库复制,实现读写分离,复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。使用复制技术,用户可以将一份数据发布到多台服务器上。复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性。SQL SERVER复制技术类型有三种,分别是:快照复制、事务复制、合并复制。SQL SERVER 主要采用出版物、订阅的方式来处理复制。源数据所在的服务器是出版服务器,负责发表数据。出版服务器把要发表的数据的所有改变情况的拷贝复制到分发服务器,分发服务器包含有一个分发数据库,可接收数据的所有改变,并保存这些改变,再把这些改变分发给订阅服务器。3,优缺点
(1)数据的实时性差:数据不是实时同步到自读服务器上的,当数据写入主服务器后,要在下次同步后才能查询到。(2)数据量大时同步效率差:单表数据量过大时插入和更新因索引,磁盘IO等问题,性能会变的很差。(3)同时连接多个(至少两个)数据库:至少要连接到两个数据数据库,实际的读写操作是在程序代码中完成的,容易引起混乱
(4)读具有高性能高可靠性和可伸缩:只读服务器,因为没有写操作,会大大减轻磁盘IO等性能问题,大大提高效率;只读服务器可以采用负载均衡,主数据库发布到多个只读服务器上实现读操作的可伸缩性。
三、数据库拆分(分布式)
通过某种特定的条件,将存放在同一个数据库中的数据分散存放到多个数据库上,实现分布存储,通过路由规则路由访问特定的数据库,这样一来每次访问面对的就不是单台服务器了,而是N台服务器,这样就可以降低单台机器的负载压力。
垂直(纵向)拆分:是指按功能模块拆分,比如分为订单库、商品库、用户库...这种方式多个数据库之间的表结构不同。水平(横向)拆分:将同一个表的数据进行分块保存到不同的数据库中,这些数据库中的表结构完全相同。
(纵向拆分)
(横向拆分)
1,实现原理:使用垂直拆分,主要要看应用类型是否合适这种拆分方式,如系统可以分为,订单系统,商品管理系统,用户管理系统业务系统比较明的,垂直拆分能很好的起到分散数据库压力的作用。业务模块不明晰,耦合(表关联)度比较高的系统不适合使用这种拆分方式。但是垂直拆分方式并不能彻底解决所有压力问题,例如 有一个5000w的订单表,操作起来订单库的压力仍然很大,如我们需要在这个表中增加(insert)一条新的数据,insert完毕后,数据库会针对这张表重新建立索引,5000w行数据建立索引的系统开销还是不容忽视的,反过来,假如我们将这个表分成100个table呢,从table_001一直到table_100,5000w行数据平均下来,每个子表里边就只有50万行数据,这时候我们向一张只有50w行数据的table中insert数据后建立索引的时间就会呈数量级的下降,极大了提高了DB的运行时效率,提高了DB的并发量,这种拆分就是横向拆分
2,实现方法:垂直拆分,拆分方式实现起来比较简单,根据表名访问不同的数据库就可以了。横向拆分的规则很多,这里总结前人的几点,(1)顺序拆分:如可以按订单的日前按年份才分,2003年的放在db1中,2004年的db2,以此类推。当然也可以按主键标准拆分。优点:可部分迁移
缺点:数据分布不均,可能2003年的订单有100W,2008年的有500W。
(2)hash取模分: 对user_id进行hash(或者如果user_id是数值型的话直接使用user_id的值也可),然后用一个特定的数字,比如应用中需要将一个数据库切分成4个数据库的话,我们就用4这个数字对user_id的hash值进行取模运算,也就是user_id%4,这样的话每次运算就有四种可能:结果为1的时候对应DB1;结果为2的时候对应DB2;结果为3的时候对应DB3;结果为0的时候对应DB4,这样一来就非常均匀的将数据分配到4个DB中。
优点:数据分布均匀
缺点:数据迁移的时候麻烦;不能按照机器性能分摊数据。(3)在认证库中保存数据库配置
就是建立一个DB,这个DB单独保存user_id到DB的映射关系,每次访问数据库的时候都要先查询一次这个数据库,以得到具体的DB信息,然后才能进行我们需要的查询操作。
优点:灵活性强,一对一关系
缺点:每次查询之前都要多一次查询,会造成一定的性能损失。
第二篇:SQLServer数据库入门学习总结
SQL Server数据库入门学习总结
经过一段时间的学习,也对数据库有了一些认识。
数据库基本是由表,关系,操作组成;对于初学者首先要学的:
1.数据库是如何存储数据的表,约束,触发器
2.数据库是如何操作数据的
insert,update,delete T-sql 函数 存储过程 触发器
3.数据库是如何显示数据的select
SQLServer数据库学习总结
1.SQL基础
SQL Server2000安装、配置,服务器启动、停止,企业管理器、查询分析器
第一代数据库--网状数据库和层次数据库;第二代数据库--关系数据库
数据库(DB);数据库管理系统(DBMS);数据库系统(DBS)
SQL Server 2000 提供了不同版本:企业版、标准版、个人版、开发版
SQL Server中的数据类型:整数:int,smallint,tinyint,bigint;浮点数:real,float,decimal;二进制:binary,varbinary;逻辑:bit;字符:char,nchar,varchar,nvarchar;文本和图形:text,ntext,image;日期和时间:datetime,smalldatetime;货币:money,smallmoney
数据库的创建和删除;数据库表的创建、修改和删除
数据完整性:实体完整性:Primary Key,Unique Key,Unique Index,Identity Column;域完整性:Default,Check,Foreign Key,Data type,Rule;参照完整性:Foreign Key,Check,Triggers,Procedure;用户定义完整性:Rule,Triggers,Procedure;Create Table中得全部列级和表级约束
SQL Server中有5种约束:主键约束(Primary Key Constraint)、默认约束(Default Constraint)、检查约束(Check Constraint)、唯一性约束(Unique Constraint)、外键约束(Foreign Key Constraint).关系图
数据库设计的步骤:需求分析、概念结构设计、逻辑结构设计、数据库物理设计、数据库实施、数据库运行和维护
两个实体之间的联系:一对一(1:1)、一对多(1:n)、多对多(m:n)
实体关系模型--E-R图
数据库规范化:将数据库的结构精简为最简单的形式;从表中删除冗余列;标识所有依赖于其他数据库的数据。
数据库三范式:第一范式就是无重复的列;第二范式就是非主属性非部分依赖于主关键字;第三范式就是属性不依赖于其他非主属性
2.SQL语句
SQL全称是“结构化查询语言(Structured Query Language)”
SQL的4个部分:
数据定义语言DDL(Data Definition Language)用来定义数据的结构:create、alter、drop。
数据控制语言DCL(Data Control Language)用来控制数据库组件的存取许可、存取权限等得命令:grant、revoke。
数据操纵语言DML(Data Manipulation Language)用来操纵数据库中得数据的命令:insert、update、delete。
数据查询语言DQL(Data Query Language)用来查询数据库中得数据的命令:select。
SQL中得运算符
:算术运算符、位运算符、比较运算符、逻辑运算符、通配运算符、字符串连接符、赋值运算符
3.查询
简单查询,使用TOP子句
查询结果排序order by
带条件的查询where,使用算术表达式,使用逻辑表达式,使用between关键字,使用in关键字,模糊查询like
在查询中使用聚合函数:sum(x),avg(x),min(x),max(x),count(x),count(*)使用分组查询group by,having子句
distinct关键字
列别名
select top 6 * from sales order by qty desc select au_id,au_fname,au_lname
from
authors
where
state in('ks','ca','mi')
select au_fname,au_lname,phone from authors where au_id like '72[234]-%' select
简单子查询:嵌套子查询、相关子查询;子查询的select语句中不能使用order by子句,roder by子句只能对最终查询结果排序。type,sum(price),avg(price),count(*)
from
titles
group
by
type
having
type in('business','psycheology')嵌套子查询:执行过程,先执行子查询,子查询得到的结果不被显示,而是传给外层查询,作为外层查询的条件,然后执行外层查询,并显示结果。
嵌套子查询的执行不依赖于外层查询,子查询只执行一次。
带有比较运算符的子查询,带有in和not in的子查询,带有any或all的子查询
相关子查询:子查询为外层查询的每一行执行一次,外层查询将子查询引用的列的值传给了子查询。
相关子查询的执行依赖于外层查询,子查询需要重复的执行。
带有exists和not exists的相关子查询。
多表联接查询:内联接(inner join)、外联接((left、right、full)outer join)、自联接(self join)和交叉联接(cross join)
在查询上创建新表:select into语句首先创建一个新表,然后用查询的结果填充新表。
表别名
select coursename from course where courseid in(select distinct courseid from grade where grade>10)
select studname from student where sudbirthday > any(select studbirthday from student where class = '信息系')and class<>'信息系'
select studname from student where exists(select * from grade where studid = student.studid and courseid = '01')
select stud1.* from student as stud1 join student as stud2 on stud2.studname = 'mm' and stud1.studsex = stud2.studsex
select * into girls from student where studsex='m'
4.视图、索引和事务
视图是由一个或多个数据表(基本表)导出的虚拟表或者查询表,是关系数据库系统提供给用户以多种角度观察数据库中数据的重要机制。
视图的好处:能够简化用户的操作;视图能够对机密数据提供安全保护。
创建视图时,视图的名称存在sysobjects表中。有关视图中所定义列的信息添加到syscolumns表中,而有关视图相关性的信息添加到sysdepends表中。另外,create view语句的文本添加到syscomments表中。
在通过视图向表中插入数据时,如果insert语句列表中包含有视图中没有选择的列和不允许为空值的列,这种操作是不允许的。
创建视图:create view view_employee as select emp_id,fname,lname from employee 使用视图:select * from view_employee
修改视图:alter view view_employee as select emp_id,fname,job_id from employee where job_id>10
删除视图:drop veiw view_employee 查看视图结构:exec sp_help view_employee
查看视图定义信息:exec sp_helptext 'view_employee'
索引提供了一种基于一列或多列的值对表的数据行进行快速访问的方法。索引提供的是表中得逻辑顺序。
聚集索引基于数据行的键值在表内排序和存储这些数据行。当数据表以某列为关键字建立聚集索引时,表中得数据行就以该列(聚集索引键)的排序次序进行存储。每个表只能有一个聚集索引。
非聚集索引具有完全独立于数据行的结构,一个表可以建立多个非聚集索引。
创建聚集索引:create clustered index studid_ind on stud(studid)
创建非聚集索引:create unique index studfullname_ind on stud(fname desc,lname)删除索引:drop index stud.studid_ind 查看stud表上得索引:exec sp_helpindex stud
事务是一种机制,是一个操作序列,它包含了一组数据库操作命令,并且所有的命令作为一个整体一起向系统提交或撤销操作请求。
事务的特性:原子性(Atomicity)、一致性(Consistenty)、隔离性(Isolation)、永久性(Durability)。事务分类:显示事务、隐性事务、自动提交事务。
视图、索引和事务的创建、使用、修改和删除
5.Transact—SQL编程
全局变量:由系统定义和维护,其名称以@@字符开头
局部变量:由用户定义和赋值,其名称以@字符开头
输出语句:print
逻辑控制语句:begin...end;break;case;continue;goto;if...else;return;while 常用函数:行集函数,聚合函数,标量函数
转换函数:convert(dt,e,s),cast()
数学函数:绝对值abs(n),向上取整ceiling(n),向下取整floor(n),指定次幂power(n,y),四舍五入round(n,length),求符号sign(n),平方根sqrt(n)日期
和
时
间
函
数
:dateadd(datepart,num,date),datediff(datepart,date1,date2),datename(datepart,date),datepart(datepart,date),getdate(),year(date),month(date),day(date)
字符串函数:lower(e),upper(e),left(e,i),right(e,i),replace(s1,s2,s3)用3替换1中的2,replicate(e,i)重复指定次数,stuff(s1,start,length,s2)用2替换1中指定位置,substring(expression,start,length)元数
据
函
数
:db_id('database_name'),db_name(datebase_id),object_id('obj_name'),object_name(obj_id),col_length('table','column'),col_name(table_id,col_id)聚合函数:avg(expr),count(expr),count(*),max(expr),min(expr),sum(expr)select au_lname,au_fname,contory = case state when 'u
t' then 'utah' when 'ca' then 'california' else 'world'
end,city from authors order by state desc
while(select avg(price)from titles)<30 begin
update titles set price = price * 2
if(select max(price)from titles)>50 break else continue end
print '价格太高'
begin
insert into jobs values('a',80,234)if @@error<>0 print '数据插入失败' else goto M end
M:print '数据插入成功'
6.游标
游标是一种能从包含多条数据记录的结果集中每次提取一条记录的机制。将批操作变成行操作,对结果集中得某行进行操作。
declare author_csr cursor read_only for--定义只读游标
select au_fname,au_lname from authors where state = 'ca' order by au_fname,au_lname declare @lname varchar(20),@fname varchar(20)--定义变量
open author_csr--打开游标
fetch next from author_csr into @lname,@fname--执行一次数据读取操作
while @@fetch_status=0--循环游标读取数据
begin
print 'author name:'+@lname+''+@fname fetch next from author_csr into @lname,@fname end
close author_csr--关闭游标
deallocate author_csr--释放游标
7.存储过程
存储过程(stored procedure)类似c语言中的函数,是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字饼给出参数来执行它。
常用的系
统
存
储
过
程
:sp_database,sp_helpdb,sp_renamedb,sp_tables,sp_column,sp_help,sp_helpconstraint,sp_helpindex,sp_stored_procedure,sp_password 创建存储过程:
create as
select @total=count(jy.askbookid)from book,jyls jy where bookname like @book_name and book.isbn=jy.isbn and jy.starttime>=@starttime and endtime<=@endtime procedure book_num
(@book_name
varchar(26),@starttime
datetime,@endtime datetime,@total int output)使用存储过程:
declare @book_name char(26),@total int
set @book_name='面向对象分析和设计'
exec book_num @book_name,'2007-01-01','2007-11-01',@total output select @book_name as bookname,@total as num
8.触发器
触发器是一种特殊类型的存储过程,主要是通过实践进行触发而被执行。
触发器的主要作用就是能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。其他功能:强化约束,跟踪变化,级联运行,存储过程调用。
SQL Server 2000支持两种类型触发器:
after触发器:要求只有执行某一操作之后,触发器才被执行,且只能在表上定义。
instead of触发器:表示并不执行其所定义的操作,而仅是执行触发器本身。既可以在表上定义,也可以在视图上定义,但对同一操作只能定义一个instead of触发器。
工作原理:
当触发insert触发器时,新的数据行就会被插入到触发器表和inserted表中。触发器通过检查inserted表来确定是否执行触发器动作或如何执行。
当在定义有触
发器的表上执行update语句时,原始行被移入到deleted表,更新行被移入inserted表。触发器检查deleted表和inserted表以及被更新的表,来确定是否更新了多行以及如何执行触发器动作。
当触发deleted触发器后,从受影响的表中删除的行将被放置到一个特殊的deleted表中。
create trigger update_smoke_t_sale on smoke_t_sale for update as
declare @newsalenum int,@smokeproductname varchar(40)select @newsalenum= salenum from inserted
select @smokeproductname=smokeproductname from inserted if update(salenum)--判断是否更新
begin update smoke_t_sale
set
saletotalprice=@newsalenum
*
saleprice
where smokeproductname=@smokeproductname
insert into smoke_log(logContent)values('更新成功')end else
print '未更新'
9.数据库高级管理
SQL Server安全体系结构,4个等级:客户机操作系统的安全性,SQL Server的登录安全性,数据库的使用安全性,数据对象的使用安全性 SQL Server验证模式:windows身份验证模式和混合模式(windows身份验证和SQL Server身份验证)
登录账户:用户登录(连接)SQL Server服务器的账户和密码。
角色管理:服务器角色(负责管理和维护SQL Server的组);数据库角色(是对某个数据库具有相同访问权限的用户账户和组的集合)
数据库用户:对于每个要求访问数据库的登录账户,必须在要访问的数据库中建立该数据库的访问账户,且与其登录账户链接关联,才可进入该数据库访问。
权限管理:是指用户是否能进行访问数据库资源的相应操作。权限包括:语句权限、对象权限和暗示权限。
授予权限:
grant 语句 [...] to 安全账户[...]
grant 权限 [...] on 表或视图[(列[,...])]|on 存储过程|on用户自定义函数 to 安全账户[,...] 拒绝权限:
deny 语句 [...] to 安全账户[...]
deny 权限 [...] on 表或视图[(列[,...])]|on 存储过程|on用户自定义函数 to 安全账户[,...] 撤销权限:
revoke 语句 [...] from 安全账户[...]
revoke 权限 [...] on 表或视图[(列[,...])]|on 存储过程|on用户自定义函数 from 安全账户[,...]
备份和恢复:
数据库备份设备,在进行数据库备份之前,首先要创建备份设备。包括:磁盘、磁带和命名管道
SQL Server 备份策略:只备份数据库、备份数据库和事务日志、差异备份。
backup database medicaldb to disk='medical_bk1' with name='medicaldb backup' description='medicaldb fullbackup' init restore database medicaldb from medical_bk1
导入导出:
DTS(Data Transformation Service)是SQL Server提供的数据传输服务。使用户可以将来自完全不同数据源的数据析取、转换并合并到单个或多个目的。
分离与附加:创建可移动的数据库。
第三篇:银行通用大型数据库
银行通用大型数据库---Db2 日常实用操作 收藏
怎么没人发DB2啊,我记得我刚参加工作时面试,有一个问题是“你用过什么大型数据库?”,我当时还搞不清什么叫大型,就顺便说了FOX,ACCESS,主考的人看着我的,用一句歌词来形容就是”得意的笑,他得意的笑“,也幸好去面试的只有一个人说了个INFORMIX,我才在公司学了DB2,学了 INFORMIX,学了SOCKET,哈,看着公司一年有十亿RMB的进账,看着我每月薪水都在一把(一把是一百张,一张是一百元,哈)以上,真是感慨良多啊!哈,幸好是走过来了!
先贴点基础的,可别小看,这是你以后的基础,就像现在IBM搞培训,不到一周时间,会讲600M的文档,知识点也就讲个名字,要不老师会累死,哈!
以下是正文:
1、Load 方法装入数据:
export to tempfile of del select * from TABLENAME where not 清理条件; load from tempfile of del modified by delprioritychar replace into TABLENAME nonrecoverable;
说明:
在不相关的数据表export数据时,可以采取并发的形式,以提高效率;
TABLENAME指待清理table的名称;
modified by delprioritychar防止数据库记录中存在换行符,导致数据无法装入的情况;replace into对现数据库中的内容进行替换,即将现行的数据记录清理,替换为数据文件内容;
nonrecoverable无日志方式装入;
2、查找当前的应用:
db2 list application |grep DBSNAME;
3、删除当前正在使用的application:
db2 “force application(Id1,Id2,Id3)”
Id1,Id2,Id3 是List显示的应用号;
4、查看当前应用号的执行状态:
db2 get snapshot for application agentid 299 |grep Row5、查看数据库参数:
db2 get db cfg for
6、修改数据库的Log数据:
db2 update db cfg using <参数名> <参数值>、Db2Stop Force的用法:
在进行Bind的时候出现如下错误:
SQL0082C An error has occurred which has terminated processing.SQL0092N No package was created because of previous errors.SQL0091N Binding was ended with “3” errors and “0” warnings.主要是表文件被加锁,不能继续使用;
在进行stop的时候报错:db2stop
8/03/2005 21:46:53 0 0SQL1025N The database manager was not stopped because databases are still active.SQL1025N The database manager was not stopped because databases are still active.需要使用如下命令可以解决这个问题: db2stop force
08/03/2005 21:47:4900SQL1064N DB2STOP processing was successful.SQL1064N DB2STOP processing was successful.然后启动数据库db2start,连接数据库db2s后,重新进行bind即可。
8、缓冲池参数修改:
db2 alter bufferpool ibmdefaultbp size 10240
查看本表的数据内容如下:
db2 “select * from syscat.bufferpools”;
9、DB2 日志处理:
DB2日志是以文件的形式存放在文件系统中,分为两种模式:循环日志和归档日志。当创建新数据库时,日志的缺省模式是循环日志。在这种模式下,只能实现数据库的脱机备份和恢复。如果要实现联机备份和恢复,必须设为归档日志模式。目前在综合业务系统中,设置的均是归档日志模式;其它系统(如事后监督、经营决策、中间业务等)一般都设置为循环日志模式。至于采用何种模式,可以通过修改数据库配置参数(LOGRETAIN)来实现: 归档日志模式:db2 update db cfg for
必须按照以下正确的步骤进行操作:要求必须使用DB2命令PRUNE进行清理,不建议使用rm命令删除。删除前应保证应用已停止(即联机已下来)。查看当前使用的日志文件目录及第一活动日志文件用 “db2 get db cfg for
$ db2 connect to
$ db2 prune logfile prior to S???.LOG
注:S???.LOG为查看到的第一活动日志文件。此命令可以将当前第一活动日志文件之前的归档日志文件全部删除。
11、如何清理db2diag.log文件
db2diag.log,是用来记录DB2数据库运行中的信息的文件。可以通过此文件,查看记录的有关DB2数据库详细的错误信息。此文件也是不断增大的,需要定期进行清理。可以通过查看实例的配置参数DIAGPATH,来确定db2diag.log文件是放在哪个目录下:db2 get dbm cfg 如果Diagnostic data directory path(DIAGPATH)= /home/db2inst1/sqllib/db2dump,则此文件是放在/home/db2inst1/sqllib/db2dump目录下。当文件系统/home的使用率达到80%-90%左右时,应及时删除db2diag.log文件。请按以下正确步骤操作:确认应用(如BTP)、DB2已经停止。将原db2diag.log文件备份到其它文件系统下。删除db2diag.log文件。删除后,DB2会自动创建一个新的文件。
12、Load 操作
在进行load的时候
db2 “load from acmmst.txt of del modified by coldel| replace into acmmst nonrecoverable ”
由于数据不规范出现错误,强行中断以后,进行操作的时候出现如下错误:
SQL0668N Operation not allowed for reason code ”3“ on table ”BTP.ACMMST“.SQLSTATE=57016
此时,进行反方向操作即可:
db2 ”load from /dev/null of del terminate into acmmst nonrecoverable“。
如果没有使用参数nonrecoverable,则会出现数据库状态不正确的情况,使用:
db2 list tablesapces show detail 查看状态,如果不是正常状态,则脱机状态进行备份即可。
两个表文件之间UPDATE的方法:
db2 ”update cdmcrd set offset =(select cdmlsl.offset from cdmlsl where cdmlsl.crdno=cdmcrd.crdno)where cdmcrd.crdno in(select cdmlsl.crdno from cdmlsl)
13、多字段条件查询和修改:
表A中的字段有actno, cnlno,bal,pwd;表B中的字段为Actno,Cnlno,TxnAmt;目的是将A表中的bal修改为B表中的TxnAmt,命令:
db2 “update A set bal=(select txnamt from B where actno=A.actno and cnlno=A.Cnlno)where A.actno||A.cnlno in(select Actno||cnlno from B);
14、多条件匹配查询
查询某个表中条件是B?AAA的记录:
db2 ”select * from A where actno like 'B_AAA%'“.查询数据中存在某些字符的记录:
db2 ”select * from A where actno like '%-AAA%“.15/数据库恢复的处理
进行数据库恢复的时候使用以下的命令:
restore db db1 to /tstdb2/catalog into db newlogpath /tstdb2/db2log buffer 2048
replace existing redirect parallelism 16;
set tablespace containers for 1 using(path '/tstdb2/db2tmp');
set tablespace containers for 2 using
(device '/dev/rtstcontlv00' 2621440, device '/dev/rtstcontlv01' 2621440,device '/dev/rtstcontlv02' 2621440, device '/dev/rtstcontlv03' 2621440);
restore db db1 continue;
恢复完成以后执行命令db2s时报如下的错误:
P570:>db2s
SQL1117N A connection to or activation of database ”DB" cannot be made because of ROLL-FORWARD PENDING.SQLSTATE=57019
DB21034E The command was processed as an SQL statement because it
was not a
valid Command Line Processor command.During SQL processing it returned:
SQL1024N A database connection does not exist.SQLSTATE=08003 解决办法如下:
P570:>db2 rollforward db db to end of logs and complete
Rollforward Status
Input database alias= db
Number of nodes have returned status= 1
Node number= 0
Rollforward status= not pending
Next log file to be read=
Log files processed=-
Last committed transaction= 2005-11-20-10.59.23.000000
DB20000I The ROLLFORWARD command completed successfully.
第四篇:数据库原理-理论教学-SQLServer数据完整性
SQL Server数据完整性
一、完整性的概念
之所以要引入数据完整性是为了在数据的添加、删除、修改等操作中不出现数据的破坏或多个表数据不一致
数据完整性是指存储在数据库中的数据正确无误并且相关数据具有一致性
二、完整性的类型 1)实体完整性
实体:表中的记录,一个实体就是指表中的一条记录。实体完整性:在表中不能存在完全相同的记录,且每条记录都要具有一个非空且不重复的主键值。
实现实体完整性的方法:设置主键、惟一索引、惟一约束 2)域完整性
域完整性:向表中添加的数据必须与数据类型、格式及有效的数据长度相匹配。
实现域完整性的方法:CHECK约束、外键约束、默认约束、非空定义、规则以及在建表时设置的数据类型
3)参照完整性 参照完整性:又称为引用完整性。是指通过主键与外键相联系的两个表或两个以上的表,相关字段的值要保持一致。
实现实体完整性的方法:外键约束 4)用户定义的完整性 用户定义的完整性:是根据具体的应用领域所要遵循的约束条件由用户自己定义的特定的规则。
三、约束的类型
约束:SQL Server提供的自动强制数据完整性的一种方法。它通过定义列的取值规则来维护数据的完整性。
常用约束:NOT NULL,CHECK、UNIQUE、PRIMARY KEY、FOREIGN KEY、DEFAULT 1)主键约束:在表中定义一个主键来惟一标识表中的每行记录
特点:每个表中只能有一个主键,主键可是一列,也可是多列;主键不能为空;主键值不能重复
2)UNIQUE约束:它主要用来限制表的非主键列中的值不能重复。特点:一个表中可以定义多个惟一约束
3)NOT NULL约束:它用来设定某列值不能为空。
特点:如果设定某列为NOT NULL,则在添加记录时,则此列必须插入数据。4)CHECK约束:它使用逻辑表达式来限制表中的列可以接受哪些数据值。
例如:成绩值应该在0-100之间,则可以为成绩字段创建CHECK约束,使取值在正常范围内。
5)DEFAULT约束:它为表中某列建立一个默认值,当为表中添加记录时,如果没有提供输入值,则自动以默认值赋给该列。
特点:默认值可以为常量、函数或表达式。使用默认值可以提高数据输入的速度。6)FOREIGN KEY约束
外键:是指一个表中的一列或列组合,它虽不是该表的主键,但是另一个表的主键。特点:实现两表之间相关数据的一致性。
第五篇:医院数据库备份解决方案
1医院数据库备份解决方案提出的背景
随着电子化进程的飞速发展和信息技术的广泛应用,数据越来越成为企业、事业单位日常运作中不可缺少的部分和领导决策的依据。但是,计算机的使用有时也会造成隐患,那就是计算机数据非常容易丢失和遭到破坏。有专业机构的研究数据表明:丢失300MB的数据对于市场营销部门意味着13万元人民币的损失,对财务部门意味着16万的损失,对工程部门来说损失可达80万。而丢失的关键数据如果15d内仍得不到恢复,企业就有可能被淘汰出局。
随着计算机系统越来越成为企业不可或缺的数据载体,如何利用数据备份来保证数据安全也成为我们迫切需要研究的一个课题。数据遭到破坏,有可能是人为的因素。也可能是由于各种不可预测的因素,主要包括以下几个方面:①计算机硬件故障。计算机是一个机器,其硬件是整个系统的基础。由于使用不当或者计算机产品质量不佳、配件老化等原因,计算机的硬件可能被损坏而不能使用。例如,硬盘的磁道损坏。②计算机软件系统的不稳定。由于用户使用不当或者系统的可靠性不稳定等原因,计算机软件系统有可能瘫痪,无法使用。③误操作。这是人为的事故,不可能完全避免。例如,在使用DELETE语句的时候,不小心删除了有用的数据。④破坏性病毒。病毒是系统可能遭到破坏的一个非常重要的原因。随着信息技术的发展,各种病毒也随之泛滥。现在,病毒不仅仅能破坏软件系统,还可能破坏计算机的硬件系统,例如当前流行的每月26日发作的CIH病毒,就是一个典型的破坏计算机硬件系统的病毒。⑤自然灾害,例如大火、洪水、地震等。这是一种人力无法抗拒的原因。
2医院数据库备份与恢复的重要性与必要性
摩根斯坦利作为一家大型投资银行,当纽约世贸中心许多大公司的商务数据一瞬间“灰飞烟灭”时,该中心最大的主顾之一摩根斯坦利却在灾后的第二天就恢复了正常工作状态。危机时刻,摩根斯坦利花费巨资添置的远程数据防灾系统忠实地工作到大楼倒塌前的最后一秒钟,将重要的业务信息完好无损地传送到了几英里以外另一个办事处。在这次大劫难中,摩根斯坦利几年前就制定的数据安全战略发挥了极大作用,将突发危机的不利影响下降到最低程度。
目前,国际上对电脑安全技术越来越重视,人们的安全意识越来越高,体现在电脑安全技术的应用从个别的特殊行业发展到各行各业;从对电脑设备的重视发展到对核心数据安全的重视,这已经是一个不可逆转的趋势。而医院信息管理系统HIS(Hospital information System)应用已经非常广泛,深入到医院管理的各个环节:门诊挂号、门诊收费、门诊摆药、取药、药品出入库、病人入院、住院医嘱信息、押金、结帐等等数据都存放在服务器的数据库中,实时性要求非常高,而系统中的数据,更是核心中的核心,数据的安全性关系到整个系统能否正常的运行,最终关系到能否为患者提供正常的服务。在看病难、看病贵的当下,显得尤为重要。所以对整个系统的数据做好数据保护是至关重要的,是医院保证提供正常服务的最后一道防线。所以,服务器的备份、数据库的实时备份尤其必要和迫切。
服务器的硬件备份方案很多,而且已经比较成熟,数据库的热备份软件国外有几种,国内还刚刚起步。各大公司纷纷加入这个行列,笔者所知就有如EMC,赛门铁克等都在做数据备份的解决方案,这些公司高端产品非常好,对一个大型企业来说可能这样的投资是必要的,但对于我们中小企业来说,一定要考虑它的性价比,动辄十几万、几十万的投资,这于我们
中小医院来说更是捉襟见肘。所以确定适合本院实情情况的备份方案显得尤为重要。下面笔者结合工作实际,对我院现有的备份方案做如下介绍:
3服务器系统现状
目前,我院信息管理系统即HIS。核心服务器1台,型号:HP惠普PROU570,内存2G,4个SCIS72.5G硬盘,双CPU,做RAID0+1。操作系统:WINDOWS2000SERVER。数据库:SQL2000SERVER。软件开发商:广州安易医疗软件公司。应用系统:HIS(医院信息管理系统)包括门诊管理系统:门诊挂号,门诊收费,门诊药房及病房管理系统(采用护士工作站模式),医技管理系统,药库药房系统,字典维护及综合查询。
4我院基要本状况
我院是二级甲等医院,日门诊量1300人次左右,床位400张,年平均住院人次为5000人次左右,医院各个业务流程对后台数据库的增加、修改多达上万次。服务器要求24h连续不间断工作,即365×12×24h。
5我院目前的备份与恢复的几个层次
5.1用笔记本电脑解决双机热备问题:我们做了RAID0+1,但它只能解决硬盘的问题,并不能解决数据库的问题。一般都考虑双机热备方案,但双机热备势必要增加一台服务器,增大投资,一般服务器都价格不菲。我院的HIS可分为病房和门诊,病房的实时性并不是很高,即可容忍几个小时,半天甚至于一天的延时,而门诊的实时性非常高,即不能容忍延时,哪怕是半小时。针对门诊的实时性,我们应用了用笔记本电脑安装门诊各应用程序包括门诊挂号、门诊收费等应用程序,相当于小服务器,数据库和应用程序和主服务器一致,每天下班前用应用程序——系统管理员Adminsys将所有公共字典导出备用,确保所有字典都是最新字典包括收费项目和药品字典。一但主服务器有问题,门诊可用笔记本收费与划价,药房可根据处方拿药,确保了门诊的实时性。我院去年机房搬迁切断光纤几小时,门诊就使用此种方法,保证了连续不间断收费划价与发药,确保了门诊病人不受影响。
5.2利用SQL数据库的计划作业进行备份和异地备份与恢复:利用SQL数据库的计划作业进行多个备份计划,比如在工作量比较少的时候,每天夜里24点进行备份,在凌晨3点时做异地备份计划,即将备份文件储存在局域网中的其它台计算机的硬盘上。确保服务器硬盘坏掉时有一份脱机的备份数据。然后可利用SQL的还原功能进行还原数据库。它的优点是可对整个数据库进行还原,且速度比较快。
5.3利用应用数据库的数据文件和日志文件直接用命令进行备份与恢复://恢复数据库XXX代表数据库名:EXEC sp_attach_db @dbname = N'xxx', @filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\xxx.mdf',@filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\xxx.ldf'GO//创建有户IF NOT EXISTS(SELECT NAME FROM master..SYSLOGINS WHERE NAME='HIS')EXEC SP_ADDLOGINS 'HIS',MANAGER GO //恢复用户使用权限exec dbo.sp_configure 'allow update','1'reconfigure with overridego update a set sid =(select sid from syslogins where name = 'His')from XXX sysusers a where name = 'His'update a set sid =(select sid from syslogins where name = 'His')from XXX sysusers a where name = 'His'goexec dbo.sp_configure 'allow update','0'reconfigure with override go
此种方法的优点是恢复的速度比较快,简单实用。缺点是对管理员要求比较高。
5.4利用应用程序导出导入进行备份与恢复:利用应用程序的系统管理员模块Sysadmin中的导出功能,每天下班之前将所有数据导出。即导出所有的表(table),需要时将表导回,它的优点是比较灵活,可针对表进行恢复,如果只是某一个表有问题,比如误操作,误删除,只需要将前一天备份的表导回即可。当我们LIS(检验信息系统)刚投入使用时,检验人员对操作还不熟悉,误将检验项目编码搞乱,无法出检验报告,我们就是利用这个功能将检验字典导回,问题就迎刃而解。
总之,医院信息管理系统中的数据备份和恢复非常重要。尤其现在医患关系紧张、医保物价部门对医院的要求非常严格的情况下,数据一旦丢失,对医院、社会都会造成无法估量的损失。这就要求我们的计算机管理人员做好充分的准备,能够及时进行数据的备份,一旦数据库出现故障,要能够及时进行恢复。