資料庫冗長
『壹』 資料庫中,如何保證數據完整性
保證數據的完整性:
1. 用約束而非商務規則強制數據完整性
如果你按照商務規則來處理需求,那麼你應當檢查商務層次/用戶界面:如果商務規則以後發生變化,那麼只需要進行更新即可。
假如需求源於維護數據完整性的需要,那麼在資料庫層面上需要施加限制條件。
如果你在數據層確實採用了約束,你要保證有辦法把更新不能通過約束檢查的原因採用用戶理解的語言通知用戶界面。除非你的欄位命名很冗長,否則欄位名本身還不夠。 — Lamont Adams
只要有可能,請採用資料庫系統實現數據的完整性。這不但包括通過標准化實現的完整性而且還包括數據的功能性。在寫數據的時候還可以增加觸發器來保證數據的正確性。不要依賴於商務層保證數據完整性;它不能保證表之間(外鍵)的完整性所以不能強加於其他完整性規則之上。
— Peter Ritchie
2. 分布式數據系統
對分布式系統而言,在你決定是否在各個站點復制所有數據還是把數據保存在一個地方之前應該估計一下未來5 年或者10 年的數據量。當你把數據傳送到其他站點的時候,最好在資料庫欄位中設置一些標記。在目的站點收到你的數據之後更新你的標記。為了進行這種數據傳輸,請寫下你自己的批處理或者調度程序以特定時間間隔運行而不要讓用戶在每天的工作後傳輸數據。本地拷貝你的維護數據,比如計算常數和利息率等,設置版本號保證數據在每個站點都完全一致。
— Suhair TechRepublic
3. 強制指示完整性
沒有好辦法能在有害數據進入資料庫之後消除它,所以你應該在它進入資料庫之前將其剔除。激活資料庫系統的指示完整性特性。這樣可以保持數據的清潔而能迫使開發人員投入更多的時間處理錯誤條件。
— kol
4. 關系
如果兩個實體之間存在多對一關系,而且還有可能轉化為多對多關系,那麼你最好一開始就設置成多對多關系。從現有的多對一關系轉變為多對多關系比一開始就是多對多關系要難得多。
— CS Data Architect
5. 採用視圖
為了在你的資料庫和你的應用程序代碼之間提供另一層抽象,你可以為你的應用程序建立專門的視圖而不必非要應用程序直接訪問數據表。這樣做還等於在處理資料庫變更時給你提供了更多的自由。
— Gay Howe
6. 給數據保有和恢復制定計劃
考慮數據保有策略並包含在設計過程中,預先設計你的數據恢復過程。採用可以發布給用戶/開發人員的數據字典實現方便的數據識別同時保證對數據源文檔化。編寫在線更新來「更新查詢」供以後萬一數據丟失可以重新處理更新。
— kol
7. 用存儲過程讓系統做重活
解決了許多麻煩來產生一個具有高度完整性的資料庫解決方案之後,我所在的團隊決定封裝一些關聯表的功能組,提供一整套常規的存儲過程來訪問各組以便加快速度和簡化客戶程序代碼的開發。在此期間,我們發現3GL 編碼器設置了所有可能的錯誤條件,比如以下所示:
SELECT Cnt = COUNT (*)
FROM [<Table>]
WHERE [<primary key column>] = <new value>
IF Cnt = 0
BEGIN
INSERT INTO [<Table>]
( [< primary key column>] )
VALUES ( <New value> )
END
ELSE
BEGIN
<indicate plication error>
END
而一個非3GL 編碼器是這樣做的:
INSERT INTO [<Table>]
( [< primary key column>] )
VALUES
( <New value> )
IF @@ERROR = 2627 -- Literal error code for Primary Key Constraint
BEGIN
<indicate plication error>
END
第2 個程序簡單多了,而且事實上,利用了我們給資料庫的功能。雖然我個人不喜歡使用嵌入文字(2627)。但是那樣可以很方便地用一點預先處理來代替。資料庫不只是一個存放數據的地方,它也是簡化編碼之地。
— a-smith
8. 使用查找
控制數據完整性的最佳方式就是限制用戶的選擇。只要有可能都應該提供給用戶一個清晰的價值列表供其選擇。這樣將減少鍵入代碼的錯誤和誤解同時提供數據的一致性。某些公共數據特別適合查找:國家代碼、狀態代碼等
『貳』 什麼是數據的完整性
數據完整性(Data Integrity)是指數據的精確性(Accuracy) 和可靠性(Reliability)。
資料庫中的數據是從外界輸入的,而數據的輸入由於種種原因,會發生輸入無效或錯誤信息。保證輸入的數據符合規定,成為了資料庫系統,尤其是多用戶的關系資料庫系統首要關注的問題。數據完整性因此而提出。
存儲在資料庫中的所有數據值均正確的狀態。如果資料庫中存儲有不正確的數據值,則該資料庫稱為已喪失數據完整性。
資料庫採用多種方法來保證數據完整性,包括外鍵、約束、規則和觸發器。系統很好地處理了這四者的關系,並針對不同的具體情況用不同的方法進行,相互交叉使用,相補缺點。
(2)資料庫冗長擴展閱讀:
數據完整性由以下三個方面構成:
1、域完整性:
是指一個列的輸入有效性,是否允許為空值。強制域完整性的方法有:限制類型、格式或可能值的范圍。
2、實體完整性:
是指保證表中所有的行唯一。實體完整性要求表中的所有行都有一個唯一標識符。這個唯一標識符可能是一列,也可能是幾列的組合,稱為主鍵。也就是說,表中的主鍵在所有行上必須取唯一值。
3、參照完整性:
是指保證主關鍵字和外部關鍵字之間的參照關系。它涉及兩個或兩個以上表數據的一致性維護。
外鍵值將引用表中包含此外鍵的記錄和被引用表中主鍵與外鍵相匹配的記錄關聯起來。在輸入、更改或刪除記錄時,參照完整性保持表之間已定義的關系,確保鍵值在所有表中一致。
參考資料來源:網路-數據完整性
『叄』 學習C語言,計算機編程的過程是如何學這兩樣這兩樣的所有必學科目,課程,內容是我洪鯤如何學會,
C語言已經成為最重要和最流行的編程語言之一,C語言是學習編程語言的基礎。使用C語言的開發過程主要包括:需求分析、程序設計、代碼編寫、編譯、運行、測試和調試、維護和修改七個過程。
工具材料:
電腦
C語言
操作方法
01
需求分析,在開始工作之前,自然是要對要完成的程序的功能是什麼有一個明確的定位,也就是需求分析,分析需要為程序提供哪些信息。
02
程序設計,在明確程序的工作目標之後,正式開始編寫程序之前,需要對程序有一個總體的設計,對程序工作流程、可能會用到的數據、用戶界面設計等進行較為清晰的設計。
03
代碼編寫,代碼編寫就是用C語言把程序設計部分的設計內容表現出來。
04
編譯,編輯就是將C語言通過編譯器編譯成為電腦可以識別的機器語言的過程。程序沒有語法錯誤就可以通過編譯生成可執行文件,有錯則需要不斷修改直到通過編譯。
05
運行,編譯完成後生成的可執行文件後,就可以運行程序了。
06
測試和調試,運行可執行文件後,我們可以選取一些知道運行結果的例子,對程序的運行結果進行測試,如果和我們的預期結果相符則程序正確,如果不相符則需要我們返回代碼編譯過程,查找代碼編寫的漏洞,然後再次進行編譯、運行和測試過程。
07
雖然程序通過了測試,但是在實際運行過程中可能還會出現各種我們不能預知的情況,所以在實際運行中仍然需要我們對各種突發狀況進行處理,通過對程序的維護和修改來不斷完善代碼漏洞。
『肆』 sql server 2000收縮資料庫總是發生死鎖
出現死鎖的情況:
1). 不按同一順序訪問對象。(註:出現循環)
2). 事務中的用戶交互。(註:增加持有資源的時間,較多鎖競爭)
3). 事務冗長並處於多個批處理中。(註:增加持有資源的時間)
4). 使用較高的隔離級別。(註:使用較低的隔離級別(例如已提交讀))
5). 不使用基於行版本控制的隔離級別:2005中支持快照事務隔離和指定READ_COMMITTE
隔離級別的事務使用行版本控制,可以將讀與寫操作之間發生的死鎖幾率降至最低。
6). 不使用綁定連接。
解決辦法:
使用SET LOCK_TIMEOUT timeout_period(單位為毫秒)來設定鎖請求超時。默認情況下,資料庫沒有超時期限(timeout_period值為-1,可以用SELECT @@LOCK_TIMEOUT來查看該值,即無限期等待)。當請求鎖超過timeout_period時,將返回錯誤。timeout_period值為0時表示根本不等待,一遇到鎖就返回消息。設置鎖請求超時,破環了死鎖的第二個必要條件(請求與保持條件)。
壓縮文件,我覺得這樣比較好,
use 資料庫名;
select * from sys.database_files
dbcc shrinkfile(2,1) --前者參數1代表主數據文件,2代表日誌文件;後者參數是大小
『伍』 什麼是閃回技術啊主要內容有哪些啊
為了使oracle資料庫從任何邏輯誤操作中迅速恢復,Oracle 資料庫10g 提供了一系列人為錯誤更正技術,稱為閃回。閃回從根本上改變了數據恢復。過去,資料庫在幾分鍾內就可能損壞,但需要幾小時才能恢復。利用閃回技術,更正錯誤的時間與錯誤發生時間幾乎相同。而且它非常易用,使用一條短命令便可恢復整個資料庫,而不必執行復雜的程序。閃回技術提供了一個 SQL 界面,能夠快速分析和修復人為錯誤。閃回技術為本地數據損壞提供了細粒度外部分析和修復,如當錯誤刪除客戶訂單時。閃回技術還支持修復更多廣泛的損壞,同時快速避免長時間停機,如當本月的所有客戶訂單都被刪除時。閃回技術是 Oracle 資料庫獨有的特性,支持各級恢復,包括行、事務、表、表空間和資料庫范圍。
1 閃回查詢
在Oracle 9i之前,如果用戶錯誤操作數據後,除了不完全恢復外,沒有好的解決辦法。Oracle 9i中提供閃回查詢,由一個新的包DBMS_FLASH來實現。用戶使用閃回查詢可以及時取得誤操作DML(Delete、Update、Insert)前某一時間點資料庫的映像視圖,用戶可以利用系統時間或系統改變號(SCN:System Change Number)來指定這個只讀視圖,並可以針對錯誤進行相應的恢復措施。閃回查詢功能完全依賴於自動回滾段管理(AUM),對於Drop等誤操作不能恢復。閃回特性可應用在以下方面:
(1)自我維護過程中的修復:當一些重要的記錄被意外刪除,用戶可以向後移動到一個時間點,查看丟失的行並把它們重新插入現在的表內恢復。
(2)恢復Email和聲音Email:當用戶意外刪除了Email或者聲音信息時,可以通過移回到固定時間點來恢復刪除。
(3)賬號平衡狀況:可以查看以前的歷史數據。如銀行外幣管理中用於記錄特定時間的匯率。在以前,匯率變更被記錄在一個歷史表中,現在就可以通過閃回功能進行查詢。
(4)用於趨勢分析的決策支持系統:決策支持系統和聯機分析應用必須執行一個長時間的事務。使用閃回查詢,這些應用可以對歷史數據執行分析和建模。例如,特定產品如礦泉水隨季節變化需求情況的變化。
2 閃回版本查詢
閃回版本查詢提供了一種查看行級資料庫變化的方法。它是 SQL 的擴展,支持以特定時間間隔檢索所有不同版本的行。例如:
Select * from EMPLOYEE versions between 『2:00 PM』 and 『3:00 PM』 where …
該語句顯示出今天下午 2 點至 3 點之間該行的各版本,每個版本都由不同的事務所更改。使用 DBA 可指出數據何時、如何被更改的,並追溯到用戶、應用程序或事務。這使得 DBA 可以跟蹤資料庫中的邏輯破壞並加以更正。它還讓應用開發人員能夠對其代碼進行調試。
3 閃回事務查詢
閃回事務查詢提供了一種查看事務級資料庫變化的方法。它是 SQL 的擴展,能夠看到事務帶來的所有變化。例如:
Select * from DBA_TRANSACTION_QUERY where xid = 『000200030000002D』;
該語句顯示出該事務引起的結果性變化。此外,返回補充 SQL 語句,並用於撤消由事務引起的各行變化。使用精密工具(如 DBA),應用開發人員可以精確地診斷和更正資料庫或應用中的邏輯問題。
4 閃回資料庫
要將 Oracle 資料庫恢復到以前的時間點,傳統方法是進行時間點恢復。然而,時間點恢復需要用數小時甚至幾天的時間,因為它需要從備份中恢復整個資料庫,並恰好恢復到資料庫發生錯誤前的時間點。由於資料庫的大小不斷增長,因此需要用數小時甚至幾天的時間才能恢復整個資料庫。 閃回資料庫是進行時間點恢復的新戰略。它能夠快速將 Oracle 資料庫恢復到以前的時間,以正確更正由於邏輯數據損壞或用戶錯誤而引起的任何問題。閃回日誌可用於捕獲舊版本的變化塊。一種方法是不間斷備份或存儲快照。當需要執行恢復時,可快速重放閃回日誌,以將資料庫恢復到錯誤前的時間點,並且只恢復改變的塊。這一過程非常快,可將恢復時間從數小時縮短至幾分鍾。此外,它還非常易用。通過發出以下簡單的命令,可將資料庫恢復到 2:05 PM。
FLASHBACK DATABASE to 『2:05 PM』;
它的使用不要求進行磁帶恢復,沒有冗長的停機時間,沒有復雜的恢復過程。您還可以使用閃回,然後以只讀方式打開資料庫,並檢查其內容。如果您確定閃回過遠或不足,您可以重新發出閃回命令,以找到資料庫損壞前的正確時間點。閃回同時與 Data Guard 相集成,因此您可以一起閃回生產和待機資料庫(參見以下數據保護部分)。
閃回資料庫就像是為資料庫安裝了一個倒回或撤消按鈕。
5 閃回表
使用該特性,可以確保資料庫表能夠被恢復到之前的某一個時間點上。注意,該功能與最早的Oracle 9i中的Flashback Query不同,Flashback Query僅是得到了表在之前某個時間點上的快照而已,並不改變當前表的狀態;而Falshback Table卻能夠將表及附屬對象一起回到以前的某個時間點。該功能基於撤銷數據(undodata)。
6 閃回刪除
無意丟棄或刪除資料庫是人們經常會犯的錯誤。經常聽到 Oracle 支持人員說:「在我刪除那個表時,我以為我已經連接到了測試資料庫。」用戶已認識到他們錯了,但已經太晚了,沒有辦法輕松恢復被刪除的表及其索引、約束和觸發器。對象一旦被刪除就永遠被刪除了。如果真是重要的表或其它對象(如索引、分區或集簇),DBA 不得不執行時間點恢復,但這非常耗時,而且會導致丟失最近的事務。 閃回刪除針對刪除 Oracle 資料庫 10g 中的對象提供了一個安全網路。當用戶刪除一個表,Oracle 會將它放到垃圾箱中。垃圾箱中的對象一直會保留,直到用戶決定永久刪除它們或包含該本的表空間不足。垃圾箱是一個虛擬容器,用於存放所有被刪除的對象。用戶可以查看垃圾箱,「撤消」被刪除的表及其相關的對象。例如,可以發出以下命令來「撤消」雇員信息表及其所有相關對象。
FLASHBACK TABLE employee BEFORE DROP;
閃回刪除就像是為一個表及其相關對象安裝了一個撤消按鈕。