oracle 面試題____oracle

來源:互聯網
上載者:User
一 ORACLE和MySQL的區別
1.  是大型資料庫而Mysql是中小型資料庫,Oracle市場佔有率達40%,Mysql只有20%左右,同時Mysql是開源的而Oracle價格非常高Oracle。
2. Oracle支援大並發,大訪問量,是OLTP最好的工具。(OLTP[聯機交易處理])(OLAP[資料倉儲處理 有了基礎大資料後 根據資料分析 市場定位])
3. 安裝所用的空間差別也是很大的,Mysql安裝完後才152M而Oracle有3G左右,且使用的時候Oracle佔用特別大的記憶體空間和其他機器效能。
4.Oracle也Mysql操作上的一些區別【開發人員接觸的】
①主鍵
Mysql一般使用自動成長類型,在建立表時只要指定表的主鍵為auto increment,插入記錄時,不需要再指定該記錄的主索引值,Mysql將自動成長;Oracle沒有自動成長類型,主鍵一般使用的序列,插入記錄時將序號的下一個值付給該欄位即可;只是ORM架構是只要是native主鍵建置原則即可。
②單引號的處理
MYSQL裡可以用雙引號包起字串,ORACLE裡只可以用單引號包起字串。在插入和修改字串前必須做單引號的替換:把所有出現的一個單引號替換成兩個單引號。
③翻頁的SQL語句的處理
MYSQL處理翻頁的SQL語句比較簡單,用LIMIT 開始位置, 記錄個數;ORACLE處理翻頁的SQL語句就比較繁瑣了。每個結果集只有一個ROWNUM欄位標明它的位置, 並且只能用ROWNUM<100, 不能用ROWNUM>80
④ 長字串的處理
長字串的處理ORACLE也有它特殊的地方。INSERT和UPDATE時最大可操作的字串長度小於等於4000個單位元組, 如果要插入更長的字串, 請考慮欄位用CLOB類型,方法借用ORACLE裡內建的DBMS_LOB程式包。插入修改記錄前一定要做進行非空和長度判斷,不可為空的欄位值和超出長度欄位值都應該提出警告,返回上次操作。
⑤Null 字元的處理
MYSQL的非空欄位也有空的內容,ORACLE裡定義了非空欄位就不容許有空的內容。按MYSQL的NOT NULL來定義ORACLE表結構, 導資料的時候會產生錯誤。因此導資料時要對Null 字元進行判斷,如果為NULL或Null 字元,需要把它改成一個空格的字串。
⑥字串的模糊比較
MYSQL裡用 欄位名 like '%字串%',ORACLE裡也可以用 欄位名 like '%字串%' 但這種方法不能使用索引, 速度不快。【like ‘%’開頭 無法使用索引 不使用開頭 可以使用索引】
⑦Oracle實現了ANSII SQL中大部分功能,如,事務的隔離等級、傳播特性等而Mysql在這方面還是比較的弱
二.預存程序和函數的區別【重點】
1). 可以理解函數是預存程序的一種 ,都是先行編譯的 【塊語句每次運行都會編譯 預存程序塊 一次編譯多次運行 效率更高】
   Plsql塊語句
       Begin
       End  
       預存程序塊
       Create procedure prg_add()
       As
     Begin
     End;
2). 函數可以沒有參數,但是一定需要一個傳回值,預存程序可以沒有參數,不需要傳回值 
3). 函數return傳回值沒有返回參數模式,預存程序通過out參數傳回值, 如果需要返回多個參數則建議使用預存程序 【函數 oracle 在函數可以使用in和out mysql不能使用out】
4). 在sql資料操縱(DML)語句中只能調用函數而不能調用預存程序
三.Oracle匯入和匯出方式
  使用oracle工具 exp/imp   使用plsql相關工具plsql developer文本匯入匯出
