![數(shù)據(jù)庫面試題(共13頁)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/9/069483b7-7f90-4047-aa3d-f5ea06f17229/069483b7-7f90-4047-aa3d-f5ea06f172291.gif)
![數(shù)據(jù)庫面試題(共13頁)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/9/069483b7-7f90-4047-aa3d-f5ea06f17229/069483b7-7f90-4047-aa3d-f5ea06f172292.gif)
![數(shù)據(jù)庫面試題(共13頁)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/9/069483b7-7f90-4047-aa3d-f5ea06f17229/069483b7-7f90-4047-aa3d-f5ea06f172293.gif)
![數(shù)據(jù)庫面試題(共13頁)_第4頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/9/069483b7-7f90-4047-aa3d-f5ea06f17229/069483b7-7f90-4047-aa3d-f5ea06f172294.gif)
![數(shù)據(jù)庫面試題(共13頁)_第5頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/9/069483b7-7f90-4047-aa3d-f5ea06f17229/069483b7-7f90-4047-aa3d-f5ea06f172295.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1、 對數(shù)據(jù)庫SQL2005、ORACLE熟悉嗎? SQL2005是微軟公司的數(shù)據(jù)庫產(chǎn)品。是一個RDBMS數(shù)據(jù)庫,一般應(yīng)用在一些中型數(shù)據(jù)庫的應(yīng)用,不能跨平臺。 ORACLE是ORACLE公司的數(shù)據(jù)產(chǎn)品,支持海量數(shù)據(jù)存儲,支持分布式布暑,支持多用戶,跨平臺,數(shù)據(jù)安全完整性控制性能優(yōu)越,是一個ORDBMS,一般用在大型公司。2、能不能設(shè)計數(shù)據(jù)庫?如何實現(xiàn)數(shù)據(jù)庫導(dǎo)入與導(dǎo)出的更新 使用POWERDISINE工具的使用,一般滿足第三范式就可以了。EXP與IMP數(shù)據(jù)庫的邏輯導(dǎo)入與導(dǎo)出3、如何只顯示重復(fù)數(shù)據(jù),或不顯示重復(fù)數(shù)據(jù)
2、 顯示重復(fù):select * from tablename group by id having count(*)>1 不顯示重復(fù):select * from tablename group by id having count(*)=14、什么是數(shù)據(jù)庫的映射 就是將數(shù)據(jù)庫的表與字段對應(yīng)到模型層類名與屬性的過程.5、寫分頁有哪些方法,你一般用什么方法?用SQL語句寫一個分頁?如何用存儲過程寫分頁? 在SQLSERVER中使用TOP分頁,在ORACLE中用ROWNUM,或分析函數(shù)ROW_NUMBER
3、0; 使用TOP: select top 20,n.* from tablename n minus select top 10,m.* from tablename m 使用分析函數(shù): select * from (select n.*,row_number() over(order by columnname) num from tablename n) where num>=10 and num <
4、=20; 使用過程時,只要將分頁的范圍用兩個參數(shù)就可以實現(xiàn)。在ORACLE中,要將過程封裝在包里,還要用動態(tài)游標變量才能實現(xiàn)數(shù)據(jù)集的返回。6、ORACLE中左連接與右連接 左連接:LEFT JOIN 右連接:RIGHT JOIN select n.column,m.column from tablename1 n left join tablename2 m on n.columnname=m.columnname 用WHERE實現(xiàn): se
5、lect n.column,m.column from tablename1 n, tablename2 m where n.columnname(+)=m.columnname7、什么是反射、序列化、反序列化?事務(wù)有幾種級別? 反射是在程序運行時動態(tài)訪問DDL的一種方式。序列化是將對象對二進制、XML等方式直接向文件的存儲。反序列化是將存儲到文件的對象取出的過程。事務(wù)的級別的三種:頁面級、應(yīng)用程序級、數(shù)據(jù)庫級。8、數(shù)據(jù)測試如何測試? 在PLSQL里對過程或函數(shù)可能通過專用的測試工具,通過對9、用事務(wù)的時候,如
6、果在業(yè)務(wù)邏輯層中,調(diào)用數(shù)據(jù)庫訪問層中的方法,訪問層中有很多類,類又有很多方法,每個方法都要實現(xiàn),那么如何處理? 通用數(shù)據(jù)訪問層的實現(xiàn)10、什么時候會用到觸發(fā)器 A安全管理、B日志管理、C復(fù)雜業(yè)務(wù)邏輯實現(xiàn)11、如何在數(shù)據(jù)庫中顯示樹控制? 用父ID與子ID來實現(xiàn)12、如何實現(xiàn)數(shù)據(jù)庫的優(yōu)化? A、調(diào)整數(shù)據(jù)結(jié)構(gòu)的設(shè)計。這一部分在開發(fā)信息系統(tǒng)之前完成,程序員需要考慮是否使用ORACLE數(shù)據(jù)庫的分區(qū)功能,對于經(jīng)常訪問的數(shù)據(jù)庫表是否需要建立索引等。 B、
7、調(diào)整應(yīng)用程序結(jié)構(gòu)設(shè)計。這一部分也是在開發(fā)信息系統(tǒng)之前完成,程序員在這一步需要考慮應(yīng)用程序使用什么樣的體系結(jié)構(gòu),是使用傳統(tǒng)的Client/Server兩層體系結(jié)構(gòu),還是使用Browser/Web/Database的三層體系結(jié)構(gòu)。不同的應(yīng)用程序體系結(jié)構(gòu)要求的數(shù)據(jù)庫資源是不同的。 C、調(diào)整數(shù)據(jù)庫SQL語句。應(yīng)用程序的執(zhí)行最終將歸結(jié)為數(shù)據(jù)庫中的SQL語句執(zhí)行,因此SQL語句的執(zhí)行效率最終決定了ORACLE數(shù)據(jù)庫的性能。ORACLE公司推薦使用ORACLE語句優(yōu)化器(Oracle Optimizer)和行鎖管理器(row-level manager)來調(diào)整優(yōu)化SQL語
8、句。 D、調(diào)整服務(wù)器內(nèi)存分配。內(nèi)存分配是在信息系統(tǒng)運行過程中優(yōu)化配置的,數(shù)據(jù)庫管理員可以根據(jù)數(shù)據(jù)庫運行狀況調(diào)整數(shù)據(jù)庫系統(tǒng)全局區(qū)(SGA區(qū))的數(shù)據(jù)緩沖區(qū)、日志緩沖區(qū)和共享池的大小;還可以調(diào)整程序全局區(qū)(PGA區(qū))的大小。需要注意的是,SGA區(qū)不是越大越好,SGA區(qū)過大會占用操作系統(tǒng)使用的內(nèi)存而引起虛擬內(nèi)存的頁面交換,這樣反而會降低系統(tǒng)。 E、調(diào)整硬盤I/O,這一步是在信息系統(tǒng)開發(fā)之前完成的。數(shù)據(jù)庫管理員可以將組成同一個表空間的數(shù)據(jù)文件放在不同的硬盤上,做到硬盤之間I/O負載均衡。 F、調(diào)整
9、操作系統(tǒng)參數(shù),例如:運行在UNIX操作系統(tǒng)上的ORACLE數(shù)據(jù)庫,可以調(diào)整UNIX數(shù)據(jù)緩沖池的大小,每個進程所能使用的內(nèi)存大小等參數(shù)。13. 如何使用Oracle的游標? 1). oracle中的游標分為顯示游標和隱式游標 2). 顯示游標是用cursor.is命令定義的游標,它可以對查詢語句(select)返回的多條記錄進行處理;隱式游標是在執(zhí)行插入 (insert)、刪除(delete)、修改(update)和返回單條記錄的查詢(select)語句時由PL/SQL自動定義的。 3). 顯式游標的操作:打開游標、操作游標、關(guān)閉游標;PL/
10、SQL隱式地打開SQL游標,并在它內(nèi)部處理SQL語句,然后關(guān)閉它14. Oracle的導(dǎo)入導(dǎo)出有幾種方式,有何區(qū)別? 1). 使用oracle工具 exp/imp 2). 使用plsql相關(guān)工具 方法1. 導(dǎo)入/導(dǎo)出的是二進制的數(shù)據(jù), 2.plsql導(dǎo)入/導(dǎo)出的是sql語句的文本文件 15. Oracle是怎樣分頁的? Oracle中使用rownum來進行分頁, 這個是效率最好的分頁方法,hibernate也是使用rownum來進行oralce分頁的 select * from ( select rownum
11、r,a from tabName where rownum <= 20 ) where r > 10 16. Oracle中使用了索引的列,對該列進行where條件查詢、分組、排序、使用聚集函數(shù),哪些用到了索引? 均會使用索引, 值得注意的是復(fù)合索引(如在列A和列B上建立的索引)可能會有不同情況 v17. Oracle中where條件查詢和排序的性能比較? Order by使用索引的條件極為嚴格,只有滿足如下情況才可以使用索引, 1). order by中的列必須包含相同的索引并且索引順序和排序順序一致 2).
12、不能有null值的列 所以排序的性能往往并不高,所以建議盡量避免order by18. 解釋冷備份和熱備份的不同點以及各自的優(yōu)點? 冷備份發(fā)生在數(shù)據(jù)庫已經(jīng)正常關(guān)閉的情況下,將關(guān)鍵性文件拷貝到另外位置的一種說法 熱備份是在數(shù)據(jù)庫運行的情況下,采用歸檔方式備份數(shù)據(jù)的方法 冷備的優(yōu)缺點: 1)是非常快速的備份方法(只需拷貝文件) 2)容易歸檔(簡單拷貝即可) 3)容易恢復(fù)到某個時間點上(只需將文件再拷貝回去) 4)能與歸檔方法相結(jié)合,作數(shù)據(jù)庫“最新狀態(tài)”的恢復(fù)。 5)低度維護,高度安全。 冷
13、備份不足: 1)單獨使用時,只能提供到“某一時間點上”的恢復(fù)。 2)在實施備份的全過程中,數(shù)據(jù)庫必須要作備份而不能作其它工作。也就是說,在冷備份過程中,數(shù)據(jù)庫必須是關(guān)閉狀態(tài)。 3)若磁盤空間有限,只能拷貝到磁帶等其它外部存儲設(shè)備上,速度會很慢。 4)不能按表或按用戶恢復(fù)。 熱備的優(yōu)缺點 1)可在表空間或數(shù)據(jù)文件級備份,備份時間短。 2)備份時數(shù)據(jù)庫仍可使用。 3)可達到秒級恢復(fù)(恢復(fù)到某一時間點上)。 4)可對幾乎所有數(shù)據(jù)庫實體作恢復(fù)。 5)恢復(fù)是快速的,在大多數(shù)情況下在數(shù)據(jù)庫
14、仍工作時恢復(fù)。 熱備份的不足是: 1)不能出錯,否則后果嚴重。 2)若熱備份不成功,所得結(jié)果不可用于時間點的恢復(fù)。 3)因難于維護,所以要特別仔細小心,不允許“以失敗而告終”。 19. 解釋什么是死鎖,如何解決Oracle中的死鎖? 簡言之就是存在加了鎖而沒有解鎖,可能是使用鎖沒有提交或者回滾事務(wù),如果是表級鎖則不能操作表,客戶端處于等在狀態(tài),如果是行級鎖則不能操作鎖定行 解決辦法: 1). 查找出被鎖的表 select b.owner,b.object_
15、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). 殺進程中的會話 a
16、lter system kill session "sid,serial#" 20. 簡述oracle中 dml、ddl、dcl的使用 Dml 數(shù)據(jù)操縱語言,如select、update、delete,insert Ddl 數(shù)據(jù)定義語言,如create table 、drop table 等等 Dcl 數(shù)據(jù)控制語言, 如 commit、 rollback、grant、 invoke等 21. 說說oracle中的經(jīng)常使用到得函數(shù) Length 長度、 lower 小寫、upper 大寫, to_date 轉(zhuǎn)化日期,
17、 to_char轉(zhuǎn)化字符 Ltrim 去左邊空格、 rtrim去右邊空格,substr取字串,add_month增加或者減掉月份、to_number轉(zhuǎn)變?yōu)閿?shù)字 22. 怎樣創(chuàng)建一個一個索引,索引使用的原則,有什么優(yōu)點和缺點 創(chuàng)建標準索引: CREATE INDEX 索引名 ON 表名 (列名) TABLESPACE 表空間名; 創(chuàng)建唯一索引: CREATE unique INDEX 索引名 ON 表名 (列名) TABLESPACE 表空間名; 創(chuàng)建組合索引: CREATE IN
18、DEX 索引名 ON 表名 (列名1,列名2) TABLESPACE 表空間名; 創(chuàng)建反向鍵索引: CREATE INDEX 索引名 ON 表名 (列名) reverse TABLESPACE 表空間名; 索引使用原則: 索引字段建議建立NOT NULL約束 經(jīng)常與其他表進行連接的表,在連接字段上應(yīng)該建立索引; 經(jīng)常出現(xiàn)在Where子句中的字段且過濾性很強的,特別是大表的字段,應(yīng)該建立索引; 可選擇性高的關(guān)鍵字 ,應(yīng)該建立索引; 可選擇性低的關(guān)鍵字,但數(shù)據(jù)的值分布差異很大時,選擇性數(shù)據(jù)比較少時仍然可以利
19、用索引提高效率 復(fù)合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替: A、正確選擇復(fù)合索引中的第一個字段,一般是選擇性較好的且在where子句中常用的字段上; B、復(fù)合索引的幾個字段經(jīng)常同時以AND方式出現(xiàn)在Where子句中可以建立復(fù)合索引;否則單字段索引; C、如果復(fù)合索引中包含的字段經(jīng)常單獨出現(xiàn)在Where子句中,則分解為多個單字段索引; D、如果復(fù)合索引所包含的字段超過3個,那么仔細考慮其必要性,考慮減少復(fù)合的字段; E、如果既有單字段索引,又有這幾個字段上的復(fù)合索引,一般可以刪除復(fù)合索引; 頻繁DML的表,不要
20、建立太多的索引; 不要將那些頻繁修改的列作為索引列; 索引的優(yōu)缺點: 有點: 1. 創(chuàng)建唯一性索引,保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性 2. 大大加快數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因 3. 加速表和表之間的連接,特別是在實現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義。 4. 在使用分組和排序子句進行數(shù)據(jù)檢索時,同樣可以顯著減少查詢中分組和排序的時間。 缺點: 1. 索引創(chuàng)建在表上,不能創(chuàng)建在視圖上 2. 創(chuàng)建索引和維護索引要耗費時間,這種時間隨著數(shù)據(jù)量的增加而增加 3. 索引需要占物理空
21、間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大 4. 當(dāng)對表中的數(shù)據(jù)進行增加、刪除和修改的時候,索引也要動態(tài)的維護,降低了數(shù)據(jù)的維護速度 23. 在java種怎樣調(diào)用oracle存儲過程; 在java中使用 CallableStatement調(diào)用存儲過程 創(chuàng)建需要的測試表:create table Test(tid varchar2(10),tname varchar2(10); 第一種情況:無返回值. create or
22、 replace procedure test_a(param1 in varchar2,param2 in varchar2) as begin insert into test value(param1,param2); end; 調(diào)用代碼: package com.test; import java.sql.*; import java.io.
23、*; import java.sql.*; public class TestProcA public TestProcA() public static void main(String args) ResultSet rs = null; Connection conn = null
24、; CallableStatement proc = null; try Class.forName("oracle.jdbc.driver.Driver"); conn = DriverManager.getConnection("jdbc:oracle:thin:127.0.0.1:1521:test", "test"
25、;, "test"); proc = conn.prepareCall(" call test_a(?,?) "); proc.setString(1, "1001"); proc.setString(2, "TestA");
26、 proc.execute(); catch(Exception e) e.printStackTrace(); finally try if(null!=rs)
27、60;rs.close(); if(null!=proc) proc.close(); if(null!=conn)
28、 conn.close(); catch(Exception ex)
29、0; 第二種情況:有返回值的存儲過程(返回值非列表). 存儲過程為: 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調(diào)用代碼: package com.test; import java.sql.*;&
30、#160;import java.io.*; import java.sql.*; public class TestProcB public TestProcB() public static void main(String args) Connection conn = null;
31、 CallableStatement proc = null; try Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection("jdbc:oracle
32、:thin:127.0.0.1:1521:test", "test", "test"); proc = conn.prepareCall(" call test_b(?,?) "); proc.setString(1, "1001"); proc.registerOut
33、Parameter(2, Types.VARCHAR); proc.execute(); System.out.println("Output is:"+proc.getString(2); catch(Exception e) e.printStackTrace(); finally
34、0; try if(null!=proc) proc.close(); if(null!=conn)
35、160; conn.close(); catch(Exception ex)
36、 第三種情況:返回列表. 由于oracle存儲過程沒有返回值,它的所有返回值都是通過out參數(shù)來替代的,列表同樣也不例外,但由于是集合,所以不能用一般的參數(shù),必須要用pagkage了.要分兩部分來寫: create or replace package tpackage as type t_cursor is ref cursor; procedure test_c(c_ref out t_cursor); end ; create or replace package body tpac
37、kage as procedure test_c(c_ref out t_cursor) is begin open c_ref for select * from test; end test_c; end tpackage; Java調(diào)用代碼: package com.test; import java.sql.*; import java.io.*; import java.sql.*;
38、; public class TestProcB public TestProcB() public static void main(String args) Connection conn = null; CallableStatement proc = null;&
39、#160; 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療照明銷售合同范例
- 供暖法律合同范例
- 2025年度物流園區(qū)后勤保障與運營管理合同
- 產(chǎn)品英文訂購合同范本
- 中國針織襯衫行業(yè)市場深度分析及投資策略咨詢報告
- 倉儲承包服務(wù)合同范本
- 低價漁具轉(zhuǎn)讓合同范例
- 公寓電腦租賃合同范本
- 農(nóng)機合同范本
- 仔豬購買合同范本
- 數(shù)學(xué)-河南省三門峽市2024-2025學(xué)年高二上學(xué)期1月期末調(diào)研考試試題和答案
- 2025年春新人教版數(shù)學(xué)七年級下冊教學(xué)課件
- 《心臟血管的解剖》課件
- 心肺復(fù)蘇課件2024
- 2024-2030年中國并購基金行業(yè)發(fā)展前景預(yù)測及投資策略研究報告
- 河道清淤安全培訓(xùn)課件
- 2024各科普通高中課程標準
- 7.3.1印度(第1課時)七年級地理下冊(人教版)
- 環(huán)保鐵1215物質(zhì)安全資料表MSDS
- “君子教育”特色課程的探索
- AS9100D人力資源管理程序(范本)
評論
0/150
提交評論