銀行數據庫面試題_第1頁
銀行數據庫面試題_第2頁
銀行數據庫面試題_第3頁
銀行數據庫面試題_第4頁
銀行數據庫面試題_第5頁
已閱讀5頁,還剩6頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Oracle常見面試題1、對數據庫SQL2005、ORACLE熟悉嗎?   SQL2005是微軟公司的數據庫產品。是一個RDBMS數據庫,一般應用在一些中型數據庫的應用,不能跨平臺。   ORACLE是ORACLE公司的數據產品,支持海量數據存儲,支持分布式布暑,支持多用戶,跨平臺,數據安全完整性控制性能優越,是一個ORDBMS,一般用在大型公司。2、能不能設計數據庫?如何實現數據庫導入與導出的更新   使用POWERDISINE工具的使用,一般滿足第三范式就可以了。EXP與IMP數據庫的邏輯導入與導出3、如何只顯示重復數據,或不顯示

2、重復數據   顯示重復:select * from tablename group by id having count(*)>1   不顯示重復:select * from tablename group by id having count(*)=14、什么是數據庫的映射   就是將數據庫的表與字段對應到模型層類名與屬性的過程.5、寫分頁有哪些方法,你一般用什么方法?用SQL語句寫一個分頁?如何用存儲過程寫分頁?   在SQLSERVER中使用TOP分頁,在ORACLE中用ROWNUM,或分析函數ROW_

3、NUMBER   使用TOP:   select top 20,n.* from tablename n minus select top 10,m.* from tablename m   使用分析函數:    select * from    (select n.*,row_number() over(order by columnname) num  from tablename n)    where num>=10 an

4、d num <=20;   使用過程時,只要將分頁的范圍用兩個參數就可以實現。在ORACLE中,要將過程封裝在包里,還要用動態游標變量才能實現數據集的返回。6、ORACLE中左連接與右連接   左連接:LEFT JOIN  右連接:RIGHT JOIN   select n.column,m.column from tablename1 n left join tablename2 m   on n.columnname=m.columnname   用WHERE實現: 

5、;  select n.column,m.column from tablename1 n, tablename2 m   where n.columnname(+)=m.columnname7、什么是反射、序列化、反序列化?事務有幾種級別?    反射是在程序運行時動態訪問DDL的一種方式。序列化是將對象對二進制、XML等方式直接向文件的存儲。反序列化是將存儲到文件的對象取出的過程。事務的級別的三種:頁面級、應用程序級、數據庫級。8、數據測試如何測試?   在PLSQL里對過程或函數可能通過專用的測試工具,通過對

6、9、用事務的時候,如果在業務邏輯層中,調用數據庫訪問層中的方法,訪問層中有很多類,類又有很多方法,每個方法都要實現,那么如何處理?    通用數據訪問層的實現10、什么時候會用到觸發器   A安全管理、B日志管理、C復雜業務邏輯實現11、如何在數據庫中顯示樹控制?   用父ID與子ID來實現12、如何實現數據庫的優化?    A、調整數據結構的設計。這一部分在開發信息系統之前完成,程序員需要考慮是否使用ORACLE數據庫的分區功能,對于經常訪問的數據庫表是否需要建立索引等。  

7、;  B、調整應用程序結構設計。這一部分也是在開發信息系統之前完成,程序員在這一步需要考慮應用程序使用什么樣的體系結構,是使用傳統的Client/Server兩層體系結構,還是使用Browser/Web/Database的三層體系結構。不同的應用程序體系結構要求的數據庫資源是不同的。    C、調整數據庫SQL語句。應用程序的執行最終將歸結為數據庫中的SQL語句執行,因此SQL語句的執行效率最終決定了ORACLE數據庫的性能。ORACLE公司推薦使用ORACLE語句優化器(Oracle Optimizer)和行鎖管理器(row-level manager

8、)來調整優化SQL語句。    D、調整服務器內存分配。內存分配是在信息系統運行過程中優化配置的,數據庫管理員可以根據數據庫運行狀況調整數據庫系統全局區(SGA區)的數據緩沖區、日志緩沖區和共享池的大小;還可以調整程序全局區(PGA區)的大小。需要注意的是,SGA區不是越大越好,SGA區過大會占用操作系統使用的內存而引起虛擬內存的頁面交換,這樣反而會降低系統。    E、調整硬盤I/O,這一步是在信息系統開發之前完成的。數據庫管理員可以將組成同一個表空間的數據文件放在不同的硬盤上,做到硬盤之間I/O負載均衡。  &