方法1. 匯入/匯出的是二進位的資料, 2.plsql匯入/匯出的是sql語句的文字檔
odbc匯入匯出  系統相關
四. Oracle中有哪幾種檔案。 
資料檔案(一般尾碼為.dbf或者.ora),記錄檔(尾碼名.log),控制檔案(尾碼名為.ctl)
一般在 安裝目錄下的\oradata\orcl
五.最佳化Oracle資料庫,有幾種方式(重點)
資料庫效能最關鍵的因素在於IO,因為操作記憶體是快速的,但是讀寫磁碟是速度很慢的,最佳化資料庫最關鍵的問題在於減少磁碟的IO,就個人理解應該分為物理的和邏輯的最佳化, 物理的是指oracle產品本身的一些最佳化,邏輯最佳化是指應用程式層級的最佳化 
物理最佳化的一些原則: 
1). Oracle的運行環境(網路,硬體等) 
2). 使用合適的最佳化器 
3). 合理配置oracle執行個體參數 
4). 建立合適的索引(減少IO) 
5). 將索引資料和表資料分開在不同的資料表空間上(降低IO衝突) 
6). 建立表分區,將資料分別儲存在不同的分區上(以空間換取時間,減少IO) 


   邏輯上最佳化(開發有關): 
1). 可以對錶進行邏輯分割,如中國移動使用者表,可以根據手機尾數分成10個表,這樣對效能會有一定的作用 
2). Sql語句使用預留位置語句,並且開發時候必須按照規定編寫sql語句(如全部大寫,全部小寫等)oracle解析語句後會放置到共用池中 
如: select * from Emp where name=?  這個語句只會在共用池中有一條,而如果是字串的話,那就根據不同名字存在不同的語句,所以預留位置效率較好 
3). 資料庫不僅僅是一個儲存資料的地方,同樣是一個編程的地方,一些耗時的操作,可以通過預存程序等在使用者較少的情況下執行,從而錯開系統使用的高峰時間,提高資料庫效能 
4). 盡量不使用*號,如select * from Emp,因為要轉化為具體的列名是要查資料字典,比較耗時 
5). 選擇有效表名 
對於多表串連查詢,可能oracle的最佳化器並不會最佳化到這個程度, oracle 中多表查詢是根據FROM字句從右至左的資料進行的,那麼最好右邊的表(也就是基礎資料表)選擇資料較少的表,這樣排序更快速,如果有link表(多對多中間表),那麼將link表放最右邊作為基礎資料表,在預設情況下oracle會自動最佳化,但是如果配置了最佳化器的情況下,可能不會自動最佳化,所以平時最好能按照這個方式編寫sql 
6). Where字句 規則 
Oracle 中Where子句時從右往左處理的,表之間的串連寫在其他條件之前,能過濾掉非常多的資料的條件,放在where的末尾, 另外!=符號比較的列將不使用索引,列經過了計算(如變大寫等)不會使用索引(需要建立起函數), is null、is not null等最佳化器不會使用索引 
7). 使用Exits Not Exits 替代 In  Not in 【不會使用索引】
8). 合理使用事務,合理設定事務隔離性 
資料庫的資料操作比較消耗資料庫資源的,盡量使用批量處理,以降低事務操作次數




六.Oracle是怎樣分頁的。
Oracle中使用rownum來進行分頁, 這個是效率最好的分頁方法,hibernate也是使用rownum來進行oralce分頁的 
select * from 
  ( select rownum r,a from tabName where rownum <= 20 ) 
where r > 10
七.Oralce怎樣隱藏檔,能夠儲存哪些檔案。


Oracle 能儲存 clob、nclob、 blob、 bfile 
Clob  可變長度的字元型資料,也就是其他資料庫中提到的文本型資料類型 
Nclob 可變字元類型的資料,不過其儲存的是Unicode字元集的字元資料 
Blob  可變長度的位元據 
Bfile  資料庫外面儲存的可變位元據


八.Oralce解釋冷備份和熱備份的不同點以及各自的優點。
冷備份發生在資料庫已經正常關閉的情況下,將關鍵性檔案拷貝到另外位置的一種說法 
熱備份是在資料庫啟動並執行情況下,採用歸檔方式備份資料的方法
冷備的優缺點: 
1).是非常快速的備份方法(只需拷貝檔案)  
2).容易歸檔(簡單拷貝即可)  
3).容易恢複到某個時間點上(只需將檔案再拷貝回去)  
4).能與歸檔方法相結合,作資料庫“最新狀態”的恢複。  
5).低度維護,高度安全。  
冷備份不足:  
1).單獨使用時,只能提供到“某一時間點上”的恢複。  
2).在實施備份的全過程中,資料庫必須要作備份而不能作其它工作。也就是說,在冷備份過程中,資料庫必須是關閉狀態。  
3).若磁碟空間有限,只能拷貝到磁帶等其它外部存放裝置上,速度會很慢。  
4).不能按表或按使用者恢複。  


