select * from (
select t.*,rownum from table1 t where condition )
where rownum>(pangeNow⑴)*pageSize and rownum<=(pageNow)*pageSize
答案:事務是這樣1種機制,它確保多個SQL語句被當作單個工作單元來處理。事務具有以下的作用:
1致性:同時進行的查詢和更新彼此不會產生沖突,其他用戶不會看到產生了變化但還沒有提交的數據。
可恢復性:1旦系統故障,數據庫會自動地完全恢復未完成的事務。
答案:觸發器是可以由事件來啟動運行的,存在于數據庫服務器中的1個進程。他的作用:可以實現1般的束縛沒法完成的復雜束縛,從而實現更加復雜的完全性要求。使用觸發器其實不存在嚴格的限定,只要用戶想在無人工參與的情況下完成1般的定義束縛不可以完成的束縛,來保證數據庫完全性,那末就能夠使用觸發器。
由于觸發器主要是用來保證數據庫的完全性的,所以要創建1個觸發器,首先要明確該觸發器應當屬于那1種(DML,INSTEAD OF,SYSTEM)由于他們各有個的用處;其次就是要肯定觸發器被觸發以后所設計到的數據。 觸發器中不可使用COMMIT。
答案: 關系數據庫系統文件系統的區分在于:
首先,關系性數據庫的整體數據是結構化的,采取關系數據模型來描寫,這是它與文件系統的根本區分。(數據模型包括:數據結構,數據操作和完全性束縛條件)
其次,關系數據庫系統的同享性高,冗余低可以面向全部系統,而文件系統則具有利用范圍的局限性,不容易擴大。
第3,關系數據庫系統采取兩級映照機制保證了數據的高獨立性,從而使得程序的編寫和數據都存在很高的獨立性。這方面是文件系統沒法到達的,它只能針對某1個具體的利用。(兩級映照:保證邏輯獨立性的外模式/模式映照和保證物理獨立性的內模式/模式映照。外模式:用戶模式,是數據庫用戶的局部數據的邏輯結構特點的描寫。模式:數據庫全部數據的邏輯結構特點的描寫。內模式:也就是數據終究的物理存儲結構的描寫。)
第4,就是關系性數據庫系統由統1的DBMS進行管理,從而為數據提供了如安全性保護,并發控制,完全性檢查和數據庫恢復服務。
答案: 觸發器: 是存儲在數據庫中的進程,當表被修改(增、刪、改)時它隱式地被激起。 存儲進程:是數據庫語言SQL的集合,一樣也存儲在數據庫中,但是他是由其他利用程序來啟動運行或也能夠直接運行。
事務的1致性:是事務原子性的體現,事務所對應的數據庫操作要末成功要末失敗沒有第3種情況。事務不論是提交成功與否都不能影響數據庫數據的1致性狀態。
事務:用戶定義的1個數據庫操作序列,這些操作要末全部成功完成要末全部不做,是1個不可分割的整體。定義事務的SQL語句有:BEGIN TRANSACTION,COMMIT,ROLLBACK。
事務的原子性:就是事務所包括的數據庫操作要末都做,要末都不做.
事務的隔離性:事務對數據的操作不能夠遭到其他事務的影響。
事務的延續性:也就是說事務對數據的影響是永久的。
對信譽卡提款這1事務而言就是要保證’提取到現金’和’卡帳號余額’的修改要同時成功或失敗.
BEGIN TRANSACTION
讀取A的帳戶余額BALANCE
BALANCE=BALANCE-AMOUNT轉帳金額
IF(BALANCE<0)
THEN ROLLBACK
ELSE BEGIN
將A的新余額寫回
讀取B的帳戶余額BALANCEB
BALANCEB=BALANCEB+AMOUNT轉帳金額
將B的新余額寫回
COMMIT
END IF
END
答案: 實現索引的方式有兩種:針對1張表的某些字段創建具體的索引,如對oracle: create index 索引名稱 on 表名(字段名);在創建表時為字段建立主鍵束縛或唯1束縛,系統將自動為其建立索引。
索引的原理:根據建立索引的字段建立索引表,寄存字段值和對應記錄的物理地址,從而在搜索的時候根據字段值搜索索引表的到物理地址直接訪問記錄。
引入索引雖然提高了查詢速度,但本身占用1定的系統存儲容量和系統處理時間,需要根據實際情況進行具體的分析.
(oracle)索引的類型有:B樹索引,位圖索引,函數索引等。
答案: view 是對表級數據的多角度的透視,適用于對查詢安全性、靈活性有1定要求的環境.
答案:存儲進程是預編譯過的,履行時不必編譯,履行速度更快;存儲進程封裝了1批SQL語句,便于保護數據的完全性與1致性;可以實現代碼的復用。
回滾就是在事務提交之前將數據庫數據恢復到事務修改之前數據庫數據狀態。
回滾段就是為回滾提供根據,記錄的是事務操作數據庫之前的數據或對應于之前操作的操作,這個內容要根據之前的操作而定。比如說之前事務操作如果是UPDATE那末回滾段則存儲UPDATE之前的數據,如果事務是DELETE操作那末存儲的則是與之相對應的INSERT操作語句,相反如果事務操作是INSERT那末記錄像應的則是DELETE操作了。
邏輯體系結構:塊,區,段,表空間
物理體系結構:表空間,3大文件
軟件體系結構:SGA,后臺進程.
答:系統全局區包括:同享池、重做日志緩存區、數據高速緩存區,大池,JAVA池。
啟動:啟動實例、裝載數據庫數據、打開數據庫。 關閉:關閉數據庫、卸載數據庫數據、關閉實例。
數據文件,控制文件,日志文件,參數文件
寄存在數據字典中,數據字典內容對應于系統表空間SYSTEM表空間。
Char()存儲定長字符,定義的時候可以不為他指定長度但是如若往里插入值則會出錯;varchar2()存儲變長字符定義的時候必須指定長度,date存儲時間日期;Number()數字類型,包括整型,浮點型等;clob()大容量字符串;blob()大2進制對象
1)數據文件
2)控制文件
3)日志文件
控制文件寄存有實例信息(實例名稱創建時間等),數據文件和日志文件信息,還有系統運行時記錄的系統變更碼(SCN),檢查點信息和歸檔確當前狀態信息等。數據庫在加載數據庫的時候首先要讀取控制文件取得和數據庫有關的物理結構信息以后才能夠正確加載數據文件和日志文件并打開數據庫。
1. TRUNCATE在各種表上不管是大的還是小的都非常快。如果有ROLLBACK命令DELETE將被撤消,而TRUNCATE則不會被撤消。
2. TRUNCATE是1個DDL語言而DELETE是DML語句,向其他所有的DDL語言1樣,他將被隱式提交,不能對TRUNCATE使用ROLLBACK命令。
3. TRUNCATE將重新設置高水平線和所有的索引。在對全部表和索引進行完全閱讀時,經過TRUNCATE操作后的表比DELETE操作后的表要快很多。
4. TRUNCATE不能觸發觸發器,DELETE會觸發觸發器。
5. 不能授與任何人清空他人的表的權限。
6. 當表被清空后表和表的索引講重新設置成初始大小,而delete則不能。
7. 不能清空父表。
兩種擴大方式:
1. 增加數據文件 alter tablespace tablespace_name add datafile ‘’ xxMB
2. 擴大數據文件大小 alter database datafile ‘’ resize newMB
1. 字典管理方式 extent management dictionary;默許方式
2. 本地管理方式 extent management local[autoallocate/uniform xxmb]<推薦>;
1. 1個分區表有1個或多個分區,每一個分區通過使用范圍分區、散列分區、或組合分辨別區的行
2. 分區表中的每個分區為1個段,可各自位于不同的表空間中
3. 對同時能夠使用幾個進程進行查詢或操作的大型表分區非常有用
索引是若干數據行的關鍵字的列表,查詢數據時,通過索引中的關鍵字可以快速定位到要訪問的記錄所在的數據塊,從而大大減少讀取數據塊的I/O次數,因此可以顯著提高性能。
Create procedure pro_name (xxxx in/out type; yyyy in/out/inout type; )
is/as zzzz type;
begin
sqlpro;
exception exceptionxxxxx;
commit;
end;
oracle中有3種類型的異常。預定義的異常 非預定義的異常 用戶定義的異常 第2種非預定義的異常是與特定的oracle毛病關聯。
優化的策略1般包括: 內存優化、操作系統優化、數據存儲的優化、網絡優化等方法
具體到不同的數據庫觸及到要調劑不同的數據庫配置文件、不同的操作系統參數、網絡參數等等, 不同的數據庫不同。
通常,通過索引查詢數據比全表掃描要快.但是我們也必須注意到它的代價. 索引需要空間來存儲,也需要定期保護, 每當有記錄在表中增減或索引列被修改時,索引本身也會被修改. 這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5 次的磁盤I/O. 由于索引需要額外的存儲空間和處理,那些沒必要要的索引反而會使查詢反應時間變慢.使用索引查詢不1定能提高查詢性能,索引范圍查詢(INDEX RANGE SCAN)適用于兩種情況:
基于1個范圍的檢索,1般查詢返回結果集小于表中記錄數的30%宜采取;
基于非唯1性索引的檢索,索引就是為了提高查詢性能而存在的,如果在查詢中索引沒有提高性能,只能說是用錯了索引,或講是場合不同
綁定變量是指在SQL語句中使用變量,改變變量的值來改變SQL語句的履行結果。
優點:使用綁定變量,可以減少SQL語句的解析,能減少數據庫引擎消耗在SQL語句解析上的資源。提高了編程效力和可靠性。減少訪問數據庫的次數, 就可以實際上減少ORACLE的工作量。
缺點:常常需要使用動態SQL的寫法,由于參數的不同,可能SQL的履行效力不同;
綁定變量是相對文本變量來說的,所謂文本變量是指在SQL直接書寫查詢條件, 這樣的SQL在不同條件下需要反復解析,綁定變量是指使用變量來代替直接書寫條件,查詢bind value在運行時傳遞,然后綁定履行。
優點是減少硬解析,下降CPU的爭用,節省shared_pool
缺點是不能使用histogram,sql優化比較困難
tablespace: 1個數據庫劃分為1個或多個邏輯單位,該邏輯單位成為表空間;每個表空間可能包括1個或多個 Segment;
Segments: Segment指在tablespace中為特定邏輯存儲結構分配的空間。每個段是由1個或多個extent組成。包括數據段、索引段、回滾段和臨時段。
Extents: 1個 extent 由1系列連續的 Oracle blocks組成.ORACLE為通過extent 來給segment分配空間。
Data Blocks:Oracle 數據庫最小的I/O存儲單位,1個data block對應1個或多個分配給data file的操作系統塊。
table創建時,默許創建了1個data segment,每一個data segment含有min extents指定的extents數,每一個extent據據表空間的存儲參數分配1定數量的blocks
回滾段用于保存數據修改前的映象,這些信息用于生成讀1致性數據庫信息、在數據庫恢復和Rollback時使用。1個事務只能使用1個回滾段。
事務回滾:當事務修改表中數據的時候,該數據修改前的值(即前影象)會寄存在回滾段中,當用戶回滾事務(ROLLBACK)時,ORACLE將會利用回滾段中的數據前影象來將修改的數據恢復到原來的值。
事務恢復:當事務正在處理的時候,例程失敗,回滾段的信息保存在undo表空間中,ORACLE將在下次打開數據庫時利用回滾來恢復未提交的數據。
讀1致性:當1個會話正在修改數據時,其他的會話將看不到該會話未提交的修改。 當1個語句正在履行時,該語句將看不到從該語句開始履行后的未提交的修改(語句級讀1致性) 當ORACLE履行SELECT語句時,ORACLE依照當前的系統改變號(SYSTEM CHANGE NUMBER-SCN) 來保證任何前于當前SCN的未提交的改變不被該語句處理。可以想象:當1個長時間的查詢正在履行時, 若其他會話改變了該查詢要查詢的某個數據塊,ORACLE將利用回滾段的數據前影象來構造1個讀1致性視圖
日志文件(Log File)記錄所有對數據庫數據的修改,主要是保護數據庫以避免故障,和恢復數據時使用。其特點以下:
1. 每個數據庫最少包括兩個日志文件組。每一個日志文件組最少包括兩個日志文件成員。
2. 日志文件組以循環方式進行寫操作。
3. 每個日志文件成員對應1個物理文件。
記錄數據庫事務,最大限度地保證數據的1致性與安全性
重做日志文件:含對數據庫所做的更改記錄,這樣萬1出現故障可以啟用數據恢復,1個數據庫最少需要兩個重做日志文件
歸檔日志文件:是重做日志文件的脫機副本,這些副本可能對從介質失敗中進行恢復很必要。
系統全局區(SGA):是ORACLE為實例分配的1組同享緩沖存儲區,用于寄存數據庫數據和控制信息,以實現對數據庫數據的管理和操作。 SGA主要包括:
1. 同享池(shared pool) :用來存儲最近履行的SQL語句和最近使用的數據字典的數據。
2. 數據緩沖區 (database buffer cache):用來存儲最近從數據文件中讀寫過的數據。
3. 重作日志緩沖區(redo log buffer):用來記錄服務或后臺進程對數據庫的操作。 另外在SGA中還有兩個可選的內存結構:
4. Java pool: 用來存儲Java代碼。
5. Large pool: 用來存儲不與SQL直接相干的大型內存結構。備份、恢復使用。
數據寫進程(DBWR):負責將更改的數據從數據庫緩沖區高速緩存寫入數據文件
日志寫進程(LGWR):將重做日志緩沖區中的更改寫入在線重做日志文件
系統監控 (SMON): 檢查數據庫的1致性如有必要還會在數據庫打開時啟動數據庫的恢復
進程監控 (PMON): 負責在1個Oracle 進程失敗時清算資源
檢查點進程(CKPT):負責在每當緩沖區高速緩存中的更改永久地記錄在數據庫中時,更新控制文件和數據文件中的數據庫狀態信息。
歸檔進程 (ARCH):在每第二天志切換時把已滿的日志組進行備份或歸檔
恢復進程 (RECO): 保證散布式事務的1致性,在散布式事務中,要末同時commit,要末同時rollback
邏輯備份:exp/imp 指定表的邏輯備份 物理備份:
熱備份:alter tablespace begin/end backup;
冷備份:脫機備份(database shutdown)
RMAN備份
full backup/incremental backup(積累/差異) 物理備份
物理備份是最主要的備份方式。用于保證數據庫在最小的數據庫丟失或沒有數據丟失的情況下得到恢復。
冷物理
冷物理備份提供了最簡單和最直接的方法保護數據庫因物理破壞丟失。建議在以下幾種情況中使用。
對1個已存在大最數據量的數據庫,在晚間數據庫可以關閉,此時利用冷物理備份。 對需對數據庫服務器進行升級,(如更換硬盤),此時需要備份數據庫信息,并在新的硬盤中恢復這些數據信息,建議采取冷物理備份。
熱物理
主要是指備份進程在數據庫打開并且用戶可使用的情況下進行。需要履行熱物理備份的情況有:
由于數據庫性質要求不中斷工作,因此此時只能采取熱物理備份。 由于備份的要求的時間太長,而數據庫只能短時間關閉時。
邏輯備份 (EXP/IMP)
邏輯備份用于實現數據庫對象的恢復。但不是基于時間點可完全恢復的備份策略。只能作為聯機備份和脫機備份的1種補充。
完全邏輯備份
完全邏輯備份是將全部數據庫導出到1個數據庫的格式文件中,該文件可以在不同的數據庫版本、操作系統和硬件平臺之間進行移植。
指定表的邏輯備份
通過備份工具,可以將指定的數據庫表備份出來,這可以免完全邏輯備份所帶來的時間和財力上的浪費。
事務是作為1個邏輯單元履行的1系列操作,1個邏輯工作單元必須有4個屬性,稱為 ACID(原子性、1致性、隔離性和持久性)屬性,只有這樣才能成為1個事務:
原子性:事務必須是原子工作單元;對其數據修改,要末全都履行,要末全都不履行。
1致性:事務在完成時,必須使所有的數據都保持1致狀態。在相干數據庫中,所有規則都必須利用于事務的修改,以保持所有數據的完全性。事務結束時,所有的內部數據結構(如 B 樹索引或雙向鏈表)都必須是正確的。
隔離性:由并發事務所作的修改必須與任何其它并發事務所作的修改隔離。事務查看數據時數據所處的狀態,要末是另外一并發事務修改它之前的狀態,要末是另外一事務修改它以后的狀態,事務不會查看中間狀態的數據。這稱為可串行性,由于它能夠重新裝載起始數據,并且重播1系列事務,以使數據結束時的狀態與原始事務履行的狀態相同。
持久性:事務完成以后,它對系統的影響是永久性的。該修改即便出現系統故障也將1直保持。
死鎖產生的條件:
1、資源不能同享,需要只能由1個進程或線程使用
2、要求且保持,已鎖定的資源自已保持著不釋放
3、不剝奪,自給申請到的資源不能被他人剝奪
4、循環等待
想預防死鎖,把上面4個條件破壞1個就能夠了。
避免死鎖的途徑就是避免滿足死鎖條件的情況產生,為此用戶需要遵守以下原則。
(1)盡可能避免并發地履行觸及到修改數據的語句。
(2)要求每一個事務1次就將所有要使用的數據全部加鎖,否則就不予履行。
(3)預先規定1個封閉順序,所有的事務都必須按這個順序對數據履行封閉。如不同的進程在事務內部對對象的更新履行順序應盡可能保持1致。
(4)每一個事務的履行時間不可太長,在業務允許的情況下可以斟酌將事務分割成為幾個小事務來履行。【比如說把復雜的多表查詢分散成屢次單表查詢】
(5)數據存儲空間離散法。數據存儲空間離散法是指采取各種手段,將邏輯上在1個表中的數據分散到若干離散的空間上去,以便改良對表的訪問性能。主要通過將大表按行或列分解為若干小表,或按不同的用戶群分解兩種方法實現。這類方法類似分散“數據熱門”,但是確切,如果數據不是太常常被訪問,那末死鎖就不會太常常產生。
(6)還是類似(1)的,比如有1個修改上百條記錄的update語句,我們可以修改成每10條1個update語句,或干脆就每條記錄1個update語句。
(7)將常常更新的數據庫和查詢數據庫分開
ORACLE服務器啟動時,先啟動實例然后再讀取數據庫的各個文件固然也包括控制文件。也就是說在數據庫服務器啟動的第2步時讀取。
Oracle索引有B樹索引,位圖索引,函數索引,簇索引等。
唯1索引也是B樹索引的1種,它要求被索引的字段值不可以重復。在創建的時候使用B樹算法創建。
位圖索引其實不是采取像唯1索引那樣存儲(索引字段值,記錄ROWID)來創建索引段的,而是為每個唯1的字段值創建1個位圖,位圖中使用位元來對應1個記錄的ROWID。位元到ROWID是通過映照的到的。
1個表空間可包括1個或多個數據文件。表空間利用增加或擴大數據文件擴大表空間,表空間的大小為組成該表空間的數據文件大小的和。1個datafile只能屬于1個表空間; 1個tablespace可以有1個或多個datafile,每一個datafile只能在1個tablespace內, table中的數據,通過hash算法散布在tablespace中的各個datafile中,tablespace是邏輯上的概念,datafile則在物理上貯存了數據庫的種種對象