9、#160; F、調整操作系統參數,例如:運行在UNIX操作系統上的ORACLE數據庫,可以調整UNIX數據緩沖池的大小,每個進程所能使用的內存大小等參數。13. 如何使用Oracle的游標? 1).  oracle中的游標分為顯示游標和隱式游標 2).  顯示游標是用cursor.is命令定義的游標,它可以對查詢語句(select)返回的多條記錄進行處理;隱式游標是在執行插入 (insert)、刪除(delete)、修改(update)和返回單條記錄的查詢(select)語句時由PL/SQL自動定義的。 3). 顯式游標的操作:打開游標、操作游

10、標、關閉游標;PL/SQL隱式地打開SQL游標,并在它內部處理SQL語句,然后關閉它14. Oracle的導入導出有幾種方式,有何區別? 1). 使用oracle工具 exp/imp 2). 使用plsql相關工具 方法1. 導入/導出的是二進制的數據, 2.plsql導入/導出的是sql語句的文本文件 15. Oracle是怎樣分頁的? Oracle中使用rownum來進行分頁, 這個是效率最好的分頁方法,hibernate也是使用rownum來進行oralce分頁的 select * from   ( sele

11、ct rownum r,a from tabName where rownum <= 20 ) where r > 10 16. Oracle中使用了索引的列,對該列進行where條件查詢、分組、排序、使用聚集函數,哪些用到了索引? 均會使用索引, 值得注意的是復合索引(如在列A和列B上建立的索引)可能會有不同情況 v17. Oracle中where條件查詢和排序的性能比較? Order by使用索引的條件極為嚴格,只有滿足如下情況才可以使用索引, 1). order by中的列必須包含相同的索引并且索引順序和排序順序一致

12、 2). 不能有null值的列 所以排序的性能往往并不高,所以建議盡量避免order by18. 解釋冷備份和熱備份的不同點以及各自的優點? 冷備份發生在數據庫已經正常關閉的情況下,將關鍵性文件拷貝到另外位置的一種說法 熱備份是在數據庫運行的情況下,采用歸檔方式備份數據的方法 冷備的優缺點: 1)是非常快速的備份方法(只需拷貝文件)  2)容易歸檔(簡單拷貝即可)  3)容易恢復到某個時間點上(只需將文件再拷貝回去)  4)能與歸檔方法相結合,作數據庫“最新狀態”的恢復。  5)低度維護,高度安

13、全。  冷備份不足:  1)單獨使用時,只能提供到“某一時間點上”的恢復。  2)在實施備份的全過程中,數據庫必須要作備份而不能作其它工作。也就是說,在冷備份過程中,數據庫必須是關閉狀態。  3)若磁盤空間有限,只能拷貝到磁帶等其它外部存儲設備上,速度會很慢。  4)不能按表或按用戶恢復。  熱備的優缺點 1)可在表空間或數據文件級備份,備份時間短。  2)備份時數據庫仍可使用。  3)可達到秒級恢復(恢復到某一時間點上)。  4)可對幾乎所有數據庫實體作恢復。  5)恢復是快速的,在

14、大多數情況下在數據庫仍工作時恢復。  熱備份的不足是:    1)不能出錯,否則后果嚴重。    2)若熱備份不成功,所得結果不可用于時間點的恢復。    3)因難于維護,所以要特別仔細小心,不允許“以失敗而告終”。 19. 解釋什么是死鎖,如何解決Oracle中的死鎖? 簡言之就是存在加了鎖而沒有解鎖,可能是使用鎖沒有提交或者回滾事務,如果是表級鎖則不能操作表,客戶端處于等在狀態,如果是行級鎖則不能操作鎖定行 解決辦法: 1). 查找出被鎖的表 select b.owner

15、,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). 殺進程中

16、的會話 alter system kill session "sid,serial#" 20. 簡述oracle中 dml、ddl、dcl的使用 Dml 數據操縱語言,如select、update、delete,insert Ddl 數據定義語言,如create table 、drop table 等等 Dcl 數據控制語言, 如 commit、 rollback、grant、 invoke等 21. 說說oracle中的經常使用到得函數 Length 長度、 lower 小寫、upper 大寫, to_

17、date 轉化日期, to_char轉化字符 Ltrim 去左邊空格、 rtrim去右邊空格,substr取字串,add_month增加或者減掉月份、to_number轉變為數字 22. 怎樣創建一個一個索引,索引使用的原則,有什么優點和缺點 創建標準索引: CREATE  INDEX 索引名 ON 表名 (列名)  TABLESPACE 表空間名; 創建唯一索引: CREATE unique INDEX 索引名 ON 表名 (列名)  TABLESPACE 表空間名; 創建組合索引: 

18、;CREATE INDEX 索引名 ON 表名 (列名1,列名2)  TABLESPACE 表空間名; 創建反向鍵索引: CREATE INDEX 索引名 ON 表名 (列名) reverse TABLESPACE 表空間名; 索引使用原則: 索引字段建議建立NOT NULL約束 經常與其他表進行連接的表,在連接字段上應該建立索引; 經常出現在Where子句中的字段且過濾性很強的,特別是大表的字段,應該建立索引; 可選擇性高的關鍵字 ,應該建立索引; 可選擇性低的關鍵字,但數據的值分布差異很大時,選擇性數