熱備的優缺點 
1).可在資料表空間或資料檔案級備份,備份時間短。  
2).備份時資料庫仍可使用。  
3).可達到秒級恢複(恢複到某一時間點上)。  
4).可對幾乎所有資料庫實體作恢複。  
5).恢複是快速的,在大多數情況下在資料庫仍工作時恢複。  
熱備份的不足是:  
  1).不能出錯,否則後果嚴重。  
  2).若熱備份不成功,所得結果不可用於時間點的恢複。  
  3).因難於維護,所以要特別仔細小心,不允許“以失敗而告終”。 


九. 解釋data block , extent 和 segment的區別。 
data block 資料區塊,是oracle最小的邏輯單位,通常oracle從磁碟讀寫的就是塊 
extent 區,是由若干個相鄰的block組成 
segment段,是有一組區組成 
tablespace資料表空間,資料庫中資料邏輯儲存的地方,一個tablespace可以包含多個資料檔案 
十. 比較truncate和delete命令 。 
1). Truncate 和delete都可以將資料實體刪掉,truncate 的操作並不記錄到 rollback日誌,所以操作速度較快,但同時這個資料不能恢複 
2). Delete操作不騰出資料表空間的空間 
3). Truncate 不能對視圖等進行刪除 
4). Truncate是資料定義語言 (Data Definition Language)(DDL),而delete是資料操縱語言(DML) 
十一. 解釋什麼是死結,如何解決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#"; 
十二. 簡述oracle中 dml、ddl、dcl的使用 
Dml 資料操縱語言,如select、update、delete,insert 
Ddl 資料定義語言 (Data Definition Language),如create table 、drop table 等等 
Dcl 資料控制語言, 如 commit、 rollback、grant、 invoke等 
十三. 說說oracle中的經常使用到得函數 
Length 長度、 lower 小寫、upper 大寫, to_date 轉化日期, to_char轉化字元 
Ltrim 去左邊空格、 rtrim去右邊空格,substr取字串,add_month增加或者減掉月份、to_number轉變為數字 
十四. 怎樣建立一個預存程序, 遊標在預存程序怎麼使用, 有什麼好處? 
附:預存程序的一般格式,遊標使用參考問題 
1 .使用遊標可以執行多個不相關的操作.如果希望當產生了結果集後,對結果集中的資料進行多種不相關的資料操作 
2. 使用遊標可以提供指令碼的可讀性 
3. 使用遊標可以建立命令字串,使用遊標可以傳送表名,或者把變數傳送到參數中,以便建立可以執行的命令字串. 
但是個人認為遊標操作效率不太高,並且使用時要特別小心,使用完後要及時關閉 
預存程序優缺點: 
優點: 
1. 預存程序增強了SQL語言的功能和靈活性。預存程序可以用流量控制語句編寫,有很強的靈活性,可以完成複雜的判斷和較複雜的運算。 
2. 可保證資料的安全性和完整性。 
3. 通過預存程序可以使沒有許可權的使用者在控制之下間接地存取資料庫,從而保證資料的安全。 
      通過預存程序可以使相關的動作在一起發生,從而可以維護資料庫的完整性。 
3. 再運行預存程序前,資料庫已對其進行了文法和句法分析,並給出了最佳化執行方案。這種已經編譯好的過程可極大地改善SQL語句的效能。 由於執行SQL語句的大部分工作已經完成,所以預存程序能以極快的速度執行。 
4. 可以降低網路的通訊量, 不需要通過網路來傳送很多sql語句到資料庫伺服器了 
5. 使體現企業規則的運算程式放入資料庫伺服器中,以便集中控制 
       當企業規則發生變化時在伺服器中改變預存程序即可,無須修改任何應用程式。企業規則的特點是要經常變化,如果把體現企業規則的運算程式放入應用程式中,則當企業規則發生變化時,就需要修改應用程式工作量非常之大(修改、發行和安裝應用程式)。如果把體現企業規則的 運算放入預存程序中,則當企業規則發生變化時,只要修改預存程序就可以了,應用程式無須任何變化。 
缺點: 
1. 可移植性差 
2. 佔用伺服器端多的資源,對伺服器造成很大的壓力 
3. 可讀性和可維護性不好 


