1. 一個面試題 oracle:學生表s(sno、sname),課程表c(cno、cname,cteacher)選課表sc(sno、cno、score)
--1
select * from s where s.sno not in(select sno from c,sc where c.cno=sc.cno and c.cteacher='張三')
--2
select (select sname from s where s.sno=main.sno),avg(sc.score)
from s main,sc
where main.sno=sc.sno
and main.sno in(select sno from s s1,sc sc1 where s1.sno=sc1.sno and sc1.score<60 group by s1.sno having count(sno)>=2)
2. 有誰知道新蛋科技軟體測試面試題啊
1、 存儲過程在軟體開發中有什麼樣的優勢和劣勢,有什麼樣的缺點。
答:存儲過程的優點:
(1) 允許模塊化程序設計,以後可以重復調用;可以由專人來完成,並可獨立於程序源代碼而單獨修改。這樣一個項目在需求分析、界面設計以及資料庫設計完了以後,就可以開始寫存儲過程了,同一時間數據訪問層也可以開始寫了。沒有必要等詳細設計說明完成了在編碼的時候才開始寫SQL語句。
(2) 執行更快
存儲過程都是預編譯命令,執行起來比SQL語句更快。
(3) 減少網路流量
(4) 可作為安全機制,能夠屏蔽資料庫,用戶並不知道資料庫的真實結構。
存儲過程的缺點
最大的缺點就是更換資料庫的時候,比如SQL_Server資料庫換成Oracle資料庫時SQL_Server資料庫的存儲過程在Oracle當中完全不能用,只能重新用Oracle的命令來寫存儲過程。
2、 如果你的項目在開發時使用了存儲過程,在改換資料庫時,會發生什麼樣的問題,如何解決?
答:更換資料庫的時候,比如SQL_Server資料庫換成Oracle資料庫時SQL_Server資料庫的存儲過程在Oracle當中完全不能用,只能重新用Oracle的命令來寫存儲過程。
對於這個問題,解決的辦法是:採用統一的資料庫建模工具,比如( ),所有的資料庫設計全部在這個統一個資料庫建模工具里進行,存儲過程也可以在這里完成。最後在根據需要轉設成具體的某一種資料庫,如果需要SQL_Server就轉變成SQL_Server資料庫,如果需要Oracle就轉變成Oracle資料庫。
3、 在存儲過程中如果前面的語句發生錯誤,後面的語句會不會執行,為什麼。
4、 在存儲過程中,怎樣進行異常處理?
5、 存儲過程的輸出參數有幾種形式,分別介紹一下, 返回值的類型有沒有什麼限制?
答:在SQL_Server中有四種形式:
(1)、以OUTPUT參數形式返回數據,返回值的類型限制為:整形值、字元值也可以是游標變數,這種形式,可以一次返回多個值。
(2)、以Return的形式返回值,返回值的類型限制為:整形值, 以表明過程的執行狀態。
(3)、返回SELECT語句的結果集。
(4)、可以返回能從存儲過程外引用的全局游標。
在Oracle中有三種形式:
(1)、以OUT參數形式返回數據,返回值的類型限制為:不可以是大數據類型如:LOB、CLOB、BFILE等。
(2)、以IN OUT形式返回數據,返回值的類型限制為:也不可以是大數據類型。
(3)、返回SELECT語句的結果集。
在Oracle中存儲過程沒有Return的返回值,只有方法Function才有返回值
6、 如果兩個不同的存儲過程在一個方中被同是調用,當其中任一個發生異常時,要求同時回滾兩個存儲過程的操作,怎麼樣處理?
答:可以創建另個一個存儲過程,在這個存儲中,創建一個自組事務,在這個自組事務中分別去調用那兩個存儲過程。語法如下:
create procere CallTwoProc
as
begin transaction
execute 第一個存儲過程
execute 第二個存儲過程
commit transaction
go
7、 請談一談視圖的優點(創建視圖的必要性)。基於視圖的增刪改會帶來什麼樣的問題,如何解決樣的的問題?
答:視圖的優點:
(1)、可以篩選表中的行。
(2)、可以將多個物理數據表抽象為一個邏輯表,有利於跨庫操作。
(3)、防止未經許可的用戶訪問敏感數據。
(4)、降低資料庫的復雜程度。
(5)、視圖是一種抽象表,它不佔用存儲空間。
基於視圖的增刪改會帶來兩個的問題:
(1)、INSERT、UPDATE和DELETE語句都必須要滿足視圖的條件,即視圖要能看得到的才能INSERT、UPDATE和DELETE。通過視圖的刪除數據,要慎用,如果視圖看不到的,無法刪除。
解決辦法:給視圖加上with check option約束之後,基於視圖的更改,凡是不符合視圖約束(where……)的修改、插入、刪除時會報錯,用以限制對視圖的修改。
(2)、當一個視圖是基於多個基表建立的,在視圖上修改數據時,只能INSERT或UPDATE基於一個基表的欄位的值,無法同時修改兩個或以上的基表的欄位。DELETE不能運行,因為DELETE語句僅在視圖的FROM子句中只包含一個表時才可以引用更新視圖。
解決辦法:建立INSTEAD OF觸發器,把對視圖的INSERT、UPDATE、DELETE操作轉換為分別對幾個基表的INSERT、UPDATE、DELETE操作,分作幾步進行。這樣對視圖的INSERT、UPDATE、DELETE操作就有效了。
8、 索引有什麼樣的優點,也有什麼樣的缺點,我們在運用索引的時候,是顯示運用的嗎,那是怎麼樣應用的呢,請舉例說明。
答:索引的優點:可以加快我們的查詢速度。
索引的缺點:
(1)、當我們INSERT、UPDATE、DELETE時 ,資料庫系統總是要去 更新每一個索引,因此而浪費很多時間。所以在基於事務的系統中,應盡量少建立索引。
(2)、帶索引的給在資料庫中會占據更多的存儲空間。
索引並不顯示使用,而是在執行SQL語句時,當中含有WHERE、ORDER BY、GROUP BY、HAVING等了句時,即凡是有對數據進行搜索和排序的語句,查詢優化器組件會找出查詢效率最高的辦法,而查詢優化器就會選擇最優的索引進行工作。
9、 如果一個表其中有三個欄位很常用,它們是A,B,C三個欄位 ,其中B欄位更常用,那麼這時我們應該怎麼樣創建索引。
答:創建一個組合索引,其中包括A、B、C三個欄位 ,但一定要把B欄位放在最前面。
因為B欄位最常用,它的唯一性應該是最高的。
10、如果一個表有10萬條記錄,其中有10個它段非常常用,我們應該怎麼樣他建索引。
答:創建一個組合索引,其中只包括非常常用的10個欄位 ,排列的順序一定是按唯一性的高低進行排列,唯一性最高的欄位放在最前面,唯一性最低的放在最後面。
11.觸發器會產生遞歸調用嗎,請舉例說明,像這種情況,我們應該怎麼樣避免呢?
答:觸發器會產生遞歸調用。有兩種情況
第一種:直接遞歸 即觸發器被激發並執行一個操作,而該操作又使同一個觸發器被激發。
第二種:間接遞歸 即觸發器被激發並執行一個操作,而該操作又使另一個觸發器被激發。第二個觸發器又使得第一個觸發器的原始表得到更新,從而再一次引發第一個觸發器。
避免的辦法有:
(1)、在編寫觸發器里,人為的注意到這一點。
(2)、防止直接遞歸:alter database pubs set RECURSIVE_TRIGGERS OFF
防止間接遞歸:請將 nested triggers 伺服器選項設置為 0。
12、如果基於一個基表創建了很多個同種類型的觸發器,比如UPDATA觸發器,我們跟據什麼來確定他們所執行的順序?
13、(1)在數據查詢中,我們需要把兩個或者多個表作橫方向聯接,用什麼命令?
答:用聯接來解決這個問題join…..on
(2)請問聯接有多少種類,分別是哪幾種?
答:有三種,他們是左聯接 left join ….on,右聯接 right join…..on, 內聯接inner join……on或者join……on。
(3)在聯接中,用什麼來指定聯接的條件?
答:用on
(4)在聯接查詢查詢中,有沒有規定在所查詢的兩個表的欄位中一定要有主鍵欄位?
答:沒有這種說法,不一定必須查詢主鍵,正確的說法是:典型的聯接是指定一個表的外鍵以及在另一個表上的關聯鍵。
14(1)在數據查詢中,我們需要把兩個或者多個表作縱方向聯接,用什麼命令?
答:使用Union聯合命令。
(2)在使用Union聯合命令時,我們應注意些什麼?
答:所聯合的幾個查詢,欄位名可以不相同,但是欄位類型、欄位數都必須要相同。
(3)請說一說Union和Union All這兩個命令的區別?
答:Union命令得到的結果會去掉重復項,作了一個distinct操作。
Union All命令不會去掉重復項。
15、資料庫的安全和管理方面的間題沒有問。
依往年來說,第一到第七題常問,你看看吧
3. 關於oracle資料庫的一道面試題,使用wm_concat()主函數完成
||WITH div_pm_ci AS(
select ci_id, substr( stu_ids, instr(','||容 stu_ids, ',', 1, rn),
instr( stu_ids||',', ',', 1, rn) - instr(','|| stu_ids, ',', 1, rn) ) stu_id
from pm_ci,(select rownum rn from al connect by rownum < 10)
where instr(','|| stu_ids, ',', 1, rn) > 0)
SELECT a.ci_id,wm_concat(b.stu_name) stu_name
FROM div_pm_ci a,pm_stu b
WHERE a.stu_id=b.stu_id
GROUP BY a.ci_id
4. Oracle DBA面試題
列舉幾個比較容易被問到的問題。(來自cuug)
1. 解釋冷備份和熱備份的不同點以及各自的優點
解答:熱備份針對歸檔模式的資料庫,在資料庫仍舊處於工作狀態時進行備份。而冷備份指在資料庫關閉後,進行備份,適用於所有模式的資料庫。熱備份的優點在於當備份時,資料庫仍舊可以被使用並且可以將資料庫恢復到任意一個時間點。冷備份的優點在於它的備份和恢復操作相當簡單,並且由於冷備份的資料庫可以工作在非歸檔模式下,資料庫性能會比歸檔模式稍好。(因為不必將archive log寫入硬碟)
2. 你必須利用備份恢復資料庫,但是你沒有控制文件,該如何解決問題呢?
解答:重建控制文件,用帶backup control file 子句的recover 命令恢復資料庫。
3. 如何轉換init.ora到spfile?
解答:使用create spfile from pfile 命令
.
4. 解釋data block , extent 和 segment的區別(這里建議用英文術語)
解答:data block是資料庫中最小的邏輯存儲單元。當資料庫的對象需要更多的物理存儲空間時,連續的data block就組成了extent . 一個資料庫對象擁有的所有extents被稱為該對象的segment.
5. 給出兩個檢查表結構的方法
解答:1、DESCRIBE命令
2、DBMS_METADATA.GET_DDL 包
6. 怎樣查看資料庫引擎的報錯
解答:alert log.
7. 比較truncate和delete 命令
解答:兩者都可以用來刪除表中所有的記錄。區別在於:truncate是DDL操作,它移動HWK,不需要 rollback segment .而Delete是DML操作, 需要rollback segment 且花費較長時間.
8. 使用索引的理由
解答:快速訪問表中的data block
9. 給出在STAR SCHEMA中的兩種表及它們分別含有的數據
解答:Fact tables 和dimension tables. fact table 包含大量的主要的信息而 dimension tables 存放對fact table 某些屬性描述的
信息
10. FACT Table上需要建立何種索引?
解答:點陣圖索引(bitmap index)
11. 給出兩種相關約束?
解答:主鍵和外鍵
12. 如何在不影響子表的前提下,重建一個母表
解答:子表的外鍵強制失效,重建母表,激活外鍵
13. 解釋歸檔和非歸檔模式之間的不同和它們各自的優缺點
解答:歸檔模式是指你可以備份所有的資料庫 transactions並恢復到任意一個時間點。非歸檔模式則相反,不能恢復到任意一個時間點。
但是非歸檔模式可以帶來資料庫性能上的少許提高
14. 如何建立一個備份控制文件?
解答:Alter database backup control file to trace.
15. 給出資料庫正常啟動所經歷的幾種狀態 ?
解答:
STARTUP NOMOUNT – 資料庫實例啟動
STARTUP MOUNT - 資料庫裝載
STARTUP OPEN – 資料庫打開
16. 哪個column可以用來區別V$視圖和GV$視圖?
解答: INST_ID 指明集群環境中具體的某個instance 。
17. 如何生成explain plan?
解答:
運行utlxplan.sql. 建立plan 表針對特定SQL語句,使用 explain plan set statement_id = 'tst1' into plan_table 運行
utlxplp.sql 或 utlxpls.sql察看explain plan
18. 如何增加buffer cache的命中率?
解答:在資料庫較繁忙時,適用buffer cache advisory 工具,查詢v$db_cache_advice . 如果有必要更改,可以使用 alter system set
db_cache_size 命令
19. ORA-01555的應對方法?
解答:具體的出錯信息是snapshot too old within rollback seg , 通常可以通過增大rollback seg來解決問題。當然也需要察看一下具
體造成錯誤的SQL文本
20. 解釋$ORACLE_HOME和$ORACLE_BASE的區別?
解答:ORACLE_BASE是oracle的根目錄,ORACLE_HOME是oracle產品的目錄
5. Oracle資料庫面試題 用戶的許可權都有哪些
系統許可權: 允許用戶執行特定的資料庫動作,如創建表、創建索引、連接實例等(對用戶而言)
對象許可權: 允許用戶操縱一些特定的對象,如讀取視圖,可更新某些列、執行存儲過程等(是針對表或視圖而言的)
1.系統許可權
超過一百多種有效的許可權(SELECT * FROM SYSTEM_PRIVILEGE_MAP查)
資料庫管理員具有高級許可權以完成管理任務,例如:
–創建新用戶
–刪除用戶
–刪除表
–備份表
系統許可權分類:
DBA: 擁有全部特權,是系統最高許可權,只有DBA才可以創建資料庫結構。
RESOURCE:擁有Resource許可權的用戶只可以創建實體,不可以創建資料庫結構。
CONNECT:擁有Connect許可權的用戶只可以登錄Oracle,不可以創建實體,不可以創建資料庫結構。
對於普通用戶:授予connect, resource許可權。
對於DBA管理用戶:授予connect,resource, dba許可權。
a.常用的系統許可權:
CREATE SESSION 創建會話
CREATE SEQUENCE 創建序列
CREATE SYNONYM 創建同名對象
CREATE TABLE 在用戶模式中創建表
CREATE ANY TABLE 在任何模式中創建表
DROP TABLE 在用戶模式中刪除表
DROP ANY TABLE 在任何模式中刪除表
CREATE PROCEDURE 創建存儲過程
EXECUTE ANY PROCEDURE 執行任何模式的存儲過程
CREATE USER 創建用戶
DROP USER 刪除用戶
CREATE VIEW 創建視圖
2.對象許可權
不同的對象具有不同的對象許可權
對象的擁有者擁有所有許可權
對象的擁有者可以向外分配許可權
ORACLE一共有種對象許可權
對象許可權 表 視圖 序列 過程
修改(alter) √ √
刪除(delete) √ √
執行(execute) √
索引(index) √
插入(insert) √ √
關聯(references) √ √
選擇(select) √ √ √
更新(update) √ √
6. Oracle資料庫的數據提取(一道面試題)
--建立臨時視圖1,檢索每個部門第一名分數
create or replace view temp_v1 as
select 部門號,max(成績) as 成績 from Employee group by 部門號;
--在臨時視圖1的基礎上建立臨時視圖2,檢索第二名分數
create or replace view temp_v2 as
select 部門號,max(成績) as 成績 from Employee
where (部門號,成績) not in (select * from temp_v1)
group by 部門號;
--聯合兩個臨時視圖的查詢結果,建立臨時視圖3
create or replace view temp_v3 as
select * from
(select * from temp_v1 union select * from temp_v2)
order by 部門號,成績;
--建立目標視圖
create or replace view VdepEm2 as
select 部門號,員工號,成績 from Employee
where(部門號,成績) in (select * from temp_v3);
*******************
昨天有點事情耽擱了,這個應該可以實現你的要求。如果不允許建立臨時視圖的話,你把這幾個臨時視圖糅進去就可以了。
7. 面試題:oracle資料庫優化
oracle資料庫優化的話主要有以下幾個方面(我接觸過的,可能不全面):回
1 查詢語句的答優化,這個主要是根據語句和資料庫索引的情況,結合查詢計劃的分析結果,對性能較低的查詢語句進行重寫,在執行查詢前執行表分析語句也可以算這里;
2 數據結構優化,這個包括根據實際的應用中業務邏輯,對資料庫的結構進行重新設計,或者創建相關索引里提高查詢效率;
3 資料庫設置優化,這方面主要是調整資料庫和數據結構的相關參數提高應用訪問系統的效率;
4 存儲結構優化,在數據量較大的情況下,可以考慮通過資料庫的存儲結構進行優化,比如對數據進行partition,將數據存儲在磁碟陣列伺服器上等。
我的經驗有限,以上是部分建議
8. oracle幾道簡單面試題,請大俠幫忙
1,資料庫遷移需要復考慮制的問題很多,這個一句兩句也說不完;
2,首先考慮的就是數據量,如果是小表,沒有索引反而訪問還要快一些。
3,權衡全表還是走索引,看SQL的執行計劃就可以了;
4,這個資料庫對象是用在兩個資料庫之間聯接,交換,查詢數據用的。
5,去資料庫里查鎖住的進程,殺了就可以了。之後再分析原因。
6,分區表是數據量大於1.5gb以上才用的吧。
7,臨時表空間當然會滿,查視圖也是一樣的。
8,開了歸檔就相當於win系統的設置里開了系統還原一樣。
9,redo這個設置要看實際情況,根據主機CUP處理能力,資料庫優化參數等因素決定的。
9. 軟體測試工程師 面試oracle資料庫什麼題目
ORACLE資料庫工程師,日常維護,如:備份,管理
在資料庫中進行開發,不知道樓主要開發什麼,有幾個優秀的第三方工具,toad,plsql可用於各種資料庫開發
10. oracle資料庫面試題,如下,求解!
1
proct主鍵id
顧客表主鍵acid
商品交易表為聯合主鍵(acid+id),同時acid和id分別是顧客表和商品表的外鍵
2
selectb.acname,b.acadress
fromprocta,customerb,ordercwherea.id=c.idandb.acid=c.acid
anda.name='李子'
3
selectt1.acname
from
(selectb.acname
fromprocta,customerb,ordercwherea.id=c.idandb.acid=c.acid
anda.name='李子')t1,
(selectb.acname
fromprocta,customerb,ordercwherea.id=c.idandb.acid=c.acid
anda.name='蘋果')t2
wheret1.acname=t2.acname4
selectb.acname,
sum(casewhentype='家電'thena.price*c.amountelse0end)as家電價格,
sum(casewhentype='水果'thena.price*c.amountelse0end)as水果價格
fromprocta,customerb,ordercwherea.id=c.idandb.acid=c.acid
groupbyb.acname