19、據比較少時仍然可以利用索引提高效率 復合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替: A、正確選擇復合索引中的第一個字段,一般是選擇性較好的且在where子句中常用的字段上; B、復合索引的幾個字段經常同時以AND方式出現在Where子句中可以建立復合索引;否則單字段索引; C、如果復合索引中包含的字段經常單獨出現在Where子句中,則分解為多個單字段索引; D、如果復合索引所包含的字段超過3個,那么仔細考慮其必要性,考慮減少復合的字段; E、如果既有單字段索引,又有這幾個字段上的復合索引,一般可以刪除復合索引; 

20、頻繁DML的表,不要建立太多的索引; 不要將那些頻繁修改的列作為索引列; 索引的優缺點: 有點: 1. 創建唯一性索引,保證數據庫表中每一行數據的唯一性 2. 大大加快數據的檢索速度,這也是創建索引的最主要的原因 3. 加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。 4. 在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。 缺點: 1. 索引創建在表上,不能創建在視圖上 2. 創建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加 3

21、. 索引需要占物理空間,除了數據表占數據空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大 4. 當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,降低了數據的維護速度 23. 在java種怎樣調用oracle存儲過程; 在java中使用 CallableStatement調用存儲過程 創建需要的測試表:create table Test(tid varchar2(10),tname varchar2(10);   第一種情況:無返回值.      

22、 create or replace procedure test_a(param1 in varchar2,param2 in varchar2) as        begin             insert into test value(param1,param2);      end; Java調用代碼: package com.test; import java.sql.*; i

23、mport java.io.*; import java.sql.*; public class TestProcA     public TestProcA()        public static void main(String args)             ResultSet rs = null;         Connecti

24、on conn = null;         CallableStatement proc = null;         try        Class.forName("oracle.jdbc.driver.OracleDriver"); conn =  DriverManager.getConnection("jdbc:oracle:thin:127.0.0.1:1521:test&qu

25、ot;, "test", "test");           proc = conn.prepareCall(" call test_a(?,?) ");           proc.setString(1, "1001");           proc.setString(2, "TestA"); &

26、#160;         proc.execute();         catch(Exception e)      e.printStackTrace(); finally            try        if(null!=rs)           

27、0;      rs.close();            if(null!=proc)                     proc.close();                       if(null!=conn)   &

28、#160;                 conn.close();                                catch(Exception ex)                     

29、60;      第二種情況:有返回值的存儲過程(返回值非列表). 存儲過程為: create or replace procedure test_b(param1 in varchar2,param2 out varchar2) as begin     select tname into param2 from test where tid=param1; end;  Java調用代碼: package com.test; 

30、;import java.sql.*; import java.io.*; import java.sql.*;  public class TestProcB     public TestProcB()        public static void main(String args)             Connection conn = null; &

31、#160;       CallableStatement proc = null;                try           Class.forName("oracle.jdbc.driver.OracleDriver");           conn =  DriverManager.getConnecti

32、on("jdbc:oracle:thin:127.0.0.1:1521:test", "test", "test");           proc = conn.prepareCall(" call test_b(?,?) ");           proc.setString(1, "1001");         

33、60; proc.registerOutParameter(2, Types.VARCHAR);           proc.execute();           System.out.println("Output is:"+proc.getString(2);         catch(Exception e)      e.printStackTrace

34、(); finally            try           if(null!=proc)                     proc.close();                       if

35、(null!=conn)                     conn.close();                        catch(Exception ex)                      

36、;      第三種情況:返回列表.  由于oracle存儲過程沒有返回值,它的所有返回值都是通過out參數來替代的,列表同樣也不例外,但由于是集合,所以不能用一般的參數,必須要用pagkage了.要分兩部分來寫: create or replace package tpackage as type t_cursor is ref cursor; procedure test_c(c_ref out t_cursor); end ;  create or repla

37、ce package body tpackage as procedure test_c(c_ref out t_cursor) is    begin       open c_ref for select * from test;   end test_c; end tpackage;  Java調用代碼: package com.test; import java.sql.*; import java.io.*; imp

38、ort java.sql.*;  public class TestProcB     public TestProcB()           public static void main(String args)             Connection conn = null;         CallableSta

39、tement proc = null;         ResultSet rs =  null;         try           Class.forName("oracle.jdbc.driver.OracleDriver");           conn =  DriverManager.getConnection("jdbc:oracle:thin:127.0.0.1:1521:test", "test", "test");           proc = conn.prepareCall("? = call tpackage.test_b(?) "); &

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論