第一篇:SQL Server 2008之數據庫大型應用解決方案總結
SQL Server 2008之數據庫大型應用解決方案總結
本教案需配合視頻教程學習,視頻教程地址為:http://www.tmdps.cn/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(檢驗信息系統)剛投入使用時,檢驗人員對操作還不熟悉,誤將檢驗項目編碼搞亂,無法出檢驗報告,我們就是利用這個功能將檢驗字典導回,問題就迎刃而解。
總之,醫院信息管理系統中的數據備份和恢復非常重要。尤其現在醫患關系緊張、醫保物價部門對醫院的要求非常嚴格的情況下,數據一旦丟失,對醫院、社會都會造成無法估量的損失。這就要求我們的計算機管理人員做好充分的準備,能夠及時進行數據的備份,一旦數據庫出現故障,要能夠及時進行恢復。