Oracle常見面試題
一、對數據庫SQL200五、ORACLE熟悉嗎?
SQL2005是微軟公司的數據庫產品。是一個RDBMS數據庫,通常應用在一些中型數據庫的應用,不能跨平臺。
ORACLE是ORACLE公司的數據產品,支持海量數據存儲,支持分佈式布暑,支持多用戶,跨平臺,數據安全完整性控制性能優越,是一個ORDBMS,通常用在大型公司。
二、能不能設計數據庫?如何實現數據庫導入與導出的更新
使用POWERDISINE工具的使用,通常知足第三範式就能夠了。EXP與IMP數據庫的邏輯導入與導出
三、如何只顯示重複數據,或不顯示重複數據
顯示重複:select * from tablename group by id having count(*)>1
不顯示重複:select * from tablename group by id having count(*)=1
四、什麼是數據庫的映射
就是將數據庫的表與字段對應到模型層類名與屬性的過程.
五、如何用存儲過程寫分頁?
在SQLSERVER中使用TOP分頁,在ORACLE中用ROWNUM,或分析函數ROW_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 and num <=20;
使用過程時,只要將分頁的範圍用兩個參數就能夠實現。在ORACLE中,要將過程封裝在包裏,還要用動態遊標變量才能實現數據集的返回。
六、ORACLE中左鏈接與右鏈接
左鏈接:LEFT JOIN 右鏈接:RIGHT JOIN
select n.column,m.column from tablename1 n left join tablename2 m
on n.columnname=m.columnname
用WHERE實現:
select n.column,m.column from tablename1 n, tablename2 m
where n.columnname(+)=m.columnname
七、何時會用到觸發器
A安全管理、B日誌管理、C複雜業務邏輯實現
八、如何實現數據庫的優化?
A、調整數據結構的設計。這一部分在開發信息系統以前完成,程序員須要考慮是否使用ORACLE數據庫的分區功能,對於常常訪問的數據庫表是否須要創建索引等。
B、調整應用程序結構設計。這一部分也是在開發信息系統以前完成,程序員在這一步須要考慮應用程序使用什麼樣的體系結構,是使用傳統的Client/Server兩層體系結構,仍是使用Browser/Web/Database的三層體系結構。不一樣的應用程序體系結構要求的數據庫資源是不一樣的。
C、調整數據庫SQL語句。應用程序的執行最終將歸結爲數據庫中的SQL語句執行,所以SQL語句的執行效率最終決定了ORACLE數據庫的性能。ORACLE公司推薦使用ORACLE語句優化器(Oracle Optimizer)和行鎖管理器(row-level manager)來調整優化SQL語句。
D、調整服務器內存分配。內存分配是在信息系統運行過程當中優化配置的,數據庫管理員能夠根據數據庫運行情況調整數據庫系統全局區(SGA區)的數據緩衝區、日誌緩衝區和共享池的大小;還能夠調整程序全局區(PGA區)的大小。須要注意的是,SGA區不是越大越好,SGA區過大會佔用操做系統使用的內存而引發虛擬內存的頁面交換,這樣反而會下降系統。
E、調整硬盤I/O,這一步是在信息系統開發以前完成的。數據庫管理員能夠將組成同一個表空間的數據文件放在不一樣的硬盤上,作到硬盤之間I/O負載均衡。
F、調整操做系統參數,例如:運行在UNIX操做系統上的ORACLE數據庫,能夠調整UNIX數據緩衝池的大小,每一個進程所能使用的內存大小等參數。
9.T表:(字段:ID,NAME,ADDRESS,PHONE,LOGDATE)
E表:(字段:NAME,ADDRESS,PHONE)
1)將表T中的字段LOGDATE中爲2001-02-11的數據更新爲2003-01-01,請寫出相應的SQL語句。(該字段類型爲日期類型)
update t set logdate=to_date('2003-01-01','yyyy-mm-dd')where logdate=to_date('2001-02-11','yyyy-mm-dd');
2)請寫出將表T中NAME存在重複的記錄都列出來的SQL語句(按NAME排序)
select * from t where name in (select name from t group by name having coung(*)>1) order by name;
3)請寫出題目2中,只保留重複記錄的第一條,刪除其他記錄的SQL語句(即便該表不存在重複記錄)
select ID,NAME,ADDRESS,PHONE,LOGDATE from (select t.*,row_number() over(partition by name order by name) rn from t)where rn = 1;
4)請寫出將E表中的ADDRESS、PHONE更新到T表中的SQL語句(按NAME相同進行關聯)
update t set (address,phone)=(select address,phone from e where e.name=t.name);
5)請寫出將T表中第3~5行數據列出來的SQL語句
select * from t where rownum <=5 minus select * from t where rownum <=2;
10.解釋冷備份和熱備份的不一樣點以及各自的優勢
熱備份針對歸檔模式的數據庫,在數據庫仍舊處於工做狀態時進行備份。而冷備份指在數據庫關閉後,進行備份,適用於全部模式的數據庫。熱備份的優勢在於當備份時,數據庫仍舊能夠被使用而且能夠將數據庫恢復到任意一個時間點。冷備份的優勢在於它的備份和恢復操做至關簡單,而且因爲冷備份的數據庫能夠工做在非歸檔模式下,數據庫性能會比歸檔模式稍好。(由於沒必要將archive log寫入硬盤)
11.你必須利用備份恢復數據庫,可是你沒有控制文件,該如何解決問題呢?
重建控制文件,用帶backup control file 子句的recover 命令恢復數據庫。
12.如何轉換init.ora到spfile?
使用create spfile from pfile 命令
13.解釋data block , extent 和 segment的區別(這裏建議用英文術語)
data block是數據庫中最小的邏輯存儲單元。當數據庫的對象須要更多的物理存儲空間時,連續的data block就組成了extent . 一個數據庫對象擁有的全部extents被稱爲該對象的segment.
14.給出兩個檢查表結構的方法
1)DESCRIBE命令
2)DBMS_METADATA.GET_DDL 包
15.比較truncate和delete 命令
二者均可以用來刪除表中全部的記錄。區別在於:truncate是DDL操做,它移動HWK,不須要 rollback segment .而Delete是DML操做須要rollback segment 且花費較長時間
16.給出在STAR SCHEMA中的兩種表及它們分別含有的數據
Fact tables 和dimension tables. fact table 包含大量的主要的信息而 dimension tables 存放對fact table 某些屬性描述的信息
17.如何在不影響子表的前提下,重建一個母表
子表的外鍵強制實效,重建母表,激活外鍵
18.解釋歸檔和非歸檔模式之間的不一樣和它們各自的優缺點
歸檔模式是指你能夠備份全部的數據庫 transactions並恢復到任意一個時間點。非歸檔模式則相反,不能恢復到任意一個時間點。可是非歸檔模式能夠帶來數據庫性能上的少量提升
19.如何創建一個備份控制文件?
Alter database backup control file to trace.
20.給出數據庫正常啓動所經歷的幾種狀態 ?
STARTUP NOMOUNT – 數據庫實例啓動
STARTUP MOUNT – 數據庫裝載
STARTUP OPEN – 數據庫打開
21. 如何增長buffer cache的命中率?
在數據庫較繁忙時,適用buffer cache advisory 工具,查詢v$db_cache_advice . 若是有必要更改,可使用 alter system set db_cache_size 命令
22. ORA-01555的應對方法?
具體的出錯信息是snapshot too old within rollback seg , 一般能夠經過增大rollback seg來解決問題。固然也須要察看一下具體形成錯誤的SQL文本
23.建立數據庫時自動創建的tablespace名稱?
SYSTEM tablespace.
24.建立用戶時,須要賦予新用戶什麼權限才能使它聯上數據庫。
CONNECT
25.如何在tablespace裏增長數據文件?
ALTER TABLESPACE <tablespace_name> ADD DATAFILE <datafile_name> SIZE <size>
26如何變更數據文件的大小?
ALTER DATABASE DATAFILE <datafile_name> RESIZE <new_size>;
27.哪一個VIEW用來檢查數據文件的大小?
DBA_DATA_FILES
28.哪一個VIEW用來判斷tablespace的剩餘空間
DBA_FREE_SPACE
29.如何判斷誰往表裏增長了一條紀錄?
auditing
30. 如何重構索引?
ALTER INDEX <index_name> REBUILD;
31. 解釋什麼是Partitioning(分區)以及它的優勢。
Partition將大表和索引分割成更小,易於管理的分區。
32. 如何蒐集表的各類狀態數據?
ANALYZE
The ANALYZE command.
34. 如何啓動SESSION級別的TRACE
DBMS_SESSION.SET_SQL_TRACE
ALTER SESSION SET SQL_TRACE = TRUE;
35.IMPORT和SQL*LOADER 這2個工具的不一樣點
這兩個ORACLE工具都是用來將數據導入數據庫的。區別是:IMPORT工具只能處理由另外一個ORACLE工具EXPORT生成的數據。而SQL*LOADER能夠導入不一樣的ASCII格式的數據源
36.用於網絡鏈接的2個文件?
TNSNAMES.ORA and SQLNET.ORA程序員