十五. rowid, rownum的定義 
1. rowid和rownum都是虛列 
2. rowid是物理地址,用於定位oracle中具體資料的實體儲存體位置 
3. rownum則是sql的輸出結果排序,從下面的例子可以看出其中的區別。 
十六. oracle中預存程序,遊標和函數的區別 
遊標類似指標,遊標可以執行多個不相關的操作.如果希望當產生了結果集後,對結果集中的資料進行多 種不相關的資料操作 
函數可以理解函數是預存程序的一種; 函數可以沒有參數,但是一定需要一個傳回值,預存程序可以沒有參數,不需要傳回值;兩者都可以通過out參數傳回值, 如果需要返回多個參數則建議使用預存程序;在sql資料操縱語句中只能調用函數而不能調用預存程序 
十七. 使用oracle 偽列刪除表中重複記錄: 
Delete  table t  where t.rowid!=(select  max(t1.rowid)  from  table1 t1 where  t1.name=t.name)


十七. 如何設計資料庫
   使用POWERDISINE工具的使用,一般滿足第三範式就可以了。EXP與IMP資料庫的邏輯匯入與匯出


索引的優缺點?
索引優點
編輯
1.大大加快資料的檢索速度;
2.建立唯一性索引,保證資料庫表中每一行資料的唯一性;
3.加速表和表之間的串連;
4.在使用分組和排序子句進行資料檢索時,可以顯著減少查詢中分組和排序的時間。
索引缺點
編輯
1.索引需要佔物理空間。
2.當對錶中的資料進行增加、刪除和修改的時候,索引也要動態維護,降低了資料的維護速度。
在建立索引之前,您必須確定要使用哪些列以及要建立的索引類型。有關更多資訊,請參見:
* 索引列
* 索引類型
索引類型
編輯
根據資料庫的功能,可以在資料庫設計器中建立四種索引:普通索引、唯一索引、主鍵索引和叢集索引。有關資料庫所支援的索引功能的詳細資料,請參見資料庫文檔。
普通索引
這是最基本的索引類型,而且它沒有唯一性之類的限制。普通索引可以通過以下幾種方式建立:
建立索引,例如CREATE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表);
建立表的時候指定索引,例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) );
唯一索引
唯一索引是不允許其中任何兩行具有相同索引值的索引。
當現有資料中存在重複的索引值時,大多數資料庫不允許將新建立的唯一索引與表一起儲存。資料庫還可能防止添加將在表中建立重複索引值的新資料。例如,如果在 employee 表中職員的姓 (lname) 上建立了唯一索引,則任何兩個員工都不能同姓。
建立唯一索引的幾種方式:
建立索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表); ;
建立表的時候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) );
主鍵索引
資料庫表經常有一列或列組合,其值唯一標識表中的每一行。該列稱為表的主鍵。
在資料庫圖表中為表定義主鍵將自動建立主鍵索引,主鍵索引是唯一索引的特定類型。該索引要求主鍵中的每個值都唯一。當在查詢中使用主鍵索引時,它還允許對資料的快速存取。有關主鍵的更多資訊,請參見定義主鍵。
提示儘管唯一索引有助於定位資訊,但為獲得最佳效能結果,建議改用主鍵索引。有關這些約束的更多資訊,請參見主鍵約束和唯一約束。
叢集索引(也叫聚簇索引):
在叢集索引中,表中行的物理順序與索引值的邏輯(索引)順序相同。一個表只能包含一個叢集索引。 如果某索引不是叢集索引,則表中行的物理順序與索引值的邏輯順序不匹配。與非叢集索引相比,叢集索引通常提供更快的資料訪問速度。
二十八 說說oracle的串連方式(專有和共用)
共用,


十八 什麼是資料庫設計三範式
十九 資料的隔離等級是什麼分別解決什麼問題
二十 什麼是ER圖 畫個例子描述ER
二十一 什麼是視圖 普通視圖和物化視圖的區別
二十二 ORACLE常用的函數
二十三 NVL和NVL2和DECODE的區別
---二十三 


二十四 設計如下表
       學生參加活動 每一個活動都有一個召集人,每個活動完成之後某些同學會發布文章
       1 查詢今年參加活動最多的學生
       2 查詢今天發布文章的所有召集人
       3 畫出表設計的er圖
二十五 常用的oracle操作的命令
二十六 說一下 什麼是笛卡爾積,內串連,左外串連,右外串連,全串連 並且舉例
二十七 書寫一個預存程序 傳入一個時間 刪除小於傳入時間沒有參加活動的所有學生髮布的文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.