1,delete 與Truncate區別?
1)truncate 是ddl 語句,delete 是dml語句。
2) Truncate 的速度遠快于DELETE;
原因是: 當執行DELETE操作時所有表數據先被copy到回滾表空間,數據量不同花費時間長短不一。而TRUNCATE 是直接刪除數據不進回滾表空間。
3) delete 數據可以運行Rollback 進行數據回滾。而Truncate 則是永久刪除不能回滾。
4) Truncate 操作不會觸發表上的delete觸發器,而delete 會正常觸發。
5) Truncate 語句不能帶where 條件意味著只能全部數據刪除,而DELETE可帶where 條件進行刪除數據。
6) Truncate 操作會重置表的高水位線(High Water Mark),而delete 不會。
【專題推薦】:2020年oracle面試題匯總(最新)
2,集合操作符
union : 不包含重復值,默認按第一個查詢的第一列升序排列。
Union All : 完全并集包含重復值。不排序。
Minus 不包含重復值,不排序。
3,數據庫的三大范式是什么?
1) 第一范式:原子件,要求每一列的值不能再拆分了。
2) 第二范式: 一張表只描述一個實體(若列中有冗余數據,則不滿足)
3)第三范式: 所有列與主鍵值直接相關。
4?事務的特性(ACID)是指什么?
1)原子性(Atomic): 事務中的各項操作,要么全做要么全不做,任何一項操作的失敗都會導致整個事務的失敗。
2) 一致性(Consistent): 事務結束后系統狀態是一樣的。
3)隔離性(Isolated): 并發執行的事務彼此無法看到對方的中間狀態。
4) 持久性(Durable):事務完成后,即使發生災難性故障,通過日志和同步備份可以在故障發生后重建數據。
5 mysql數據庫與Oracle 數據庫有什么區別?
1,應用方面,Mysql 是中小型應用的數據庫。一般用于個人和中小型企業。Oracle 屬于大型數據庫,一般用于具有相當規模的企業應用。
2, 自動增長的數據類型方面: MySQL有自動增長的數據類型。Oracle 沒有自動增長的數據類型。需要建立一個自增序列。
3,group by 用法: Mysql 中group by 在select 語句中可以隨意使用,但在ORACLE 中如果查詢語句中有組函數,那么其他列必須是組函數處理過的或者是group by子句中的列,否則會報錯。
4,引導方面: MySQL中可以用單引號、雙引號包起字符串,Oracle 中只可以用單引號包起字符串
6?Oracle跟SQL Server 2005的區別??
宏觀上:?
1). 最大的區別在于平臺,oracle可以運行在不同的平臺上,sql server只能運行在windows平臺上,由于windows平臺的穩定性和安全性影響了sql server的穩定性和安全性?
2). oracle使用的腳本語言為PL-SQL,而sql server使用的腳本為T-SQL?
微觀上: 從數據類型,數據庫的結構等等回答
7 .?如何使用Oracle的游標?
1).??oracle中的游標分為顯示游標和隱式游標?
2).??顯示游標是用cursor…is命令定義的游標,它可以對查詢語句(select)返回的多條記錄進行處理;隱式游標是在執行插入 (insert)、刪除(delete)、修改(update)和返回單條記錄的查詢(select)語句時由PL/SQL自動定義的。?
3). 顯式游標的操作:打開游標、操作游標、關閉游標;PL/SQL隱式地打開SQL游標,并在它內部處理SQL語句,然后關閉它
8?Oracle中function和procedure的區別?
1). 可以理解函數是存儲過程的一種?
2). 函數可以沒有參數,但是一定需要一個返回值,存儲過程可以沒有參數,不需要返回值?
3). 函數return返回值沒有返回參數模式,存儲過程通過out參數返回值, 如果需要返回多個參數則建議使用存儲過程?
4). 在sql數據操縱語句中只能調用函數而不能調用存儲過程
9?Oracle的導入導出有幾種方式,有何區別??
1). 使用oracle工具 exp/imp?
2). 使用plsql相關工具?
方法1. 導入/導出的是二進制的數據, 2.plsql導入/導出的是sql語句的文本文件?
3) sqlloader
4) dblink
10 . 解釋冷備份和熱備份的不同點以及各自的優點??
冷備份發生在數據庫已經正常關閉的情況下,將關鍵性文件拷貝到另外位置的一種說法?
熱備份是在數據庫運行的情況下,采用歸檔方式備份數據的方法?
冷備的優缺點:?
1).是非常快速的備份方法(只需拷貝文件)??
2).容易歸檔(簡單拷貝即可)??
3).容易恢復到某個時間點上(只需將文件再拷貝回去)??
4).能與歸檔方法相結合,作數據庫“最新狀態”的恢復。??
5).低度維護,高度安全。??
冷備份不足:??
1).單獨使用時,只能提供到“某一時間點上”的恢復。??
2).在實施備份的全過程中,數據庫必須要作備份而不能作其它工作。也就是說,在冷備份過程中,數據庫必須是關閉狀態。??
3).若磁盤空間有限,只能拷貝到磁帶等其它外部存儲設備上,速度會很慢。??
4).不能按表或按用戶恢復。??
熱備的優缺點?
1).可在表空間或數據文件級備份,備份時間短。??
2).備份時數據庫仍可使用。??
3).可達到秒級恢復(恢復到某一時間點上)。??
4).可對幾乎所有數據庫實體作恢復。??
5).恢復是快速的,在大多數情況下在數據庫仍工作時恢復。??
熱備份的不足是:??
??1).不能出錯,否則后果嚴重。??
??2).若熱備份不成功,所得結果不可用于時間點的恢復。??
??3).因難于維護,所以要特別仔細小心,不允許“以失敗而告終”。?
11?解釋data block , extent 和 segment的區別??
data block 數據塊,是oracle最小的邏輯單位,通常oracle從磁盤讀寫的就是塊?
extent 區,是由若干個相鄰的block組成?
segment段,是有一組區組成?
tablespace表空間,數據庫中數據邏輯存儲的地方,一個tablespace可以包含多個數據文件?
12. 解釋什么是死鎖,如何解決Oracle中的死鎖??
簡言之就是存在加了鎖而沒有解鎖,可能是使用鎖沒有提交或者回滾事務,如果是表級鎖則不能操作表,客戶端處于等在狀態,如果是行級鎖則不能操作鎖定行?
解決辦法:?
1). 查找出被鎖的表?
select b.owner,b.object_name,a.Session_id,a.locked_mode?
from v$locked_object a,dba_objects b?
where b.object_id = a.object_id;?
?????
select b.username,b.sid,b.serial#,logon_time?
from v$locked_object a,v$session b?
where a.session_id = b.sid order by b.logon_time;?
2). 殺進程中的會話?
alter system kill session “sid,serial#”;?
13??簡述oracle中 dml、ddl、dcl的使用?
Dml 數據操縱語言,如select、update、delete,insert?
Ddl 數據定義語言,如create table 、drop table 等等?
Dcl 數據控制語言, 如 commit、 rollback、grant、 invoke等?
14?怎樣創建一個一個索引,索引使用的原則,有什么優點和缺點?
創建標準索引:?
CREATE??INDEX 索引名 ON 表名 (列名)??TABLESPACE 表空間名;?
創建唯一索引:?
CREATE unique INDEX 索引名 ON 表名 (列名)??TABLESPACE 表空間名;?
創建組合索引:?
CREATE INDEX 索引名 ON 表名 (列名1,列名2)??TABLESPACE 表空間名;?
創建反向鍵索引:?
CREATE INDEX 索引名 ON 表名 (列名) reverse TABLESPACE 表空間名;?
索引使用原則:?
索引字段建議建立NOT NULL約束?
經常與其他表進行連接的表,在連接字段上應該建立索引;?
經常出現在Where子句中的字段且過濾性很強的,特別是大表的字段,應該建立索引;?
可選擇性高的關鍵字 ,應該建立索引;?
可選擇性低的關鍵字,但數據的值分布差異很大時,選擇性數據比較少時仍然可以利用索引提高效率?
復合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替:?
A、正確選擇復合索引中的第一個字段,一般是選擇性較好的且在where子句中常用的字段上;?
B、復合索引的幾個字段經常同時以AND方式出現在Where子句中可以建立復合索引;否則單字段索引;?
C、如果復合索引中包含的字段經常單獨出現在Where子句中,則分解為多個單字段索引;?
D、如果復合索引所包含的字段超過3個,那么仔細考慮其必要性,考慮減少復合的字段;?
E、如果既有單字段索引,又有這幾個字段上的復合索引,一般可以刪除復合索引;?
頻繁DML的表,不要建立太多的索引;?
不要將那些頻繁修改的列作為索引列;?
索引的優缺點:?
有點:?
1. 創建唯一性索引,保證數據庫表中每一行數據的唯一性?
2. 大大加快數據的檢索速度,這也是創建索引的最主要的原因?
3. 加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。?
4. 在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。?
缺點:?
1. 索引創建在表上,不能創建在視圖上?
2. 創建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加?
3. 索引需要占物理空間,除了數據表占數據空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大?
4. 當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,降低了數據的維護速度?
15?oracle的鎖又幾種,定義分別是什么;
1.??行共享鎖 (ROW SHARE)?
2.??行排他鎖(ROW EXCLUSIVE)?
3 . 共享鎖(SHARE)?
4.??共享行排他鎖(SHARE ROW EXCLUSIVE)?
5.??排他鎖(EXCLUSIVE)?
使用方法:?
SELECT * FROM order_master WHERE vencode=”V002″?
for UPDATE WAIT 5;?
LOCK TABLE order_master IN SHARE MODE;?
LOCK TABLE itemfile IN EXCLUSIVE MODE NOWAIT;?
ORACLE鎖具體分為以下幾類:?
1.按用戶與系統劃分,可以分為自動鎖與顯示鎖?
自動鎖:當進行一項數據庫操作時,缺省情況下,系統自動為此數據庫操作獲得所有有必要的鎖。?
顯示鎖:某些情況下,需要用戶顯示的鎖定數據庫操作要用到的數據,才能使數據庫操作執行得更好,顯示鎖是用戶為數據庫對象設定的。?
2 . 按鎖級別劃分,可分為共享鎖與排它鎖?
共享鎖:共享鎖使一個事務對特定數據庫資源進行共享訪問——另一事務也可對此資源進行訪問或獲得相同共享鎖。共享鎖為事務提供高并發性,但如拙劣的事務設計+共享鎖容易造成死鎖或數據更新丟失。?
排它鎖:事務設置排它鎖后,該事務單獨獲得此資源,另一事務不能在此事務提交之前獲得相同對象的共享鎖或排它鎖。?
3.按操作劃分,可分為DML鎖、DDL鎖?
DML鎖又可以分為,行鎖、表鎖、死鎖?
行鎖:當事務執行數據庫插入、更新、刪除操作時,該事務自動獲得操作表中操作行的排它鎖。?
表級鎖:當事務獲得行鎖后,此事務也將自動獲得該行的表鎖(共享鎖),以防止其它事務進行DDL語句影響記錄行的更新。事務也可以在進行過程中獲得共享鎖或排它鎖,只有當事務顯示使用LOCK TABLE語句顯示的定義一個排它鎖時,事務才會獲得表上的排它鎖,也可使用LOCK TABLE顯示的定義一個表級的共享鎖(LOCK TABLE具體用法請參考相關文檔)。?
死鎖:當兩個事務需要一組有沖突的鎖,而不能將事務繼續下去的話,就出現死鎖。?
如事務1在表A行記錄#3中有一排它鎖,并等待事務2在表A中記錄#4中排它鎖的釋放,而事務2在表A記錄行#4中有一排它鎖,并等待事務; 1在表A中記錄#3中排它鎖的釋放,事務1與事務2彼此等待,因此就造成了死鎖。死鎖一般是因拙劣的事務設計而產生。死鎖只能使用SQL下:alter system kill session “sid,serial#”;或者使用相關操作系統kill進程的命令,如unix下kill -9 sid,或者使用其它工具殺掉死鎖進程。?
DDL鎖又可以分為:排它DDL鎖、共享DDL鎖、分析鎖?
排它DDL鎖:創建、修改、刪除一個數據庫對象的DDL語句獲得操作對象的 排它鎖。如使用alter table語句時,為了維護數據的完成性、一致性、合法性,該事務獲得一排它DDL鎖。?
共享DDL鎖:需在數據庫對象之間建立相互依賴關系的DDL語句通常需共享獲得DDL鎖。?
如創建一個包,該包中的過程與函數引用了不同的數據庫表,當編譯此包時,該事務就獲得了引用表的共享DDL鎖。?
分析鎖:ORACLE使用共享池存儲分析與優化過的SQL語句及PL/SQL程序,使運行相同語句的應用速度更快。一個在共享池中緩存的對象獲得它所引用數據庫對象的分析鎖。分析鎖是一種獨特的DDL鎖類型,ORACLE使用它追蹤共享池對象及它所引用數據庫對象之間的依賴關系。當一個事務修改或刪除了共享池持有分析鎖的數據庫對象時,ORACLE使共享池中的對象作廢,下次在引用這條SQL/PLSQL語句時,ORACLE重新分析編譯此語句。?
4.內部閂鎖?
內部閂鎖:這是ORACLE中的一種特殊鎖,用于順序訪問內部系統結構。當事務需向緩沖區寫入信息時,為了使用此塊內存區域,ORACLE首先必須取得這塊內存區域的閂鎖,才能向此塊內存寫入信息。
相關學習推薦:oracle數據庫學習教程